Современные приложения генеративного искусственного интеллекта требуют всё более высоких вычислительных ресурсов и оптимизации процессов инференса, особенно когда речь идёт о больших языковых моделях (LLM). В свете быстро растущих объёмов данных и сложных сценариев использования, компании и исследовательские команды вынуждены искать новые подходы, позволяющие эффективно масштабировать инференс. Одним из таких передовых решений стала дезагрегированная инференс-архитектура, активно продвигаемая и интегрируемая с популярными инструментами, такими как PyTorch и vLLM. В данной статье подробно рассматриваются ключевые аспекты, принципы и достижения, обеспечивающие превосходство данного подхода в рамках масштабных вычислительных сред, а также особенности реализации и оптимизации от команды Meta и сообщества vLLM. Ключевой концепцией, лежащей в основе дезагрегированного инференса, является разграничение процесса генерации токенов модели на два важных этапа - prefill и decode.
Prefill относится к генерации первого токена, который строится на основе входного промпта пользователя, после чего запускается decode - поочерёдная генерация всех последующих токенов. Несмотря на то, что пред и декод выполняют похожие операции, они существенно отличаются по нагрузочным характеристикам и требуют разных вычислительных подходов. Prefill является вычислительно интенсивным, его время задержки ограничено длиной и размером батча и он выполняется один раз на запрос. Decode, напротив, зависит от памяти, формируется пакетно и доминирует в общей задержке при генерации. Разделение этих этапов на отдельные хосты - с decode хостами, перенаправляющими первый токен на prefill хосты, после чего обрабатывающими оставшиеся токены самостоятельно, значительно оптимизирует использование ресурсов.
Такой подход позволяет масштабировать prefill и decode независимо друг от друга, тем самым увеличивая пропускную способность и снижая задержки в системах инференса генеративного ИИ. Интеграция с vLLM, мощной библиотекой для управления инференсом, построена на трёх ключевых компонентах: proxy библиотеке, Python KV коннекторе и C++ коннекторах для prefill и decode, взаимодействующих по TCP. роутерный слой, отвечающий за балансировку нагрузки и соединение хостов в формате peer-to-peer, минимизирует сетевые накладные расходы и позволяет динамически масштабировать отдельные узлы под текущие нагрузки без необходимости жёсткого регулирования соотношения prefill и decode. Сервисный прокси, располагаемый на decode сервере, передаёт запросы на prefill-хосты и координирует передачу кеша ключ-значение (KV cache) междуdecode и prefill с помощью C++ KV коннекторов, в то время как Python KV коннектор асинхронно управляет этим процессом, давая возможность параллелить обмен KV данными с основным потоком выполнения модели и минимизировать задержки до первого токена и между токенами. Реализация C++ коннекторов сочетает оптимизацию ввода-вывода с разделением потоков и CUDA-стримов, что позволяет эффективно передавать и обрабатывать кеш KV-networks в разных слоях модели.
Prefill коннектор сохраняет кеш после каждого слоя на оперативной памяти и отправляет его decode стороне, а decode коннектор асинхронно загружает и внедряет этот кеш в выделенную видеопамять GPU для ускоренной генерации. Оптимизации в сетевой передаче данных включают поддержку мульти-NIC (нескольких сетевых интерфейсных карт), которые соединяются с ближайшими GPU для ускоренного обмена, а также мультистриминговую передачу кеша, где KV данные разбиваются на срезы и передаются параллельно по нескольким TCP-потокам, что полностью использует доступную пропускную способность сети. Для повышения эффективности обработки запросов внедрены "липкие" схемы маршрутизации, при которых сессии пользователей направляются к одному и тому же prefill хосту для максимального использования кеша префиксов, что особенно ценно для многоходовых взаимодействий с моделью. В сочетании с внутренним решением Meta для балансировки нагрузки достигается 40-50% попадания в кеш префиксов при стабильной загрузке высокоскоростной памяти модели (HBM) около 90%. Настройка vLLM для поддержки дезагрегированной модели предусматривала увеличение размера блоков кеша KV, чтобы снизить накладные расходы от частых мелких операций с памятью и сократить количество запускаемых CUDA-ядер.
Также отключён кеш префиксов на decode хостах, что устранило ненужные вычисления и стабилизировало время отклика между токенами. Важным моментом является сокращение времени до выдачи первого токена (TTFT). Внедрение proxy слоя, который получает результат с prefill узла и немедленно передаёт его клиенту, одновременно инициируя генерацию последующих токенов, а также переиспользование токенизированного промпта исключают дополнительные вычисления и минимизируют задержки. Для улучшения времени между токенами (TTIT) дизайнеры избежали создания сложных объектов Python в процессе передачи данных между планировщиком и рабочими потоками vLLM, что предотвратило критические зависания. Параллелизация загрузки KV-кеша и генерации токенов позволила дальнейшему ускорению производства выходных данных без ожидания длинных сетевых операций.
Кроме того, копирование данных выполняется в неблокирующем режиме, предотвращая конфликты между потоками CUDA и обеспечивая максимально плавную работу модели. Результаты тестов на базе модели LLaMA4 Maverick с восьмью ускорителями NVIDIA H100 в рамках TCP-сети подтвердили преимущества дезагрегации. При одинаковом размере батча конфигурация с одним prefill и одним decode узлом (1P1D) обеспечила более высокую пропускную способность. При равной нагрузке QPS дезагрегированная схема показала более стабильное и контролируемое время ответа между токенами, что критично для реального времени работы сервисов генеративного ИИ. Несмотря на это, при высоких нагрузках наблюдается некоторое увеличение временных задержек первого токена, что связано с ограничениями TCP-сети и большой нагрузкой на prefill сторону, исходя из текущего более длинного входа в сравнении с выходом.
Здесь в будущем планируется адаптивное регулирование соотношений prefill к decode, чтобы сбалансировать нагрузку и повысить эффективность. Будущие направления развития включают реализацию передачи только недостающих KV данных (cache-miss only KV-transfer), что потенциально снизит нагрузку на сеть и сделает отклик ещё плавнее. Также рассматривается перекрытие вычислений и коммуникаций на prefill узлах путём выполняемых параллельно операций сохранения кеша KV на отдельных CUDA стримах для снижения времени до первого токена. Комбинации дезагрегации с распределёнными методами параллелизма (Data Parallelism и Expert Parallelism) помогут масштабировать систему до многотысячных GPU кластеров, поддерживая оптимальный баланс между пропускной способностью и задержкой. Поддержка низкоуровневых сетевых протоколов, таких как RDMA, и аппаратных возможностей NVLink обещает дальнейшее уменьшение сетевых задержек и повышение эффективности передачи данных.
Оптимизации под новое поколения аппаратного обеспечения, включая NVIDIA H100 и последующее GB200, закрывают технологический цикл для высокопроизводительных сред генеративного ИИ. Направленная работа над расширением поддержки архитектур и интеграция с открытым исходным кодом vLLM и PyTorch сообщества значительно ускорит распространение и адаптацию данных наработок. В заключение, дезагрегированный инференс при помощи PyTorch и vLLM представляет собой инновационный подход к масштабированию работы с крупными языковыми моделями, обеспечивающий баланс высокой производительности, эффективности и гибкости. Совместные усилия Meta и сообщества vLLM формируют передовую платформу, которая постепенно станет стандартом для промышленного применения генеративного ИИ. Такой подход даёт возможность не только обрабатывать огромные объёмы запросов в реальном времени, но и развивать сложные агентные системы, пост-тренинг и другие востребованные направления искусственного интеллекта.
Для разработчиков и исследователей открывается огромный потенциал для создания новых продуктов и сервисов с применением передовых вычислительных архитектур, меняющих представления о том, как ЛЛМ могут масштабироваться и оптимизироваться в современных условиях. .