Установка и использование Ollama на Raspberry Pi
Ollama — это платформа для локального запуска и работы с языковыми моделями на вашем собственном оборудовании. Установка Ollama на Raspberry Pi позволяет экспериментировать с ИИ-моделями без использования облачных сервисов, обеспечивая конфиденциальность данных и полный контроль над системой.
Установка и использование Ollama на Raspberry Pi
Введение
Ollama — это платформа для локального запуска и работы с языковыми моделями на вашем собственном оборудовании. Установка Ollama на Raspberry Pi позволяет экспериментировать с ИИ-моделями без использования облачных сервисов, обеспечивая конфиденциальность данных и полный контроль над системой.
Требования и ограничения
- Raspberry Pi 4 или 5 с минимум 4GB оперативной памяти (рекомендуется 8GB)
- Raspberry Pi OS 64-bit (Bullseye или новее)
- Минимум 10GB свободного места на SD-карте
- Активное подключение к интернету для загрузки моделей
- Понимание, что производительность будет ограничена возможностями Raspberry Pi
Подготовка Raspberry Pi
Обновление системы
Перед установкой обновите систему:
1
2
3
sudo apt update
sudo apt upgrade -y
sudo reboot
Проверка архитектуры
Убедитесь, что используете 64-битную систему:
1
uname -m
Ожидаемый вывод: aarch64
Установка Ollama
Способ 1: Установка через официальный скрипт
Самый простой способ установки:
1
curl -fsSL https://ollama.com/install.sh | sh
Способ 2: Ручная установка
Для большего контроля над процессом:
Загрузка и установка двоичного файла:
1
2
3
4
5
6
7
8
9
10
11
12
# Создание директории для Ollama
mkdir -p ~/ollama
cd ~/ollama
# Загрузка последней версии для ARM64
curl -L https://ollama.com/download/ollama-linux-arm64 -o ollama
# Назначение прав на выполнение
chmod +x ollama
# Запуск Ollama
./ollama serve
Способ 3: Установка как службы systemd
Для автоматического запуска при загрузке:
Создание службы:
1
sudo nano /etc/systemd/system/ollama.service
Добавьте содержимое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
Type=simple
User=pi
Group=pi
ExecStart=/usr/local/bin/ollama serve
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="HOME=/home/pi"
[Install]
WantedBy=multi-user.target
Активация службы:
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
Проверка установки
Проверьте статус службы:
1
sudo systemctl status ollama
Проверьте работу Ollama API:
1
curl http://localhost:11434/api/tags
Установка моделей
Доступные модели для Raspberry Pi
Из-за ограниченных ресурсов рекомендуется использовать легковесные модели:
TinyLlama (1.1B параметров):
1
ollama pull tinyllama
Phi-2 (2.7B параметров):
1
ollama pull phi
Gemma 2B (2B параметров):
1
ollama pull gemma:2b
Stable Code (3B параметров):
1
ollama pull stable-code
Запуск моделей
Интерактивный режим:
1
ollama run tinyllama
Пример сессии:
1
2
3
>>> Напиши приветственное сообщение для Raspberry Pi
Привет! Добро пожаловать в мир Raspberry Pi и локального ИИ!
Здесь вы можете экспериментировать с языковыми моделями прямо на вашем одноплатном компьютере.
Пакетный режим:
1
echo "Что такое Raspberry Pi?" | ollama run tinyllama
Использование API
Отправка запросов через cURL:
1
2
3
4
5
curl http://localhost:11434/api/generate -d '{
"model": "tinyllama",
"prompt": "Объясни, что такое искусственный интеллект простыми словами",
"stream": false
}'
Python-скрипт для работы с Ollama:
Создайте файл ollama_client.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import json
def ask_ollama(prompt, model="tinyllama"):
url = "http://localhost:11434/api/generate"
data = {
"model": model,
"prompt": prompt,
"stream": False
}
response = requests.post(url, json=data)
if response.status_code == 200:
return response.json()["response"]
else:
return f"Ошибка: {response.status_code}"
# Пример использования
if __name__ == "__main__":
question = "Что можно сделать с Raspberry Pi?"
answer = ask_ollama(question)
print(f"Вопрос: {question}")
print(f"Ответ: {answer}")
Оптимизация производительности
Настройка параметров модели:
При запуске моделей можно указать параметры для оптимизации использования памяти:
1
ollama run tinyllama --num-predict 128 --temperature 0.7
Использование swap-файла:
Создайте swap-файл для увеличения доступной памяти:
1
2
3
4
5
6
7
8
# Создание swap-файла 2GB
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Добавление в fstab для автоматического монтирования при загрузке
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Настройка zram:
Более эффективная альтернатива swap для Raspberry Pi:
1
2
sudo apt install zram-tools -y
sudo nano /etc/default/zramswap
Установите параметры:
1
2
3
PERCENT=50
ALGO=lz4
PRIORITY=100
Перезапустите службу:
1
sudo systemctl restart zramswap
Интеграция с веб-интерфейсом
Установка Open WebUI (ранее Ollama WebUI):
1
2
3
4
5
6
7
8
9
10
11
# Установка Docker (если не установлен)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
# Запуск Open WebUI
docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
Доступ к веб-интерфейсу: http://ваш_ip:3000
Проекты с использованием Ollama на Raspberry Pi
Голосовой помощник:
Создайте файл voice_assistant.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import speech_recognition as sr
import requests
import pyttsx3
class VoiceAssistant:
def __init__(self):
self.recognizer = sr.Recognizer()
self.engine = pyttsx3.init()
def listen(self):
with sr.Microphone() as source:
print("Слушаю...")
audio = self.recognizer.listen(source)
try:
text = self.recognizer.recognize_google(audio, language="ru-RU")
print(f"Вы сказали: {text}")
return text
except:
return ""
def ask_ollama(self, prompt):
response = requests.post(
"http://localhost:11434/api/generate",
json={"model": "tinyllama", "prompt": prompt, "stream": False}
)
return response.json()["response"]
def speak(self, text):
self.engine.say(text)
self.engine.runAndWait()
def run(self):
while True:
command = self.listen()
if command:
if "стоп" in command.lower():
break
response = self.ask_ollama(command)
print(f"Ответ: {response}")
self.speak(response)
if __name__ == "__main__":
assistant = VoiceAssistant()
assistant.run()
Чат-бот для Telegram:
Установите необходимые библиотеки:
1
pip install python-telegram-bot requests
Создайте файл telegram_bot.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import requests
# Настройка логирования
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
class OllamaBot:
def __init__(self, token):
self.token = token
def get_ollama_response(self, prompt):
try:
response = requests.post(
"http://localhost:11434/api/generate",
json={"model": "tinyllama", "prompt": prompt, "stream": False},
timeout=30
)
return response.json()["response"]
except Exception as e:
return f"Ошибка: {str(e)}"
async def start(self, update: Update, context):
await update.message.reply_text("Привет! Я бот с локальной языковой моделью. Задайте мне вопрос!")
async def handle_message(self, update: Update, context):
user_message = update.message.text
response = self.get_ollama_response(user_message)
await update.message.reply_text(response[:4000]) # Ограничение Telegram
def run(self):
application = Application.builder().token(self.token).build()
application.add_handler(CommandHandler("start", self.start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, self.handle_message))
application.run_polling()
if __name__ == "__main__":
# Замените YOUR_TOKEN на ваш токен от BotFather
bot = OllamaBot("YOUR_TOKEN")
bot.run()
Типичные проблемы и решения
Проблема: Недостаточно памяти для загрузки модели
- Решение: Используйте более легкие модели (tinyllama, phi), увеличьте swap-файл
- Убедитесь, что закрыты другие ресурсоемкие приложения
Проблема: Медленная работа моделей
- Решение: Уменьшите параметр
num_predict, используйте более простые промпты - Рассмотрите использование Raspberry Pi 5 с активным охлаждением
Проблема: Ошибка при установке через официальный скрипт
- Решение: Используйте ручную установку или проверьте подключение к интернету
- Убедитесь, что используется 64-битная система
Проблема: Модель не отвечает или зависает
- Решение: Перезапустите службу Ollama, проверьте использование памяти
1 2
sudo systemctl restart ollama free -h
Проблема: Высокая температура процессора
- Решение: Установите радиатор и/или активное охлаждение
- Мониторьте температуру:
vcgencmd measure_temp
Мониторинг и обслуживание
Наблюдение за использованием ресурсов:
Создайте скрипт мониторинга:
1
sudo nano /usr/local/bin/monitor_ollama.sh
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
echo "=== Мониторинг Ollama ==="
echo "Дата: $(date)"
echo "Температура: $(vcgencmd measure_temp)"
echo "Память:"
free -h
echo "Процессы Ollama:"
ps aux | grep ollama
echo "Использование порта 11434:"
sudo netstat -tulpn | grep 11434
Автоматический перезапуск при сбоях:
Настройте systemd для автоматического перезапуска:
1
sudo nano /etc/systemd/system/ollama.service
Убедитесь, что есть строки:
1
2
Restart=always
RestartSec=10
Резервное копирование настроек и моделей:
1
sudo nano /usr/local/bin/backup_ollama.sh
1
2
3
4
5
#!/bin/bash
BACKUP_DIR="/home/pi/ollama-backups"
mkdir -p $BACKUP_DIR
tar -czf "$BACKUP_DIR/ollama-backup-$(date +%Y%m%d).tar.gz" \
~/.ollama /etc/systemd/system/ollama.service
Рекомендации по использованию
- Начинайте с самых легких моделей (tinyllama)
- Используйте короткие промпты для быстрых ответов
- Регулярно обновляйте Ollama:
ollama --version - Экспериментируйте с разными моделями для разных задач
- Учитывайте ограничения Raspberry Pi при работе с большими контекстами
Ollama на Raspberry Pi открывает возможности для экспериментов с локальными языковыми моделями. Хотя производительность ограничена аппаратными возможностями, система прекрасно подходит для обучения, прототипирования и небольших проектов. Регулярно обновляйте систему и следите за температурой процессора при длительной работе.