Skip to content

多 GPU data-parallel 缺 NUMA/PCIe 拓扑感知:rank→GPU 映射不查 NUMA 亲和性 #1505

Description

@TATP-233

背景

排查多 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_idscpu_count // world_size 切连续块(rank * size 起),与 GPU 的 NUMA 归属无关联。显式覆盖接口 training.dp_collector_cpu_ids 已存在。
  • learner↔collector IPC 全走 /dev/shminference_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.devicesdp_collector_cpu_ids,可能出现 collector CPU 与其服务的 GPU 分属不同 socket:shm IPC 走跨 socket 互联(UPI/Infinity Fabric),H2D 拷贝跨 PCIe root complex,吞吐与延迟劣化且无告警。

建议方向(供 maintainer 判断)

  1. launch 时读取 /sys/bus/pci/devices/<gpu>/numa_node(或 pynvml)做 rank→GPU 的 NUMA 亲和性检查,错配时 warning。
  2. 默认 CPU 切片改为按 rank GPU 的 NUMA node 从 /sys/devices/system/node/nodeN/cpulist 推导(保留现有显式覆盖接口)。
  3. 文档补充多 NUMA 主机上 training.devicesdp_collector_cpu_ids 的推荐配法。

仅为问题记录与方向建议,不在本 issue 内实施。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions