Streaming инференс: как обновлять модель во время работы сервиса
Streaming инференс (по смыслу — поточный инференс, не путать с потоковым выводом токенов) — это архитектура, при которой веса модели загружаются в GPU-память не всё сразу при запуске сервиса, а блоками по мере необходимости, и могут быть выгружены, когда блок больше не нужен. Это позволяет, во-первых, работать с моделями, чьи веса больше, чем доступная GPU-память, и во-вторых, переключаться между несколькими версиями модели без остановки сервиса.
Обновление модели в такой архитектуре происходит следующим образом: новые веса загружаются в отдельную зону памяти, старые сохраняются до тех пор, пока все текущие запросы, которые их используют, не завершатся, затем старые веса выгружаются. Новые запросы сразу идят в новую версию модели, а старые продолжают работать со старой версией, если требуется гарантировать детерминированность результата для одного пользователя.
Использование в production
Такой подход необходим, когда компания развивает и тестирует новые версии моделей в production, не прерывая обслуживание текущих пользователей. Это особенно важно для сервисов, которые работают 24/7 и где каждая минута простоя стоит денег или потери репутации. Streaming инференс позволяет развёртывать исправления багов и переучённые версии моделей без планирования техническим окна обслуживания.
Сложность этого подхода в том, что требуется тщательное управление жизненным циклом весов в памяти, отслеживание активных запросов и гарантирование целостности данных при параллельной загрузке и выгрузке. Современные фреймворки вроде vLLM и Ray Serve начинают встраивать поддержку таких механизмов, но это остаётся одним из самых сложных аспектов production-grade инференса.
На практике компании, которые масштабируют инференс до десятков и сотен GPU-серверов, используют streaming архитектуру или её близкие аналоги для управления развёртыванием и обновлением моделей. Без такого инструмента обновление модели на кластере требует остановки всех серверов по очереди, что длится часами и несовместимо с высокоавailability требованиями.