Двунаправленный обмен кэшем KV в vLLM ускоряет обработку многошаговых агентных задач
AWS Machine Learning · оригинал
Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Команда AWS представила механизм двунаправленной передачи кэша KV в фреймворке vLLM, который позволяет узлам префилла повторно использовать вычисленные данные узлов декодирования. Это снижает время до первого токена (TTFT) до 3,3 раз при работе с длинными контекстами в многоходовых диалогах.
Снижение латентности критически важно для масштабируемости агентных ИИ-систем, где накопление контекста традиционно приводит к росту вычислительной нагрузки и задержек.
В архитектуре раздельного обслуживания (Prefill-Decode disaggregation) запросы обрабатываются специализированными узлами: префилл-ноды вычисляют представления для новых токенов, а декод-ноды генерируют ответ. Традиционно кэш ключей и значений (KV cache) передается только в одну сторону — от префилла к декоду. Однако в многоходовых агентных сценариях, где история диалога постоянно растет, такая односторонняя схема создает неэффективность. После генерации ответа декод-нода сохраняет KV-блоки как для исходного промпта, так и для новых токенов. При следующем шаге префилл-нода не может получить эти данные и вынуждена заново вычислять KV-проекции для всей предыдущей истории, включая системные инструкции и результаты инструментов. Это приводит к избыточным вычислениям и увеличению времени до первого токена (TTFT), особенно по мере удлинения контекста.
Для решения этой проблемы команда AWS разработала механизм двунаправленной передачи KV-кэша в vLLM. Теперь декод-нода может возвращать ранее вычисленные KV-блоки префилл-ноде в последующих ходах диалога. Это позволяет избежать повторного вычисления общего контекста. Функциональность управляется настраиваемым порогом пересчета (kv_recompute_threshold), который определяет, когда выгоднее передать данные по сети, а когда быстрее вычислить их заново. По умолчанию этот порог составляет 64 токена: если количество переиспользуемых токенов ниже этого значения, префилл-нода выполняет локальный пересчет; если выше — инициирует асинхронное получение данных от декод-ноды.
Ключевым элементом архитектуры является роутер с поддержкой KV-кэша. Это легковесный компонент управления, который хранит в памяти метаданные расположения KV-блоков, привязанные к идентификатору разговора (conversation_id). Роутер не хранит сами тензоры, а получает метаданные из потока ответа декод-ноды. При первом ходе запроса происходит стандартная передача P→D, после чего роутер сохраняет метаданные. В последующих ходах он предоставляет эти данные префилл-ноде, позволяя ей переиспользовать кэш от декод-ноды. Для сохранения блоков на стороне декодера вводится параметр TTL (decoder_kv_blocks_ttl), по умолчанию равный 480 секундам. Это время можно настроить под ожидаемую частоту запросов, чтобы балансировать между повторным использованием кэша и потреблением памяти ускорителей.
Техническая реализация включает расширение коннектора NIXL (NVIDIA Inference Xfer Library), что позволяет префилл-нодам потреблять удаленные KV-блоки. Хотя архитектурные роли узлов различаются — префилл вычисляет полные представления, а декод работает с кэшированными блоками — механизм передачи (NIXL READ) является общим для обоих направлений. Это решение было первоначально разработано и проверено на кластерах AWS Trainium, но также эффективно работает на GPU-инстансах Amazon EC2 P5en, соединенных сетью AWS Elastic Fabric Adapter (EFA), которая поддерживает GPUDirect RDMA для прямого перемещения данных между памятью устройств.
Бенчмарки, проведенные на конфигурации 1P1D с использованием моделей Qwen3-32B и zai-org/GLM-5-FP8, демонстрируют значительный прирост производительности. При отключенной двунаправленной передаче TTFT для Qwen3-32B возрастает с 158 мс при длине промпта 2k до 778 мс при 24k. С включенной функцией этот показатель составляет лишь 122–460 мс, что дает сокращение латентности в 1,6 раза на длинных контекстах. Для более крупной модели GLM-5-FP8 эффект выражен еще сильнее: TTFT снижается с 2334 мс до 702 мс на максимальных длинах, что соответствует улучшению в 3,3 раза. Анализ показывает, что время передачи KV (около 30–130 мс) значительно меньше времени, которое экономится за счет отказа от пересчета.
Эти результаты подтверждают, что оптимизация обмена кэшем между узлами критически важна для поддержания отзывчивости агентных приложений. По мере роста моделей и длины контекстов стоимость повторного вычисления становится доминирующим фактором латентности. Внедрение двунаправленной передачи KV позволяет более эффективно использовать вычислительные мощности ускорителей, предотвращая деградацию производительности в длительных сессиях.