Streaming токены: инференс начал выдавать слова до завершения модели

Обычный инференс работает так: модель генерирует все токены, а затем их декодируют в слова. При больших входных последовательностях или при размещении вычислений на нескольких GPU это может занять заметное время. Streaming меняет подход: логит каждого следующего токена вычисляется и отправляется клиенту сразу, не дожидаясь остальных.

Эффект заметен в интерактивных приложениях: пользователь видит, что ответ начинается писаться, а не ждёт пустого экрана несколько секунд. На практике это улучшает восприятие задержки, хотя общее время до завершения ответа остаётся прежним.

Реализация в фреймворках

Реализация требует переделки инференс-движка: вместо единого вызова нужен итератор или асинхронный генератор, который выдаёт токены по одному. vLLM, llama.cpp и другие фреймворки добавили встроенную поддержку streaming в последних версиях.

На стороне клиента это усложняет обработку ответа — нужна буферизация и обработка потока данных. WebSocket, Server-Sent Events или NDJSON используются чаще всего, в зависимости от архитектуры сервиса.

Сейчас streaming стал стандартом для всех коммерческих API, и ожидание от локального инференса того же уровня удобства растёт.