自适应选择重计算

背景与挑战

Megatron重计算技术是优化内存使用的关键手段,通过避免冗余数据存储以减少内存占用。然而,传统的重计算策略往往预设固定模式,未能动态响应实际内存需求,限制了内存资源的高效利用。

解决方案

为了实现NPU内存资源的最大化利用并显著提升模型训练效率,我们引入了自适应选择重计算特性。这一创新机制能够智能调整训练过程中的内存分配,依据当前内存状况动态选择最佳的重计算策略。

自适应选择重计算特性由三大关键组件构成:

重计算策略搜索依赖SwapManager功能,及时将tensor换到CPU,避免OOM导致训练中断。自动选择重计算策略流程如下图所示。
图1 自动选择重计算策略流程
图2 SwapManager管理流程

使用场景

特别适用于训练阶段,尤其是当全重计算模式下NPU内存仍有较大剩余空间,想进行更细粒度的重计算以追求更优训练性能的场景。

使用方法

  • 自适应选择重计算暂只适用于--use-legacy-models。
  • 当前自适应选择性重计算与全重计算、选择重计算、重计算流水独立调度、激活函数重计算、预取特性swap-attention等特性均不兼容。
  • 由于自适应选择重计算特性修改了内存管理模块,打开会存在冲突,MindSpeed进行了assert判断。
  • 自适应重计算通过实现自身的allocator对OOM进行拦截,该allocator支持环境变量PYTORCH_NPU_ALLOC_CONF,详情可参见《环境变量参考》中的“PYTORCH_NPU_ALLOC_CONF”章节

使用效果

相较于全重计算模式,LLaMA2-7B模型训练场景下性能提升10%以上,显著优化了训练效率与资源利用。