Prhub

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

verl-project/verl · 作者 sheilaliuxl · 合并时间 2026-03-23 13:55

分析状态 已生成
文件变更 1提交数 1 · 评论 6
代码增减 +3 / -1
trainer perf worker

执行摘要

为 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

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

关键符号

TrainingWorker.__init__ set_numa_affinity

评论区精华

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 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:为TrainingWorker添加NUMA亲和性设置,提升GPU训练性能6.1%。
  • 推荐动作:建议技术管理者关注此PR以了解NUMA优化在分布式训练中的应用和硬件兼容性权衡;工程师可精读代码学习如何集成性能调优函数,但需注意NPU限制。

功能与动机

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%。

实现拆解

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

关键文件:

  • verl/workers/engine_workers.py(模块 workers): 唯一修改的文件,在TrainingWorker初始化中添加set_numa_affinity()调用,直接影响引擎工作进程性能和NUMA优化。

关键符号:TrainingWorker.init, set_numa_affinity

评论区精华

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限制未被解决。

  • NUMA亲和性在NPU上的限制 (performance): 作者确认PR针对GPU问题,测试在AWS p5实例,NPU限制未被解决但作为已知问题。

风险与影响

  • 风险:风险包括: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兼容性限制, 依赖外部函数

关联脉络

  • PR #3471 类似PR添加set_numa_affinity()用于Megatron: PR body中提及,同属性能优化,添加相同util函数到不同模块,显示跨模块NUMA优化趋势。

参与讨论