计算精度说明(必读)

随着昇腾AI处理器(以下简称为NPU)在深度学习中的广泛应用, 用户在使用NPU训练各种深度学习模型尤其是训练大语言模型时可能会遇到各种问题和困惑。NPU在AI处理器领域属于后来者,并且NPU与主流AI处理器在硬件、指令计算过程和浮点舍入截断模式方面存在差异。因此客户遇到问题和困惑时,往往会将原因归咎于这些天然差异,并且对这些差异存在很深的疑虑和担心。

本文中我们将介绍NPU与主流AI处理器之间的计算差异,并通过一些实验证明计算差异对训练结果没有显著影响,参见计算差异对训练结果的影响。大规模分布式训练所遇到的问题和困难也并非昇腾平台独有,精度调试过程案例中将介绍问题的来源、现象以及解决问题的思路和方法。

NPU与主流AI处理器之间的计算差异

NPU与主流AI处理器之间的计算差异主要为浮点舍入模式差异和计算过程差异。

精度调试的前提条件

小的计算差异在某些超参配置下(例如大学习率、 大adam_beta1、大adam_beta2)以及某些场景下(例如浅层参数中极小数值的梯度)会被放大,从而在训练稳定性的表现上出现很大差异。例如主流AI处理器或NPU其中一方不稳定(很多loss尖刺),或者双方都不稳定,这在大规模训练和训练对比实践中都非常常见。

小的计算差异会引起AI处理器(主流/NPU)训练的模型参数位于不同的loss landscape位置。因为loss landscape的复杂性,主流AI处理器/NPU的某一方可能处于地形图中非常陡峭的位置,从而在对比中比较不利。特别是当超参不合理时(如大学习率),这种对比的不确定性就更强。LLaMA2-13B模型在1e-3基础学习率下,主流AI处理器运行两次训练得到的loss曲线,如图1所示。图1中可见主流AI处理器运行两次训练得到的loss也很难对齐,尖刺发生的位置有很大不确定性。期望在训练不稳定情况下完全对齐,在主流AI处理器上也是不可能完成的任务。因此,精度调试特别是精度对齐的前提条件是要能稳定训练
图1 LLaMA2-13B模型上主流AI处理器的loss曲线图

计算差异对训练结果的影响

用户使用案例

精度调试过程案例

用户在实际使用时遇到的一些典型性能问题及其根因和解决方法:
  • 案例一:主流AI处理器/NPU的loss对齐

    用户使用高学习率1e-3训练LLaMA2-13B模型,在主流AI处理器和NPU上都发生训练不稳定问题,两者在loss尖刺处始终不能对齐。后来改为低学习率1e-4后,训练稳定性得到极大提升,并且两者的loss也能很好对齐。

  • 案例二:DeepSpeed bug引起的偶发loss尖刺

    DeepSpeed分布式优化器中存在计算通信同步bug,会导致脏数据进入,从而引起训练不稳定。这在主流AI处理器和NPU表现是等同的。

  • 案例三:LLaMA2-1B,7B和13B的训练稳定性问题和下游评测不达标问题

    一开始使用了错误的adam_beta2导致训练不稳定,修复后在13B语言模型上又遇到训练稳定性问题,调低学习率到1e-4并且关闭dropout后成功训练13B大语言模型,并且在各种下游评测任务上超出预期,实现了业务目标。