Чтобы получить чистое Markdown-содержимое этой страницы, добавьте .md к этому URL. Полный индекс документации см. на https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. на https://docs.nvidia.com/dynamo/llms-full.txt.
Архитектурный поток
Эта диаграмма показывает дезагрегированную систему инференса NVIDIA Dynamo. Потоки, выделенные разными цветами, обозначают разные типы операций.
🔵 Основной поток запроса (синий)
Основной путь пользователя через систему:
- Запрос (S1): HTTP-клиент отправляет API-запрос во Frontend (OpenAI-совместимый сервер на порту 8000)
- Предобработка (S2): Frontend предварительно обрабатывает запрос (применяет chat template, выполняет токенизацию) и валидирует его
- Маршрутизация к Prefill (S3): PrefillRouter выбирает prefill worker с помощью KV-aware routing или балансировки нагрузки
🟢 Поток prefill (зеленый)
Конвейер обработки prefill:
- Prefill (S4): Prefill worker выполняет вычисление prefill для входных токенов и создает KV cache
- Возврат метаданных (S5): Prefill worker возвращает
disaggregated_params, содержащие специфичные для backend метаданные передачи
🟠 Поток маршрутизации decode (оранжевый)
Оркестрация маршрутизатора для фазы decode:
- Маршрутизация к Decode (S6): PrefillRouter внедряет результат prefill в decode request и направляет его к decode worker
- Передача KV (S7): Decode worker координируется с prefill worker для прямой передачи KV cache между GPU через NIXL
🟣 Поток завершения (фиолетовый)
Генерация и доставка ответа:
- Decode (S8): Decode worker генерирует токены, используя переданный KV cache
- Ответ (S9): Сгенерированные токены потоково возвращаются через Frontend для постобработки (детокенизации) и доставки Client
🔗 Инфраструктурные соединения (пунктирные линии)
Поддержка координации и обмена сообщениями:
Обнаружение сервисов
- В Kubernetes (по умолчанию): использует нативные ресурсы K8s (DynamoWorkerMetadata CRD, EndpointSlices). etcd не требуется.
- На bare metal: использует etcd или файловую систему для обнаружения сервисов и регистрации endpoint.
Плоскость запросов
- TCP (по умолчанию): прямые TCP-соединения между Frontend и Workers для передачи запросов и ответов.
- HTTP/NATS: альтернативные транспорты, настраиваемые через
DYN_REQUEST_PLANE.
Соединения NATS (опционально, для KV routing)
- События KV: события состояния cache для KV-aware routing (можно отключить с помощью
--no-router-kv-events)
Соединения планирования (золотые, пунктирные)
- Frontend → Planner: сбор метрик для решений по auto-scaling
- Planner → Workers: команды масштабирования ресурсов для workers
Технические детали реализации
Оркестрация PrefillRouter:
PrefillRouterнаходится между Frontend и workers и оркестрирует дезагрегированное обслуживание- Выбирает prefill workers с помощью KV-aware routing (оценки перекрытия cache + нагрузка) или простой балансировки нагрузки
- Внедряет метаданные передачи в decode requests для координации KV cache
NIXL (NVIDIA Interchange Library):
- Обеспечивает высокоскоростную передачу данных между GPU с использованием NVLink, InfiniBand/UCX или PCIe
- Метаданные передачи передаются через
disaggregated_paramsв prefill response - Координация, специфичная для backend: SGLang использует bootstrap connections, TRTLLM использует opaque state, vLLM использует block IDs
Дезагрегированный KV Cache:
- Каждый worker поддерживает локальный KV cache в памяти своего GPU
- Нет узких мест общего хранилища: передача выполняется напрямую от worker к worker через NIXL
- Неблокирующие передачи позволяют продолжать forward passes на GPU во время передачи KV
%%{init: {'theme':'dark', 'themeVariables': {'primaryColor': '#f4f4f4', 'primaryTextColor': '#333333', 'primaryBorderColor': '#888888', 'lineColor': '#4A90E2', 'sectionBkgColor': '#f9f9f9', 'altSectionBkgColor': '#eeeeee', 'tertiaryColor': '#f0f0f0', 'background': '#ffffff', 'mainBkg': '#f8f8f8', 'secondaryColor': '#f4f4f4', 'nodeTextColor': '#333333'}, 'flowchart': {'htmlLabels': true, 'curve': 'basis'}, 'fontFamily': 'Inter, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif', 'fontSize': '18px'}%%
graph TD
%% Top Layer - Client & Frontend
Client["<b>HTTP Client</b>"]
Frontend["<b>Frontend</b><br/><i>OpenAI Compatible Server<br/>Port 8000</i>"]
S1[["<b>1 REQUEST</b>"]]
S2[["<b>2 PREPROCESS</b>"]]
%% Router Layer
PrefillRouter["<b>PrefillRouter</b><br/><i>Orchestrates Disaggregated Serving</i>"]
S3[["<b>3 ROUTE TO PREFILL</b>"]]
%% Infrastructure
subgraph INF["<b>Infrastructure Layer</b>"]
Discovery[("<b>Discovery</b><br/><i>Service Registry<br/>(ETCD or K8s)</i>")]
NATS[("<b>NATS</b><br/><i>KV Events<br/>(Optional)</i>")]
Planner["<b>Planner</b><br/><i>Auto-scaling</i>"]
end
%% Worker Layer
subgraph WL["<b>Worker Layer</b>"]
%% Prefill Worker
PrefillWorker["<b>Prefill Worker</b><br/><i>Computes KV Cache</i>"]
S4[["<b>4 PREFILL</b>"]]
S5[["<b>5 RETURN METADATA</b>"]]
%% Decode Worker
DecodeWorker["<b>Decode Worker</b><br/><i>Token Generation</i>"]
S6[["<b>6 ROUTE TO DECODE</b>"]]
S7[["<b>7 KV TRANSFER</b>"]]
S8[["<b>8 DECODE</b>"]]
S9[["<b>9 RESPONSE</b>"]]
%% KV Cache
PrefillKVCache[("<b>Prefill KV Cache</b><br/><i>GPU VRAM</i>")]
DecodeKVCache[("<b>Decode KV Cache</b><br/><i>GPU VRAM</i>")]
end
%% Main Request Flow (Blue)
Client --> S1
S1 -->|HTTP API Call| Frontend
Frontend --> S2
S2 -->|Tokenize & Validate| PrefillRouter
PrefillRouter --> S3
S3 -->|Select Prefill Worker| PrefillWorker
%% Prefill Flow (Green)
PrefillWorker --> S4
S4 -->|Compute KV Cache| PrefillKVCache
PrefillWorker --> S5
S5 -->|disaggregated_params| PrefillRouter
%% Decode Routing Flow (Orange)
PrefillRouter --> S6
S6 -->|Inject Transfer Metadata| DecodeWorker
DecodeWorker --> S7
S7 -->|NIXL GPU-to-GPU| PrefillKVCache
PrefillKVCache -.->|Direct Transfer| DecodeKVCache
%% Completion Flow (Purple)
DecodeWorker --> S8
S8 -->|Generate Tokens| DecodeKVCache
DecodeWorker --> S9
S9 -->|Stream Tokens| Frontend
Frontend -->|HTTP Response| Client
%% Infrastructure Connections
Frontend -.->|Service Discovery| Discovery
PrefillRouter -.->|Worker Discovery| Discovery
PrefillWorker -.->|Register| Discovery
DecodeWorker -.->|Register| Discovery
Planner -.->|Service Discovery| Discovery
%% NATS for KV events (optional)
PrefillWorker -.->|KV Events| NATS
DecodeWorker -.->|KV Events| NATS
%% Planning Connections
Frontend -.->|Metrics| Planner
Planner -.->|Auto-scaling| PrefillWorker
Planner -.->|Auto-scaling| DecodeWorker
%% Styling
classDef client fill:#e8f5e8,stroke:#2E7D32,stroke-width:3px
classDef frontend fill:#fff3e0,stroke:#F57C00,stroke-width:3px
classDef router fill:#f3e5f5,stroke:#7B1FA2,stroke-width:3px
classDef worker fill:#e3f2fd,stroke:#1565C0,stroke-width:3px
classDef prefillWorker fill:#e8f5e9,stroke:#388E3C,stroke-width:3px
classDef planner fill:#f1f8e9,stroke:#558B2F,stroke-width:3px
classDef storage fill:#e0f2f1,stroke:#00695C,stroke-width:3px
classDef discovery fill:#fff9c4,stroke:#F9A825,stroke-width:3px
classDef nats fill:#ede7f6,stroke:#5E35B1,stroke-width:3px
classDef infraLayer fill:#fff9c4,stroke:#FFC107,stroke-width:3px
classDef workerLayer fill:#e3f2fd,stroke:#2196F3,stroke-width:3px
class Client client
class Frontend frontend
class PrefillRouter router
class DecodeWorker worker
class PrefillWorker prefillWorker
class Planner planner
class PrefillKVCache,DecodeKVCache storage
class Discovery discovery
class NATS nats
class INF infraLayer
class WL workerLayer
%% Flow Colors
%% Main Request Flow - Blue
linkStyle 0,1,2,3,4,5 stroke:#1565C0,stroke-width:4px
%% Prefill Flow - Green
linkStyle 6,7,8,9 stroke:#2E7D32,stroke-width:4px
%% Decode Routing Flow - Orange
linkStyle 10,11,12,13,14 stroke:#E65100,stroke-width:4px
%% Completion Flow - Purple
linkStyle 15,16,17,18,19 stroke:#6A1B9A,stroke-width:4px
%% Infrastructure - Gray dotted
linkStyle 20,21,22,23,24,25,26,27,28,29 stroke:#757575,stroke-width:2px,stroke-dasharray: 8 8