精度对齐

概述

精度对齐是模型迁移的核心验证环节,确保从GPU平台、其他框架的模型迁移至MindSpeed LLM后在功能正确性、数值精度和训练收敛度与原模型保持一致。大模型训练涉及数据、模型、框架、算子、硬件等诸多环节和技术层面,因此训练过程中可能产生精度问题,一般可分为模型精度问题和数值精度问题。

模型精度问题主要指模型从数据集中读取的数据、模型的训练超参数、模型结构甚至框架本身设计或使用过程等出现问题。模型精度问题对收敛有非常大的影响,需逐项仔细排除、分析,并结合实际情况进行调整。

数值精度问题主要指由于浮点数计算过程的有限字长效应、计算序、通信序或各种计算的数学表达式所带来的近似误差。计算数值的近似性一定概率上会影响模型的收敛性,但不能简单地认为计算过程差异一定会导致模型收敛出现问题。算子的数值精度是计算过程的基础,通常认为算子精度问题是大模型精度问题的来源之一,需要引起重视。但由于实现过程差异,不同硬件(如GPUCPU之间,GPU各版本之间)同样的计算过程,数值计算结果通常会有一定差异,在特定容限范围内,不会影响模型最终收敛。

问题场景

针对模型迁移场景,训练过程和结果与标杆(GPU或NPU上的其他框架)的训练过程与结果不一致且偏差超过容忍阈值,认为精度不对齐,具体场景可再细分为以下现象:

  • 首Step Loss差异,即第0步或前几步Loss与标杆存在差异,平均误差大于容忍阈值。
  • 长稳Loss差异,即前期Loss拟合,后期与标杆差异逐渐变大,平均误差大于容忍阈值。
  • 尖刺,即相较于标杆更频繁地出现Loss或Grad Norm陡增又快速跌落的现象。

指导

在定位精度问题之前,需要先排除不一致的因素干扰,并确保现象可复现,因此需要对以下CheckList做对比排查:

检查项 说明
版本对齐 确保第三方库版本一致,通过pip list检查torchtorch_nputransformers等版本是否对齐,通过git分支检查git仓库版本是否一致
配置对齐 对比训练日志或者启动脚本中的超参数和环境变量设置是否一致,如学习率lr、全局批次大小GBS、优化器类型等
模型结构对齐 在训练过程中打印双方模型结构进行对比
权重初始化对齐 确保训练前的初始化权重一致,确认加载同一个预训练模型或使用一样的初始化随机种子
数据读取对齐 检查从数据集中读取后并送入模型训练的数据是否一致

完成初步排查后,通常借助精度工具 msprobe对不同问题场景进行分析和定位,该工具提供了使用指导和大模型训练精度定位指南