Ollama в действии: запуск и настройка своего ChatGPT локально и в Kubernetes

Сегодня разбираем решения для локальной работы с LLM-ками. Если вы задумывались о блокировке ChatGPT у себя в компании, но вам он нужен, то эта статья для вас.

Автор: Абдухаликов Асир

LLM-модель — это языковая модель, обученная на больших объемах данных. Она помогает в обработке естественного языка для генерации текста на основе предыдущего контекста. LLM также используют в машинном переводе и при автозаполнении текста.

Отличия Ollama от других *GPT

На рынке уже есть решения для работы с моделями с открытым исходным кодом, такие как gpt4all. Для администраторов, девопсов и безопасников подобный инструмент почти бесполезен, так как мы не можем удобно предоставить его разработчикам и контролировать учетные записи пользователей.


А проект Ollama прекрасно решает наши проблемы. Если вы владеете английским, рекомендую посмотреть видео «host ALL your AI locally» от NetworkChuck. В нем Чак рассказывает, как разворачивает на домашнем сервере ИИ для своих дочерей на замену решения от OpenAI и показывает, как ограничить модели в помощи, добавить запрещенные темы или действия.


Основные отличия Ollama от других проектов — это предоставление API. И уже есть огромный выбор графических интерфейсов для этого API.

Локальная установка Ollama

Проект доведен до ума и не требует танцев с бубном при запуске. Проект поддерживает Windows, Linux и MacOS. Инструкции по установке доступны по ссылке.


Я последовал примеру Чака и развернул проект у себя в WSL на Windows. Даже не пробовал консольный инструмент, а сразу скачал Open WebUI. Суть в том, что его лучше запускать в Docker, так как это готовый проект на React и у него есть официальный образ. Также есть и официальный чарт от Open WebUI.


Команды для моего случая:

curl -fsSL https://ollama.com/install.sh | sh #установка в wsl

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
# это уже запускаем в powershell

Далее смело заходим на localhost:3000 и регистрируемся. Первая учетка становится администратором по умолчанию, а все следующие улетают в pending и ожидают подтверждения от администратора. Сервис не использует внешние БД, а сохраняет все данные в папку ./data с помощью Sqlite. Подробнее с конфигурацией фронта и переменными окружения можно ознакомиться здесь.

После регистрации нужно скачать модели с официального сайта. В настройках системы ими можно управлять из раздела Models.
Если скачать Llama3, ее будет достаточно для распознавания картинок, голосовых сообщений и текста. Функцию генерации картинок мы также можем добавить, подняв локально Stable Diffusion.

Установка Ollama в Kubernetes

Я протестировал установку на кластер без видеокарт и скажу — идея плохая. Сервис не то, что подвисает — он вовсе не работает. Рекомендую впервые в истории IT обоснованно закупить топовые видюхи на ваше железо :)


Начнем с официальных чартов. Перед установкой убедитесь в правильности чарта, возможно что-то изменилось. В момент написания статьи разработчики вынесли чарты Open WebUI в отдельный репозиторий. И до текущего момента с чартами у ребят происходят странности.

# добавляем репозиторий
helm repo add open-webui https://helm.openwebui.com/           
helm repo update     

# устанавливаем чарт (перед установкой рекомендую стянуть values проекта локально, внимательно ознакомиться и подправить под ваши потребности — поможет команда: 
helm show values open-webui/open-webui > values.yaml)                                                          
helm upgrade --install open-webui open-webui/open-webui
helm upgrade --install open-webui open-webui/open-webui -f values.yaml # если редактировали values.yaml

Рекомендую поправить раздел и с установкой бэкенда Ollama. И добавить размер pv, так как моделей будет много и они будут тяжелые. По умолчанию чарт не содержит в себе возможности конфигурации размера volume. Лично я развернул оба чарта отдельно Ollama API и Open-WebUI отдельно, указав путь в values.yaml до моей API. Вы же можете пошаманить с values чарта Open-WebUI.

ollama:
  # -- Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure
  enabled: true
  # Example Ollama configuration with nvidia GPU enabled, automatically downloading a model, and deploying a PVC for model persistence
  ollama:
    gpu:
      enabled: true
      type: "nvidia"
      number: 1
    models:
      - llama3
  runtimeClassName: nvidia
  persistentVolume:
    enabled: true

После развертывания зарегистрируйтесь по примеру из раздела с локальной установкой. В настройках обратите внимание на раздел Connections, в нем отображены API. Если что-то не работает, проверьте правильность адреса.

Конфигурация сервера Ollama

Конфигурация сервера сильно зависит от ваших условий, но я составил список вещей, на которые нужно будет обратить внимание.


  • Контроль пользователями происходит на стороне фронтового сервиса, сама API не различает, кто и что делает. Поэтому убедитесь в безопасности storage-class-а, который вы используете для сервиса. Фронт хранит учетки в sql lite в директории .data
  • По умолчанию администратором становится первый зарегистрированный пользователь. Далее это можно изменить в настройках сервиса. Почитайте документацию по работе с пользователями, там много интересного. Я же расскажу базовую настройку, которой должно хватить для небольшой конторы.

Настройка по умолчанию:


  1. На главном экране в профиле первого пользователя есть доступ к панели администратора. Здесь же мы увидим дэшборд для управления пользователями и конфигурацией моделей для них.

На скриншоте видно, что новый пользователь user1 находится в статусе ожидания, и для него экран выглядит так:

Сейчас в проекте есть три роли: pending, user, admin. Меняем их простым нажатием в поле Role. Сразу после смены роли пользователь сможет авторизоваться и запустить приложение.

В разделе Admin Settings мы можем менеджерить такие вещи, как удаление чатов, роли при регистрации по умолчанию, возможность регистрации, разрешенные для пользователей модели и бэкап базы.


2. Управляем моделями через настройки в разделе Models.

У моделей есть теги. На примере Llama3 теги 8b и 70b отличаются объемом и количеством записей в модели. От этого зависит точность работы модели и количество информации, на которой базируется модель. К примеру тег 8b содержит 8 миллиардов записей, а 70b по аналогии 70 миллиардов записей. Весит она больше, но и вычисления должна делать более подробные и точные.


Мы можем сделать Modelfiles, которые описывают ограничения и задачи уже существующей модели, и на ее основе создают свою. Так легко ограничивать темы для бесед: к примеру, запретить обсуждать мопсов на работе.


После создания модели нам необходимо добавить ее в whitelist для пользователей — и ограничения заработают.

3. Генерация картинок в Ollama


В ChatGPT от OpenAI такая возможность доступна только с подпиской, и картинки он генерит слабенькие.


Для добавления функционала в Ollama необходимо поднять еще один сервис — Stable Diffusion. Так как официального популярного чарта у него нет, можно вновь обратиться к видео Чака, чтобы понять принцип и развернуть сервис самостоятельно.


4. Расширения на Vscode


Например, вы оплачиваете Copilot, но не доверяете Microsoft и хотите развернуть локальное решение для помощи с кодом — есть экстеншены на Vscode.

В конфигурации дополнения есть ссылка на API

Надеюсь, статья заинтересовала в развертывании собственного ИИ для портфолио, своей компании или домашнего использования. Если так — начальная инструкция у вас уже есть.

Если вам нужно обучить и интегрировать модель машинного обучения или решить бизнес-задачи, которые требуют обработки огромных объемов данных — мы в Core 24/7 с радостью поможем. Наши решения помогают автоматизировать процессы бизнеса с высокой степенью надежности.

Узнать больше