Для чистой Markdown-версии этой страницы добавьте
.mdк этому URL. Полный индекс документации см. в https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. в https://docs.nvidia.com/dynamo/llms-full.txt.
Справочник DGDR
DynamoGraphDeploymentRequest (DGDR) — это API Dynamo с подходом deploy-by-intent.
Вы описываете, что хотите запустить, и свои целевые показатели производительности; profiler
определяет оптимальную конфигурацию и создает live deployment.
Пошаговое руководство по развертыванию модели — включая выбор стратегии, кеширование модели, настройку planner и типичные ошибки — см. в Руководстве по развертыванию модели.
DGDR против DGD
Dynamo предоставляет два Custom Resource для развертывания inference graphs:
| DGDR (рекомендуется) | DGD (вручную) | |
|---|---|---|
| Вы предоставляете | Модель + необязательные SLA-цели | Полный deployment spec (parallelism, replicas, resource limits и т. д.) |
| Профилирование | Автоматическое — перебирает конфигурации, чтобы найти оптимальную | Нет — вы приносите собственную конфигурацию |
| Переносимость по оборудованию | Адаптируется к любым GPU в вашем кластере | Привязан к hardware, для которого вы его настроили |
| Лучше всего подходит для | Большинства развертываний, оптимизации по SLA | Известно удачных конфигураций, закрепленных recipes |
Когда вместо этого использовать DGD: Используйте DGD, когда у вас есть вручную созданная конфигурация
для конкретной комбинации модели и hardware (например, из recipes/). Такие конфиги
могут быть более оптимальными для известных сценариев, но требуют понимания того, какие
параметры parallelism (TP, PP, EP) подходят, и не обобщаются на разное hardware.
Подробности развертывания DGD см. в Creating Deployments.
Справочник по spec
Минимальный пример
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: my-model
spec:
model: Qwen/Qwen3-0.6B
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Справочник по полям
| Поле | Обязательно | Значение по умолчанию | Назначение |
|---|---|---|---|
model | Да | — | Идентификатор модели HuggingFace (например, Qwen/Qwen3-0.6B) |
image | Нет | — | Контейнерный образ для profiling job. Для Dynamo >= 1.1.0 используйте dynamo-planner; для более ранних версий используйте dynamo-frontend. |
backend | Нет | auto | Inference engine: auto, vllm, sglang, trtllm |
searchStrategy | Нет | rapid | Глубина profiling: rapid (моделирование в стиле DynoSim на базе AIC, ~30s) или thorough (реальный GPU, 2–4h) |
autoApply | Нет | true | Автоматически разворачивать рекомендованную profiler конфигурацию |
sla.ttft | Нет | — | Целевое время до первого токена (мс) |
sla.itl | Нет | — | Целевая задержка между токенами (мс) |
sla.e2eLatency | Нет | — | Целевая сквозная задержка (мс). Нельзя сочетать с явными ttft/itl. |
workload.isl | Нет | 4000 | Ожидаемая средняя длина входной последовательности |
workload.osl | Нет | 1000 | Ожидаемая средняя длина выходной последовательности |
workload.requestRate | Нет | — | Целевая частота запросов в секунду |
workload.concurrency | Нет | — | Целевое число параллельных запросов |
hardware.gpuSku | Нет | auto-detected | GPU SKU (see SKU Format) |
hardware.vramMb | Нет | auto-detected | Объем VRAM GPU в МБ |
hardware.totalGpus | Нет | auto-detected (capped at 32) | Общее число GPU, доступных для deployment |
hardware.numGpusPerNode | Нет | auto-detected | Число GPU на узел |
hardware.interconnect | Нет | auto-detected | Тип interconnect |
hardware.rdma | Нет | auto-detected | Доступен ли RDMA |
modelCache.pvcName | Нет | — | Имя PVC ReadWriteMany, содержащего кешированные веса модели |
modelCache.pvcModelPath | Нет | — | Путь к каталогу модели внутри PVC |
modelCache.pvcMountPath | Нет | /opt/model-cache | Путь монтирования внутри контейнеров |
features.planner | Нет | disabled | Включить Planner, учитывающий SLA (raw JSON config) |
features.mocker | Нет | disabled | Включить режим mocker для тестирования |
overrides.profilingJob | Нет | — | Переопределения batchv1.JobSpec для profiling job (например, tolerations) |
overrides.dgd | Нет | — | Raw DGD override base, применяемое к сгенерированному deployment |
Полный CRD spec см. в API Reference.
Generated DGD Overrides
Используйте spec.overrides.dgd, когда сгенерированному DynamoGraphDeployment нужен
field, который DGDR не exposes directly. Значение — это частичный
объект DGD nvidia.com/v1alpha1, который merge'ится в deployment, сгенерированный
profiler, после того как Dynamo выберет конфигурацию.
Например, чтобы внедрить переменную окружения в каждый сгенерированный service:
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: qwen3-sglang
spec:
model: Qwen/Qwen3-30B-A3B
backend: sglang
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
overrides:
dgd:
apiVersion: nvidia.com/v1alpha1
kind: DynamoGraphDeployment
spec:
envs:
- name: TRITON_PTXAS_PATH
value: /usr/local/cuda/bin/ptxas
Используйте spec.envs для переменных, которые должны применяться ко всем сгенерированным service. Чтобы
нацелиться на один service, вместо этого переопределите запись envs этого service:
spec:
overrides:
dgd:
apiVersion: nvidia.com/v1alpha1
kind: DynamoGraphDeployment
spec:
services:
decode: # replace with the generated service name
envs:
- name: CUSTOM_WORKER_ENV
value: "enabled"
overrides.profilingJob только настраивает profiling Job. Используйте
overrides.dgd для параметров, которые должны присутствовать на развернутых worker pod.
SKU Format
При ручном указании конфигурации hardware используйте формат в нижнем регистре с подчеркиванием:
| Правильно | Неправильно |
|---|---|
h100_sxm | H100-SXM5-80GB |
h200_sxm | H200-SXM-141GB |
a100_sxm | A100-SXM4-80GB |
a30 | A30 |
l40s | L40S |
Все поддерживаемые значения: gb200_sxm, b200_sxm, h200_sxm, h100_sxm,
h100_pcie, a100_sxm, a100_pcie, a30, l40s, l40, l4,
v100_sxm, v100_pcie, t4, mi200, mi300.
Не все SKU поддерживаются AIC profiler в режиме rapid. Подробности см. в
Матрице поддержки AIC.
Варианты PCIe пока не поддерживаются profiler. CRD принимает PCIe SKU
(h100_pcie, a100_pcie, v100_pcie), но profiler пока не поставляется с
training data для них. Вы можете отправить DGDR со значением PCIe; operator
его примет, но sizing с помощью profiler перейдет на defaults. Поддержка
profiler для PCIe SKU отслеживается как engineering follow-up.
Жизненный цикл
После создания DGDR он проходит через такие фазы:
| Фаза | Что происходит |
|---|---|
Pending | spec проверен; operator обнаруживает GPU hardware и готовит profiling job |
Profiling | Profiling job выполняется — подфазы: Initializing, SweepingPrefill, SweepingDecode, SelectingConfig, BuildingCurves, GeneratingDGD, Done |
Ready | Profiling завершен; оптимальная конфигурация сохранена в .status.profilingResults.selectedConfig. Конечное состояние при autoApply: false. |
Deploying | Создается DynamoGraphDeployment (только при autoApply: true) |
Deployed | DGD запущен и находится в healthy состоянии |
Failed | Невосстановимая ошибка — сбои profiling не повторяются (backoffLimit: 0); подробности смотрите в events и conditions |
Conditions
Operator поддерживает следующие conditions в статусе DGDR:
| Condition | Значение |
|---|---|
Validation | Проверка spec прошла или не прошла |
Profiling | Profiling job выполняется, завершился успешно или с ошибкой |
SpecGenerated | Доступен сгенерированный DGD spec |
DeploymentReady | DGD развернут и healthy |
Succeeded | Сводное условие — true, когда DGDR достиг целевого состояния |
Мониторинг
# Следите за переходами фаз
kubectl get dgdr my-model -n $NAMESPACE -w
# Подробный статус, conditions и events
kubectl describe dgdr my-model -n $NAMESPACE
# Подфаза profiling
kubectl get dgdr my-model -n $NAMESPACE -o jsonpath='{.status.profilingPhase}'
# Логи profiling job
kubectl get pods -n $NAMESPACE -l nvidia.com/dgdr-name=my-model
kubectl logs -f <profiling-pod-name> -n $NAMESPACE
# Посмотреть сгенерированный DGD spec (когда autoApply: false)
kubectl get dgdr my-model -n $NAMESPACE \
-o jsonpath='{.status.profilingResults.selectedConfig}' | python3 -m json.tool
# Посмотреть Pareto-optimal конфигурации из profiling
kubectl get dgdr my-model -n $NAMESPACE \
-o jsonpath='{.status.profilingResults.pareto}'
Владение ресурсами
- DGDR не устанавливает owner reference на создаваемый DGD. Удаление DGDR не удаляет DGD — он остается независимым, чтобы продолжать обслуживать трафик.
- Связь отслеживается через labels:
dgdr.nvidia.com/nameиdgdr.nvidia.com/namespace. - Дополнительные ресурсы (planner ConfigMaps) создаются в том же namespace
и помечаются
dgdr.nvidia.com/name.
Известные проблемы
pareto_analysis.pyproduces NaN for some configurations. Отслеживается как engineering follow-up. Обходной путь: запустите снова с более узким sweep; узкие sweeps на практике обходят путь с NaN.- PCIe profiler data not yet available. См. примечание о PCIe в разделе SKU Format.
Дополнительные материалы
- Руководство по развертыванию модели — Как развернуть модель, выбор стратегии, ошибки, примеры
- Руководство по profiler — Алгоритмы profiling, выбор режимов, gate checks
- Примеры profiler — Готовый YAML для SLA-целей, private models, MoE, overrides
- Руководство по Planner — Режимы масштабирования, справочник PlannerConfig
- API Reference — Полные спецификации полей CRD
- Creating Deployments — DGD spec для полного ручного контроля