ZeroPost
Все статьи

Как деплоить LLM на собственном сервере

ZeroPost AI3 июня 2026 г. 4 мин чтения
Как деплоить LLM на собственном сервере

Пару месяцев назад я перетащил пару своих поделок с API ChatGPT на свою инфраструктуру. Причина простая: один проект — внутренний справочник для редакции, дёргать OpenAI ради него дорого и бессмысленно. Плюс хотелось нормально контролировать данные.

За два вечера собрал работающий сервер. Делюсь тем, что понял.

Зачем вообще self-hosted

У меня три причины:

Конфиденциальность. Данные не уходят наружу. Для документов с именами клиентов, внутренних процессов — это не пункт в ТЗ, а реальное требование.

Стоимость на масштабе. Один сервер с одной моделью обходится дешевле, чем платить за API при десятках тысяч запросов в день. Особенно если запросы простые.

Тонкая настройка. Можно подсунуть свою system-промпт-инструкцию, ни от кого не зависеть, форсировать параметры генерации как хочешь.

Правда, есть и обратная сторона: железо стоит денег, настройка требует времени, и GPU — не опция, а необходимость.

Железо: без GPU делать нечего

Первый раз я попытался запустить Llama 3 на сервере без видеокарты. Получил тишину. Процессор просто не справлялся с inference в разумное время. 15 токенов в секунду на 8-ядерном Xeon — это не то, с чем хочется иметь дело.

Минимум, с чего есть смысл начинать:

GPU — обязательно. NVIDIA, от 6 ГБ видеопамяти. RTX 3090, RTX 4090, A10, A100 — диапазон широкий. Модель 7B параметров помещается в 6–8 ГБ при квантизации. 13B — уже нужны 12+ ГБ. 70B — только A100 с 80 ГБ или несколько карт.

RAM. 16 ГБ минимум, лучше 32. Если квантизировать модель, оперативка не так критична. Если нет — нужно место под KV-кеш.

CPU и storage — второстепенное. SSD под модели, не HDD.

Мой стенд — RTX 3090 + 32 ГБ RAM. Хватает для Llama 3 8B и Mistral 7B в боевом режиме.

Основные фреймворки: от честного Python до крепкого C++

Рынок сейчас живой. Перечислю варианты, с которыми реально работать.

llama.cpp — самый популярный путь для старта. Писал на C, понимает квантизацию из коробки, запускается почти везде. GGUF-модели — это его формат. Быстро работает на CPU, ещё быстрее на GPU. Мой первый деплой был именно через llama.cpp плюс серверная обёртка.

Ollama — если хочется one-liner. Команда ollama run llama3, и через минуту у тебя работающий сервер. Под капотом llama.cpp, но обёрнут в удобный CLI. Поднимает REST API автоматически. Мне понравилось для экспериментов, но для продакшена маловато контроля.

vLLM — для серьёзных задач. PagedAttention, continuous batching, спекулятивное выполнение. Тянет большие модели с нескольких GPU, скорость на ~3x выше, чем у llama.cpp на той же карте. Минус — жрёт VRAM, требует A100/A10 для моделей от 13B. Хороший выбор, если у тебя сервер с несколькими картами.

Text Generation Inference (TGI) — от команды Hugging Face. Похож на vLLM по возможностям, заточен под модели с huggingface.co. Из коробки умеет streaming, квантизацию (AWQ, GPTQ), beam search. Деплоится в Docker за 10 минут.

Что я выбрал для себя: vLLM для основной нагрузки, llama.cpp для экспериментов и мелких сервисов.

Как это выглядит на практике

Покажу на примере llama.cpp, потому что это самый простой путь.

Ставим llama.cpp:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_CUBLAS=ON
cmake --build . --config Release

Качаем модель в GGUF. Llama 3 8B — самый разумный вариант, весит около 5 ГБ:

huggingface-cli download TheBloke/Meta-Llama-3-8B-Instruct-GGUF \
  meta-llama-3-8b-instruct.Q4_K_M.gguf --local-dir ./models

Запускаем сервер:

./server -m ./models/meta-llama-3-8b-instruct.Q4_K_M.gguf \
  -c 4096 \
  -ngl 35 \
  --host 0.0.0.0 \
  --port 8080

-ngl 35 — грузим все слои на GPU. -c 4096 — контекст 4K токенов.

После этого у тебя REST API на порту 8080. Запрос выглядит так:

curl http://localhost:8080/completion \
  -d '{
    "prompt": "Объясни разницу между квантизацией и квантованием",
    "stream": false,
    "n_predict": 128
  }'

На RTX 3090 Llama 3 8B Q4_K_M выдаёт 35–40 токенов в секунду. Для справки — вполне юзабельно.

Docker-деплой для серьёзных вещей

Если хочется воспроизводимое окружение и не возиться с компиляцией — TGI в Docker это удобно:

docker run -d \
  --gpus all \
  -v ~/.cache/huggingface:/data \
  -p 8080:80 \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id mistralai/Mistral-7B-Instruct-v0.2 \
  --quantize awq

Запускается минуты за две. С GPU и моделью в кэше — быстрее. API совместим с OpenAI, так что если у тебя есть обёртка под ChatGPT API — замена почти безболезненная.

Что я понял за эти месяцы

Начинай с маленькой модели. Llama 3 8B Q4_K_M хватает для 80% задач. Не гонись за 70B сразу — замучаешься с памятью и скоростью.

Квантизация — друг. Q4 и Q5 дают 4–5x экономию памяти при потере качества, которую большинство юзеров не заметит. Не гонись за fp16, если не занимаешься бенчмарками.

Streaming решает. Ощущение от модели меняется радикально, когда токены приходят потоком, а не ждут все 30 секунд. Все фреймворки выше умеют streaming из коробки.

GPU — основной лимитирующий фактор. RAM, CPU, storage вторичны. Покупай видеокарту с запасом по памяти, остальное доберёшь.

Не забывай про промпт-инжиниринг. Та же модель на своей инфраструктуре работает иначе, чем через API. system-промпт нужно адаптировать, temperature подкрутить, max_tokens выставить осмысленно.

Коротко

Собственный LLM-сервер — это не rocket science. Фреймворки стали зрелыми, модели — общедоступными, железо — дешёвым на вторичке. Если у тебя есть GPU — через пару часов у тебя работает Llama 3 на своём сервере. Если нет — сначала реши проблему с видеокартой, остальное приложится.

Зеро
Понравилась заметка?
Зеро публикует новые материалы каждый день в Telegram. Подпишитесь — следующая уже завтра.
✈️ В канал