В этом материале
Проверка отдельных воркеров prefill и decode: взаимное влияние фаз, передача KV, баланс реплик и полезные завершения при ограничениях задержки.
Prefill обрабатывает входной контекст, а decode генерирует следующие токены. Их профиль ресурсов и требования к пользовательской задержке различаются. Разнесение назначает фазы отдельным воркерам или пулам и переносит состояние между ними. Это способно уменьшить взаимное влияние, но одновременно создаёт границу передачи и дополнительную задачу балансировки ёмкости. Возможность запуска такой схемы ещё не доказывает её преимущество для конкретного сервиса.
Найдите проблему общего воркера
Измерьте влияние новых длинных входов на уже декодируемые ответы. Сохраните в трассе длины входа, бюджеты вывода и время поступления. Разделение имеет смысл при существенном влиянии фаз, а не только потому, что модель умеет работать через распределённый коннектор.
Работа DistServe исследует связь разнесения фаз с обслуживанием запросов в пределах целевой задержки. Приведённые выигрыши относятся к её экспериментам. Это основание для собственной проверки, а не обещание производительности на другом оборудовании, сети и распределении запросов.
Изучите выбранную интеграцию vLLM
Актуальное руководство vLLM по disaggregated prefilling помечает функцию экспериментальной. Выберите поддерживаемый коннектор и запишите релиз, архитектуру модели, топологию и поведение отказов. Схема из двух прямоугольников prefill и decode оставляет большинство эксплуатационных решений неопределёнными.
Проследите приём запроса, регистрацию KV-состояния и момент разрешённого старта декодирования. Учтите владение блоками при отмене клиентом во время передачи. Отключение клиента не должно оставлять состояние навсегда занятым в двух пулах, каждый из которых ожидает завершения очистки другой стороной.
Заложите цену переноса состояния
Рассчитайте и измерьте передаваемое состояние по реальному контексту, точности и параллельной раскладке. Размер весов не равен объёму передачи каждого запроса. Длинный вход способен создать значительный KV-трафик даже при коротком генерируемом ответе.
NIXL — библиотека перемещения данных для некоторых интеграций. Она не устраняет задержку передачи и не делает все транспорты одинаково пригодными. Проверьте выбранный backend по фактическому пути устройств и узлов. Пропускная способность WAN и сетевые обходы требуют отдельного обоснования по сравнению с локальной кластерной фабрикой.
Подберите соотношение пулов
Пул prefill может ограничивать систему при простаивающих GPU decode, и наоборот. Повторите всплески, спокойные периоды, короткие чаты и длинные документы. Меняйте долю ёмкости фаз, сохраняя прозрачный учёт всего оборудования и общей продолжительности эксперимента.
Сравните полезные завершения, первый токен, равномерность вывода и очереди передачи с общим воркером. Оставьте запас на переходные режимы и отказы. Если ускорился только отдельный prefill-тест, а запросов в пределах обоих ограничений стало меньше, сервис не получил необходимую пользователям ёмкость.
Определите границу полезного разделения
Сохраняйте общий вариант, когда простота и локальность дают лучший итог для нагрузки. Разносите фазы, когда измеренное снижение влияния превышает цену передачи и координации на реалистичном трафике, включая хвостовые случаи.
Опишите допустимые группы оборудования и пределы контекста, не называя любой удалённый GPU частью единого тесно связанного исполнения. Архитектура должна показывать узлы с эффективным обменом состоянием и площадки, обслуживающие независимые запросы. Это особенно существенно для сети из ЦОД и небольших партнёрских площадок.
Материалы по теме
Prefill и decode: какую работу выполняет ваш GPU при инференсе, PD disaggregation в SGLang: как отделить передачу KV от вычислений.