整网首个溢出节点分析
简介
在分析inf、nan的场景下,会采集多个rank下的多个step的dump数据,前面出现的异常会传播到同rank后续的节点,并通过通信算子传播到其他rank的后续节点中,因此如何分析首个nan出现的节点位置尤为重要。
整网首个溢出节点分析(overflow_check)可以对PyTorch的dump数据进行分析,在多卡场景下,检测到每张卡中产生inf/nan的节点。若是经过通信导致的inf/nan,可以分析并找出首个产生inf/nan的rank和节点。
使用前准备
环境准备
安装msProbe工具,详情请参见《msProbe安装指南》。
数据准备
采集精度数据,详情请参见PyTorch场景精度数据采集。
约束
当前仅支持分析PyTorch场景的dump数据。
使用说明
执行命令
msprobe overflow_check -i dump_step_path -o output_dir_path
| 参数 | 说明 |
|---|---|
| -i 或 --input_path | dump数据的目录。需指定到step层级,如-i /xxx/dump/step0/ |
| -o 或 --output_path | 输出文件的目录,可选,不填时默认在当前目录下创建 "./output/" 目录。 |
输出文件介绍
当日志打印
Cannot find any anomaly node, no need to generate analyze file.
时,分析认为不存在异常节点,不生成分析文件。
存在异常节点时,生成anomaly_analyze_{timestamp}.json文件,结构为:
{
"rank_0": [ // 卡号
{
"op_name": "Tensor.op_name.0.forward", // 节点名
"data_info": {
"input_args": [], // input_args数据
"input_kwargs": {}, // input_kwargs数据
"output": [] // output数据
},
"construct_info": [], // 节点层级数据
"stack_info": {} // 堆栈数据
}
]
}
异常判定
异常计算节点判定
当某个计算节点的输入值正常,即Max或Min中不存在inf或nan,而输出值存在异常时认为从此节点开始产生了溢出,并有可能向后传递。
异常通信节点判定
通信节点按照功能分为有向节点,如send, recv, scatter, gather, broadcast, reduce等,以及无向节点,如all_gather, all_reduce, reduce_scatter, all_to_all等。
对于有向节点,当src节点的input存在异常时,通常认为传入的数据中本身就存在异常,因此考虑异常节点发生在src节点所在rank的上一个或多个计算节点中;当src节点的input正常而output存在异常值,或dst节点的output存在异常值时,考虑是通信节点本身的操作产生了异常数据。
对于无向节点,当节点input存在异常时,认为传入的数据中本身就存在异常,因此考虑异常节点发生在src节点所在rank的上一个或多个计算节点中;当input正常而output异常时,考虑是通信节点本身的操作产生了异常数据。
顺序判定
对于相连接的有向通信算子,认为src节点的异常发生早于dst节点;对于无向通信算子,认为异常是同时发生的。
对于计算节点按照dump的顺序排序。