﻿# Разделение prefill и decode в vLLM: когда нужны отдельные пулы

Проверка отдельных воркеров prefill и decode: взаимное влияние фаз, передача KV, баланс реплик и полезные завершения при ограничениях задержки.

Автор: Команда Retrivium
Обновлено: 2026-11-03
Канонический URL: https://retrivium.ai/ru/journal/vllm-prefill-decode-disaggregation-architecture/
Language: ru

Prefill обрабатывает входной контекст, а decode генерирует следующие токены. Их профиль ресурсов и требования к пользовательской задержке различаются. Разнесение назначает фазы отдельным воркерам или пулам и переносит состояние между ними. Это способно уменьшить взаимное влияние, но одновременно создаёт границу передачи и дополнительную задачу балансировки ёмкости. Возможность запуска такой схемы ещё не доказывает её преимущество для конкретного сервиса.

## Найдите проблему общего воркера

Измерьте влияние новых длинных входов на уже декодируемые ответы. Сохраните в трассе длины входа, бюджеты вывода и время поступления. Разделение имеет смысл при существенном влиянии фаз, а не только потому, что модель умеет работать через распределённый коннектор.

[Работа DistServe](https://arxiv.org/abs/2401.09670) исследует связь разнесения фаз с обслуживанием запросов в пределах целевой задержки. Приведённые выигрыши относятся к её экспериментам. Это основание для собственной проверки, а не обещание производительности на другом оборудовании, сети и распределении запросов.

## Изучите выбранную интеграцию vLLM

Актуальное [руководство vLLM по disaggregated prefilling](https://docs.vllm.ai/en/latest/features/disagg_prefill/) помечает функцию экспериментальной. Выберите поддерживаемый коннектор и запишите релиз, архитектуру модели, топологию и поведение отказов. Схема из двух прямоугольников prefill и decode оставляет большинство эксплуатационных решений неопределёнными.

Проследите приём запроса, регистрацию KV-состояния и момент разрешённого старта декодирования. Учтите владение блоками при отмене клиентом во время передачи. Отключение клиента не должно оставлять состояние навсегда занятым в двух пулах, каждый из которых ожидает завершения очистки другой стороной.

## Заложите цену переноса состояния

Рассчитайте и измерьте передаваемое состояние по реальному контексту, точности и параллельной раскладке. Размер весов не равен объёму передачи каждого запроса. Длинный вход способен создать значительный KV-трафик даже при коротком генерируемом ответе.

[NIXL](https://github.com/ai-dynamo/nixl) — библиотека перемещения данных для некоторых интеграций. Она не устраняет задержку передачи и не делает все транспорты одинаково пригодными. Проверьте выбранный backend по фактическому пути устройств и узлов. Пропускная способность WAN и сетевые обходы требуют отдельного обоснования по сравнению с локальной кластерной фабрикой.

## Подберите соотношение пулов

Пул prefill может ограничивать систему при простаивающих GPU decode, и наоборот. Повторите всплески, спокойные периоды, короткие чаты и длинные документы. Меняйте долю ёмкости фаз, сохраняя прозрачный учёт всего оборудования и общей продолжительности эксперимента.

Сравните полезные завершения, первый токен, равномерность вывода и очереди передачи с общим воркером. Оставьте запас на переходные режимы и отказы. Если ускорился только отдельный prefill-тест, а запросов в пределах обоих ограничений стало меньше, сервис не получил необходимую пользователям ёмкость.

## Определите границу полезного разделения

Сохраняйте общий вариант, когда простота и локальность дают лучший итог для нагрузки. Разносите фазы, когда измеренное снижение влияния превышает цену передачи и координации на реалистичном трафике, включая хвостовые случаи.

Опишите допустимые группы оборудования и пределы контекста, не называя любой удалённый GPU частью единого тесно связанного исполнения. Архитектура должна показывать узлы с эффективным обменом состоянием и площадки, обслуживающие независимые запросы. Это особенно существенно для сети из ЦОД и небольших партнёрских площадок.

## Материалы по теме

[Prefill и decode: какую работу выполняет ваш GPU при инференсе](/ru/journal/llm-prefill-decode/), [PD disaggregation в SGLang: как отделить передачу KV от вычислений](/ru/journal/sglang-pd-kv-transfer-diagnosis/).
