Инференс и оптимизация
17 просмотров
Continuous Batching
Continuous Batching / In-flight Batching
Continuous Batching — техника динамического формирования батчей при инференсе LLM, при которой новые запросы добавляются в обработку сразу после завершения любого текущего запроса, повышая throughput в 2-5×.
Что такое Continuous Batching
В отличие от статического батчинга (все запросы начинают и заканчивают вместе), continuous batching позволяет:
- Добавлять новые запросы в текущий батч немедленно
- Удалять завершённые запросы, не ожидая остальных
- Максимально утилизировать GPU
Проблема статического батчинга
Запрос 1: [■■■■■■■■■■] 10 токенов
Запрос 2: [■■■■■■■■■■■■■■■■■■■■] 20 токенов
Запрос 3: [■■■] 3 токена
Статический: GPU занят 20 шагов, запросы 1 и 3 "ждут" →
утилизация GPU ≈ 55%
Continuous: запрос 3 освобождает слот после 3 шагов →
новый запрос 4 начинается немедленно → утилизация ≈ 95%
Реализации
- vLLM — continuous batching + PagedAttention
- TGI (Text Generation Inference) — continuous batching
- TensorRT-LLM — in-flight batching
- Triton Inference Server — dynamic batching
Ключевые параметры
- max_batch_size — максимальное количество запросов одновременно
- max_waiting_tokens — сколько токенов ждать перед добавлением новых запросов
- GPU memory utilization — % VRAM для KV-cache (больше = больше параллельных запросов)
Continuous batching — одна из причин, почему production-serving (vLLM) в разы быстрее наивного model.generate().