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

Для чистой Markdown-версии этой страницы добавьте .md к этому URL. Полный индекс документации см. в https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. в https://docs.nvidia.com/dynamo/llms-full.txt.

Плоскость событий

Плоскость событий предоставляет Dynamo слой pub/sub для обмена событиями между компонентами почти в реальном времени. Она доставляет обновления KV-кэша, метрики нагрузки воркеров и события отслеживания последовательностей, обеспечивая такие возможности, как KV-aware routing и disaggregated serving.

Когда используется плоскость событий?

Основные сценарии использования:

  • События KV-кэша -- воркеры публикуют состояние кэша, чтобы router мог принимать решения о планировании с учетом кэша.
  • Метрики нагрузки воркеров -- воркеры сообщают об утилизации, чтобы router мог балансировать нагрузку.
  • Отслеживание последовательностей -- координирует активные последовательности между репликами router для отказоустойчивой маршрутизации.

Архитектура плоскости событий с вариантами транспорта NATS и ZMQ, соединяющими Frontend, Planner и Worker

Выбор транспорта

Плоскость событий поддерживает два транспорта:

NATS (по умолчанию)ZMQ
Внешняя инфраструктураТребуется сервер NATSНе требуется (peer-to-peer)
Сложность настройкиПростая -- указать сервер NATSАвтоматическая -- воркеры привязывают сокеты и регистрируются через discovery
Лучше всего подходит дляКрупномасштабных развертыванийНизких операционных накладных расходов

Конфигурация

Выбор транспорта

Задайте переменную окружения DYN_EVENT_PLANE, чтобы выбрать транспорт:

# Use NATS (default -- no need to set explicitly)
export DYN_EVENT_PLANE=nats

# Use ZMQ
export DYN_EVENT_PLANE=zmq

Компоненты Python также принимают это значение как CLI-флаг:

# SGLang backend
python3 -m dynamo.sglang --event-plane zmq --model Qwen/Qwen3-0.6B

# vLLM backend
python3 -m dynamo.vllm --event-plane zmq --model Qwen/Qwen3-0.6B

Переменные окружения

ПеременнаяОписаниеЗначение по умолчанию
DYN_EVENT_PLANEТранспорт: nats или zmqЗависит от контекста (см. ниже)
NATS_SERVERURL сервера NATS (только для транспорта NATS)nats://localhost:4222

Если DYN_EVENT_PLANE не задана, значение по умолчанию выбирается на основе discovery backend:

  • --discovery-backend file или mem (локальные backend'ы): по умолчанию используется zmq — внешние сервисы не требуются.
  • --discovery-backend etcd или kubernetes (распределенные backend'ы): по умолчанию используется nats.

Задайте DYN_EVENT_PLANE явно, чтобы переопределить этот автоматический выбор.

Транспорт NATS

При использовании NATS (DYN_EVENT_PLANE=nats или не задана при распределенном backend):

  • Требуется запущенный сервер NATS. Задайте NATS_SERVER, если он находится не на localhost:4222.
  • События публикуются в subjects NATS, ограниченные namespace и компонентом.
  • Встроены повторное подключение и буферизация сообщений при коротких разрывах соединения.

Пример настройки:

export NATS_SERVER=nats://nats-server:4222
export DYN_EVENT_PLANE=nats

# Start workers -- explicitly enable KV event publishing
python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B \
--kv-events-config '{"publisher":"nats","topic":"kv-events","enable_kv_cache_events":true}'

# Start frontend -- it subscribes to events from NATS automatically
python3 -m dynamo.frontend --router-mode kv

Транспорт ZMQ

При использовании ZMQ (DYN_EVENT_PLANE=zmq):

  • Внешний сервер не требуется. Каждый worker привязывает сокет ZMQ PUB и объявляет свой адрес через систему discovery.
  • Подписчики автоматически обнаруживают всех активных publishers и подключаются к ним.
  • Когда publishers появляются и исчезают (например, при масштабировании воркеров вверх или вниз), подписчики динамически корректируют свои подключения.

Пример настройки:

export DYN_EVENT_PLANE=zmq

# Start workers -- each binds a ZMQ socket, registers with discovery
python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B \
--kv-events-config '{"publisher":"zmq","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'

# Start frontend -- discovers workers and connects directly
python3 -m dynamo.frontend --router-mode kv

Отключение плоскости событий

Если вам не нужен KV-aware routing, плоскость событий можно полностью отключить:

python3 -m dynamo.frontend --router-mode kv --no-router-kv-events

При использовании --no-router-kv-events:

  • Router переключается на cache-aware routing на основе прогнозирования (оценивает состояние кэша по решениям маршрутизации).
  • Сервер NATS и сокеты ZMQ не нужны.
  • Истечение срока действия на основе TTL не дает прогнозируемому состоянию устаревать.

Режимы развертывания

Bare Metal / локально

Оба транспорта работают из коробки:

# NATS (requires nats-server running)
export NATS_SERVER=nats://localhost:4222

# OR ZMQ (no extra infrastructure)
export DYN_EVENT_PLANE=zmq

Kubernetes (с Dynamo Operator)

Оператор может внедрять DYN_EVENT_PLANE в pods. Применяются те же варианты транспорта. При использовании NATS разверните сервер NATS в кластере и задайте NATS_SERVER соответствующим образом.

Связанная документация