背景
排查多 GPU rank 分配时发现:off-policy DP 下 collector 的 CPU 核区默认按 cpu_count // world_size 切连续块(uni_rl/ipc/dp_launcher.py resolve_collector_cpu_ids),与每个 rank 绑定 GPU 的 NUMA node 完全无关联。
现状
- 显式配置接口已存在:
training.dp_collector_cpu_ids(src/unilab/conf/sac/config.yaml:51、td3/config.yaml:46、flashsac/config.yaml:61 均默认为 null;测试见 tests/ipc/test_dp_launcher.py:528-535,文档见 docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md:79),经 EnvCfg.cpu_ids 生效(src/unilab/base/cpu_runtime.py)。
- 缺口在默认行为:用户不显式配置时,连续块切片不保证落在 rank GPU 所属的 NUMA node(跨 socket 编号不连续的主机上尤其明显),也不感知
training.devices 的选取。
- learner 与 collector 的 obs/action/权重 IPC 全走
/dev/shm,collector CPU 与 GPU 跨 socket 时 IPC 与 H2D 拷贝都跨 NUMA 互联。
建议方向(供 maintainer 判断)
- 默认切片从连续块改为按 rank GPU 的 NUMA node 从
/sys/devices/system/node/nodeN/cpulist 取亲和核区再分配;无 NUMA 信息或单 socket 主机回退现有连续块行为。
- 保留
training.dp_collector_cpu_ids 显式覆盖的优先级不变。
- 多 NUMA 主机检测到默认切片与 GPU NUMA 错配时输出 warning,引导用户显式配置。
与 #1505 的关系:#1505 记录整体拓扑感知缺失(rank 到 GPU 映射与 NCCL transport),本 issue 聚焦 collector CPU 切片的默认推导策略。
仅为问题记录与方向建议,不在本 issue 内实施。
背景
排查多 GPU rank 分配时发现:off-policy DP 下 collector 的 CPU 核区默认按
cpu_count // world_size切连续块(uni_rl/ipc/dp_launcher.pyresolve_collector_cpu_ids),与每个 rank 绑定 GPU 的 NUMA node 完全无关联。现状
training.dp_collector_cpu_ids(src/unilab/conf/sac/config.yaml:51、td3/config.yaml:46、flashsac/config.yaml:61均默认为 null;测试见tests/ipc/test_dp_launcher.py:528-535,文档见docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md:79),经EnvCfg.cpu_ids生效(src/unilab/base/cpu_runtime.py)。training.devices的选取。/dev/shm,collector CPU 与 GPU 跨 socket 时 IPC 与 H2D 拷贝都跨 NUMA 互联。建议方向(供 maintainer 判断)
/sys/devices/system/node/nodeN/cpulist取亲和核区再分配;无 NUMA 信息或单 socket 主机回退现有连续块行为。training.dp_collector_cpu_ids显式覆盖的优先级不变。与 #1505 的关系:#1505 记录整体拓扑感知缺失(rank 到 GPU 映射与 NCCL transport),本 issue 聚焦 collector CPU 切片的默认推导策略。
仅为问题记录与方向建议,不在本 issue 内实施。