Установка и работа с LLM через Ollama на Linux
Опубликовано:
Используемые термины: LLM, Linux.
В данной статье мы бегло рассмотрим некоторые темы работы с LLM:
- Установка менеджера (оркестратора) для больших языковых моделей.
- Выбор и запуск LLM.
- Способы обучения моделей.
- Запуск веб-интерфейса для работы с LLM.
Примеры команд будут для операционной системы Linux.
Установка Ollama
Запуск LLM
Примеры полезных команд
Процесс обучения
Веб интерфейс Open WebUI
Запросы по сети
Настройка проксирования через nginx
Установка Ollama
Для работы из командной строки Ollama является самым распространенной платформой запуска LLM. Она может быть установлена с помощью скрипта, который поставляет разработчик.
Для начала необходимо установить пакеты:
- curl — отправка http-запросов. Нам нужен для загрузки скрипта.
- zstd — пакет поддержки быстрого алгоритма сжатия.
- tar — для работы с архивами.
Наши команды зависят от типа Linux.
а) для Deb (Debian / Ubuntu):
apt update
apt install curl zstd tar
б) для RPM (Rocky Linux):
dnf install curl zstd tar
Теперь мы можем установить Ollama.
Вводим команду:
curl -fsSL https://ollama.com/install.sh | sh
Будет загружен скрипт install.sh и передан оболочке sh, которая выполнит необходимые команды.
Если мы работает на машине без видеокарты, то система отобразит предупреждение:
WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode.
Оно значит, что наш искусственный интеллект будет работать на CPU, то есть, медленно.
Менеджер установлен. Можно запускать языковую модель.
Запуск LLM
На сайте ollama изучаем список доступных языковых моделей. Обратить внимание на занимаемый объем. Изучите требования к вариантам загружаемых файлов.
Предположим, мы ограничены мощностями и выбрали модель на 1 миллиард параметров:
ollama run gemma3:1b
Параметры — это внутренние переменные модели, которые она настраивает в процессе обучения. Если по-простому — чем больше параметров, тем умнее языковая модель (при должном качестве материала, на котором она обучается).
Если наше оборудование более мощное, можно загрузить модель поумнее:
ollama run gemma3:4b
Откроется командная консоль, где мы можем начать общение с ИИ. Попробуем поздороваться и задать первый вопрос:
writing manifest
success
>>> Привет
Привет! Как дела? Чем занимаешься? [?25l
>>> Изучаю тебя. Расскажи, как тебя можно обучать?
Привет! Отлично, что ты изучаешь меня! Это очень интересный процесс. В основном, обучение меня происходит в несколько этапов, и вот основные из них:
**1. Обучение на основе огромного количества данных:**
* **Текстовые данные:** Я обучаюсь на огромном количестве текстовых данных из интернета - книг, статей, веб-сайтов, форумов и т.д. Чем больше данных, тем лучше я понимаю язык и окружающий мир.
* **Кодированные данные:** Вместо чтения текста, я получаю "кодировку" - что он значит. Например, мне показывают, как правильно понимать слова, фразы и предложения.
**2. Алгоритмы машинного обучения:**
* **Обработка естественного языка (NLP):** Это ключевой алгоритм, который позволяет мне "понимать" и генерировать текст. Я использую методы NLP, чтобы:
* **Определение контекста:** Я помню, что было сказано до этого, чтобы правильно интерпретировать смысл.
* **Анализ намерений:** Я пытаюсь понять, что вы хотите, чтобы я сделал (вызвал ответ, предоставил информацию, предложил что-то).
* **Классификация:** Я определяю, какие темы, жанры или стили текста мне подошли.
* **Генерация текста:** Я пишу текст на основе предоставленного мне текста или других инструкций.
* **Трансформеры (Transformers):** Это очень продвинутый тип нейронной сети, на которой я основан. Они позволяют мне лучше понимать контекст и связывать разные части текста.
* **Обучение с подкреплением (Reinforcement Learning):** Иногда, я обучаюсь, показывая примеры и получая "награды" за правильные ответы. Это помогает мне улучшать мои ответы.
**3. Примеры задач, которые я умею решать:**
* **Отвечать на вопросы:** Я могу давать ответы на вопросы, даже если они открытые или сложны.
* **Писать различные тексты:** Я могу писать стихи, рассказы, сценарии, письма, статьи и т.д.
* **Переводить языки:** Я могу переводить текст с одного языка на другой.
* **Обобщать информацию:** Я могу суммировать большие объемы текста.
* **Создавать контент:** Я могу генерировать идеи для контента, помогать в создании контента для социальных сетей и т.д.
**Важно:** Я не "думаю" или "понимаю" в человеческом смысле. Я просто обрабатываю информацию и генерирую текст, основываясь на паттернах, которые я выучил.
**Как ты можешь помогать мне учиться?**
* **Учи меня на примерах:** Если ты дашь мне пример того, как ответить на вопрос или написать текст, я могу научиться.
* **Делай мне вопросы:** Просто задавай мне вопросы.
* **Обращайся с меня по-другому:** Используй разные стили общения.
Чем больше я вижу и получаю обратную связь, тем лучше я буду понимать и отвечать на твои запросы.
Что бы ты хотел узнать подробнее? Может, тебе интересно узнать больше о каком-то конкретном аспекте моего обучения? Например, как работает "обратная связь" или как я учусь генерировать текст в
определенном стиле?
Первый шаг сделан. Мы запустили у себя LLM.
Полезные команды
Рассмотрим наиболее востребованные команды при работе с ollama. Для удобства, разделим из на несколько категорий.
Команды управления
1. Запуск модели (если ее нет, то сначала олама загрузит нужные файлы) с последующим запуском чата:
ollama run <название_модели>
* с данной командой мы уже познакомились выше.
2. Просмотр списка уже загруженных моделей:
ollama ls
3. Загрузка модели без запуска:
ollama pull <название_модели>
4. Удаление модели:
ollama rm <название_модели>
Получение информации
1. Просмотр активных чатов:
ollama ps
2. Остановка запущенной модели (работающего чата):
ollama stop <название_модели>
* название модели должно в точности совпадать с тем, что возвращает ollama ps.
Команды чата
1. Выйти из чата:
>> /bye
2. Информация о запущенной языковой модели:
>> /show info
3. Изменение размера контекстного окна:
>> /set parameter num_ctx <число>
* по умолчанию 4096 токенов.
4. Ввод многострочного текста:
>> """ многострочный
языковой
запрос
"""
Обучение
Обучение ИИ — отдельная большая тема, поэтому в рамках данной статьи рассмотрим базовые принципы.
Как можно заметить, в моем примере общения с LLM задан вопрос по обучению языковой модели. Возьмем ответ за основу и опишем 3 основных шага.
Обучение на основе огромного количества данных
Данный этап необходим только для создания своей llm. Собственно, когда мы запустили gemma3, мы уже получили языковую модель, обученную на огромном количестве данных.
Метод является самым дорогим и самым сложным.
Для его проведения необходимы огромные мощности, которые будут месяцами обрабатывать массивы данных. Такой метод обучения могут позволить себе IT-гиганты.
Алгоритмы машинного обучения
Это комплекс мер:
- Обработка естественного языка (NLP). Способность переводить слова, понятные человеку, в цифры, понятные машине.
- Трансформеры (Transformers). Механизм, который помогает языковой модели не забыть первое слово в длинном предложении, понимая его смысл целиком.
- Обучение с подкреплением (RLHF). Специальные люди выбирают более подходящий ответ из нескольких вариантов, которые генерит модель.
Также, как и с первым вариантом, данные методы не нужны для пользователей LLM, поскольку запускаемая модель уже прошла эти стадии обучения.
Дообучение или Retrieval-Augmented Generation (RAG)
Этот метод обучения (хотя, правильнее говорить информирование или дообучение) модели и представляет из себя адаптацию LLM под свои нужды. Мы можем рассказать нейросети о внутренних документах, инструкциях, порядках, методах работы и многом другом, что придет в голову. Нейросеть будет учитывать данный контекст при составлении ответа.
Например, можно поднатаскать модель настраивать, именно, ваше приложение или работать с набором документов компании. При этом, LLM будет считать дозагруженную информацию как наиболее приоритетный источник фактов.
В двух словах, загружаемая информация специальным образом разбивается и преобразуется в формат, понятный LLM. Она сохраняется в векторную базу, которая хранит смысловые координаты. На практике это значит, что слова будут отсортированы по тематике, например, яблоко и фрукт, трактор и экскаватор. Благодаря этому, нейросеть найдет ответ по запросу слов, которых нет в вашей инструкции, но которые близки по смыслу.
Нам не обязательно быть разработчиками, чтобы выполнить процедуру обучения. Можно использовать готовый продукт, например, Open WebUI.
Но если нам нужно автоматизировать процесс, то можно написать python-скрипт. Для чтения PDF пригодится библиотека PyPDF, а для связи компонентов — LangChain.
В качестве векторной базы можно использовать ChromaDB или FAISS. Или более серьезные решения, например, Qdrant или Weaviate.
Веб интерфейс Open WebUI
На момент обновления инструкции, Open WebUI — самый продвинутый в мире Open Source интерфейс для работы с локальными нейросетями. Приложение может быть запущено двумя способами:
- Сервисный процесс, который запускается с помощью Python.
- В качестве приложения docker.
Рассмотрим оба варианта.
Python приложение
Open WebUI имеет строгие требования к версии Python. Их мы можем изучить на странице PyPI.
Создадим каталог, в котором разместим файлы приложения и перейдем в него:
mkdir -p /opt/open-webui && cd /opt/open-webui
Правильнее всего создать виртуальное окружение Python, в котором будут необходимые зависимости. Рассмотрим этот вариант.
Если питон собран из исходников (например, в репозитории системе не было нужной версии и установка выполнена из исходников), выполняем установку пакетов sqlite3.
а) Для систем на базе DEB:
apt install sqlite3 libsqlite3-dev
б) Для RPM систем:
dnf install sqlite sqlite-devel
Для удобства работы сразу создадим переменную с версией Python. который установлен в нашей системе:
PY_VER=3.12
Устанавливаем виртуальное окружение:
python${PY_VER} -m venv venv
Активируем его:
source venv/bin/activate
В активированное виртуальное окружение устанавливаем open-webui:
pip install open-webui
По завершению установки, выполняем деактивацию:
deactivate
Можно запустить сервис командой:
venv/bin/open-webui serve --host 127.0.0.1 --port 3333
Docker
Для запуска open-webui в контейнере нам нужно установить Docker.
Cоздаем каталог и переходим в него:
mkdir -p /opt/open-webui && cd /opt/open-webui
Создаем файл docker-compose:
vi docker-compose.yml
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
hostname: open-webui
restart: unless-stopped
environment:
TZ: Europe/Moscow
ports:
- 8080:8080
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ./data:/app/backend/data
* в нашем примере сервис будет слушать на порту 8080.
Запускаем контейнер:
docker compose up -d
Первый вход и создание администратора
Ранее мы запустили open-webui на порту 8080. Открываем браузер и переходим по адресу http://<ip-адрес open-webui>:8080 — должна открыться страница с формой ввода вопроса.
Запросы по сети
Ollama по умолчанию предоставляет интерфейс для сетевого взаимодействия на порту 11434. Убедиться в том, что сервер слушает можно с помощью команды:
ss -tunlp | grep 11434
При наличии брандмауэра нам нужно создать разрешающее правило.
а) для систем на базе deb-пакетов (Debian / Ubuntu):
iptables -I INPUT 1 -p tcp --dport 11434 -j ACCEPT
Для сохранения правил можно использовать iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
б) для систем на базе RPM-пакетов (Rocky / Oracle / CentOS):
firewall-cmd --permanent --add-port=11434/tcp
firewall-cmd --reload
в) для систем на базе deb-пакетов (замена iptables):
ufw allow 11434/tcp
Проверить подключение мы можем с помощью telnet:
telnet <ip-адрес open-webui> 11434
Настройка проксирования через nginx
Хорошей идеей будет настроить прокси. При желании, это позволит использовать защищенный HTTPS. В нашем примере мы будем использовать nginx.
Установим его.
а) для систем на базе deb-пакетов (Debian / Ubuntu):
apt install nginx
б) для систем на базе RPM-пакетов (Rocky / Oracle / CentOS):
dnf install nginx
После установки разрешаем автозапуск сервиса:
systemctl enable --now nginx
Создаем конфигурационный файл.
а) для систем на базе deb-пакетов (Debian / Ubuntu):
vi /etc/nginx/sites-enabled/ollama.conf
б) для систем на базе RPM-пакетов (Rocky / Oracle / CentOS):
vi /etc/nginx/conf.d/ollama.conf
Содержимое файла:
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://localhost:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
}
}
Для применения настройки используем команду:
nginx -t && nginx -s reload
Теперь ollama должна быть доступна по адресу your.domain.com.