配置文件介绍
-
当调用PrecisionDebugger接口执行dump或其他操作时,需要使用config.json文件;当未指定config.json时,将使用默认配置。
-
msProbe成功安装后,config.json一般位于如下目录:
/home/xxx/miniconda3/envs/xxx/lib/python3.xx/site-packages/msprobe/
参数介绍
通用配置
通用配置参数说明
| 参数 | 可选/必选 | 解释 |
|---|---|---|
| task | 可选 | dump的任务类型,str类型。可选参数: • "statistics":仅采集统计信息。 • "tensor":采集统计信息和完全复刻整网的真实数据。 • "acc_check":精度预检,仅PyTorch场景支持,采集数据时勿选。 • "overflow_check":溢出检测。 • "structure":仅采集模型结构以及调用栈信息,不采集具体数据。 默认值为"statistics"。 根据task参数取值的不同,可以配置不同场景参数,详细介绍请参见: • task配置为statistics • task配置为tensor • task配置为acc_check • task配置为overflow_check • task配置为structure • task配置为exception_dump 配置示例:"task": "tensor"。 |
| dump_path | 必选 | 设置dump数据目录路径,str类型。 配置示例:"dump_path": "./dump_path"。 |
| rank | 可选 | 指定对某张卡上的数据进行采集,list[Union[int, str]]类型,默认未配置(表示采集所有卡的数据),应配置元素为≥ 0的整数或类似"4-6"的字符串,且须配置实际可用的Rank ID。 • PyTorch场景:Rank ID从0开始计数,最大取值为所有节点可用卡总数-1,若所配置的值大于实际训练所运行的卡的Rank ID,则dump数据为空,比如当前环境Rank ID为0到7,实际训练运行0到3卡,此时若配置Rank ID为4或不存在的10等其他值,dump数据为空。 • MindSpore场景:所有节点的Rank ID均从0开始计数,最大取值为每个节点可用卡总数-1,config.json配置一次rank参数对所有节点同时生效。静态图L0级别dump暂不支持指定rank。 单卡训练时,rank必须为[],即空列表,不能指定rank。 配置示例:"rank": [1, "4-6"]。 |
| step | 可选 | 指定采集某个step的数据,list[Union[int, str]]类型。默认未配置,表示采集所有step数据。采集特定step时,须指定为训练脚本中存在的step,可逐个配置,也可以指定范围。 配置示例:"step": [0, 1 , 2, "4-6"]。 |
| level | 可选 | dump级别,str类型,根据不同级别采集不同数据。可选参数: • "L0":dump模块级精度数据,使用背景详细介绍请参见模块级精度数据dump说明。 • "L1":dump API级精度数据,默认值,仅PyTorch、MSAdapter以及MindSpore动态图场景支持。 • "L2":dump kernel级精度数据,PyTorch场景详细介绍见PyTorch场景kernel精度数据采集;MindSpore动态图场景详细介绍请参见MindSpore动态图场景kernel精度数据采集;MindSpore静态图场景详细介绍请参见《MindSpore场景精度数据采集》中的 "静态图场景精度数据采集功能介绍"小节。 • "mix":dump module模块级和API级精度数据,即"L0"+"L1",仅PyTorch、MSAdapter以及MindSpore动态图场景支持。 • "debug":单点保存功能,详细介绍请参见单点保存工具。 配置示例:"level": "L1"。 |
| async_dump | 可选 | 异步dump开关,bool类型,支持task为tensor或statistics模式,level支持L0、L1、mix、debug模式。可选参数true(开启)或false(关闭),默认为false。 配置为true后开启异步dump,即采集的精度数据会在当前step训练结束后统一落盘,训练过程中工具不触发同步操作。 由于使用该模式有显存溢出的风险,当task配置为tensor时,即真实数据的异步dump模式,必须配置list参数,指定需要dump的tensor 。 该模式下,summary_mode不支持md5值,也不支持复数类型tensor的统计量计算。 |
| precision | 可选 | 控制统计值计算所用精度,str类型,可选值["high", "low"],默认值为"low"。选择"high"时,统计量使用float32进行计算,会增加device内存占用,精度更高,但在处理较大数值时可能会导致显存溢出;为"low"时使用与原始数据相同的类型进行计算,device内存占用较少。 支持Pytorch、MindSpore动态图和MindSpore静态图O0/O1场景。 支持task配置为statistics或tensor,level配置为L0,L1,mix,debug。 |
模块级精度数据dump说明
大模型场景下,通常不是简单的利用自动迁移能力实现从GPU到NPU的训练脚本迁移,而是会对NPU网络进行一系列针对性的适配,因此,常常会造成迁移后的NPU模型存在部分子结构不能与GPU原始模型完全对应。模型结构不一致导致API调用类型及数量不一致,若直接按照API粒度进行精度数据dump和比对,则无法完全比对所有的API。
本小节介绍的功能是对模型中的大粒度模块进行数据dump,使其比对时,对于无法以API粒度比对的模块可以直接以模块粒度进行比对。
模块指的是继承nn.Module类(PyTorch与MSAdapter场景)或nn.Cell类(MindSpore场景)的子类,通常情况下这类模块就是一个小模型,可以被视为一个整体,dump数据时以模块为粒度进行dump。
特别地,在PyTorch场景中,为了规避BackwardHook函数的输出不能进行原地操作的框架限制,工具使用了torch._C._autograd._set_creation_meta接口对BackwardHook函数的输出张量进行属性重置,这可能会造成dump数据中缺少原地操作模块nn.ReLU(inplace=True)及其上一个模块的反向数据。
task配置为statistics
配置样例
参数说明
| 参数 | 可选/必选 | 解释 |
|---|---|---|
| scope | 可选 | PyTorch、MSAdapter以及MindSpore动态图场景dump范围,list[str]类型,默认未配置(list也未配置时表示dump所有API的数据)。详细配置方法请参见scope参数配置说明。 |
| list | 可选 | 自定义采集的算子列表,list[str]类型,默认未配置(scope也未配置时表示dump所有API的数据)。详细配置方法请参见list参数配置说明。 |
| tensor_list | 可选 | 自定义采集真实数据的算子列表,list[str]类型,默认未配置。详细配置方法请参见tensor_list参数配置说明。 PyTorch、MSAdapter以及MindSpore动态图场景目前只支持level配置为L0、L1和mix级别。 MindSpore静态图场景不支持。 |
| device | 可选 | 控制统计值计算所用的设备,可选值["device", "host"],默认值为"host"。使用device计算会比host有性能加速,只支持min/max/avg/l2norm统计量。 仅MindSpore静态图O0/O1场景支持。 |
| data_mode | 可选 | dump数据过滤,list[str]类型。详细配置方法请参见data_mode参数配置说明。 |
| summary_mode | 可选 | 控制dump文件输出的模式,支持PyTorch、MSAdapter、MindSpore动态图以及MindSpore静态图L2级别jit_level=O2场景和L0级别jit_level=O0/O1场景。详细配置方法请参见summary_mode参数配置说明。 |
task配置为tensor
配置样例
参数说明
| 参数 | 可选/必选 | 解释 |
|---|---|---|
| scope | 可选 | PyTorch、MSAdapter以及MindSpore动态图场景dump范围,list[str]类型,默认未配置(list也未配置时表示dump所有API的数据)。详细配置方法请参见scope参数配置说明。 |
| list | 可选 | 自定义采集的算子列表,list[str]类型,默认未配置(scope也未配置时表示dump所有API的数据)。详细配置方法请参见list参数配置说明。 |
| data_mode | 可选 | dump数据过滤,list[str]类型。详细配置方法请参见data_mode参数配置说明。 |
| file_format | 可选 | tensor数据的保存格式,str类型,仅支持MindSpore静态图场景的L2级别配置该字段,其他场景不生效。可选参数: • "bin":dump的tensor文件为二进制格式。 • "npy":dump的tensor文件后缀为.npy。 默认值为"npy"。 |
| summary_mode | 可选 | 控制dump文件输出的模式,支持PyTorch、MSAdapter、MindSpore动态图。可选参数: • md5:dump输出包含CRC-32值以及API统计信息的dump.json文件,用于验证数据的完整性。 • statistics:dump仅输出包含API统计信息的dump.json文件。 默认值为statistics。 |
| bench_path | 可选 | 自动控制在PyTorch确定性问题定位时进行md5实时差异分析,即dump存在差异的md5数据,str类型,默认未配置本参数。 需要在bench_path参数传入提前预置的md5数据路径(即在上一次dump操作时,summary_mode参数配置为md5),并且本次dump时同样配置summary_mode为md5。 配置本参数后,dump会判断本次任务中每个tensor与预置的md5数据的差异,识别到差异节点后,进行真实数据dump。 配置示例:"bench_path": "./bench_dump_path"。 |
| diff_nums | 可选 | 最大差异次数,int类型,默认为1,仅PyTorch md5实时差异分析场景支持(即配置bench_path)。 表示第N次差异出现后,不再进行差异分析。过程中检测到差异对应的输入输出数据均dump。 配置为-1时,表示持续检测溢出直到训练结束。 配置示例:"diff_nums": 3。 |
task配置为acc_check
配置样例
{
"task": "acc_check",
"dump_path": "/home/data_dump",
"rank": [],
"step": [],
"level": "L1",
"acc_check": {
"white_list": [],
"black_list": [],
"error_data_path": "./"
}
}
参数说明
| 参数 | 可选/必选 | 解释 |
|---|---|---|
| white_list | 可选 | API dump白名单,仅对指定的API进行dump。默认未配置白名单,即dump全量API数据。 配置示例:"white_list": ["conv1d", "conv2d"]。 |
| black_list | 可选 | API dump黑名单,被指定的API不进行 dump。默认未配置黑名单,即dump全量API数据。 配置示例:"black_list": ["conv1d", "conv2d"]。 |
| error_data_path | 可选 | 配置保存精度未达标的API输入输出数据路径,默认为当前路径。 配置示例:"error_data_path": "./"。 |
white_list和black_list同时配置时,二者配置的API名单若无交集,则白名单生效,若API名单存在交集,则白名单排除的部分以及交集的API不进行dump。
task配置为overflow_check
配置样例
参数说明
MindSpore静态图场景下,"level"须为"L2",且模型编译优化等级(jit_level)须为"O2"。
| 参数 | 可选/必选 | 解释 |
|---|---|---|
| check_mode | 可选 | 溢出类型,str类型,仅MindSpore v2.3.0以下版本的静态图场景支持,可选参数: • "aicore":开启AI Core的溢出检测。 • "atomic":开启Atomic的溢出检测。 • "all":开启算子的溢出检测。 默认值为all。 配置示例:"check_mode": "all"。 |
task配置为structure
structure模式仅采集模型结构,无其他特殊配置。
配置样例
task配置为exception_dump
MindSpore动态图场景下,"level"须为"L2"; MindSpore静态图场景下,"level"须为"L2",且模型编译优化等级(jit_level)须为"O0"或"O1"。
在运行过程中会在指定目录下生成kernel_graph_exception_dump.json的中间文件,该文件包含异常dump的相关设置。
除中间文件外的其他dump结果文件请参见MindSpore官方文档中的Ascend下O0/O1模式Dump数据对象目录和数据文件介绍。
配置样例:
附录
list参数配置说明
-
PyTorch、MSAdapter以及MindSpore动态图场景配置具体的API全称,dump该API数据。在PyTorch场景,如果level配置成L2,list参数为必填项。
配置示例:"list": ["Tensor.permute.1.forward", "Tensor.transpose.2.forward", "Torch.relu.3.backward"]。
-
PyTorch和MindSpore动态图场景在level为mix级别时可以配置模块名称,dump该模块展开数据(dump该模块从执行开始到执行结束期间的所有数据)。
配置示例:"list": ["Module.module.language_model.encoder.layers.0.mlp.ParallelMlp.forward.0"]或"list": ["Cell.network_with_loss.language_model.encoder.layers.0.mlp.ParallelMlp.forward.0"]。
-
PyTorch、MSAdapter以及MindSpore动态图场景指定某一类API,dump某一类的API级别输入输出数据。
配置示例:"list": ["relu"]。
PyTorch、MSAdapter以及MindSpore动态图场景在level为mix级别时,会dump名称中包含list中配置的字符串的API数据,还会将名称中包含list中配置的字符串的模块进行展开dump(dump该模块从执行开始到执行结束期间的所有数据)。
-
MindSpore静态图场景配置kernel_name,可以是算子的名称列表,也可以指定算子类型(jit_level=O2时不支持),还可以配置算子名称的正则表达式(当字符串符合“name-regex(xxx)”格式时),后台则会将其作为正则表达式。
配置示例:list: ["name-regex(Default/.+)"]。
可匹配算子名称以“Default/”开头的所有算子。
scope参数配置说明
该参数可以在[ ]内配置两个模块名或API名,要求列表长度必须为2,需要配置按照工具命名格式的完整模块名或API名称,用于锁定区间,dump该范围内的数据。
配置示例:"scope": ["Module.conv1.Conv2d.forward.0", "Module.fc2.Linear.forward.0"]或"scope": ["Cell.conv1.Conv2d.forward.0", "Cell.fc2.Dense.backward.0"]或"scope": ["Tensor.add.0.forward", "Functional.square.2.forward"]。
与level参数取值相关,level为L0级别时,可配置模块名;level为L1级别时,可配置API名,level为mix级别时,可配置为模块名或API名。
tensor_list参数配置说明
PyTorch、MSAdapter以及MindSpore动态图场景指定某一类API或模块,即会dump这一类API或模块输入输出的统计量信息和完整的tensor数据。
配置示例:"tensor_list": ["relu"]。
data_mode参数配置说明
-
PyTorch、MSAdapter以及MindSpore动态图场景:支持"all"、"forward"、"backward"、"input"和"output",除"all"外,其余参数可以自由组合。默认为["all"],即保存所有dump的数据。
配置示例:"data_mode": ["backward"](仅保存反向数据)或"data_mode": ["forward", "input"](仅保存前向的输入数据)。
-
MindSpore静态图场景:L0级别dump仅支持"all"、"forward"和"backward"参数;L2级别dump仅支持"all"、"input"和"output"参数。且各参数只能单独配置,不支持自由组合。
配置示例:"data_mode": ["all"]。
summary_mode参数配置说明
-
PyTorch、MSAdapter以及MindSpore动态图场景
str类型。
可选参数为:
- md5:dump输出包含CRC-32值以及API统计信息的dump.json文件,用于验证数据的完整性。
- statistics:dump仅输出包含API统计信息的dump.json文件。默认值为statistics。
配置示例:"summary_mode": "md5"。
-
MindSpore静态图场景
str或list[str]类型。
- L2级别jit_level=O2:支持上述"md5"和"statistics"参数的同时额外支持配置统计项列表,可选统计项为max、min、mean、l2norm,可从中任意选取组合搭配。其中mean、l2norm的结果为float数据格式。
- L2级别jit_level=O0/O1:支持上述"md5"和"statistics"参数的同时额外支持配置统计项列表,可选统计项为max、min、mean、l2norm、count、negative zero count、zero count、positive zero count、nan count、negative inf count、positive inf count、hash、md5,可从中任意选取组合搭配。其中,hash统计项在MindSpore 2.7.0及以前版本计算MD5值,在以后版本计算SHA1值。
- L0级别jit_level=O0/O1:仅支持上述"statistics"参数和max、min、mean、l2norm中任意组合搭配的统计项列表。
配置示例:"summary_mode": ["max", "min"]。
说明
PyTorch、MSAdapter以及MindSpore动态图场景,"summary_mode"配置为"md5"时,所使用的校验算法为CRC-32算法;MindSpore静态图场景,"summary_mode"配置为"md5"时,所使用的校验算法为MD5算法。