Перейти к основному содержимому

For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

Обнаружение сервисов

Компоненты Dynamo (frontend, worker, planner) должны уметь обнаруживать друг друга и их возможности во время выполнения. Мы называем это обнаружением сервисов. В Kubernetes поддерживаются 2 типа backend'ов для discovery.

Backend'ы обнаружения​

BackendDefaultDependenciesUse Case
Kubernetes✅ ДаНет (нативный K8s)Рекомендуется для всех развёртываний Kubernetes
KV Store (etcd)Неткластер etcdУстаревшие развёртывания

Kubernetes Discovery (по умолчанию)​

Kubernetes discovery - это backend по умолчанию и рекомендуемый вариант при работе в Kubernetes. Для обнаружения компонентов он использует нативные примитивы Kubernetes:

  • DynamoWorkerMetadata CRD: каждый worker хранит зарегистрированные endpoint'ы и model cards в Custom Resource
  • EndpointSlices: EndpointSlices сигнализируют о статусе готовности каждого компонента

Детали реализации​

В каждом pod'е работает discovery daemon, который отслеживает и EndpointSlices, и CR DynamoWorkerMetadata. Pod становится доступен для обнаружения только тогда, когда он отмечен как "ready" в EndpointSlice И имеет соответствующий CR DynamoWorkerMetadata. Такая связка гарантирует, что pod'ы не будут обнаруживаться до готовности, метаданные будут сразу доступны, а устаревшие записи будут очищаться при завершении pod'ов.

DynamoWorkerMetadata CRD​

Каждый worker pod создаёт CR DynamoWorkerMetadata, в котором хранит свои метаданные для discovery:

apiVersion: nvidia.com/v1alpha1
kind: DynamoWorkerMetadata
metadata:
name: my-worker-pod-abc123
namespace: dynamo-system
ownerReferences:
- apiVersion: v1
kind: Pod
name: my-worker-pod-abc123
uid: <pod-uid>
controller: true
spec:
data:
endpoints:
"dynamo/backend/generate":
type: Endpoint
namespace: dynamo
component: backend
endpoint: generate
instance_id: 12345678901234567890
transport:
nats_tcp: "dynamo_backend.generate-abc123"
model_cards: {}

CR называется по имени pod'а и включает owner reference для автоматической сборки мусора при удалении pod'а.

EndpointSlices​

Если ресурсы DynamoWorkerMetadata дают актуальный снимок возможностей компонента, то EndpointSlices дают снимок состояния здоровья разных компонентов Dynamo.

Оператор создаёт Kubernetes Service, нацеленный на компоненты Dynamo. Затем Kubernetes controller создаёт и поддерживает ресурсы EndpointSlice, которые отслеживают готовность pod'ов, попадающих под Service. Наблюдение за этими slices даёт нам актуальный снимок того, какие компоненты Dynamo готовы обслуживать трафик.

Readiness Probes​

Pod помечается как ready, если readiness probe проходит успешно. Для worker'ов Dynamo это означает, что endpoint generate доступен и здоров. Эти probes настраиваются оператором Dynamo для каждого pod'а/компонента.

RBAC​

Каждому pod'у компонента Dynamo автоматически назначается ServiceAccount, который позволяет ему наблюдать за ресурсами EndpointSlice и DynamoWorkerMetadata в пределах своего namespace.

Environment Variables​

Оператор автоматически внедряет в pod'ы следующие переменные окружения, чтобы упростить discovery:

VariableDescription
DYN_DISCOVERY_BACKENDУстанавливается в kubernetes
POD_NAMEИмя pod'а (через downward API)
POD_NAMESPACENamespace pod'а (через downward API)
POD_UIDUID pod'а (через downward API)

Instance ID pod'а детерминированно генерируется путём хеширования имени pod'а, что обеспечивает стабильную идентичность и корреляцию между EndpointSlices и CR.

KV Store Discovery (etcd)​

Чтобы использовать discovery на базе etcd вместо нативного Kubernetes discovery, добавьте аннотацию в DynamoGraphDeployment:

apiVersion: nvidia.com/v1alpha1
kind: DynamoGraphDeployment
metadata:
name: my-deployment
annotations:
nvidia.com/dynamo-discovery-backend: etcd
spec:
services:
# ...

Для этого должен быть доступен кластер etcd. Подключение к etcd настраивается через Helm chart платформы.