ДалееСледующее руководство
KServe и обслуживание моделей в Kubernetes
Технический
Техническое РУКОВОДСТВО
Обслуживающая архитектура, которая разделяет вывод большой языковой модели на две отдельные фазы — предварительное заполнение и декодирование — и запускает их на разных пулах графических процессоров.
Прослушайте это руководствоОзвучено ИИ · ~2 min
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. Каждый пул настраивается и масштабируется независимо, что повышает производительность, сглаживает задержку и позволяет операторам одновременно достичь жестких целевых показателей по времени появления первого токена и времени на вывод каждого токена.
Чат-помощник направляет длинные запросы к документам в ресурсоемкий кластер предварительного заполнения, а затем передает ответы из оптимизированного для памяти кластера декодирования, чтобы обеспечить плавную задержку при вводе.
NVIDIA Dynamo и vLLM позволяют операторам развертывать отдельные рабочие группы предварительного заполнения и декодирования, чтобы поток длинных запросов не останавливал текущие поколения.
Mooncake (используемый Кими из Moonshot AI) дезагрегирует предварительное заполнение и декодирование и добавляет распределенный пул KV-кэша, чтобы сократить избыточные повторные вычисления подсказок в масштабе.
Служба завершения кода выделяет небольшой пул предварительного заполнения для коротких подсказок и большой пул декодирования, поскольку большая часть затрат связана с потоковой передачей большого количества выходных токенов.
Ожидайте, что дезагрегирование станет стандартным в производственных стеках. Такие системы, как DistServe, Splitwise и Mooncake, популяризировали его, а vLLM и NVIDIA Dynamo теперь предоставляют дезагрегированные режимы. Исследования продвигают оптимизацию передачи KV-кэша, объединение и повторное использование кеша между запросами, динамическую перебалансировку соотношений предварительного заполнения/декодирования при изменении трафика, а также более тесную интеграцию с кэшированием префиксов и фрагментированным предварительным заполнением. По мере того как контекстные окна разрастаются до миллионов токенов, разделение этих фаз становится все более важным для экономичного обслуживания с малой задержкой.
Бесплатная рассылка
Три проверенных AI-истории каждое утро буднего дня, написанные простым английским. Бесплатно навсегда, без рекламы.
Одно электронное письмо каждый будний день. Отписаться в один клик. Мы никогда не продаем и не передаем ваш адрес.
Проверьте себя
Мгновенная обратная связь по каждому ответу и общий сертификат с проверяемым идентификатором после прохождения курса.
Поддержите бесплатное образование в области искусственного интеллекта. AI Understanding — это некоммерческая организация 501(c)(3). Никакой рекламы и платного доступа. Сделать пожертвование
Обслуживающая архитектура, которая разделяет вывод большой языковой модели на две отдельные фазы — предварительное заполнение и декодирование — и запускает их на разных пулах графических процессоров. Это важно, потому что эти две фазы имеют противоположные аппаратные потребности, и их принудительное использование на одних и тех же машинах приводит к потере мощности и увеличению задержек.
Предварительное заполнение обрабатывает всю подсказку параллельно и насыщает вычислительные ресурсы, в то время как декодирование считывает KV-кэш на каждом этапе и ограничивается пропускной способностью памяти — противоположные аппетиты, которые оправдывают отдельные, независимо настраиваемые пулы.
Предварительное заполнение создает кэш KV для приглашения; decode необходим этот кеш для продолжения генерации, поэтому кеш передается по быстрому соединению с пулом декодирования.
На общих графических процессорах длинный пакет предварительного заполнения может блокировать текущие этапы декодирования; их разделение предотвращает эти помехи и стабилизирует задержку хвоста.
Предварительное заполнение обрабатывает все токены приглашений вместе, поэтому большие пакеты хорошо загружают тензорные ядра; decode генерирует по одному токену за раз и ограничивается памятью, поэтому масштабируется по-разному.
Чтобы передача KV-кэша не стала новым узким местом, необходимы каналы с высокой пропускной способностью и низкой задержкой, такие как NVLink (внутриузловые) и InfiniBand (межузловые).
Продолжайте учиться
Другие руководства, выбранные по этой теме
ДалееСледующее руководство
KServe и обслуживание моделей в Kubernetes
Технический