Когда только появился ChatGPT, я его попробовал. Мысли после окончания тестов были такие:

“Придет время и мы будем запускать свои нейросети на своих компьютерах без доступа в интернет”

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

При должном желании и наличия ресурсов можно создать что-то подобное

С левой стороны, блок Open WebUI - который позволяет взаимодействовать с нейросетями через браузер, как на пример ChatGPT

С правой, различные плагины, помогающие в работе, которым необходим доступ к нейросетям локально, либо по адресу сервера

Если бы пришлось реализовывать данную схему, одной статьей тут не обошлось. Я на своем домашнем сервере развернул виртуальную машину с такими параметрами.

CPU - 8 Core (AMD Ryzen 7 PRO 4750G)

Memory - 64 Gb

SSD - 256 Gb

С данными характеристиками я получил довольно приемлемую производительность, сравнимая с бесплатной версией ChatGPT 3.5

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

Возможно режим работы CPU я выбрал не верный. Но пока решил, что это проблема будущего меня.

Если есть в запасе видеокарта, то обязательно ее стоит подключить и пробросить в виртуальную машину. На моей 3060 на 12 Gb, я получаю результаты примерно раза в два быстрее, чем на машине без GPU.

Шаг 1 - Установка OLLaMa

Есть два типа установки OLLaMa, в Docker контейнере и в виде демона в вашей ОС

Разберем установку в классическом варианте

Переходим по адресу: https://ollama.com/download/linux

Копируем команду с сайта и вставляем ее в терминале нашего сервера

curl -fsSL https://ollama.com/install.sh | sh

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

Чтобы убедиться в том, что OLLaMa работает, можно выполнить несколько команд

curl http://localhost:11434

Вывод команды будет таким

Ollama is running

Теперь нужно скачать готовую модель нейросети, сейчас самая популярная Open Source AI модель называется LLaMa3

Давай ее скачаем:

ollama pull llama3

Данная модель весит примерно 4,7 Gb. Что не так уж и много. Попробуем с ней пообщаться

ollama run llama3

Мы перешли в интерактивный режим, который позволяет только общаться текстом с нейросетью

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

Углубление в тему Начнем с того, от куда я вообще взял эту команду ollama pull llama3? Есть ли другие модели сетей? Есть ли те же самые модели, но обученные на большем количестве данных?

Давай разберемся по порядку

Команды ollama можно получить просто введя в терминале ollama -h

Данная команда позволяем нам обращаться к фреймворку OLLaMa и качать, модифицировать, удалять и т.д. модели нейросетей

Что за модели? От куда их берем?

На сайте OLLaMa есть возможность скачать готовые модели: https://ollama.com/library

Почему модель нейросети занимает так мало места на диске?

Рассмотрим на примере llama3. https://ollama.com/library/llama3

Перейдя по ссылке, мы можем увидеть, что модели можно скачивать как Docker контейнеры

*Meta - Деятельность Meta (соцсети Facebook и Instagram) запрещена в России как экстремистская.

Когда мы качали данный “образ” c тегом latest. У данной модели 8b (8 миллиардов параметров), чем больше параметров у модели, тем больше она занимает места на диске. Скачивается уже готовая, сжатая модель. Какой размер указан в библиотеке, столько и будет занимать место на диске.

Какова разница в параметрах модели?

Разница в моделях заключается в том, на столько точной она будет.

Если брать модель самую большую из доступных и среднюю, дать этим моделям одну простую задачу. Тогда результат у модели с меньшим количеством параметров будет ответ быстрее и экономнее с точки зрения потраченной энергии, в отличие от модели с наибольшим количеством параметров.

Я рекомендую в начале использовать модели среднего размера, которые рекомендует разработчик. Уже исходя из задачи, выбирать более “тяжелые” модели.

Где хранятся скачаные модели на диске?

Модели хранятся в фиде файлов в директории /usr/share/ollama/.ollama/models/blobs. Вид файлов чем-то напоминает слои докер контейнера

Как задействовать видеокарту?

Если вы хотите использовать видеокарту, чтобы ускорить работу нейросетей, то необходимо после установки карты, установить драйвера.

Если на сервере установлен графический процессор Nvidia, нужно убедиться, что установлены драйверы CUDA.

nvidia-smi

Если CUDA драйверы не установлены, то потребуется поискать информацию, как это сделать.

Ниже приведу пример, установки Open Source драйверов Nvidia.

sudo apt update
sudo apt install -y nvidia-kernel-open-545
sudo apt install -y cuda-drivers-545

После установки драйверов, я бы перезагрузился и ollama самостоятельно будет использовать видеоркату, или сразу две, если они установлены по отдельности без SLI

Так же OLLaMA пожжерживает некоторые видеокарты от AMD, рекомендую искать информацию на офф. сайте

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

Так же, если у вас стоит только CPU, было бы хорошо, чтобы у него были ядра предназначенные для AI вычислений.

Установка OLLaMa в Docker

Скачиваем образ

docker pull ollama/ollama

Использование только CPU

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Использование GPU Nvidia

Разработчики рекомендуют выполнить данные инструкции

Configure the repository

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update

Install the NVIDIA Container Toolkit packages

sudo apt-get install -y nvidia-container-toolkit

Configure Docker to use Nvidia driver

sudo nvidia-ctk runtime configure --runtime=docker && \
sudo systemctl restart docker

Start the container

docker run -d --gpus=all -v ollama:/root/.ollama \
    -p 11434:11434 --name ollama ollama/ollama

Использование GPU AMD

docker run -d --device /dev/kfd --device /dev/dri \
    -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama

/dev/kfd, /dev/dri - ваши устройства GPU

Запустить llama3 в контейнере:

docker exec -it ollama ollama run llama3

Шаг 2 - Установка Open WebUI

Что вообще такое Open WebUI? Это не просто графическая оболочка позволяющая взаимодействовать с вашим сервером OLLaMa.

Open WebUI может:

  • Подключаться к разным серверам OLLaMa (поставьте 5-10 компьютеров с OLLaMa и подключите их к Open WebUI), что позволяет балансировать нагрузку если есть необходимость использовать нейросеть в компании
  • Управлять моделями нейросетей (скачивание, удаление и т.д.)
  • Создавать заранее готовые промты и AI агентов
  • Создавать взаимодействие нейросетей с документами через Web-бразуер
  • Позволяет легко передавать картинки нейросети, для большего понимания контекста
  • Управление доступом (создание админов, ограничение прав доступа)
  • Возможность импортировать и экспортировать историю чатов и многое другое

Open WebUI пожалуй самая лучшая Web-панель для нейросетей. Установим ее в Docker контейнере

docker run -d --network=host \
    -v open-webui:/app/backend/data \
    -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
    --name open-webui \
    --restart always \
    ghcr.io/open-webui/open-webui:main

OLLAMA_BASE_URL - указываем адрес до нашего сервера OLLaMa

Если OLLaMa установлен на отдельном хосте, то ей необходимо передать одну ENV

OLLAMA_HOST=0.0.0.0 - тогда на всех IP будет доступна API OLLaMa

После установки, можно перейти по адресу http://IP:8080/ - и первая зарегистрированная учетная запись будет являться Администратором

Выглядит панелька вот так

Админ панель

Нажмем на свою аватарку после регистрации и выберем “Админ панель”

Тут мы можем управлять пользователями

Кликая на роль, мы меняем роль у пользователя

Перейдем в “Настройки админа”

Тут можно запретить всем регистрацию, дать роль по-умолчанию тем, кто только-что зарегистрировался. Роль “ожидание”, позволяет регистрироваться пользователям, но пользоваться функционалом запрещает. Когда админ даст права, тогда пользователь сможет что-то делать

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

Основные настройки

Вкладка Соединение - позволяет подключить более одного сервера OLLaMa. Что позволяет балансировать нагрузку

Вкладка Модели - выбираем сервер OLLaMa, и из списка моделей (https://ollama.com/library) выбираем нужную нам

Экспериментальные функции - с помощью них можно загрузить модель нейросети, из файла. Модели доступны на https://huggingface.co/models?search=gguf - это своего рода хаб, для разработчиков нейросетей. Очень полезный сайт, рекомендую его использовать

Изображения - позволяет подключить допольнительный фреймворк Automatic1111

У меня с ним были проблемы. Я не смогу установить на свой сервер с Ubuntu 24.04 LTS из-за зависимостей питоновских библиотек. Мне картинки генерировать не нужно, по этому я оставил пока попытки развернуть Automatic.

Если я все же решу это сделать, то выложу информацию, как я его установил и подключил

Механизм генерации изображений поддерживает сторонние сервисы, например Open AI (Dall-E)

Использование нейросетей

У нас все готово, чтобы пользоваться нейросетями. Скачаем например llava:13b Она умеет работать с изображениями и понимает русский язык

Попытавшись заставить нейросеть адекватно поработать с изображениями, я получил интересный результат

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

Проверяем, что сеть работает адекватно с текстом

Попробуем создать Агента, или как написано в Open WebUI “Файл агента”. Я подготвил себе необходимых помощников. И думаю в будущем создам себе еще 5-10 сотрудников, которые будут на меня работать за электричество :)

Что это вообще такое и для чего оно нужно?

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

Все поля необходимые для заполенения говорят сами за себя

Самое главное, создать контекст. Вот пример моего промта, сейчас разберем что там написано

FROM codelama - указываем, для какой модели нейросети написан агент

PARAMETER temperture 0 - этот крутилка креативности, если стоит 0, то агент будет более последовательным, чем выше значение, тем он попытается придумать что-то необычное

SYSTEM """ любой промт “”" - в двойных 3-х ковычках с двух сторон мы задаем контекст, что должен учитывать агент, каким правилам он подчиняется и т.д.

После создания агнета, можно к нему обратиться в новом чате

https://openwebui.com/ - а вот тут можно посмотреть, каких агентов создают друге люди и позаимствовать несколько идей

Промпты - что это за кнопка в Open WebUI?

На сколько я понял, промпты - это что-то типо урезаных агентов. Вы можежет заготовить промт и применять его каждый раз в новом чате. Чтобы задать некий контекст, мне кажется, что создать агента эффективнее, чем использовать промпты. Но кому-то это может быть полезно

Документы

Документы вы можете загрузить в вашу базу, поставить на документ тэг и попросить нейронку расскзать, что там написано

Я создал файл с содержимом

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, world!")
}

И попросил нейронку рассказать, что там вообще находится

Вызывать тэги можно в чате с помощью символа #

Я загружал pdf, doc, txt файлы и нейронка смогла их распознать, и выдать мне информацию по ним. Создавать доки мне уже как-то не хочется, а показывать реальные я не буду. Лучше попробовать самому

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

Но что делать, если у тебя нет друго компьютера, но есть свой с видеокартой?

Поставь OLLaMa, сейчас она поддерживает все десктопные ОС, поставь Docker и в нем запусти Open WebUI. Все просто.

Информацию, как запустить в докере Open WebUI я уже дал

Анонсы и еще больше информации в Telegram-канале