Чтобы получить чистое Markdown-содержимое этой страницы, добавьте .md к этому URL. Полный индекс документации см. на https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. на https://docs.nvidia.com/dynamo/llms-full.txt.
Примеры Planner
Практические примеры развертывания Planner с масштабированием на основе пропускной способности. Все примеры ниже используют рабочий процесс DGDR с профилированием перед развертыванием. Концепции развертывания см. в руководстве по Planner. Краткий обзор см. в README Planner.
Базовые примеры
Минимальный DGDR с AIC (самый быстрый вариант)
Самый простой способ развертывания с Planner. Использует AI Configurator для offline-профилирования (20-30 секунд вместо нескольких часов):
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: sla-aic
spec:
model: Qwen/Qwen3-32B
backend: vllm
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Разверните:
export NAMESPACE=your-namespace
# Save the manifest above as sla-aic.yaml first.
kubectl apply -f sla-aic.yaml -n $NAMESPACE
Online-профилирование (реальные измерения)
Стандартное online-профилирование выполняет реальные измерения на GPU для более точных результатов. Занимает 2-4 часа:
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: sla-online
spec:
model: meta-llama/Llama-3.3-70B-Instruct
backend: vllm
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Разверните:
# Save the manifest above as sla-online.yaml first.
kubectl apply -f sla-online.yaml -n $NAMESPACE
Примечание: Начиная с Dynamo 1.0.0 (версия DGDR API v1beta1), поля DGDR используют структурированные поля спецификации (например,
spec.workload,spec.sla,spec.hardware) вместо вложенного блокаprofilingConfig.config, который использовался в v1alpha1.
Примеры Kubernetes
Модели MoE (SGLang)
Для моделей Mixture-of-Experts, таких как DeepSeek-R1, используйте backend SGLang:
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: sla-moe
spec:
model: deepseek-ai/DeepSeek-R1
backend: sglang
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Разверните:
# Save the manifest above as sla-moe.yaml first.
kubectl apply -f sla-moe.yaml -n $NAMESPACE
Использование существующих конфигураций DGD (пользовательские настройки)
Сошлитесь на существующую конфигурацию DynamoGraphDeployment через ConfigMap:
Шаг 1: создайте ConfigMap из вашей конфигурации DGD:
kubectl create configmap deepseek-r1-config \
--from-file=disagg.yaml=/path/to/your/disagg.yaml \
--namespace $NAMESPACE \
--dry-run=client -o yaml | kubectl apply -f -
Шаг 2: сошлитесь на него в вашем DGDR:
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
name: deepseek-r1
spec:
model: deepseek-ai/DeepSeek-R1
backend: sglang
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Профилировщик использует конфигурацию DGD из ConfigMap как базовый шаблон, а затем оптимизирует ее на основе ваших целевых показателей SLA. Контроллер автоматически добавляет spec.model и spec.backend в итоговую конфигурацию.
Встроенная конфигурация (простые сценарии)
Для простых сценариев без пользовательской конфигурации DGD укажите конфигурацию напрямую в полях спецификации DGDR v1beta1. Профилировщик автоматически генерирует базовую конфигурацию DGD:
spec:
workload:
isl: 8000
osl: 200
sla:
ttft: 200.0
itl: 10.0
hardware:
gpuSku: h200_sxm
searchStrategy: rapid
Симуляция с Mocker
Разверните backend mocker, который имитирует временное поведение GPU без реальных GPU. Полезно для:
- Крупномасштабных экспериментов без ресурсов GPU
- Тестирования поведения planner и инфраструктуры
- Проверки конфигураций развертывания
spec:
model: <model-name>
backend: trtllm # Real backend for profiling
features:
mocker:
enabled: true # Deploy mocker instead of real backend
image: "nvcr.io/nvidia/ai-dynamo/dynamo-planner:1.2.0" # dynamo-frontend for Dynamo < 1.1.0
Профилирование выполняется с реальным backend (через GPU или AIC). Затем развертывание mocker использует данные профилирования для имитации реалистичных временных характеристик.
Model Cache PVC (0.8.1+)
Для крупных моделей используйте заранее заполненный PVC вместо загрузки из HuggingFace:
Подробности конфигурации см. в разделе профилирование на основе SLA.
Расширенные примеры
Пользовательские предикторы нагрузки
Теплый старт с данными трассировки
Предварительно загрузите предикторы историческими шаблонами запросов до поступления live-трафика:
# In planner arguments
args:
- --load-predictor arima
- --load-predictor-warmup-trace /data/trace.jsonl
- --load-predictor-log1p
Файл трассировки должен быть в JSONL-формате в стиле mooncake, с образцами request-count, ISL и OSL.
Настройка фильтра Калмана
Для нагрузок с быстрыми изменениями настройте фильтр Калмана:
args:
- --load-predictor kalman
- --kalman-q-level 2.0 # Higher = more responsive to level changes
- --kalman-q-trend 0.5 # Higher = trend changes faster
- --kalman-r 5.0 # Lower = trusts new measurements more
- --kalman-min-points 3 # Fewer points before forecasting starts
- --load-predictor-log1p # Often helps with request-rate series
Prophet для сезонных нагрузок
Для нагрузок с суточными или недельными паттернами:
args:
- --load-predictor prophet
- --prophet-window-size 100 # Larger window for seasonal detection
- --load-predictor-log1p
Virtual Connector
Для сред без Kubernetes используйте VirtualConnector для передачи решений о масштабировании:
from dynamo._core import DistributedRuntime, VirtualConnectorClient
# Initialize client
client = VirtualConnectorClient(distributed_runtime, namespace)
# Main loop: watch for planner decisions and execute them
while True:
# Block until the planner makes a new scaling decision
await client.wait()
# Read the decision
decision = await client.get()
print(f"Scale to: prefill={decision.num_prefill_workers}, "
f"decode={decision.num_decode_workers}, "
f"id={decision.decision_id}")
# Execute scaling in your environment
scale_prefill_workers(decision.num_prefill_workers)
scale_decode_workers(decision.num_decode_workers)
# Report completion
await client.complete(decision)
Полный рабочий пример см. в components/planner/test/test_virtual_connector.py.
Передача конфигурации Planner
Передайте настройки, специфичные для planner, через DGDR:
features:
planner:
plannerMinEndpoint: 2
Проверка перед развертыванием (autoApply: false)
Отключите автоматическое развертывание, чтобы проверить сгенерированный DGD:
spec:
autoApply: false
После завершения профилирования:
# Extract and review generated DGD
kubectl get dgdr sla-aic -n $NAMESPACE \
-o jsonpath='{.status.profilingResults.selectedConfig}' > my-dgd.yaml
# Review and modify as needed
vi my-dgd.yaml
# Deploy manually
kubectl apply -f my-dgd.yaml -n $NAMESPACE
Артефакты профилирования с PVC
Сохраните подробные артефакты профилирования (графики, журналы, необработанные данные) в PVC:
spec:
workload:
isl: 3000
osl: 150
sla:
ttft: 200
itl: 20
Настройка:
export NAMESPACE=your-namespace
deploy/utils/setup_benchmarking_resources.sh
Доступ к результатам:
kubectl apply -f deploy/utils/manifests/pvc-access-pod.yaml -n $NAMESPACE
kubectl wait --for=condition=Ready pod/pvc-access-pod -n $NAMESPACE --timeout=60s
kubectl cp $NAMESPACE/pvc-access-pod:/data ./profiling-results
kubectl delete pod pvc-access-pod -n $NAMESPACE
Связанная документация
- README Planner -- обзор и быстрый старт
- Руководство по Planner -- развертывание, конфигурация, интеграция
- Дизайн Planner -- подробный разбор архитектуры
- DGDR Configuration Reference
- Профилирование на основе SLA