Перейти к основному содержимому
  1. Теория на русском языке/
  2. Оптимизация инференса LLM/

Дисагрегация prefill и decode

·380 слов·2 минут
Оглавление

Чтобы понять, что такое дисагрегация prefill-decode (PD), напомним, как устроен инференс LLM в двух фазах:

  • Prefill: обрабатывает всю последовательность сразу и сохраняет ключи и значения (KV) из attention-слоёв в KV-кэш. Поскольку обрабатываются все токены разом, prefill нагружает вычисления, но не сильно требует памяти GPU.
  • Decode: генерирует выходные токены по одному, используя ранее построенный KV-кэш. В отличие от prefill, decode требует быстрой памяти, но меньше вычислений.
llm-inference-flow.png

Долгое время стандартный инференс выполнял эти две фазы вместе. На первый взгляд, это просто.

На практике часто бывает много параллельных запросов. У каждого — свои prefill и decode, но одновременно может идти только одна фаза. Если GPU занят тяжёлым prefill, decode ждёт (и наоборот), что увеличивает ITL.

Поскольку prefill определяет TTFT, а decode влияет на ITL, совмещение их мешает оптимизировать обе метрики одновременно.

pd-disaggregation-results.png
Рост задержки при совмещении prefill и decode. Источник

Зачем нужна дисагрегация
#

Суть PD-дисагрегации проста: разделить две разные задачи, чтобы они не мешали друг другу. Ключевые плюсы:

  • Выделение ресурсов: prefill и decode можно планировать и масштабировать независимо, даже на разном железе. Например, если у вас много перекрывающихся промптов (мульти-туровые диалоги, агентные пайплайны), большая часть KV-кэша переиспользуется. Тогда вычислений на prefill нужно меньше, а decode можно выделить больше ресурсов.
  • Параллельное выполнение: prefill и decode больше не мешают друг другу. Их можно запускать параллельно, что даёт выше параллелизм и throughput.
  • Независимая оптимизация: можно применять разные техники оптимизации (tensor/pipeline parallelism) для prefill и decode, чтобы лучше достигать целей по TTFT и ITL.

Ряд open-source фреймворков и проектов уже исследуют PD-дисагрегацию: SGLang, vLLM, Dynamo, llm-d.

Дисагрегация — не всегда серебряная пуля
#

Несмотря на плюсы, PD-дисагрегация — не универсальное решение.

  • Порог важен: если нагрузка слишком мала или GPU не настроены под этот подход, производительность может даже упасть (в тестах — на 20–30%).
  • Локальный prefill может быть быстрее: для коротких промптов или при высоком hit rate кэша на decode-воркере проще и быстрее делать prefill локально.
  • Стоимость передачи данных: дисагрегация требует быстрой и надёжной передачи KV-кэшей между prefill- и decode-воркерами. Нужно поддерживать быстрые, низколатентные протоколы, независимые от железа и сети. Если выигрыш от дисагрегации меньше, чем издержки на передачу данных, итоговая производительность может даже снизиться. Примеры решений: NVIDIA Inference Xfer Library (NIXL), CXL, NVMe-oF.

Дополнительные ресурсы
#