ZeroPost
Все статьи

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

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

Собирал вчера мини-стенд для тестов — тривиальная задача, казалось бы. Поставить одну модель, погонять бенчмарки, показать результаты заказчику. На бумаге — полчаса. В реальности ушло четыре часа, два перезапуска драйвера и одна переустановка CUDA с нуля.

И вот что я понял, пока возился: деплой LLM на своё железо — это не «скачать модель и запустить». Там десяток подводных камней, и половина из них — неочевидные. Разложу по полочкам, чтобы ты не наступал на те же грабли.

Зачем вообще держать модель у себя

Облачные API — ChatGPT, Claude, Gemini — удобны. Платишь за токены, не паришься об инфраструктуре. Но есть ситуации, когда это не катит.

Данные нельзя отправлять наружу. Медицинские записи, юридические документы, внутренняя переписка — даже если провайдер обещает «не использовать для обучения», сам факт утечки через API-запросы для многих организаций неприемлем.

Задержка. Латентность облачного API — 300–800 мс в лучшем случае. Для интерактивных приложений и чатов это терпимо. Но когда у тебя RAG-система, которая гоняет по 10–20 запросов за один ответ пользователя, задержка складывается в секунды. Локальная модель на RTX 3090 выдаёт 40–60 токенов в секунду на 7B параметрах — и это совсем другой пользовательский опыт.

Цена при большом объёме. Если у тебя 10 миллионов запросов в месяц, облачный API влетит в копейку. Своё железо — единоразовое вложение.

Вариант первый: Ollama — для тех, кто не хочет заморачиваться

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

Установка на Linux:

curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.2
ollama serve

Запуск API на порту 11434. Формат запросов — практически OpenAI-совместимый:

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [{"role": "user", "content": "Привет"}]
  }'

Что хорошего: поставил и забыл. Автозагрузка моделей, управление через CLI, есть веб-интерфейс и десктопное приложение. Под капотом llama.cpp — значит, работает на CPU тоже, хотя медленно.

Что плохого: производительность на GPU ниже, чем у vLLM, раза в полтора-два. Для продакшена с серьёзной нагрузкой — не оптимальный выбор. Но для экспериментов, прототипов и командных стендов — отличный вариант.

Вариант второй: vLLM — для продакшена

vLLM — движок, заточенный под высокую пропускную способность. PagedAttention, непрерывный batching, всё оптимизировано для GPU. На том же RTX 3090 с Llama 3.1 8B можно получить 50–80 токенов в секунду — это в два-три раза быстрее, чем на llama.cpp.

Установка через Docker — самый надёжный путь:

docker run --gpus all \
  -v $PWD/models:/models \
  -p 8000:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model /models/llama-3.1-8b-instruct \
  --gpu-memory-utilization 0.9

API — полный OpenAI-совместимый, можно подсунуть в LangChain или любую обёртку, которая работает с OpenAI. Есть streaming, chat completions, embeddings.

Нюанс, который меня побил: vLLM требует, чтобы модель была в формате HuggingFace. Если скачал через что-то другое — конвертируй. GGUF-файлы (формат llama.cpp) он не ест напрямую. Есть --gguf-file, но это костыль, и работает не со всеми моделями.

Ещё один нюанс: объём GPU-памяти. Llama 3.1 8B в fp16 требует ~16 ГБ видеопамяти. 70B — уже ~140 ГБ, то есть нужно несколько карт с NVLink. Прежде чем выбирать модель — посчитай, хватит ли памяти. Квантизация (AWQ, GPTQ) сильно помогает: 8B в 4-битной квантизации влезает в 6 ГБ.

Вариант третий: llama.cpp + сервер

llama.cpp — это С++-реализация инференса. Медленнее vLLM на GPU, но универсальнее: работает на CPU, на Mac с Apple Silicon, на старых картах без CUDA.

Главная фишка — квантизация. Модель в Q4_K_M весит в два раза меньше, чем в fp16, и работает быстрее. Качество падает, но для большинства задач — незаметно.

Собираешь сервер:

mkdir build && cd build
cmake ..
cmake --build . --config Release
./server -m models/llama-3.2-3b-q4_k_m.gguf -c 4096 -np 4 -t 8

Порт 8080, OpenAI-совместимый API. Просто, предсказуемо, без зависимостей. Для 3B-моделей на CPU-сервере — вполне рабочий вариант.

Железо: что реально нужно

Разберись с этим до того, как начнёшь ставить софт. Иначе упрёшься в стену.

Для 7B-модели: одна видеокарта с 8 ГБ — минимум. RTX 3060, RTX 4060, RTX 4070. Или AMD RX 6800. На CPU будет больно, но 1–3 токена в секунду выжать можно.

Для 13B: нужна карта с 16 ГБ. RTX 3090, RTX 4090, A100 40GB. На 8-гиговой влезает только сильно квантизированная версия.

Для 70B: это уже серверное железо. A100 80GB, или несколько A6000 с NVLink, или H100. На потребительских картах — только в 4-битной квантизации, и то с трудом.

RAM: нужно столько же, сколько весит модель в fp16, плюс запас на батчи. Для 13B — ~32 ГБ системной памяти, если не хватает GPU.

CPU — secondary. Нужен для предобработки и подготовки данных, но основная нагрузка ложится на GPU.

Docker: не забудь про ipc=host

Мелочь, из-за которой я потерял час. Если ставишь vLLM или Ollama в контейнере — обязательно флаг --ipc=host. Без него контейнер не получит доступ к shared memory, и при большом батче всё упадёт с OOM.

docker run --gpus all --ipc=host --shm-size=64g ...

Размер /dev/shm тоже важен. По умолчанию в Docker это 64 МБ — катастрофически мало для инференса. Ставь --shm-size хотя бы равным объёму GPU-памяти.

А что с русским?

Большинство популярных open-source моделей — Llama, Mistral — обучены на преимущественно английском корпусе. Русский они знают так себе, особенно до обновлений.

Хорошие варианты для русского: Saiga (русская Llama от команды ODS), Claude 2.5 7B с Ru-адаптером, или более свежие модели от YandexGPT и GigaChat. Перед покупкой коммерческой модели — проверь, что она реально понимает русский, а не просто переводит на английский и обратно.

Коротко

Если тебе нужно быстро попробовать — ставь Ollama, не думай.

Если делаешь бота или RAG для продакшена с более чем 10 запросами в минуту — vLLM.

Если железо слабое или нужна максимальная гибкость — llama.cpp.

Самый частый косяк: не хватает GPU-памяти. С

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