当前,大模型技术正经历爆发式发展——模型架构持续创新,算法性能不断突破,推动其在各领域的应用快速扩张。然而,随着模型规模的指数级增长和系统复杂度的提升,训练过程也面临着更严峻的技术挑战。在分布式训练场景下,数值异常问题(如负数开根号、梯度同步失败等)极易引发NaN(Not a Number)错误,导致训练任务失败。这对开发者提出了双重挑战:既需要扎实的数学与工程基础,又必须深度掌握模型实现细节。如何高效定位并解决NaN问题,已成为影响大模型训练效率的关键因素之一。
MindStudio Probe 训练状态观测预警功能,小时级定位NaN问题
MindStudio Probe(简称msProbe)工具提供了训练状态观测预警功能,能够采集模型训练过程中每一个模块的激活值、权重梯度等信息。开发者通过分析采集的数据,可以快速定位训练精度异常的源头,提高模型的训练效率和准确性。

在大模型训练过程中,一旦某个计算环节产生NaN,这个异常值就会通过前向传播和反向传播迅速扩散,导致后续所有相关计算结果均被"污染"为NaN。所以在定位NaN问题时,我们需要先找到NaN出现的第一现场,再依据模型整体计算流,逐层追溯问题根因。如上图步示,优先定界前反向阶段,再确定阶段内的异常模块,最终找到出现问题的API,完成问题定位。
本文将以常见的大模型加速库Megatron-LM为例,教你如何使用msProbe工具“打开”模型,快速定位NaN问题。
1 前向、反向阶段定界
首先确定NaN首次出现在前向计算还是反向传播阶段。常用的大模型加速库会在训练日志中打印每步的loss和grad norm。loss是模型在训练过程中衡量其性能的指标,它用来预测模型输出与目标值之间的差距,loss值越小意味着模型性能越好。grad norm是模型参数梯度的范数,通常用于衡量梯度的大小。过大的grad norm可能表明梯度爆炸,导致模型训练不稳定;过小的grad norm则可能表明梯度消失,同样会导致训练困难。
在定界时,通过判定日志中NaN出现的顺序,区分问题在前向阶段还是反向阶段。如果loss首先出现NaN,说明前向传播过程先出现异常,需要进一步确认激活值最早出现NaN的模块。如果是grad norm先出现NaN,则说明反向传播过程先出现异常,需要确认梯度最早出现NaN的模块。
2.1 前向阶段模块定界
msProbe训练状态观测预警功能借助PyTorch框架的hook机制,能灵活地监控大模型中每个module的激活值,并统计张量中出现NaN的数量。用户只需要在代码中导入工具的TrainerMon接口,根据需求完成参数配置,再运行模型即可开始采集。工具使能样例如下所示,用户可根据需要观测的指标,按指导资料调整monitor_config.json的配置。

下图展示了msProbe工具的采集结果,input.nans和output.nans两列统计了模块输入、输出张量中出现NaN的数量。图中,module_name为0.self_attention.dense_5的输出首次出现了4096个NaN,并导致后续模块的输入也包含NaN。module_name表示模型第0层的self_attention.dense模块的第6次前向计算,这样我们就确定了当前卡在训练时首次出现NaN的位置。此外,若存在张量并行场景,还需要进一步排查同一并行组中其他卡的相同位置是否有问题,判断NaN是来自通信传播还是当前卡的计算。

前向激活值的NaN数量统计
2.2 反向模块定界
通过msProbe训练状态观测预警功能,我们还可以采集权重聚合前后的梯度统计信息,这对于诊断梯度相关的问题非常有帮助。例如,在图 2 中,pre_grad.nans和post_grad.nans分别表示权重聚合前后梯度中NaN的数量,对比可以发现聚合前梯度正常(左侧),聚合后全都出现了NaN(右侧),这说明问题很可能出现在梯度聚合过程中,比如异步通信未同步等原因导致梯度聚合结果不正确,我们可以根据具体问题,结合聚合操作的实现进一步分析问题根因。

权重梯度的NaN数量统计
3 API定位
确定NaN出现的具体模块后,可以使用msProbe工具提供的数据采集功能采集API粒度的数据,用户只需要在代码中导入工具的PrecisionDebugger接口并完成对应参数配置,即可通过采集API数据找到最早出现NaN的API,锁定问题的最终源头,使用样例如下所示。

接下来,只需要修复API中存在的问题,重新启动训练进程,即可让大模型继续在AI领域的广阔天地中驰骋,发挥其强大的潜力。
msProbe工具除了训练状态观测预警功能外,还有训练数据采集、分级可视化构图比对等功能,我们将持续升级,欢迎广大开发者点击阅读原文,了解试用msProbe工具。
当前,大模型技术正经历爆发式发展——模型架构持续创新,算法性能不断突破,推动其在各领域的应用快速扩张。然而,随着模型规模的指数级增长和系统复杂度的提升,训练过程也面临着更严峻的技术挑战。在分布式训练场景下,数值异常问题(如负数开根号、梯度同步失败等)极易引发NaN(Not a Number)错误,导致训练任务失败。这对开发者提出了双重挑战:既需要扎实的数学与工程基础,又必须深度掌握模型实现细节。如何高效定位并解决NaN问题,已成为影响大模型训练效率的关键因素之一。
MindStudio Probe 训练状态观测预警功能,小时级定位NaN问题
MindStudio Probe(简称msProbe)工具提供了训练状态观测预警功能,能够采集模型训练过程中每一个模块的激活值、权重梯度等信息。开发者通过分析采集的数据,可以快速定位训练精度异常的源头,提高模型的训练效率和准确性。
在大模型训练过程中,一旦某个计算环节产生NaN,这个异常值就会通过前向传播和反向传播迅速扩散,导致后续所有相关计算结果均被"污染"为NaN。所以在定位NaN问题时,我们需要先找到NaN出现的第一现场,再依据模型整体计算流,逐层追溯问题根因。如上图步示,优先定界前反向阶段,再确定阶段内的异常模块,最终找到出现问题的API,完成问题定位。
本文将以常见的大模型加速库Megatron-LM为例,教你如何使用msProbe工具“打开”模型,快速定位NaN问题。
1 前向、反向阶段定界
首先确定NaN首次出现在前向计算还是反向传播阶段。常用的大模型加速库会在训练日志中打印每步的loss和grad norm。loss是模型在训练过程中衡量其性能的指标,它用来预测模型输出与目标值之间的差距,loss值越小意味着模型性能越好。grad norm是模型参数梯度的范数,通常用于衡量梯度的大小。过大的grad norm可能表明梯度爆炸,导致模型训练不稳定;过小的grad norm则可能表明梯度消失,同样会导致训练困难。
在定界时,通过判定日志中NaN出现的顺序,区分问题在前向阶段还是反向阶段。如果loss首先出现NaN,说明前向传播过程先出现异常,需要进一步确认激活值最早出现NaN的模块。如果是grad norm先出现NaN,则说明反向传播过程先出现异常,需要确认梯度最早出现NaN的模块。
2.1 前向阶段模块定界
msProbe训练状态观测预警功能借助PyTorch框架的hook机制,能灵活地监控大模型中每个module的激活值,并统计张量中出现NaN的数量。用户只需要在代码中导入工具的TrainerMon接口,根据需求完成参数配置,再运行模型即可开始采集。工具使能样例如下所示,用户可根据需要观测的指标,按指导资料调整monitor_config.json的配置。
下图展示了msProbe工具的采集结果,input.nans和output.nans两列统计了模块输入、输出张量中出现NaN的数量。图中,module_name为0.self_attention.dense_5的输出首次出现了4096个NaN,并导致后续模块的输入也包含NaN。module_name表示模型第0层的self_attention.dense模块的第6次前向计算,这样我们就确定了当前卡在训练时首次出现NaN的位置。此外,若存在张量并行场景,还需要进一步排查同一并行组中其他卡的相同位置是否有问题,判断NaN是来自通信传播还是当前卡的计算。
前向激活值的NaN数量统计
2.2 反向模块定界
通过msProbe训练状态观测预警功能,我们还可以采集权重聚合前后的梯度统计信息,这对于诊断梯度相关的问题非常有帮助。例如,在图 2 中,pre_grad.nans和post_grad.nans分别表示权重聚合前后梯度中NaN的数量,对比可以发现聚合前梯度正常(左侧),聚合后全都出现了NaN(右侧),这说明问题很可能出现在梯度聚合过程中,比如异步通信未同步等原因导致梯度聚合结果不正确,我们可以根据具体问题,结合聚合操作的实现进一步分析问题根因。
权重梯度的NaN数量统计
3 API定位
确定NaN出现的具体模块后,可以使用msProbe工具提供的数据采集功能采集API粒度的数据,用户只需要在代码中导入工具的PrecisionDebugger接口并完成对应参数配置,即可通过采集API数据找到最早出现NaN的API,锁定问题的最终源头,使用样例如下所示。
接下来,只需要修复API中存在的问题,重新启动训练进程,即可让大模型继续在AI领域的广阔天地中驰骋,发挥其强大的潜力。
msProbe工具除了训练状态观测预警功能外,还有训练数据采集、分级可视化构图比对等功能,我们将持续升级,欢迎广大开发者点击阅读原文,了解试用msProbe工具。