# vLLM и инференс-серверы

> Серверы для высокопроизводительного запуска больших языковых моделей — vLLM, SGLang, TGI, TensorRT-LLM; ключевые техники — PagedAttention, непрерывный батчинг, OpenAI-совместимый API.

Источник: https://llmdocs.ru/wiki/vllm/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **vLLM**: UC Berkeley (Sky Computing Lab), 2023
- **Лицензия vLLM**: Apache 2.0
- **Ключевая идея**: PagedAttention — KV-кэш страницами
- **API**: OpenAI-совместимый (/v1/chat/completions)
- **Другие серверы**: SGLang, TGI, TensorRT-LLM, LMDeploy, llama.cpp server
- **Железо**: NVIDIA, AMD, Intel, TPU, CPU
**Инференс-серверы LLM** — программы, которые загружают [большую языковую модель](https://llmdocs.ru/wiki/llm.md) на GPU и обслуживают запросы многих пользователей одновременно, выжимая максимум из дорогого железа. Самый популярный открытый сервер — **vLLM**, созданный в Калифорнийском университете в Беркли. Он и его аналоги — SGLang, TGI, TensorRT-LLM — предоставляют HTTP API, совместимый с OpenAI, поэтому существующие клиенты и фреймворки работают с ними без изменений.

## Почему нужен специальный сервер

Наивный запуск модели через `model.generate()` обрабатывает запросы по одному и использует GPU на несколько процентов. Генерация текста состоит из двух фаз:

- **prefill** — обработка всего промпта сразу; упирается в вычисления;
- **decode** — генерация по одному [токену](https://llmdocs.ru/wiki/tokenization.md) за шаг; упирается в пропускную способность памяти, потому что на каждом шаге нужно прочитать все веса модели.

Чтобы decode был эффективным, нужно обрабатывать много запросов в одном батче. Но запросы разной длины начинаются и заканчиваются в разное время, а для каждого хранится **KV-кэш** — промежуточные ключи и значения механизма внимания для всех предыдущих токенов, — который занимает гигабайты и растёт с длиной [контекста](https://llmdocs.ru/wiki/context-window.md).

## Ключевые техники

**PagedAttention.** Главная идея vLLM: хранить KV-кэш не сплошным куском под максимальную длину, а блоками фиксированного размера, как страницы виртуальной памяти в операционной системе.[2] Это почти устраняет фрагментацию (в ранних системах до 60–80% памяти KV-кэша пропадало), позволяет держать в батче в несколько раз больше запросов и разделять общие префиксы между запросами без копирования.

**Непрерывный батчинг** (continuous batching). Новые запросы добавляются в батч на каждом шаге генерации, а завершённые сразу освобождают место — не нужно ждать окончания самого длинного ответа.[6]

**Кэширование префиксов.** KV-кэш общего начала промптов (системная инструкция, документ) переиспользуется между запросами — локальный аналог [кэширования промптов](https://llmdocs.ru/wiki/prompt-caching.md) у облачных провайдеров. SGLang развивает эту идею структурой RadixAttention.[3]

**Прочее.** Спекулятивное декодирование (маленькая модель предлагает токены, большая проверяет), chunked prefill, тензорный и конвейерный параллелизм на нескольких GPU, [квантизация](https://llmdocs.ru/wiki/quantization.md) (FP8, AWQ, GPTQ), обслуживание нескольких адаптеров [LoRA](https://llmdocs.ru/wiki/fine-tuning-lora.md) поверх одной модели, [структурированный вывод](https://llmdocs.ru/wiki/structured-output.md) по JSON-схеме.

## Запуск vLLM

```bash
pip install vllm
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --max-model-len 32768 --gpu-memory-utilization 0.9
```

Сервер слушает `http://localhost:8000/v1` и принимает запросы в формате OpenAI:[1]

```python
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
r = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=[{"role": "user", "content": "Что такое PagedAttention?"}],
)
print(r.choices[0].message.content)
```

Модели загружаются с [Hugging Face](https://llmdocs.ru/wiki/hugging-face.md); для больших моделей добавляют `--tensor-parallel-size 4`, чтобы распределить веса по четырём GPU. Есть официальный Docker-образ и Helm-чарты для [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md).

## Сравнение серверов

| Сервер | Разработчик | Особенности |
|---|---|---|
| **vLLM** | UC Berkeley и сообщество | самая широкая поддержка моделей и железа, стандарт де-факто |
| **SGLang** | LMSYS | RadixAttention, быстрый структурированный вывод, сильная производительность |
| **TensorRT-LLM** | NVIDIA | максимальная скорость на GPU NVIDIA, компиляция движка под модель[4] |
| **TGI** | Hugging Face | интеграция с экосистемой HF[5] |
| **LMDeploy** | Shanghai AI Lab | быстрый движок TurboMind, квантизация |
| **llama.cpp server**, **Ollama** | сообщество | CPU, Apple Silicon, потребительские GPU, формат [GGUF](https://llmdocs.ru/wiki/gguf.md) |

Для одного пользователя на ноутбуке удобнее [llama.cpp и Ollama](https://llmdocs.ru/wiki/local-llm.md); для сервиса с десятками одновременных запросов на серверных GPU — vLLM или SGLang.

## Метрики

- **TTFT** (time to first token) — задержка до первого токена, важна для чатов;
- **TPOT / ITL** — время на каждый следующий токен, определяет скорость «печати»;
- **пропускная способность** — токенов в секунду на весь сервер при заданной нагрузке;
- **стоимость** — рублей или долларов за миллион токенов.

Эти метрики конфликтуют: больший батч повышает пропускную способность, но увеличивает задержку каждого запроса. Настройку проверяют нагрузочным тестом (`vllm bench serve`) на реалистичных длинах промптов и ответов, а в продакшене экспортируют метрики сервера в [Prometheus](https://llmdocs.ru/wiki/prometheus.md).

## См. также

- [Локальный запуск LLM (llama.cpp, Ollama)](https://llmdocs.ru/wiki/local-llm.md)
- [Сервинг моделей](https://llmdocs.ru/wiki/model-serving.md)
- [GPU и CUDA](https://llmdocs.ru/wiki/gpu-cuda.md)
- [Квантизация моделей](https://llmdocs.ru/wiki/quantization.md)

## Источники

1. [vLLM Documentation](https://docs.vllm.ai/)
2. [Kwon et al. — Efficient Memory Management for LLM Serving with PagedAttention (SOSP 2023)](https://arxiv.org/abs/2309.06180)
3. [SGLang Documentation](https://docs.sglang.ai/)
4. [NVIDIA TensorRT-LLM](https://nvidia.github.io/TensorRT-LLM/)
5. [Hugging Face Text Generation Inference](https://huggingface.co/docs/text-generation-inference/)
6. [Yu et al. — Orca: A Distributed Serving System for Transformer-Based Generative Models (OSDI 2022)](https://www.usenix.org/conference/osdi22/presentation/yu)
