背景
排查多 GPU rank 分配逻辑时发现:uni_rl 的 DP launcher 与 UniLab 侧全程没有 NUMA / PCIe 拓扑感知,rank→GPU 完全按用户列表顺序,collector CPU 切片也是与 GPU NUMA 归属无关的连续块。
现状证据
- rank→GPU 映射:
uni_rl/ipc/dp_launcher.py resolve_dp_topology 原序保留 training.devices,rank i → cuda:devices[i];不查 /sys、不查 GPU 的 NUMA node 亲和性。
- collector CPU 切片:
uni_rl/ipc/dp_launcher.py resolve_collector_cpu_ids 按 cpu_count // world_size 切连续块(rank * size 起),与 GPU 的 NUMA 归属无关联。显式覆盖接口 training.dp_collector_cpu_ids 已存在。
- learner↔collector IPC 全走
/dev/shm(inference_slot.py / weight_sync.py / rollout_ring_buffer.py),obs/action 经 shm 后由 learner 做 H2D 拷贝——collector CPU 落在远端 NUMA node 时,shm 带宽与 H2D 路径都会跨 socket。
- 全仓库(uni_rl / unisim / unilab)grep
numa 零命中。
影响
双 NUMA(双 socket)主机上,如果用户没有按 nvidia-smi topo -m 手动排 training.devices 和 dp_collector_cpu_ids,可能出现 collector CPU 与其服务的 GPU 分属不同 socket:shm IPC 走跨 socket 互联(UPI/Infinity Fabric),H2D 拷贝跨 PCIe root complex,吞吐与延迟劣化且无告警。
建议方向(供 maintainer 判断)
- launch 时读取
/sys/bus/pci/devices/<gpu>/numa_node(或 pynvml)做 rank→GPU 的 NUMA 亲和性检查,错配时 warning。
- 默认 CPU 切片改为按 rank GPU 的 NUMA node 从
/sys/devices/system/node/nodeN/cpulist 推导(保留现有显式覆盖接口)。
- 文档补充多 NUMA 主机上
training.devices 与 dp_collector_cpu_ids 的推荐配法。
仅为问题记录与方向建议,不在本 issue 内实施。
背景
排查多 GPU rank 分配逻辑时发现:uni_rl 的 DP launcher 与 UniLab 侧全程没有 NUMA / PCIe 拓扑感知,rank→GPU 完全按用户列表顺序,collector CPU 切片也是与 GPU NUMA 归属无关的连续块。
现状证据
uni_rl/ipc/dp_launcher.pyresolve_dp_topology原序保留training.devices,rank i →cuda:devices[i];不查/sys、不查 GPU 的 NUMA node 亲和性。uni_rl/ipc/dp_launcher.pyresolve_collector_cpu_ids按cpu_count // world_size切连续块(rank * size 起),与 GPU 的 NUMA 归属无关联。显式覆盖接口training.dp_collector_cpu_ids已存在。/dev/shm(inference_slot.py/weight_sync.py/rollout_ring_buffer.py),obs/action 经 shm 后由 learner 做 H2D 拷贝——collector CPU 落在远端 NUMA node 时,shm 带宽与 H2D 路径都会跨 socket。numa零命中。影响
双 NUMA(双 socket)主机上,如果用户没有按
nvidia-smi topo -m手动排training.devices和dp_collector_cpu_ids,可能出现 collector CPU 与其服务的 GPU 分属不同 socket:shm IPC 走跨 socket 互联(UPI/Infinity Fabric),H2D 拷贝跨 PCIe root complex,吞吐与延迟劣化且无告警。建议方向(供 maintainer 判断)
/sys/bus/pci/devices/<gpu>/numa_node(或 pynvml)做 rank→GPU 的 NUMA 亲和性检查,错配时 warning。/sys/devices/system/node/nodeN/cpulist推导(保留现有显式覆盖接口)。training.devices与dp_collector_cpu_ids的推荐配法。仅为问题记录与方向建议,不在本 issue 内实施。