llm-d: как KV-cache стал состоянием всего кластера (Рубрика #AI)
У архитектурных идей бывает два дня рождения: сначала paper показывает, что приём работает, потом кто-то превращает его в систему, которую можно развернуть и сопровождать. Доклад Cong Liu из Google и Maroon Ayoub, работавшего тогда в IBM Research, на PyTorch Conference 2025 — как раз про второй случай. llm-d не изобрёл Prefill/Decode disaggregation. Он пытается сделать из исследовательского паттерна управляемый production stack. Слайды доклада здесь
Это продолжение истории PagedAttention и vLLM, где KV-cache перестал требовать непрерывного куска памяти внутри одного inference engine. Здесь меняется уже единица оптимизации: prefill, decode и сам KV-cache становятся ресурсами всего кластера.
- Prefill обрабатывает prompt целиком, строит KV-cache, упирается прежде всего в вычисления и определяет time to first token
- Decode выпускает токены последовательно, сильнее зависит от пропускной способности памяти и определяет задержку между токенами
- В одном сервере тяжёлый prefill мешает равномерному decode, а обе фазы получают одну конфигурацию железа и parallelism.
llm-d разносит их по разным пулам
- Scheduler выбирает decode worker с учётом prefix cache, занятой памяти и очереди
- Если незакэшированной работы много, отдельно выбирает prefill worker
- Sidecar отправляет туда запрос с max_tokens=1, после чего decode worker забирает рассчитанный KV-cache через NIXL и продолжает генерацию
- Получается интересный сдвиг: маршрутизируется уже не только HTTP-запрос, но и вычисленное состояние модели.
В собственном benchmark команда сравнила одинаковые 16 H200 с InfiniBand: четыре монолитных TP4-реплики против четырёх prefill TP2 и двух decode TP4 на Llama-4 Scout с 5000 входных и 250 выходных токенов. По данным проекта, P/D-вариант дал заметно больше throughput на GPU в средней зоне нагрузки, особенно при 64–128 одновременных запросах. На низкой и предельной нагрузке кривые сближались — универсального множителя здесь нет.
История развивалась так:
- в 2023 году PagedAttention сделал KV-cache эффективнее внутри одного движка;
- в 2024-м Splitwise и DistServe показали, зачем физически разделять prefill и decode, а Mooncake — как строить вокруг KV-cache распределённую архитектуру;
- 20 мая 2025 года запустили llm-d, а в июле v0.2 принесла первые воспроизводимые well-lit paths для P/D, cache-aware routing и wide expert parallelism;
- Доклад 23 октября 2025 года зафиксировал раннюю рабочую систему, где главный вопрос был уже не «можно ли разделить фазы», а «как выбрать P, D и безопасно передать состояние»;
- в 2026-м llm-d вошёл в CNCF Sandbox, вышел за границы обязательного Kubernetes и в v0.8 прямо назвал себя inference control plane. Обещанное в докладе P2P-переиспользование KV-cache стало отдельным well-lit path 15 августа, а 17 августа вышла v0.9.
Самая важная оговорка прозвучала у самих спикеров: P/D подходит не каждому workload. Они советуют начинать эксперименты с моделей порядка 70B+, длинных контекстов вроде 10k input / 1k output и sparse MoE. Текущая документация vLLM всё ещё называет disaggregated prefilling экспериментальной возможностью и прямо предупреждает: само разделение throughput не повышает. Оно позволяет независимо настраивать TTFT и inter-token latency; итоговый выигрыш даёт только вся конфигурация — topology, router, workload и достаточно быстрая сеть.
Поэтому начинать стоитс профиля нагрузки: распределения input/output tokens, concurrency, SLO по TTFT и задержке между токенами, стоимости KV-transfer. Без этих чисел P/D disaggregation может оказаться как хорошей системной оптимизацией, так и дорогим способом отправить несколько гигабайт кэша по сети и вернуть их почти туда же.
#AI #Engineering #Architecture #Software #DistributedSystems #PlatformEngineering
У архитектурных идей бывает два дня рождения: сначала paper показывает, что приём работает, потом кто-то превращает его в систему, которую можно развернуть и сопровождать. Доклад Cong Liu из Google и Maroon Ayoub, работавшего тогда в IBM Research, на PyTorch Conference 2025 — как раз про второй случай. llm-d не изобрёл Prefill/Decode disaggregation. Он пытается сделать из исследовательского паттерна управляемый production stack. Слайды доклада здесь
Это продолжение истории PagedAttention и vLLM, где KV-cache перестал требовать непрерывного куска памяти внутри одного inference engine. Здесь меняется уже единица оптимизации: prefill, decode и сам KV-cache становятся ресурсами всего кластера.
- Prefill обрабатывает prompt целиком, строит KV-cache, упирается прежде всего в вычисления и определяет time to first token
- Decode выпускает токены последовательно, сильнее зависит от пропускной способности памяти и определяет задержку между токенами
- В одном сервере тяжёлый prefill мешает равномерному decode, а обе фазы получают одну конфигурацию железа и parallelism.
llm-d разносит их по разным пулам
- Scheduler выбирает decode worker с учётом prefix cache, занятой памяти и очереди
- Если незакэшированной работы много, отдельно выбирает prefill worker
- Sidecar отправляет туда запрос с max_tokens=1, после чего decode worker забирает рассчитанный KV-cache через NIXL и продолжает генерацию
- Получается интересный сдвиг: маршрутизируется уже не только HTTP-запрос, но и вычисленное состояние модели.
В собственном benchmark команда сравнила одинаковые 16 H200 с InfiniBand: четыре монолитных TP4-реплики против четырёх prefill TP2 и двух decode TP4 на Llama-4 Scout с 5000 входных и 250 выходных токенов. По данным проекта, P/D-вариант дал заметно больше throughput на GPU в средней зоне нагрузки, особенно при 64–128 одновременных запросах. На низкой и предельной нагрузке кривые сближались — универсального множителя здесь нет.
История развивалась так:
- в 2023 году PagedAttention сделал KV-cache эффективнее внутри одного движка;
- в 2024-м Splitwise и DistServe показали, зачем физически разделять prefill и decode, а Mooncake — как строить вокруг KV-cache распределённую архитектуру;
- 20 мая 2025 года запустили llm-d, а в июле v0.2 принесла первые воспроизводимые well-lit paths для P/D, cache-aware routing и wide expert parallelism;
- Доклад 23 октября 2025 года зафиксировал раннюю рабочую систему, где главный вопрос был уже не «можно ли разделить фазы», а «как выбрать P, D и безопасно передать состояние»;
- в 2026-м llm-d вошёл в CNCF Sandbox, вышел за границы обязательного Kubernetes и в v0.8 прямо назвал себя inference control plane. Обещанное в докладе P2P-переиспользование KV-cache стало отдельным well-lit path 15 августа, а 17 августа вышла v0.9.
Самая важная оговорка прозвучала у самих спикеров: P/D подходит не каждому workload. Они советуют начинать эксперименты с моделей порядка 70B+, длинных контекстов вроде 10k input / 1k output и sparse MoE. Текущая документация vLLM всё ещё называет disaggregated prefilling экспериментальной возможностью и прямо предупреждает: само разделение throughput не повышает. Оно позволяет независимо настраивать TTFT и inter-token latency; итоговый выигрыш даёт только вся конфигурация — topology, router, workload и достаточно быстрая сеть.
Поэтому начинать стоитс профиля нагрузки: распределения input/output tokens, concurrency, SLO по TTFT и задержке между токенами, стоимости KV-transfer. Без этих чисел P/D disaggregation может оказаться как хорошей системной оптимизацией, так и дорогим способом отправить несколько гигабайт кэша по сети и вернуть их почти туда же.
#AI #Engineering #Architecture #Software #DistributedSystems #PlatformEngineering