Дезагрегированное обслуживание предварительного заполнения и декодирования
Обслуживающая архитектура, которая разделяет вывод большой языковой модели на две отдельные фазы — предварительное заполнение и декодирование — и запускает их на разных пулах графических процессоров.
Обзор
It matters because these two phases have opposite hardware appetites, and forcing them onto the same machines wastes capacity and hurts latency.
Глубокое погружение
Когда LLM отвечает, он работает в два этапа. Предварительное заполнение считывает все приглашение сразу и создает кеш ключ-значение (KV); это большой параллельный пакет, связанный с вычислениями, который насыщает математические блоки графического процессора. Затем Decode генерирует токены по одному, на каждом этапе считывая весь KV-кеш — небольшой поток вычислений, ограниченный пропускной способностью памяти. При совместном использовании длинное предварительное заполнение останавливает декодирование каждого (блокировка начала строки), а объединение этих двух данных в пакетное состояние создает помехи. При дезагрегации предварительное заполнение выполняется в одном пуле графических процессоров, а декодирование — в другом, передавая KV-кеш между ними через быстрые соединения, такие как NVLink или InfiniBand. Каждый пул настраивается и масштабируется независимо, что повышает производительность, сглаживает задержку и позволяет операторам одновременно достичь жестких целевых показателей по времени появления первого токена и времени на вывод каждого токена.
Техническая информация
Эти два этапа различаются по своим узким местам. Prefill обрабатывает все токены подсказок параллельно, поэтому его FLOP масштабируются в зависимости от длины подсказки и максимально задействуют тензорные ядра. Декодирование является авторегрессионным: каждому новому токену требуется один прямой проход, который перечитывает весь кэш KV из HBM, поэтому пропускная способность ограничивается пропускной способностью памяти, а не вычислениями. При дезагрегации это используется путем определения размера, пакетирования и даже выбора различного параллелизма для каждого пула, а затем доставки кэша KV от исполнителей предварительного заполнения к исполнителям декодирования.
Стратегическое воздействие
Стоимость и бюджет
Архитектурные решения влияют на производительность и эксплуатационные расходы на протяжении многих лет.
Более четкие решения
Техническое образование помогает командам выбрать правильный стек, а не только самый новый.
Контроль качества
Лучший инженерный выбор снижает вероятность возникновения проблем с надежностью на производстве.
Будущее дезагрегированного обслуживания предварительного заполнения и декодирования
Ожидайте, что дезагрегирование станет стандартным в производственных стеках. Такие системы, как DistServe, Splitwise и Mooncake, популяризировали его, а vLLM и NVIDIA Dynamo теперь предоставляют дезагрегированные режимы. Исследования продвигают оптимизацию передачи KV-кэша, объединение и повторное использование кеша между запросами, динамическую перебалансировку соотношений предварительного заполнения/декодирования при изменении трафика, а также более тесную интеграцию с кэшированием префиксов и фрагментированным предварительным заполнением. По мере того как контекстные окна разрастаются до миллионов токенов, разделение этих фаз становится все более важным для экономичного обслуживания с малой задержкой.
Реальная реализация
Чат-помощник направляет длинные запросы к документам в ресурсоемкий кластер предварительного заполнения, а затем передает ответы из оптимизированного для памяти кластера декодирования, чтобы обеспечить плавную задержку при вводе.
NVIDIA Dynamo и vLLM позволяют операторам развертывать отдельные рабочие группы предварительного заполнения и декодирования, чтобы поток длинных запросов не останавливал текущие поколения.
Mooncake (используемый Кими из Moonshot AI) дезагрегирует предварительное заполнение и декодирование и добавляет распределенный пул KV-кэша, чтобы сократить избыточные повторные вычисления подсказок в масштабе.
Служба завершения кода выделяет небольшой пул предварительного заполнения для коротких подсказок и большой пул декодирования, поскольку большая часть затрат связана с потоковой передачей большого количества выходных токенов.
Риски и ограничения
Оптимизация одного теста может скрыть более широкие недостатки системы.
Затраты на инфраструктуру и техническое обслуживание часто недооцениваются.
Пробелы в безопасности и наблюдаемости могут увеличиваться по мере усложнения систем.
Дорожная карта реализации
Определите целевые показатели задержки, качества и стоимости перед внедрением.
Тестирование при реалистичной нагрузке и условиях данных.
Мониторинг прибора на наличие ошибок, дрейфа и влияния пользователя.
Перед масштабированием подготовьте пути отката и реагирования на инциденты.
Продолжайте исследовать
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Disaggregated Prefill and Decode Serving quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
Следующее руководство
KServe и обслуживание моделей в Kubernetes
Часто задаваемые вопросы
What is Disaggregated Prefill and Decode Serving?
Обслуживающая архитектура, которая разделяет вывод большой языковой модели на две отдельные фазы — предварительное заполнение и декодирование — и запускает их на разных пулах графических процессоров. Это важно, потому что эти две фазы имеют противоположные аппаратные потребности, и их принудительное использование на одних и тех же машинах приводит к потере мощности и увеличению задержек.
Какова основная аппаратная причина разделения предварительного заполнения и декодирования на разные пулы графических процессоров?
Предварительное заполнение обрабатывает всю подсказку параллельно и насыщает вычислительные ресурсы, в то время как декодирование считывает KV-кэш на каждом этапе и ограничивается пропускной способностью памяти — противоположные аппетиты, которые оправдывают отдельные, независимо настраиваемые пулы.
Какую структуру данных необходимо передать из воркеров prefill в воркеры декодирования?
Предварительное заполнение создает кэш KV для приглашения; decode необходим этот кеш для продолжения генерации, поэтому кеш передается по быстрому соединению с пулом декодирования.
Какую проблему конкретно решает дезагрегация при настройке общего графического процессора?
На общих графических процессорах длинный пакет предварительного заполнения может блокировать текущие этапы декодирования; их разделение предотвращает эти помехи и стабилизирует задержку хвоста.
Почему предварительное заполнение может быть агрессивно пакетным, но декодирование получает преимущества от другой настройки?
Предварительное заполнение обрабатывает все токены приглашений вместе, поэтому большие пакеты хорошо загружают тензорные ядра; decode генерирует по одному токену за раз и ограничивается памятью, поэтому масштабируется по-разному.
Какие межсоединения обычно используются для перемещения кэша KV между дезагрегированными пулами?
Чтобы передача KV-кэша не стала новым узким местом, необходимы каналы с высокой пропускной способностью и низкой задержкой, такие как NVLink (внутриузловые) и InfiniBand (межузловые).