NeMo-RL NVLink Domain Placement

返回文章

这张图只描述代码阅读中的核心差异:当前 main 分支已经在 Ray worker 启动时注册 topology resource,但 rank placement 路径没有消费它;topology-aware 特性分支则进一步读取这些 resource,用于 bundle 排序和可选 domain pinning。

main注册了 topology resource,但 rank 侧不消费

K8s/KAI 先保证物理放置,NeMo-RL 只做 Ray bundle 的稳定 node/GPU 排序。

K8s / KAI / DRA
通过 topology-required-placement、ComputeDomain、RoCE、segmentSize 把 pod 尽量放进正确 clique。
Ray worker startup
注册 nvlink_domain_<UUID>topo_rank
Ray placement group
stopbundle 只请求 CPU/GPU,不请求 nvlink_domain_*
Rank ordering
(node_id, gpu_id) 稳定排序,只解决 Ray bundle 乱序问题。

feature读取并使用 nvlink_domain_*

Python 侧把 Ray custom resource 纳入拓扑排序,必要时也可以进入 placement group resource request。

K8s / KAI / DRA
同样先由调度层圈定物理 clique / domain,这是后续 rank 对齐的前提。
Ray worker startup
节点暴露 nvlink_domain_<UUID>topo_rank,Python 侧会读取。
Ray placement group
optionalnode_resource_constraints 可把 bundle pin 到指定 domain。
Rank ordering
(domain_min_topo_rank, topo_rank, gpu_id) 排序,并对跨 domain TP/PP group 给 warning。

关键边界

K8s 层负责让资源真的落在正确物理 domain;没有这层,rank 排序救不回跨 rack placement。
Ray 层nvlink_domain_* 只有被 bundle resource request 消费时,才变成调度约束。
NeMo-RL 层main 只按 (node_id, gpu_id) 排;特性分支才按 domain/topo rank 排。