执行摘要
- 一句话:为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优化趋势。
参与讨论