Hugging Face Blog→ оригинал

Hugging Face ускорила LLM-инфиренс на 22% через асинхронный батчинг

Hugging Face разблокировала асинхронность в инфиренсе LLM. Вместо поочередной работы CPU и GPU теперь работают параллельно: пока GPU вычисляет батч, CPU готовит

Hugging Face ускорила LLM-инфиренс на 22% через асинхронный батчинг
Источник: Hugging Face Blog. Коллаж: Hamidun News.
◐ Слушать статью

Hugging Face нашла простой способ ускорить генерацию токенов в LLM на 22% — просто заставила CPU и GPU работать одновременно вместо того, чтобы ждать друг друга. Это не требует переобучения моделей или новых алгоритмов.

В чём была проблема В обычном синхронном батчинге CPU подготавливает

данные, затем GPU их вычисляет, затем CPU ждёт результатов и готовит следующий батч. GPU получается простаивает около 24% времени — пока CPU возится с препроцессингом. Это как конвейер, где на каждом шаге кто-то смотрит на часы. Даже если CPU работает на полную, он медленнее самого простого GPU-вычисления, поэтому видеокарта просто сидит и ждёт новых данных. На синхронном батчинге 8-миллиардная модель при батче 32 генерировала 8К токенов за 300 секунд с активностью GPU всего 76%.

Как асинхронность решает проблему

Идея предельно простая: запустить CPU и GPU параллельно через CUDA-потоки (streams). Используются три независимых потока — один для передачи данных в GPU (H2D), один для самих вычислений (Compute) и один для обратной передачи (D2H). Каждый поток возвращает управление CPU сразу же, не блокируя его. Между потоками ставят CUDA-события (events) — маячки, которые гарантируют правильный порядок: H2D-поток отмечает, когда данные в GPU загружены Compute-поток ждёт этого маячка, вычисляет, ставит свой * D2H-поток ждёт окончания вычислений и вытягивает результаты Пока GPU считает батч N, CPU уже готовит батч N+1 в другом буфере памяти. Никакого ожидания, они пашут параллельно.

Главный трюк с carry-over

Сложность в том, что когда запрос переживает несколько батчей, его выходные токены из батча N становятся входом для батча N+1. Hugging Face решила это через placeholder'ы: при подготовке батча N+1 на место входов будущих токенов кладут нули, а когда батч N завершается, нули заменяют на реальные значения.

«Это позволяет CPU готовить следующий батч, не ждя результатов текущего», — объясняют в Hugging Face.

Всё держится на CUDA-графах с общим пулом памяти, что даже экономит видеопамять.

Цифры говорят сами До оптимизации: GPU активен 76%, генерация 8К токенов — 300.6 секунд.

После: GPU активен 99.4%, те же токены — 234.5 секунд. Ускорение 22% — почти предельное для такой архитектуры (теоретический максимум был 24%).

Что это значит

Это означает, что вам не нужны более дорогие GPU или переобучение моделей для серьёзного прироста скорости. Код уже в Transformers-библиотеке, класс `ContinuousBatchingAsyncIOs`. Для компаний, генерирующих много токенов, это может сэкономить миллионы на железе.

ЖХ
Hamidun News
AI‑новости без шума. Ежедневный редакторский отбор из 400+ источников. Продукт Жемала Хамидуна, Head of AI в Alpina Digital.
Что вы думаете?
Загружаем комментарии…