Что такое continuous batching и чем он лучше static batching?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Continuous batching — это способ динамически набирать и пересобирать batch на каждом шаге генерации, а не фиксировать состав batch заранее. Он лучше static batching в системах с LLM-инференсом, потому что повышает утилизацию GPU и снижает простой из-за разной длины запросов. В итоге обычно получается выше throughput и лучше latency при смешанном потоке запросов.
Определение:
Continuous batching — это техника обслуживания запросов, при которой система постоянно добавляет новые запросы в выполнение и удаляет завершившиеся, формируя batch “на лету” на каждом decoding step.
Static batching — это когда batch собирается заранее и затем обрабатывается как фиксированная группа до завершения, без изменения состава. Проблема static batching в том, что все запросы в batch вынуждены синхронно ждать самый длинный запрос, из-за чего ресурсы простаивают.
Пример использования:
В LLM inference-сервере приходят запросы на генерацию текста с разной длиной: один пользователь хочет 20 токенов, другой — 200.
При static batching оба запроса объединяются в один batch, и короткий запрос может ждать, пока длинный не продвинется дальше.
При continuous batching короткий запрос можно завершить и сразу заменить его новым входящим запросом, не дожидаясь окончания всего batch.
Шаг 1: В батче есть запросы A, B, C.
Шаг 2: На очередном decoding step запрос A завершился.
Шаг 3: Система сразу убирает A и добавляет новый запрос D.
Шаг 4: Следующий шаг выполняется уже для набора B, C, D.
Пояснение кода:
Код не требуется: это архитектурный принцип работы inference scheduler, а не синтаксис конкретного API.
Разбор примера по шагам:
- Система получает поток входящих запросов.
- Вместо ожидания набора фиксированного batch она планирует выполнение по шагам генерации.
- На каждом шаге проверяется, какие запросы завершились.
- Освободившиеся слоты сразу заполняются новыми запросами из очереди.
- Таким образом GPU почти не простаивает, а batch остается “живым” и меняется во времени.
Ключевые моменты:
- Continuous batching лучше подходит для LLM-serving, где длины запросов сильно различаются.
- Главный плюс — выше GPU utilization и обычно лучше throughput.
- Дополнительный плюс — меньше head-of-line blocking: короткие запросы не ждут длинные слишком долго.
- Static batching проще реализовать, но хуже масштабируется по latency и эффективности при реальном потоке запросов.
- Continuous batching особенно полезен в системах с autoregressive decoding, где модель генерирует токены по одному шагу.