Как развернуть LLM на сервере с vLLM

Пошаговый гайд по vLLM: установка, GPU-требования, OpenAI-совместимый API и запуск квантованных моделей на своём сервере.

vLLM: развёртывание LLM-сервера на GPU с OpenAI-совместимым API

vLLM — фреймворк для быстрого запуска языковых моделей на серверах с GPU. Проект разработан в UC Berkeley и стал стандартом для продакшен-деплоя LLM: по бенчмаркам vLLM обслуживает в 2–10 раз больше запросов в секунду, чем наивный запуск через Hugging Face Transformers. Если Ollama — решение для персонального использования, то vLLM — для серверов и команд. Если вы ещё выбираете open-source стек, сначала сравните Llama, Mistral и Qwen, а потом возвращайтесь к vLLM как к серверному слою.

Если коротко: когда выбирать vLLM

Проверено 27 апреля 2026 года. Для серверного инференса на GPU, OpenAI-совместимого API и нескольких одновременных запросов почти всегда выбирайте vLLM. Для локального запуска на одной машине и самого простого старта удобнее Ollama. Если важнее CPU-режим, GGUF и жёсткая экономия VRAM, смотрите в сторону llama.cpp.

  • vLLM — когда вы поднимаете внутренний API, RAG-сервис, бота или другой серверный контур с параллельными запросами.
  • Ollama — когда нужен быстрый локальный старт для одного разработчика, ноутбука или тестового стенда без продакшен-обвязки.
  • llama.cpp — когда модель должна работать на CPU, в edge-сценарии или на машине, где GPU-памяти мало.

Быстрый ориентир: для командного сервиса на GPU почти всегда подходит vLLM; для личной локальной модели почти всегда хватает Ollama. Для более широкой карты стеков и сценариев держите под рукой хабы ИИ для разработчиков и полный гайд по LLM для разработчиков.

Почему не просто Transformers

При наивном запуске через transformers.pipeline GPU простаивает 60–80% времени из-за неэффективного управления памятью. vLLM решает это тремя технологиями:

PagedAttention — механизм управления KV-кэшем, аналогичный виртуальной памяти в операционных системах. Память выделяется блоками по мере необходимости, а не заранее для максимальной длины. Это сокращает потери памяти на 50–90%.

Continuous batching — запросы группируются и обрабатываются пакетами. Новые запросы добавляются в текущий пакет, не дожидаясь завершения предыдущих. Это увеличивает пропускную способность в 5–10 раз по сравнению со статическим батчингом.

Tensor parallelism — распределение модели по нескольким GPU для моделей, которые не помещаются в одну карту.

Требования к серверу

Минимальные требования зависят от размера модели. Ориентировочно: Llama 3.1 8B (FP16) — 16 ГБ VRAM (RTX 4090 или A100 40GB). Llama 3.1 70B (FP16) — 140 ГБ VRAM (2× A100 80GB или 4× A100 40GB). Для квантизированных моделей (AWQ, GPTQ) требования вдвое ниже.

Операционная система: Linux (Ubuntu 22.04 рекомендуется). CUDA 12.1+, Python 3.9+.

Установка

# Установка через pip
pip install vllm

# Или через Docker (рекомендуется для продакшена)
docker run --runtime nvidia --gpus all \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  -p 8000:8000 \
  vllm/vllm-openai:latest \
  --model meta-llama/Llama-3.1-8B-Instruct

Docker-образ включает все зависимости и CUDA-драйверы. Модель загружается автоматически из Hugging Face при первом запуске.

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

vLLM предоставляет OpenAI-совместимый API — это значит, что любой код, написанный для GPT API, будет работать без изменений:

python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.9

Ключевые параметры:

--max-model-len — максимальная длина контекста. По умолчанию берётся из конфигурации модели (для Llama 3.1 — 128K), но это требует много памяти. Ограничьте до реально необходимого: 4096–8192 для большинства задач.

--gpu-memory-utilization — доля VRAM, которую vLLM использует для KV-кэша. 0.9 — оптимально, оставляет 10% для системных нужд.

Использование через OpenAI SDK

from openai import OpenAI

# Указываем локальный сервер вместо OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")

response = client.chat.completions.create(
    model="meta-llama/Llama-3.1-8B-Instruct",
    messages=[
        {"role": "system", "content": "Ты — полезный ассистент."},
        {"role": "user", "content": "Объясни PagedAttention в двух предложениях"}
    ],
    temperature=0.7,
    max_tokens=256
)

print(response.choices[0].message.content)

Совместимость с OpenAI SDK означает, что Telegram-боты, RAG-системы и другие приложения, написанные для GPT, переключаются на локальную модель заменой одной строки.

Квантизированные модели

Для серверов с ограниченной VRAM используйте квантизированные версии моделей:

python -m vllm.entrypoints.openai.api_server \
  --model TheBloke/Llama-3.1-8B-Instruct-AWQ \
  --quantization awq \
  --max-model-len 8192

AWQ-квантизация сокращает потребление памяти вдвое при минимальной потере качества (1–3% на бенчмарках). GPTQ — альтернатива с похожими характеристиками. Подробнее о квантизации — в отдельном гайде.

Мониторинг и метрики

vLLM экспортирует метрики в формате Prometheus на эндпоинте /metrics. Ключевые метрики для мониторинга:

vllm:num_requests_running — текущее число обрабатываемых запросов. vllm:num_requests_waiting — очередь ожидания. Если очередь растёт — сервер не справляется с нагрузкой. vllm:gpu_cache_usage_perc — заполненность KV-кэша. При 100% новые длинные запросы будут ждать освобождения памяти.

Подключите Grafana для визуализации и настройте алерты на рост очереди.

Масштабирование

Горизонтальное масштабирование — запуск нескольких экземпляров vLLM за балансировщиком нагрузки (nginx, HAProxy). Каждый экземпляр обслуживает одну копию модели на одном или нескольких GPU.

Вертикальное масштабирование — распределение одной большой модели по нескольким GPU через --tensor-parallel-size:

# Llama 70B на 4 GPU
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.1-70B-Instruct \
  --tensor-parallel-size 4

vLLM vs альтернативы

vLLM — не единственный вариант. TGI (Text Generation Inference) от Hugging Face — близкий конкурент с похожими возможностями, интеграция с экосистемой HF. LocalAI — совместим с OpenAI API, поддерживает не только LLM, но и Whisper, Stable Diffusion. SGLang — новый проект, обещающий ещё более высокую производительность через оптимизацию графа вычислений. Для большинства сценариев vLLM — безопасный выбор с большим сообществом и предсказуемым поведением.

Подробнее: Как настроить локальную языковую модель

vLLM: быстрый старт и ключевые настройки

vLLM — самый производительный inference-сервер для open source LLM. Использует PagedAttention для эффективного управления KV-кэшем, что позволяет обслуживать в 10–24 раза больше запросов параллельно по сравнению с наивной реализацией.

Установка и запуск

# Установка
pip install vllm

# Запуск сервера (OpenAI-совместимый API)
python -m vllm.entrypoints.openai.api_server   --model mistralai/Mistral-7B-Instruct-v0.3   --port 8000   --tensor-parallel-size 1  # для одной GPU

Сравнение inference-серверов

СерверThroughputLatencyПростота настройкиФичи
vLLM★★★★★★★★★☆★★★☆☆Batching, LoRA, Quantization
Ollama★★★☆☆★★★★☆★★★★★Простота, GGUF
LM Studio★★★☆☆★★★★☆★★★★★GUI, GGUF
TGI (HuggingFace)★★★★☆★★★★★★★★☆☆Streaming, Flash Attention
llama.cpp server★★★☆☆★★★★☆★★★★☆CPU+GPU, GGUF

Оптимизация производительности vLLM

Quantization: GPTQ и AWQ квантизация снижают потребление VRAM в 2–4 раза с минимальной потерей качества. Запуск с квантизированной моделью: --quantization gptq.

Tensor Parallelism: для моделей 70B+ используйте несколько GPU: --tensor-parallel-size 4 распределяет веса на 4 карты.

Max Model Len: ограничьте контекстное окно под вашу задачу: --max-model-len 4096. Уменьшает потребление памяти KV-кэша.

Сравнение фреймворков для self-hosted LLM инференса

ФреймворкПроизводительностьOpenAI-совместимый APIПоддержка моделейСложность
vLLM★★★★★ (PagedAttention)ДаLlama, Mistral, Qwen, Gemma…Средняя
Ollama★★★☆☆Да80+ моделей (GGUF)Низкая
LMStudio★★★☆☆ДаGGUF форматНизкая (GUI)
llama.cpp server★★★★☆ДаGGUF форматСредняя
TGI (HuggingFace)★★★★☆ЧастичноШирокаяВысокая

Быстрый старт: vLLM за 5 минут

# Установка
pip install vllm

# Запуск сервера с Llama 3.1 8B
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Meta-Llama-3.1-8B-Instruct \
    --host 0.0.0.0 \
    --port 8000 \
    --gpu-memory-utilization 0.9

# Тест через curl
curl http://localhost:8000/v1/chat/completions \
    -H 'Content-Type: application/json' \
    -d '{"model": "meta-llama/Meta-Llama-3.1-8B-Instruct",
         "messages": [{"role": "user", "content": "Привет!"}]}'

Ollama: самый простой способ запустить LLM

# macOS / Linux
curl -fsSL https://ollama.ai/install.sh | sh

# Скачать и запустить Llama 3.2 3B
ollama run llama3.2

# Запустить как API-сервер
ollama serve  # слушает на порту 11434

# Запрос к API (OpenAI-совместимый)
curl http://localhost:11434/v1/chat/completions \
    -H 'Content-Type: application/json' \
    -d '{"model": "llama3.2",
         "messages": [{"role": "user", "content": "Привет!"}]}'

Рекомендации по выбору GPU

  • 7B–8B модели: RTX 3060 12 ГБ / RTX 4060 Ti 16 ГБ — от 25 000 ₽; скорость ~40–60 tok/s
  • 13B–14B модели: RTX 3090 24 ГБ / RTX 4090 24 ГБ — от 70 000 ₽; скорость ~30–50 tok/s
  • 70B модели (квантизованные): 2× RTX 3090 или A100 40 ГБ; cloud: RunPod A100 от $1.39/час
  • CPU-инференс: llama.cpp с Q4 квантизацией — 7B работает на 16 ГБ RAM, ~5–10 tok/s

Интеграция с приложением (Python)

from openai import OpenAI

# Подключение к локальному vLLM серверу
client = OpenAI(
    base_url='http://localhost:8000/v1',
    api_key='not-needed'
)

response = client.chat.completions.create(
    model='meta-llama/Meta-Llama-3.1-8B-Instruct',
    messages=[{'role': 'user', 'content': 'Напиши функцию сортировки на Python'}]
)
print(response.choices[0].message.content)

Стандартный OpenAI SDK работает с vLLM и Ollama без изменений — достаточно поменять base_url.

Telegram-канал @toolarium