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

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.

Передача KV с учетом топологии

Передача KV с учетом топологии

Передача KV с учетом топологии ограничивает выбор decode worker или смещает его после того, как выбран prefill worker. Router выводит стандартные RoutingConstraints из опубликованных топологических метаданных выбранного prefill worker, а затем объединяет эти ограничения с decode request.

По возможности используйте путь через Kubernetes operator. Примеры развертывания см. в разделе Передача KV с учетом топологии в Kubernetes.

Контракт runtime

Workers публикуют поля топологии и политики через ModelRuntimeConfig:

ПолеЗначение
topology_domainsОтображение имени логического домена в значение топологии этого worker, например {"zone": "us-east-1a"}.
kv_transfer_domainКлюч домена, используемый для маршрутизации KV transfer от prefill к decode, например zone.
kv_transfer_enforcementrequired или preferred.
kv_transfer_preferred_weightВес preferred-taint, используемый только когда enforcement равен preferred.

Каждая запись топологии также становится канонической taint worker:

dynamo.topology/<domain>=<value>

Например:

{
"topology_domains": {
"zone": "us-east-1a",
"rack": "rack-22"
},
"kv_transfer_domain": "zone",
"kv_transfer_enforcement": "preferred",
"kv_transfer_preferred_weight": 0.85
}

Это создает worker taints:

dynamo.topology/zone=us-east-1a
dynamo.topology/rack=rack-22

Политика KV-transfer использует только kv_transfer_domain для вывода decode constraint. Остальные домены топологии остаются доступны как обычные routing taints.

Поток запроса

sequenceDiagram
participant F as Frontend
participant PR as Prefill Router
participant P as Prefill Worker
participant DR as Decode Router
participant D as Decode Worker

F->>PR: request
PR->>P: select prefill worker
PR->>PR: read selected worker topology metadata
PR->>PR: build RoutingConstraints
PR->>DR: decode request + topology constraints
DR->>D: select compatible or preferred decode worker

Prefill router формирует decode constraint до отправки prefill, если выбранный worker уже известен. Это делает политику required fail-closed: если router не может вывести authoritative decode constraints для требуемой политики, он завершает request с ошибкой вместо того, чтобы отправить prefill и только потом обнаружить, что decode нельзя безопасно маршрутизировать.

Режимы enforcement

Required

required превращает топологию transfer-domain выбранного prefill worker в required taint.

required_taints = {"dynamo.topology/zone=us-east-1a"}

Decode worker без такой taint не подходят. Если подходящий decode worker отсутствует, routing не возвращает endpoint для этого request.

Preferred

preferred превращает ту же топологию в preferred taint.

preferred_taints = {"dynamo.topology/zone=us-east-1a": 0.85}

Все decode worker по-прежнему подходят, но совпадающие worker получают меньшую routing cost. preferredWeight задает силу предпочтения в диапазоне от 0 до 1.

Контракт среды worker

Утилита Python backend читает топологию из файлов, а политику передачи — из переменных окружения:

Переменная окруженияОписание
DYN_TOPOLOGY_ENABLEDУстановите в true, чтобы включить чтение топологии.
DYN_TOPOLOGY_MOUNT_PATHКаталог, содержащий файлы топологии. По умолчанию /etc/dynamo/topology.
DYN_KV_TRANSFER_DOMAINОбязательно, когда топология включена. Задает имя файла топологии и runtime domain, используемые для KV transfer constraints.
DYN_KV_TRANSFER_ENFORCEMENTrequired или preferred. По умолчанию required, если домен задан.
DYN_KV_TRANSFER_PREFERRED_WEIGHTВес, используемый когда enforcement равен preferred.

Каждый не скрытый и непустой файл в DYN_TOPOLOGY_MOUNT_PATH интерпретируется как один домен топологии. Имя файла — это домен, а содержимое файла — значение worker для этого домена.

Например:

mkdir -p /tmp/dynamo-topology
printf 'us-east-1a\n' > /tmp/dynamo-topology/zone

export DYN_TOPOLOGY_ENABLED=true
export DYN_TOPOLOGY_MOUNT_PATH=/tmp/dynamo-topology
export DYN_KV_TRANSFER_DOMAIN=zone
export DYN_KV_TRANSFER_ENFORCEMENT=required

Когда топология включена, worker опрашивает систему, пока файл выбранного transfer-domain не появится и не получит содержимое. Если он остается отсутствующим или пустым до истечения таймаута, worker завершает работу, чтобы проблема с источником топологии была видна при запуске.

Поддержка backend

Интегрированные Python backend применяют конфигурацию топологии во время регистрации worker:

  • vLLM
  • SGLang
  • TensorRT-LLM

Утилита топологии записывает поля в ModelRuntimeConfig; валидация и генерация канонических topology-taint находятся на стороне Rust.

Взаимодействие с существующими RoutingConstraints

Передача KV с учетом топологии использует существующий путь RoutingConstraints. Она не добавляет отдельный selector для топологии. Если у request уже есть routing constraints, prefill router объединяет сгенерированные топологические ограничения с decode request:

  • Required topology taints добавляются к существующим required_taints.
  • Preferred topology taints добавляются к существующим preferred_taints.

Пользовательские ограничения по-прежнему применяются. Decode worker должен удовлетворять всем required constraints, чтобы считаться подходящим.

Операционные замечания

  • Настраивайте это только для disaggregated prefill/decode развертываний. Aggregated workers не выполняют удаленную передачу KV от prefill к decode.
  • Оставляйте DYN_ROUTER_MODE=kv на frontend, чтобы пути маршрутизации prefill и decode использовали KV router.
  • Убедитесь, что у каждого prefill domain достаточно decode capacity при использовании required; иначе router может корректно отклонять requests в доменах без decode worker.
  • Используйте preferred во время поэтапных rollout, когда передача внутри одного домена является предпочтением по latency, а не жестким требованием к размещению.
  • Состояние транспорта отделено от выбора топологии. Маршрутизация с учетом топологии выбирает более подходящего peer, но RDMA, EFA, UCX или libfabric все равно должны быть настроены корректно для NIXL KV transfer.

Диагностические сигналы

СимптомВероятная причинаПроверка
Worker завершается во время запускаНе задан DYN_KV_TRANSFER_DOMAIN или файл топологии так и не был заполнен.Логи worker и содержимое DYN_TOPOLOGY_MOUNT_PATH.
Политика required не возвращает endpointНи один decode worker не имеет сгенерированной topology taint выбранного prefill worker.Топологические метаданные ModelRuntimeConfig worker и размещение decode worker.
Политика preferred все равно маршрутизирует междоменноСовпадающий домен перегружен или недоступен, либо вес слишком мал относительно нагрузки.Увеличьте preferredWeight, добавьте decode capacity в том же домене или переключитесь на required.
Router не видит метаданные топологииWorker не опубликовал поля топологии.Логи запуска backend и метрики/данные обнаружения runtime config.

Команды проверки, специфичные для Kubernetes, см. в разделе Проверка развертывания.