«Почему твой ChatGPT тормозит?» — спрашивает друг, когда я показываю ему свой.
«Потому что он не ChatGPT. Он — моя видеокарта в соседней комнате, обёрнутая в REST API».
Смешно становится потом, когда объясняю, сколько времени потратил, чтобы это заработало. Spoiler: гораздо больше, чем нужно.
Этот пост — разбор того, как я поднял LLM у себя, что сломал по дороге и какой путь считаю правильным сейчас. Без маркетинга и «вау, это так просто».
Железо: с чем я имел дело
Начну с неприятного. LLM не работают на том, на чём работают обычные веб-сервисы.
Моя конфигурация: RTX 3090, 24 ГБ VRAM, 64 ГБ оперативы, Ryzen 7 5800X. Не топ, но достаточно чтобы запустить что-то разумное.
Первая ошибка — я пытался запустить Llama 3 70B. Spoiler: она не влезает. 70-миллиардная модель в квантизации Q4 занимает примерно 40 ГБ VRAM. У меня 24. Чистая математика, бесполезно спорить.
Что реально влезает в 24 ГБ:
- Llama 3.1 8B — около 5 ГБ, быстро, дёшево по ресурсам
- Mistral 7B — примерно столько же, чуть лучше по качеству на отдельных задачах
- Qwen 2.5 14B — уже около 10 ГБ, заметно тяжелее, но и ответы лучше
- Llama 3.1 70B — только если есть 40+ ГБ VRAM или умеешь в KV cache offloading (спойлер: я не умел, когда начинал)
Для справки: Gemma 2 9B тоже хороший вариант, она от Google и выдаёт конкурентное качество при меньшем размере.
Ollama: быстрый старт, который не врёт
До того как я нашёл Ollama, я две недели убил на попытки запустить llama.cpp вручную. Собирал из исходников, разбирался с CMake, боролся с ошибками компиляции. Работает. Но.
Ollama — это one-liner до рабочего API. Серьёзно.
curl https://ollama.ai/install.sh | sh
ollama run llama3.1:8b
После этого у тебя REST API на localhost:11434. Три запроса — и ты уже отправляешь промпты из терминала.
Что мне понравилось: никакой магии, всё прозрачно. Видишь, сколько токенов генерируется в секунду, какой context length занят, сколько GPU VRAM используется. Если что-то не так — логи есть.
Что мне не понравилось: Ollama по умолчанию не самый эффективный по памяти. Для 8B модели он кушает больше VRAM, чем мог бы, если не покрутить параметры. Но об этом позже.
Docker + Open WebUI: как это выглядит в жизни
Ollama в терминале — хорошо для экспериментов. Для реального использования я обернул всё в Docker Compose.
services:
ollama:
image: ollama/ollama:latest
volumes:
- ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
environment:
OLLAMA_BASE_URL: http://ollama:11434
depends_on:
- ollama
restart: unless-stopped
Open WebUI — это веб-интерфейс, который по факту заменяет ChatGPT. Подключается к Ollama, поддерживает историю, RAG (можно прицепить документы), и при этом работает полностью локально.
Когда я это поднял и зашёл через браузер — почувствовал себя так, будто собрал свой маленький ChatGPT. Без преувеличения, это был кайф. Особенно когда понял, что никакие данные никуда не уходят.
vLLM: когда Ollama уже не хватает
Месяца три я прожил на Ollama и был в целом доволен. Потом полез в длинные контексты — и начались проблемы.
Ollama плохо справляется с большими батчами и длинными последовательностями. Если генерируешь 50 ответов параллельно — скорость падает в разы, токены в секунду скачут непредсказуемо.
vLLM — совсем другой зверь. Он заточен под high-throughput inference, использует PagedAttention, и на моей RTX 3090 выдаёт в 3–4 раза больше токенов в секунду для той же модели.
Минус: vLLM сложнее поставить. Нет простого ollama run. Нужно либо Docker с GPU support, либо питоновое API.
Установка через Docker:
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-Instruct-v0.3 \
--quantization fp8
API совместим с OpenAI — любой код, который работает с OpenAI API, будет работать и с vLLM. Меняешь одну URL — и всё.
Что я понял про vLLM: он стоит усилий, если у тебя реальная нагрузка. Для пары запросов в день — Ollama проще и достаточно.
Квантизация: если GPU маленький
Когда у меня закончилась память на 24 ГБ для 14B модели в полной точности, я начал разбираться с квантизацией.
Идея простая: вместо 16-битных весов (каждый вес = 2 байта) используем 4-бита или даже 2-бита. Качество падает, но не катастрофически, а размер модели — в 2–4 раза меньше.
GGUF-формат (от llama.cpp) — стандарт для этого. Ollama умеет в него из коробки. Вместо llama3.1:8b пишешь llama3.1:8b-instruct-q4_K_M — и получаешь ту же модель в 4-битной квантизации, которая занимает около 5 ГБ вместо примерно 16 ГБ.
Q4_K_M — хороший компромисс. Q8 выглядит лучше, но разница минимальная в большинстве задач. Q5 — уже заметно хуже на точных вычислениях и коде.
Что я делал не так (честный опыт)
Главная ошибка — я слишком рано захотел большую модель. Думал: если 8B — то «слабая», а мне нужна «настоящая». Поставил Qwen 32B, мучился с offloading, потерял два дня.
Сейчас: 8B квантизированная модель закрывает 80% моих задач. Код, черновики текстов, анализ документов, перевод — всё это Llama 3.1 8B делает на уровне, который я бы оценил как «достаточно хороший». Я тратил бы время на ожидание 70B вместо того, чтобы работать.
Вторая ошибка: не мониторил память. Перегрузил VRAM — система ушла в swap, стало тормозить, винил модель. Оказалось — нехватка VRAM.
Третья: игнорировал temperature и max_tokens. Модель выдавала пустые ответы, а я грешил на качество. Выставил правильные параметры — всё заработало.
Итого: стоит ли оно того
Да, если:
- У тебя есть GPU с 16+ ГБ VRAM
- Тебе важна приватность — никакие данные не уходят на сторону
- Хочешь бесплатно гонять модели без ограничений по запросам
- У тебя есть задачи, которые удобно автоматизировать через API
Нет, если:
- Нужен GPT-4o-level качество — свой сервер с потребительским GPU его не даст
- Нет времени разбираться с инфраструктурой
- Задачи единичные и простые — проще в ChatGPT
От себя добавлю: тот момент, когда я заставил работать open-webui + ollama + свой домен — это было приятно. Не из-за технологии, а из-за контроля. Никаких подписок, никаких лимитов, никаких данных на серверах компании X.
Если руки дойдут — попробуй. Минимум, который нужен: любой GPU с 8 ГБ VRAM, Ollama, вечер свободного времени.
