Появился интерес попробовать использовать локально нейросети. После не продолжительного поиска в интернете на эту тему, было решено попробовать сделать на Ollama.
Содержание
Введение
Ollama – является открытым фреймворком для локального развертывания и управления мощными языковыми моделями (LLM), такими как Llama 3, Phi 3, Mistral, Gemma и другими, на вычислительных ресурсах пользователя. Оно позволяет установить и запустить выбранную модель без необходимости использования облачных сервисов, а также предоставляет доступ к этой модели через простое API.
Open WebUI — это расширяемый , многофункциональный и удобный автономный веб-интерфейс, предназначенный для работы полностью в автономном режиме. Он поддерживает различные программы LLM, включая Ollama и API-интерфейсы, совместимые с OpenAI.
![Интерфейс Open - Web-UI](https://github.com/open-webui/open-webui/raw/main/demo.gif)
Интерфейс Open – Web-UI
Теперь когда мы знаем что есть что, можно приступить к установки. Кстати нужно отметить, что запускать мы будем не на GPU, а на CPU, так как стенда с хорошими производительными видео картами у меня нет, но есть дешевый тестовый сервер:
- CPU: Intel Xeon E5-2680 v3 2.50GHz 12 core 24 threads x 2
- RAM: 64GB DDR4
Установка и настройка Ollama
Запускать Ollama мы будем на Debian GNU/Linux 12 (bookworm).
Установка достаточно простая, есть скрипт для автоматической установки. И собственно вся установка сводится к одной строчке.
1 |
curl -fsSL https://ollama.com/install.sh | sh |
Собственно на этом вся установка завершена, если нужна более подробная информация по ручной установки, то можно обратиться к официальной документации по установки на linux.
Так как мы будем разворачивать Open – Web-UI на другой машине, то нам необходимо настроить Ollama так, чтоб он принимал запросы не только на локальном(по умолчанию), но и на сетевом интерфейсе. Для этого нам необходимо отредактировать сервис запуска ollama.service следующим образом, добавив директиву OLLAMA_HOST в Environment.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
cat /etc/systemd/system/ollama.service [Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment="OLLAMA_HOST=0.0.0.0" [Install] WantedBy=default.target |
Теперь нам необходимо обновить настройки сервиса и запустить Ollama:
1 2 |
systemctl daemon-reload systemctl start ollama |
Проверяем что сервис слушает запросы на всех интерфейсах:
1 2 |
netstat -tulpn | grep ollama tcp6 0 0 :::11434 :::* LISTEN 1247/ollama |
Так же если перейти в браузер по адресу машины на которой стоит ollama с портом 11343, как пример http://<IP_адрес_ollama>:11434, то мы увидим надпись “Ollama is running” что свидетельствует о том, что сервис запущен и готов к работе.
Загрузка языковых моделей Ollama
Собственно говоря Ollama это фреймворк, который позволяет запускать различные языковые модели типа LLAMA3(от Meta), Mistral AI, Phi3(от Microsoft), весь список доступных моделей можно посмотреть на официальной странице Ollama на github или в библиотеки моделей.
Что нужно знать о моделях для их запуска. Первое это размер модели, чем больше модель, тем больше оперативной памяти она будет требовать, а так же будет более чувствительной к вычислительным ресурсам. Модели более 7b(это приблизительно 7 миллиардов весов и связей) лучше запускать на видеокартах, так как производительность TPS(количество генерируемых токенов в секунду) на CPU будет очень низкой.
Сама загрузка моделей происходить достаточно просто:
1 2 3 |
ollama run codestral:22b # pulling manifest # pulling 22a849aafe3d... 33% ▕█████ 4.1 GB/ 12 GB 1.2 MB/s 1h59m |
После команды ollama run <нужная_модель> начнется загрузка модели. После загрузки запустится выбранная модель и прям в консоли можно начинать чатиться и задавать вопросы языковой модели. Но это не совсем удобно и поэтому мы установим Open-Web-UI.
Так же стоит отметить, языковые модели занимают достаточно много дискового пространства и по умолчанию находятся /usr/share/ollama/models, если вы планируете использовать множество языковых моделей, то вам возможно потребуется изменить место их хранения.
Для этого есть специальная директива OLLAMA_MODELS, она так же как и OLLAMA_HOST добавляется в параметры сервиса в Environment.
Альтернативный вариант – это сделать симлинк, но это не совсем правильный вариант.
Установка и настройка Open – Web-UI
Open Web-UI будем устанавливать на отдельную машину через Docker образ. Так как изначально я взял чистую машину, выполняем стандартные манипуляции по обновлению системы, устанавливаем Docker и запускаем контейнер с Open-Web-UI.
Обновление системы Debian GNU/Linux 12 (bookworm):
1 |
apt update && apt upgrade -y |
После обновления системы по документации установки Docker на Linux устанавливаем Docker.
Согласно документации удаляем все ненужные зависимости:
1 |
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do apt-get remove $pkg; done |
Далее нам необходимо добавить репозитории Docker и установить официальные GPG ключи репозиториев:
1 2 3 4 5 6 7 8 9 10 11 |
apt-get update apt-get install ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update |
После установки ключей и настройки репозиториев мы можем установить сам Docker:
1 |
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
Теперь можем запустить контейнер с Open-Web-UI, исходя из документации Open-Web-UI, нам необходимо запустить контейнер следующим образом:
1 |
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://<IP_адрес_ollama>:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main |
Стоит обратить внимание на параметр OLLAMA_BASE_URL, так как Ollama у нас запущена другом узле, нам необходимо указать fqdn имя или IP адрес нашего сервера Ollama, в нашем случае это IP адрес, так же обязательно нужно указать протокол – http://<IP_адрес_ollama>:11434.
После этого вы можете войти в браузере на страницу http://<IP_адрес_Open-Web-UI>:3000 и пройти регистрацию в качестве администратора, после чего можно начинать использовать языковые модели и задавать им свои вопросы.
![Первый запуск Open Web-UI](https://nahoste.ru/wp-content/uploads/2024/06/open-web-ui.webp)
Первый запуск Open Web-UI
После регистрации вы попадете в интерфейс и можете заниматься дальнейшем обучением.
Касательно моделей, я пробовал работать с моделями llama3:8b и mistral:7b, из личных наблюдений, mistral лучше поддерживает русский язык. На CPU отвечают достаточно быстро эти модели, попробовал модель codestral:22b, вот тут уже сложнее идут ответы и по хорошему нужна видеокарта.
Добавить комментарий