Для чистой Markdown-версии этой страницы добавьте
.mdк этому URL. Полный индекс документации см. в https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. в https://docs.nvidia.com/dynamo/llms-full.txt.
Руководство по установке
Это руководство проведет вас через установку всего необходимого для развертывания моделей с Dynamo в Kubernetes. Выполняйте шаги по порядку — каждый опирается на предыдущий.
Предварительные требования
Перед началом убедитесь, что у вас есть:
- Кластер Kubernetes (v1.24+) с узлами, поддерживающими GPU. Если нужно создать такой кластер, см. руководства вашего облачного провайдера:
- Amazon EKS | Azure AKS | Google GKE
- Для локальной разработки: Настройка Minikube
- kubectl v1.24+ — Install kubectl
- Helm v3.0+ — Install Helm
GPU-драйверы облачного провайдера: GPU Operator (Шаг 1) сам установит GPU-драйверы. При создании GPU node pools в кластере не включайте установку GPU-драйверов, управляемую провайдером (например, пропустите установку AKS GPU driver, не используйте в GKE --accelerator gpu-driver-version=latest). Если на узлах уже есть драйверы, управляемые провайдером, см. шаг GPU Operator, как это обработать.
Проверьте инструменты:
kubectl version --client # Должно показать v1.24+
helm version # Должно показать v3.0+
Обзор
Каждое развертывание Dynamo требует двух Helm chart: GPU Operator (Шаг 1) и Dynamo Platform (Шаг 2). Все остальное — необязательно. Заранее определите, какие необязательные компоненты вам нужны, чтобы установить их на Шаге 3.
| Необязательный компонент | Когда нужен | Требуется для |
|---|---|---|
| Grove + KAI Scheduler | Многоузловой или disaggregated inference | Многоузловые развертывания (operator выдаст ошибку без Grove или LWS) |
| Network Operator / RDMA | Disaggregated inference в production | Приемлемая производительность передачи KV cache (fallback на TCP ухудшает ее примерно в 200-500 раз) |
| kube-prometheus-stack | Автомасштабирование, дашборды метрик или Planner | Режим Planner sla, автомасштабирование KEDA/HPA |
| Shared storage (кэш модели) | Большие модели (>70B) или много реплик | Избежание загрузки на каждый pod и лимитов HuggingFace |
Grove + KAI Scheduler — Grove является стандартным оркестратором для многоузловых сценариев. Operator возвращает жесткую ошибку в многоузловых развертываниях, если недоступны ни Grove, ни LeaderWorkerSet (LWS). KAI Scheduler необязателен, но рекомендуется вместе с Grove для GPU-aware планирования. Подробности см. в Grove.
Network Operator / RDMA — Без RDMA disaggregated inference автоматически переходит на TCP, но с сильным падением производительности (~98 с TTFT против ~200-500 мс с RDMA). Требуется для любого production disaggregated-развертывания. Настройка зависит от облачного провайдера — см. Disaggregated Communication Guide и руководство вашего провайдера.
kube-prometheus-stack — Требуется для режима оптимизации Planner sla (он читает живые метрики TTFT/ITL из Prometheus). Также требуется для автомасштабирования на базе KEDA/HPA. Режим throughput у Planner может работать без него, используя внутренние сигналы глубины очереди, но функции на основе метрик не будут работать. Подробности см. в Metrics.
Shared storage — Не дает каждому pod загружать веса модели отдельно. Без него загрузка больших моделей (>70B) на каждый pod занимает часы, а большое число реплик упрется в лимиты HuggingFace. Это не навязывается operator'ом — это операционный вопрос. Полное описание см. в Model Caching.
Шаг 1: Установите GPU Operator
NVIDIA GPU Operator автоматизирует развертывание всех компонентов NVIDIA, необходимых для предоставления GPU: драйверов, container toolkit, device plugin и мониторинга.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm install gpu-operator nvidia/gpu-operator \
--namespace gpu-operator --create-namespace
# Раскомментируйте, если на узлах уже установлены GPU-драйверы, управляемые провайдером:
# --set driver.enabled=false
Если на GPU-узлах уже установлены драйверы, управляемые провайдером (например, вы использовали в GKE --accelerator gpu-driver-version=latest), раскомментируйте строку driver.enabled=false выше, чтобы operator не конфликтовал с существующими драйверами.
Некоторым облачным провайдерам требуется дополнительная настройка GPU Operator. Подробности см. в руководстве вашего провайдера:
- AKS GPU Operator setup — пропустите установку GPU-драйверов, управляемую AKS, на node pools
- EKS GPU Operator setup
- GKE GPU Operator setup — требования к init для
LD_LIBRARY_PATHиldconfig
Проверьте, что GPU Operator запущен:
kubectl get pods -n gpu-operator
# Ожидается: gpu-operator, nvidia-driver-daemonset, nvidia-device-plugin-daemonset и т. д. все в Running
Шаг 2: Установите Dynamo Platform
Задайте переменные окружения:
export NAMESPACE=dynamo-system
export RELEASE_VERSION=1.0.2 # должен соответствовать версии из https://github.com/ai-dynamo/dynamo/releases
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-$RELEASE_VERSION.tgz
helm install dynamo-platform dynamo-platform-$RELEASE_VERSION.tgz \
--namespace $NAMESPACE \
--create-namespace
# Примечание: добавьте \ к --create-namespace выше, когда раскомментируете любые необязательные флаги ниже
#
# Grove + KAI Scheduler — раскомментируйте, если используете multinode или disaggregated inference.
# Option A (install=true): Dynamo устанавливает и управляет Grove/KAI как bundled subcharts (dev/testing):
# --set "global.grove.install=true" \
# --set "global.kai-scheduler.install=true" \
# Option B (enabled=true): Grove/KAI уже установлены и управляются извне (production):
# --set "global.grove.enabled=true" \
# --set "global.kai-scheduler.enabled=true" \
#
# kube-prometheus-stack — раскомментируйте, если Prometheus уже установлен (требуется для Planner sla mode и autoscaling):
# --set "dynamo-operator.dynamo.metrics.prometheusEndpoint=http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090"
Все команды helm install можно настроить через собственный values-файл: helm install ... -f your-values.yaml
Shared/Multi-Tenant кластеры: Если уже запущен cluster-wide Dynamo operator, не устанавливайте еще один. Проверьте так:
kubectl get clusterrolebinding -o json | \
jq -r '.items[] | select(.metadata.name | contains("dynamo-operator-manager")) |
"Cluster-wide operator found in namespace: \(.subjects[0].namespace)"'
Namespace-restricted mode (namespaceRestriction.enabled=true) устарел и будет удален в будущем релизе. Для всех новых развертываний используйте режим cluster-wide по умолчанию.
Проверьте, что Dynamo Platform запущена:
# Проверьте CRD
kubectl get crd | grep dynamo
# Expected: dynamographdeployments, dynamocomponentdeployments, dynamographdeploymentrequests, etc.
# Проверьте pods operator и platform
kubectl get pods -n $NAMESPACE
# Expected: dynamo-operator-*, etcd-*, nats-* pods all Running
Шаг 3: Установите необязательные компоненты
Команда установки Dynamo выше содержит закомментированные флаги для каждого необязательного компонента. Сначала установите компонент, затем раскомментируйте соответствующий флаг перед запуском helm install на Шаге 2 (или выполните helm upgrade --reuse-values с этим флагом, если Dynamo уже установлен).
Многоузловые сценарии:
Многоузловые развертывания требуют либо Grove + KAI Scheduler, либо альтернативной настройки оркестратора (LeaderWorkerSet + Volcano), чтобы включить gang scheduling для workload, распределенных по нескольким узлам. Подробности о выборе и настройке оркестратора см. в Multinode Deployment Guide.
Grove + KAI Scheduler
Есть два способа включить Grove и KAI Scheduler, которые зависят от того, какие флаги вы раскомментируете в команде установки Dynamo:
install=true— Dynamo устанавливает и управляет Grove/KAI как bundled subcharts. Самый простой путь; рекомендуется для dev/testing.enabled=true— Сообщает Dynamo, что Grove/KAI уже установлены и управляются извне. Используйте это, если устанавливаете Grove/KAI отдельно (например, чтобы управлять их жизненным циклом независимо или делить их между namespace). Рекомендуется для production.
Для варианта enabled=true сначала установите Grove и KAI Scheduler отдельно. Инструкции см. в руководстве по установке Grove и руководстве по развертыванию KAI Scheduler.
Матрица совместимости:
| dynamo-platform | kai-scheduler | Grove |
|---|---|---|
| 1.0.x | >= v0.13.0 | >= v0.1.0-alpha.6 |
| 1.1.x | >= v0.13.4 | >= v0.1.0-alpha.8 |
LWS + Volcano
Если для многоузлового сценария вы не используете Grove, можно использовать LeaderWorkerSet (LWS) (>= v0.7.0) с Volcano для gang scheduling. Оба компонента должны быть установлены до развертывания многоузловых workload.
- Установите Volcano:
helm repo add volcano-sh https://volcano-sh.github.io/helm-charts
helm repo update
helm install volcano volcano-sh/volcano -n volcano-system --create-namespace
- Установите LWS (>= v0.7.0) с включенным Volcano gang scheduling:
export LWS_VERSION=0.8.0
helm install lws oci://registry.k8s.io/lws/charts/lws \
--version=$LWS_VERSION \
--namespace lws-system \
--create-namespace \
--set gangSchedulingManagement.schedulerProvider=volcano \
--wait --timeout 300s
См. документацию LWS и документацию Volcano для параметров настройки, а также Multinode Deployment Guide для выбора orchestrator.
Network Operator / RDMA
Настройка RDMA зависит от облачного провайдера. См. Disaggregated Communication Guide для вариантов транспорта, конфигурации UCX и ожидаемой производительности, а также руководство вашего провайдера для инструкций по настройке:
- AKS — InfiniBand + Network Operator
- EKS — EFA device plugin (также см. EFA configuration guide)
- GKE — GPUDirect-TCPXO
kube-prometheus-stack
Установите Prometheus до запуска команды установки Dynamo, чтобы задать endpoint за один проход:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace \
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
--set-json 'prometheus.prometheusSpec.podMonitorNamespaceSelector={}' \
--set-json 'prometheus.prometheusSpec.probeNamespaceSelector={}'
Затем раскомментируйте строку prometheusEndpoint в команде установки Dynamo. Dynamo operator автоматически создает PodMonitors для своих компонентов. См. Metrics для настройки дашборда и доступных метрик, а Logging — для стека логирования Grafana Loki + Alloy.
Shared Storage для кэширования моделей
Настройте ReadWriteMany PVC, чтобы все pod использовали общие загруженные веса модели вместо независимой загрузки каждым pod. Флаги Helm chart Dynamo не нужны — storage настраивается в спецификации развертывания. Настройка зависит от облачного провайдера:
- AKS — Azure Files / Managed Lustre
- EKS — EFS
- GKE — Cloud Filestore (см. GKE guide)
Для крупных кластеров с частыми обновлениями моделей рассмотрите ModelExpress для P2P распределения моделей и ModelStreamer для прямой потоковой передачи из object storage. Полное описание, включая download Job, настройку mount и ModelExpress, см. в Model Caching.
Шаг 4: Проверка перед развертыванием
Запустите скрипт проверки перед развертыванием, чтобы убедиться, что кластер готов к deployment:
./deploy/pre-deployment/pre-deployment-check.sh
Он проверяет доступность kubectl, конфигурацию StorageClass по умолчанию, наличие GPU-узлов и статус GPU Operator. Подробности см. в Pre-Deployment Checks.
Следующие шаги
Ваш кластер готов. Следуйте Руководству по развертыванию моделей, чтобы развернуть модель с помощью DGDR.
Устранение неполадок
"VALIDATION ERROR: Cannot install cluster-wide Dynamo operator"
VALIDATION ERROR: Cannot install cluster-wide Dynamo operator.
Found existing namespace-restricted Dynamo operators in namespaces: ...
Причина: Попытка cluster-wide установки на общем кластере, где уже существуют namespace-restricted operator.
Решение: Переведите существующие namespace-restricted operator в cluster-wide mode. Namespace-restricted mode устарел.
CRD уже существуют
Причина: Установка CRD в кластере, где они уже есть (обычно на общих кластерах).
Решение: CRD устанавливаются автоматически через Helm chart. Если возникают конфликты, проверьте существующие CRD командой kubectl get crd | grep dynamo.
Pods не запускаются?
kubectl describe pod <pod-name> -n $NAMESPACE
kubectl logs <pod-name> -n $NAMESPACE
Bitnami etcd "unrecognized" image?
ERROR: Original containers have been substituted for unrecognized ones.
Добавьте в команду helm install:
--set "etcd.image.repository=bitnamilegacy/etcd" --set "etcd.global.security.allowInsecureImages=true"
Чистое удаление?
# Удалите platform
helm uninstall dynamo-platform --namespace $NAMESPACE
# Список CRD Dynamo
kubectl get crd | grep "dynamo.*nvidia.com"
# Удалите каждый CRD
kubectl delete crd <crd-name>
Дополнительно: сборка из исходников
Если вам нужно внести вклад в Dynamo или использовать последние unreleased-функции из main branch:
# 1. Задайте переменные registry
export DOCKER_SERVER=nvcr.io/nvidia/ai-dynamo/ # или ваш registry
export DOCKER_USERNAME='$oauthtoken'
export DOCKER_PASSWORD=<YOUR_NGC_CLI_API_KEY>
export IMAGE_TAG=$RELEASE_VERSION
# 2. Соберите и отправьте образ operator
cd deploy/operator
docker build -t $DOCKER_SERVER/kubernetes-operator:$IMAGE_TAG . && docker push $DOCKER_SERVER/kubernetes-operator:$IMAGE_TAG
cd -
# 3. Создайте namespace и image pull secret (только если используете private registry)
kubectl create namespace $NAMESPACE
kubectl create secret docker-registry docker-imagepullsecret \
--docker-server=$DOCKER_SERVER \
--docker-username=$DOCKER_USERNAME \
--docker-password=$DOCKER_PASSWORD \
--namespace=$NAMESPACE
# 4. Установите из локального chart
cd deploy/helm/charts
helm dep build ./platform/
helm install dynamo-platform ./platform/ \
--namespace "$NAMESPACE" \
--set "dynamo-operator.controllerManager.manager.image.repository=$DOCKER_SERVER/kubernetes-operator" \
--set "dynamo-operator.controllerManager.manager.image.tag=$IMAGE_TAG" \
--set "dynamo-operator.imagePullSecrets[0].name=docker-imagepullsecret"