Чтобы получить чистый Markdown-контент этой страницы, добавьте
.mdк этому URL. Полный индекс документации см. по адресу https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая API reference и примеры SDK, доступно по адресу https://docs.nvidia.com/dynamo/llms-full.txt.
Дисагрегированное обслуживание
Фазы prefill и decode в запросах LLM отличаются по характеру вычислений и по потреблению памяти. Разделение этих фаз между специализированными llm engines позволяет лучше распределять аппаратные ресурсы, повышать масштабируемость и в целом улучшать производительность. Например, использование большего TP для memory-bound decoding phase и меньшего TP для computation-bound prefill phase позволяет эффективно вычислять обе фазы. Кроме того, для запросов с длинным контекстом выделение prefill phase в отдельные prefill engines позволяет эффективно обрабатывать текущие decoding requests, не блокируя их длинными prefill.
Disaggregated execution request состоит из трех основных шагов:
- Prefill engine вычисляет prefill phase и генерирует KV cache
- Prefill engine передает KV cache в decode engine
- Decode engine вычисляет decode phase.
Дизайн disaggregation в Dynamo использует гибкий framework, который обеспечивает высокую производительность в различных условиях.
Эффективная передача KV
Ключ к высокопроизводительной disaggregation - эффективная передача KV. Dynamo использует NIXL, чтобы передавать KV cache напрямую из VRAM prefill engine в VRAM decode engine. Передача KV не блокирует выполнение, поэтому GPU forward pass может продолжать обслуживать другие requests во время transfer.
Оркестрация Router
Поток disaggregated serving orchestrates PrefillRouter:
sequenceDiagram
participant Client
participant Frontend
participant Router as PrefillRouter
participant Prefill as Prefill Worker
participant Decode as Decode Worker
Client->>Frontend: Request
Frontend->>Router: Preprocessed Request
Router->>Router: Select prefill worker
Router->>Prefill: Prefill request
Prefill->>Prefill: Compute KV cache
Prefill-->>Router: disaggregated_params
Router->>Router: Select decode worker
Router->>Decode: Decode request + transfer metadata
Decode<<->>Prefill: KV transfer (NIXL)
Decode->>Decode: Generate tokens
Decode-->>Frontend: Stream tokens
Frontend-->>Client: Response
-
Выбор worker: router выбирает prefill worker с помощью KV-aware routing (по score перекрытия cache и нагрузке) либо простого балансирования нагрузки.
-
Выполнение prefill: router отправляет prefill request выбранному prefill worker. Prefill worker вычисляет KV cache и возвращает
disaggregated_params, содержащий metadata transfer, специфичную для backend. -
Routing decode: router внедряет результат prefill в decode request, затем направляет его decode worker.
-
Передача KV: decode worker использует metadata transfer, чтобы координировать действия с prefill worker. NIXL выполняет прямую GPU-to-GPU передачу с помощью оптимального доступного transport (NVLink, InfiniBand/UCX и т. д.).
Передача metadata, специфичная для backend
Формат metadata transfer зависит от backend:
-
SGLang: использует
bootstrap_info(host, port, room_id) для RDMA bootstrap coordination. Prefill workers SGLang публикуют свой bootstrap endpoint в discovery service во время инициализации. Благодаря этому prefill может выполняться как фоновая задача, а decode phase может начинаться сразу, пока KV transfer идет параллельно. -
vLLM: использует
kv_transfer_params, содержащий block ID и информацию о подключении к remote worker. Prefill выполняется синхронно; decode ждет завершения prefill, прежде чем продолжить. -
TRTLLM: использует
opaque_state, содержащий сериализованную внутреннюю metadata TRT-LLM. Prefill выполняется синхронно; decode ждет завершения prefill, прежде чем продолжить.
Перенастраиваемый на лету xPyD
Dynamo disaggregation design поддерживает runtime-reconfigurable xPyD (x prefill workers, y decode workers). Workers можно добавлять и удалять во время работы:
- Добавить worker: worker регистрируется в discovery service и публикует свой
RuntimeConfig(включая KV capacity). - Удалить worker: worker завершает active requests и снимается с регистрации в discovery.
Router автоматически обнаруживает новых workers через discovery service и учитывает их при принятии routing decisions.