Оптимизация инференса LLM на GPU
Запустить LLM на GPU — это только половина задачи. Вторая половина — сделать так, чтобы модель отвечала быстро, обслуживала много пользователей и не требовала максимальных ресурсов. Без оптимизации инференса latency может быть 5-10 секунд, а throughput — единицы запросов в секунду. При этом GPU загружен на 20-30%.
На практике правильная оптимизация увеличивает скорость в 5-10 раз, а иногда и больше. Модель, которая раньше обслуживала 5 запросов в секунду, начинает держать 50-100. Это позволяет либо снизить затраты на GPU, либо обслуживать больше пользователей без дополнительного железа.
В этой статье — методы оптимизации инференса LLM: vLLM, TensorRT-LLM, квантизация, батчинг, работа с KV-кешем. Если нужно арендовать GPU-сервер под LLM — поможем.
📋 Содержание статьи
Проблемы инференса
Основные проблемы при запуске LLM без оптимизации:
Высокая latency
Ответ генерируется по токенам, может занимать 5-10 секунд. Пользователь ждёт и раздражается.
Низкий throughput
Один запрос блокирует GPU, остальные ждут. 5-10 запросов в секунду вместо 100+.
Память
Модель + KV-кеш занимают много VRAM. Без оптимизации не помещается или ограничивает batch size.
Нерегулярная нагрузка
Пики и простои. GPU то перегружен, то простаивает на 80%.
Разные длины запросов
Короткие вопросы и длинные тексты. Без эффективного batching — большие потери.
Высокая стоимость
GPU простаивает — деньги уходят впустую. Нужно либо оптимизировать, либо докупать железо.
Оптимизация решает эти проблемы, повышая скорость и throughput в 5-10 раз без замены железа.
Метрики
Прежде чем оптимизировать, нужно понять, что измерять.
Ключевые метрики
- TTFT (Time To First Token): время до первого токена. Критично для UX. Цель — менее 500 мс;
- TPOT (Time Per Output Token): время на каждый следующий токен. Цель — менее 50 мс;
- Latency: общее время ответа. Зависит от длины ответа;
- Throughput: запросов в секунду. Критично для стоимости;
- Tokens per second: токенов в секунду. Основная метрика производительности;
- GPU utilization: загрузка GPU. Цель — 70-90%;
- Memory utilization: использование VRAM. Цель — 80-95%.
Целевые значения
| Метрика | Без оптимизации | С оптимизацией |
|---|---|---|
| TTFT (7B) | 500-1000 мс | 100-200 мс |
| TPOT (7B) | 100-200 мс | 20-40 мс |
| Throughput (7B) | 5-10 req/s | 50-100 req/s |
| GPU utilization | 20-40% | 70-90% |
vLLM
vLLM — open-source библиотека для быстрого инференса LLM. Стала стандартом для production-развёртываний.
Ключевые технологии
- PagedAttention: эффективное управление KV-кешем. Экономия памяти до 4 раз. Работает по аналогии с виртуальной памятью ОС;
- Continuous batching: новые запросы добавляются в текущую генерацию без ожидания завершения предыдущих;
- Высокий throughput: в 5-24 раза выше, чем у стандартных решений (Hugging Face Transformers);
- Поддержка моделей: Llama, Mistral, Qwen, Falcon, Yi, DeepSeek и другие;
- OpenAI-совместимый API: легко заменить облачные API на свои;
- Tensor parallelism: распределение модели между несколькими GPU;
- Prefix caching: кеширование общих префиксов (system prompts);
- Spectulative decoding: ускорение генерации через draft-модель.
Когда использовать vLLM
- Production-инференс с высокой нагрузкой;
- Обслуживание множества пользователей одновременно;
- Требования к низкой latency;
- Стандартные модели (Llama, Mistral, Qwen);
- OpenAI-совместимый API.
Производительность
На H100 с моделью 7B vLLM даёт до 10 000+ токенов в секунду при batch size 256. Это в 10-20 раз выше базового запуска через Transformers.
TensorRT-LLM
TensorRT-LLM — библиотека NVIDIA для максимально быстрого инференса LLM.
Ключевые технологии
- Оптимизация графа: слияние операций, удаление лишних слоёв, оптимизация attention;
- Квантизация: FP8, INT4, INT8 с минимальной потерей качества;
- In-flight batching: как continuous batching в vLLM;
- Максимальная производительность: на 20-40% быстрее vLLM в некоторых сценариях;
- Поддержка H100: использует FP8 и Transformer Engine;
- Multi-GPU: tensor и pipeline parallelism;
- Paged KV cache: эффективное управление памятью.
Сложности
- Требует компиляции под конкретную модель и GPU;
- Сложнее в настройке, чем vLLM;
- Меньше поддерживаемых моделей;
- Нужны свежие драйверы NVIDIA;
- Требует больше времени на развёртывание.
Когда использовать
- Максимальная производительность критична;
- Production-инференс с миллионами запросов;
- Используется H100 или H200;
- Есть ресурсы на настройку.
Квантизация
Квантизация — уменьшение точности весов модели для экономии памяти и ускорения.
Типы точности
- FP32: 32 бита на параметр. Базовая точность, полный размер модели;
- FP16/BF16: 16 бит. 2x экономия памяти, минимальная потеря качества. Стандарт для обучения;
- INT8: 8 бит. 4x экономия памяти. Небольшая потеря качества. Хорошо для инференса;
- INT4: 4 бита. 8x экономия памяти. Заметная потеря качества на сложных задачах;
- FP8: 8 бит float. Оптимально для H100. Баланс качества и скорости;
- AWQ / GPTQ: методы квантизации с сохранением качества;
- GGUF: формат для llama.cpp, работает на CPU и GPU.
Что это даёт
- Экономию VRAM: модель 70B в INT4 занимает 35 ГБ вместо 140 ГБ;
- Ускорение: меньше данных — быстрее вычисления;
- Возможность запуска крупных моделей: 70B на одной A100 80 ГБ;
- Больше batch size: больше запросов одновременно.
Что выбрать
- Максимальное качество: FP16/BF16;
- Баланс: INT8 или FP8 (только H100);
- Экономия памяти: INT4 через AWQ/GPTQ;
- Локальный запуск: GGUF с llama.cpp.
Батчинг
Батчинг — обработка нескольких запросов одновременно. Ключевая технология для повышения throughput.
Виды батчинга
- Static batching: запросы собираются в группу фиксированного размера и обрабатываются вместе. Простой, но неэффективен при разной длине;
- Dynamic batching: запросы группируются динамически, по мере поступления. Ждёт таймаут или накопление batch size;
- Continuous batching: новые запросы добавляются в текущую генерацию без ожидания. Оптимальный для LLM;
- In-flight batching: как continuous, но на уровне TensorRT-LLM;
- Chunked prefill: разбиение длинного prefill на части, чтобы не блокировать другие запросы.
Влияние на производительность
- Без батчинга: GPU обрабатывает 1 запрос за раз. Throughput — 5-10 req/s;
- Static batching (batch=8): throughput 40-50 req/s, но высокая latency;
- Continuous batching: throughput 80-100+ req/s при низкой latency;
- Оптимальный batch size: 32-256 для 7B моделей на H100.
Когда важно
- Высокая нагрузка: десятки и сотни запросов в секунду;
- Много пользователей: чат-боты, API-сервисы;
- Пакетная обработка: массовые задачи (суммаризация, перевод).
KV-кеш
KV-кеш — память для сохранения ключей и значений attention между токенами. Критичен для скорости генерации.
Что это такое
- Размер: зависит от длины контекста и числа слоёв. Для 7B модели с 8k контекста — 1-2 ГБ на пользователя;
- Рост: линейно растёт с длиной контекста;
- Проблема: при 100 одновременных пользователях KV-кеш занимает 100-200 ГБ VRAM;
- Решение: эффективное управление и переиспользование памяти.
Технологии
- PagedAttention (vLLM): управление KV-кешем блоками, как в виртуальной памяти. Экономия до 4x;
- Prefix caching: кеширование общих префиксов (system prompts). Экономия для чатов с одинаковым system prompt;
- Sliding window attention: ограничение контекста для экономии памяти;
- Multi-Query Attention (MQA): уменьшение KV-кеша в 4-8 раз;
- Grouped-Query Attention (GQA): компромисс между MHA и MQA. Используется в Llama 3;
- KV-кеш в квантизации: FP8 для KV-кеша, экономия в 2 раза.
Практические рекомендации
- Используйте модели с GQA или MQA, если важна память;
- Ограничивайте длину контекста, если 32k не нужны;
- Применяйте PagedAttention через vLLM;
- Кешируйте system prompts для чатов;
- Мониторьте использование VRAM под KV-кеш.
Другие методы
Помимо основных технологий, есть дополнительные приёмы оптимизации.
Flash Attention
- Оптимизация attention через tiling;
- Экономия памяти в 2-4 раза;
- Ускорение в 2-4 раза;
- Встроена в vLLM, TensorRT-LLM, PyTorch 2.0+.
Speculative decoding
- Использование draft-модели для предсказания;
- Основная модель проверяет и корректирует;
- Ускорение в 2-3 раза без потери качества;
- Встроена в vLLM.
MoE (Mixture of Experts)
- Используются только нужные эксперты для каждого токена;
- Меньше вычислений при том же размере модели;
- Примеры: Mixtral 8x7B, DeepSeek-V3;
- Сложнее в развёртывании.
Tensor parallelism
- Разделение модели между GPU;
- Требует NVLink для эффективности;
- Позволяет запускать модели, не помещающиеся в одну карту;
- Используется в vLLM и TensorRT-LLM.
Pipeline parallelism
- Разделение модели по слоям между GPU;
- Меньше требований к NVLink, чем у tensor parallelism;
- Эффективно для очень крупных моделей;
- Используется в DeepSpeed и TensorRT-LLM.
Сравнение решений
| Решение | Throughput | Latency | Сложность | Гибкость |
|---|---|---|---|---|
| Transformers | Низкий (5-10 req/s) | Высокая | Просто | Максимальная |
| vLLM | Высокий (50-100+ req/s) | Низкая | Средне | Хорошая |
| TensorRT-LLM | Максимальный (80-150+ req/s) | Минимальная | Сложно | Ограниченная |
| llama.cpp | Средний | Средняя | Просто | Хорошая (CPU/GPU) |
| TGI (HF) | Высокий | Низкая | Средне | Хорошая |
Что выбрать
- Production LLM: vLLM — оптимальный выбор;
- Максимум производительности: TensorRT-LLM;
- Эксперименты и кастомные модели: Transformers;
- Локальный запуск на CPU: llama.cpp;
- Managed-сервис: зависит от провайдера.
Наши рекомендации
📌 Что вы получаете, заказывая настройку инференса у нас
- vLLM или TensorRT-LLM — под задачу
- Квантизацию — FP8, INT8, INT4
- Continuous batching — высокий throughput
- PagedAttention — экономия VRAM
- Flash Attention — ускорение
- Мониторинг — метрики latency и throughput
📌 Итоговый вывод
Оптимизация инференса LLM увеличивает скорость в 5-10 раз без замены железа.
Что нужно знать:
- vLLM: PagedAttention, continuous batching, высокий throughput. Стандарт для production;
- TensorRT-LLM: максимальная производительность, сложнее настройка;
- Квантизация: INT8 — 2x, INT4 — 4x экономия памяти. FP8 — оптимально для H100;
- Батчинг: continuous — оптимальный для production;
- KV-кеш: PagedAttention и prefix caching экономят память;
- Flash Attention: встроен в современные решения;
- Speculative decoding: ускорение в 2-3 раза;
- Метрики: TTFT, TPOT, throughput, GPU utilization.
Хотите быстрый инференс LLM? Закажите консультацию в Lead Hub.
Также рекомендуем: как выбрать GPU, H100 или A100, bare metal или облако, VRAM для LLM, ошибки при выборе, GPU-хостинг.