Prhub

#5627 [perf, trainer, training_utils, ray, worker] fix: Add set_numa_affinity() for engine workers: TrainingWorker.

原始 PR 作者 sheilaliuxl 合并时间 2026-03-23 13:55 文件变更 1 提交数 1 评论 6 代码增减 +3 / -1

执行摘要

为 TrainingWorker 添加 NUMA 亲和性设置,提升 GPU 训练性能 6.1%。

PR body中说明:'We find a consistent performance gap of sft_trainer.py vs sft_trainer_ray.py on SFT jobs on AWS p5 instances, and this PR reduces the gap though still not fully resolved'。目标是通过设置NUMA亲和性优化GPU性能,基于测试数据MFU提升6.1%。

建议技术管理者关注此PR以了解NUMA优化在分布式训练中的应用和硬件兼容性权衡;工程师可精读代码学习如何集成性能调优函数,但需注意NPU限制。

讨论亮点

review中gemini-code-assist[bot]指出:'set_numa_affinity() 当前在NPU系统上是no-op,性能提升仅限于GPU环境。' 作者回复:'Ack, this PR is to fix GPU issues and fully tested E2E on AWS p5 instances.' 讨论聚焦于硬件兼容性,结论是PR针对GPU优化,NPU限制未被解决。

实现拆解

实现集中在 verl/workers/engine_workers.py 文件。关键改动:在 TrainingWorker.__init__ 方法中,在初始化全局进程组后添加 set_numa_affinity() 调用,从 verl.utils.distributed 导入该函数。这是一个小范围变更,类似PR #3471 对Megatron的处理。

文件 模块 状态 重要度
verl/workers/engine_workers.py workers modified 5.0

关键符号

TrainingWorker.__init__ set_numa_affinity

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

NUMA 亲和性在 NPU 上的限制 性能

gemini-code-assist[bot] 指出 set_numa_affinity() 在 NPU 系统是 no-op,性能提升限于 GPU,基于代码实现和 TODO 注释。

结论:作者确认 PR 针对 GPU 问题,测试在 AWS p5 实例,NPU 限制未被解决但作为已知问题。 · acknowledged

风险与影响

风险包括:

1) NPU系统上 set_numa_affinity() 是no-op,导致这些硬件错过性能优化;
2) 依赖 verl.utils.distributed.set_numa_affinity() 函数的正确性,如果函数实现有误可能影响所有TrainingWorker;
3) 缺少对NPU场景的测试覆盖,可能引入未检测的兼容性问题。

影响:

1) 对GPU训练:显著提升MFU(+6.1%)并降低方差(-64.6%),改善分布式训练性能稳定性;
2) 对NPU训练:无影响,因函数为no-op;
3) 影响所有使用TrainingWorker的Ray训练作业,但对其他模块无直接影响。

NPU 兼容性限制 依赖外部函数

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论