mindstudio-probe 1.2.2__py3-none-any.whl → 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/METADATA +3 -3
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/RECORD +143 -144
- msprobe/README.md +25 -20
- msprobe/core/common/const.py +110 -66
- msprobe/core/common/decorator.py +50 -0
- msprobe/core/common/exceptions.py +3 -1
- msprobe/core/common/file_utils.py +25 -2
- msprobe/core/common/utils.py +30 -34
- msprobe/core/compare/acc_compare.py +43 -74
- msprobe/core/compare/check.py +2 -6
- msprobe/core/compare/highlight.py +2 -0
- msprobe/core/compare/layer_mapping/layer_mapping.py +2 -1
- msprobe/core/compare/merge_result/merge_result.py +8 -2
- msprobe/core/compare/multiprocessing_compute.py +19 -12
- msprobe/core/compare/npy_compare.py +30 -12
- msprobe/core/compare/utils.py +20 -10
- msprobe/core/data_dump/api_registry.py +176 -0
- msprobe/core/data_dump/data_processor/base.py +2 -2
- msprobe/core/data_dump/data_processor/mindspore_processor.py +19 -32
- msprobe/core/data_dump/data_processor/pytorch_processor.py +45 -15
- msprobe/core/data_dump/json_writer.py +38 -35
- msprobe/core/grad_probe/constant.py +1 -0
- msprobe/core/grad_probe/grad_compare.py +1 -1
- msprobe/core/overflow_check/abnormal_scene.py +2 -0
- msprobe/docs/01.installation.md +2 -1
- msprobe/docs/02.config_introduction.md +17 -15
- msprobe/docs/05.data_dump_PyTorch.md +70 -2
- msprobe/docs/06.data_dump_MindSpore.md +33 -12
- msprobe/docs/07.accuracy_checker_PyTorch.md +11 -1
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +3 -1
- msprobe/docs/09.accuracy_checker_MindSpore.md +1 -1
- msprobe/docs/10.accuracy_compare_PyTorch.md +59 -33
- msprobe/docs/11.accuracy_compare_MindSpore.md +40 -16
- msprobe/docs/12.overflow_check_PyTorch.md +3 -1
- msprobe/docs/13.overflow_check_MindSpore.md +4 -2
- msprobe/docs/14.data_parse_PyTorch.md +1 -7
- msprobe/docs/18.online_dispatch.md +1 -1
- msprobe/docs/19.monitor.md +124 -62
- msprobe/docs/21.visualization_PyTorch.md +32 -13
- msprobe/docs/22.visualization_MindSpore.md +32 -13
- msprobe/docs/23.generate_operator_PyTorch.md +9 -9
- msprobe/docs/27.dump_json_instruction.md +278 -8
- msprobe/docs/28.kernel_dump_MindSpore.md +1 -1
- msprobe/docs/29.data_dump_MSAdapter.md +229 -0
- msprobe/docs/30.overflow_check_MSAdapter.md +31 -0
- msprobe/docs/FAQ.md +3 -11
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_match_info.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/mindspore/__init__.py +4 -3
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +6 -1
- msprobe/mindspore/api_accuracy_checker/api_runner.py +19 -9
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +2 -1
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +602 -0
- msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +41 -0
- msprobe/mindspore/api_accuracy_checker/data_manager.py +2 -1
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +2 -1
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
- msprobe/mindspore/common/const.py +61 -0
- msprobe/mindspore/common/utils.py +31 -19
- msprobe/mindspore/compare/ms_compare.py +27 -19
- msprobe/mindspore/compare/ms_graph_compare.py +6 -5
- msprobe/mindspore/debugger/debugger_config.py +6 -4
- msprobe/mindspore/debugger/precision_debugger.py +22 -10
- msprobe/mindspore/dump/dump_tool_factory.py +5 -3
- msprobe/mindspore/dump/hook_cell/api_register.py +142 -0
- msprobe/mindspore/dump/hook_cell/hook_cell.py +9 -10
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +24 -26
- msprobe/mindspore/dump/jit_dump.py +14 -9
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +22 -56
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +0 -1
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +10 -6
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +4 -2
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +6 -3
- msprobe/mindspore/grad_probe/global_context.py +2 -0
- msprobe/mindspore/grad_probe/grad_analyzer.py +2 -1
- msprobe/mindspore/grad_probe/hook.py +2 -4
- msprobe/mindspore/monitor/distributed/wrap_distributed.py +1 -1
- msprobe/mindspore/monitor/module_hook.py +354 -302
- msprobe/mindspore/monitor/utils.py +46 -4
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +5 -3
- msprobe/mindspore/service.py +23 -17
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -6
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +11 -6
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +2 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +4 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +5 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +25 -6
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +28 -19
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +3 -1
- msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +6 -0
- msprobe/pytorch/common/utils.py +29 -7
- msprobe/pytorch/debugger/precision_debugger.py +10 -1
- msprobe/pytorch/dump/module_dump/module_dump.py +4 -3
- msprobe/pytorch/dump/module_dump/module_processer.py +12 -6
- msprobe/pytorch/free_benchmark/common/utils.py +1 -1
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +1 -1
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -3
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +3 -3
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +1 -1
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +1 -1
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +1 -1
- msprobe/pytorch/function_factory.py +1 -1
- msprobe/pytorch/grad_probe/grad_monitor.py +2 -2
- msprobe/pytorch/hook_module/api_register.py +131 -0
- msprobe/pytorch/hook_module/hook_module.py +19 -14
- msprobe/pytorch/hook_module/register_optimizer_hook.py +2 -1
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +172 -75
- msprobe/pytorch/monitor/csv2tb.py +8 -2
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +8 -2
- msprobe/pytorch/monitor/module_hook.py +131 -105
- msprobe/pytorch/monitor/module_metric.py +3 -0
- msprobe/pytorch/monitor/optimizer_collect.py +55 -4
- msprobe/pytorch/monitor/unittest/test_monitor.py +1 -1
- msprobe/pytorch/monitor/utils.py +68 -1
- msprobe/pytorch/online_dispatch/compare.py +0 -2
- msprobe/pytorch/online_dispatch/dispatch.py +9 -0
- msprobe/pytorch/online_dispatch/dump_compare.py +3 -0
- msprobe/pytorch/online_dispatch/utils.py +3 -0
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +1 -6
- msprobe/pytorch/parse_tool/lib/utils.py +2 -1
- msprobe/pytorch/pt_config.py +11 -7
- msprobe/pytorch/service.py +11 -8
- msprobe/visualization/builder/graph_builder.py +44 -5
- msprobe/visualization/builder/msprobe_adapter.py +0 -1
- msprobe/visualization/compare/graph_comparator.py +42 -38
- msprobe/visualization/compare/mode_adapter.py +0 -19
- msprobe/visualization/graph/base_node.py +8 -1
- msprobe/visualization/graph/distributed_analyzer.py +1 -10
- msprobe/visualization/graph/graph.py +0 -11
- msprobe/visualization/graph/node_op.py +1 -2
- msprobe/visualization/graph_service.py +1 -1
- msprobe/visualization/utils.py +2 -33
- msprobe/mindspore/dump/hook_cell/api_registry.py +0 -207
- msprobe/mindspore/dump/hook_cell/wrap_api.py +0 -212
- msprobe/pytorch/hook_module/api_registry.py +0 -166
- msprobe/pytorch/hook_module/wrap_distributed.py +0 -79
- msprobe/pytorch/hook_module/wrap_functional.py +0 -66
- msprobe/pytorch/hook_module/wrap_npu_custom.py +0 -85
- msprobe/pytorch/hook_module/wrap_tensor.py +0 -69
- msprobe/pytorch/hook_module/wrap_torch.py +0 -84
- msprobe/pytorch/hook_module/wrap_vf.py +0 -60
- msprobe/pytorch/parse.py +0 -19
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/WHEEL +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/top_level.txt +0 -0
|
@@ -12,23 +12,23 @@
|
|
|
12
12
|
|
|
13
13
|
| 参数 | 解释 | 是否必选 |
|
|
14
14
|
| ----------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
15
|
-
| task | dump 的任务类型,str 类型。可选参数:<br/> "statistics":仅采集统计信息,默认值;<br/> "tensor":采集统计信息和完全复刻整网的真实数据;<br/> "run_ut":精度预检,仅 PyTorch 场景支持,采集数据时勿选;<br/> "overflow_check":溢出检测;<br/> "free_benchmark"
|
|
15
|
+
| task | dump 的任务类型,str 类型。可选参数:<br/> "statistics":仅采集统计信息,默认值;<br/> "tensor":采集统计信息和完全复刻整网的真实数据;<br/> "run_ut":精度预检,仅 PyTorch 场景支持,采集数据时勿选;<br/> "overflow_check":溢出检测;<br/> "free_benchmark":无标杆比对,不支持 MSAdapter 场景;<br/> "grad_probe":梯度监控, 不支持 MSAdapter 场景; <br/> "structure":仅采集模型结构以及调用栈信息,不采集具体数据。 <br/> 根据 task 参数取值的不同,可以配置不同场景参数,详见:<br/>[1.2 task 配置为 statistics](#12-task-配置为-statistics),<br/>[1.3 task 配置为 tensor](#13-task-配置为-tensor),<br/>[1.4 task 配置为 run_ut](#14-task-配置为-run_ut),<br/>[1.5 task 配置为 overflow_check](#15-task-配置为-overflow_check),<br/>[1.6 task 配置为 free_benchmark](#16-task-配置为-free_benchmark),<br/>[1.7 task 配置为 grad_probe](#17-task-配置为-grad_probe)。 <br/> **配置示例**:"task": "tensor"。 | 否 |
|
|
16
16
|
| dump_path | 设置 dump 数据目录路径,str 类型。<br/> **配置示例**:"dump_path": "./dump_path"。 | 是 |
|
|
17
17
|
| rank | 指定对某张卡上的数据进行采集,list[Union[int, str]] 类型,默认未配置(表示采集所有卡的数据),应配置元素为 ≥0 的整数或类似"4-6"的字符串,且须配置实际可用的 Rank ID。<br/> PyTorch 场景: Rank ID 从 0 开始计数,最大取值为所有节点可用卡总数-1,若所配置的值大于实际训练所运行的卡的 Rank ID,则 dump 数据为空,比如当前环境 Rank ID 为 0 到 7,实际训练运行 0 到 3 卡,此时若配置 Rank ID 为 4 或不存在的 10 等其他值,dump 数据为空。<br/> MindSpore 场景:所有节点的 Rank ID 均从 0 开始计数,最大取值为每个节点可用卡总数-1,config.json 配置一次 rank 参数对所有节点同时生效。<br/> 注意,单卡训练时,rank必须为[],即空列表,不能指定rank。<br/>**配置示例**:"rank": [1, "4-6"]。 | 否 |
|
|
18
18
|
| step | 指定采集某个 step 的数据,list[Union[int, str]] 类型。默认未配置,表示采集所有 step 数据。采集特定 step 时,须指定为训练脚本中存在的 step,可逐个配置,也可以指定范围。<br/> **配置示例**:"step": [0, 1 , 2, "4-6"]。 | 否 |
|
|
19
|
-
| level | dump 级别,str 类型,根据不同级别采集不同数据。可选参数:<br/>"L0":dump 模块级精度数据,仅 PyTorch
|
|
19
|
+
| level | dump 级别,str 类型,根据不同级别采集不同数据。可选参数:<br/>"L0":dump 模块级精度数据,仅 PyTorch、MSAdapter 以及 MindSpore 动态图场景支持,使用背景详见 [1.1.1 模块级精度数据 dump 说明](#111-模块级精度数据-dump-说明);<br/>"L1":dump API 级精度数据,默认值,仅 PyTorch、MSAdapter 以及 MindSpore 动态图场景支持;<br/>"L2":dump kernel 级精度数据,PyTorch 场景详细介绍见 [PyTorch 场景的 kernel dump 说明](./04.kernel_dump_PyTorch.md);MindSpore 动态图场景详细介绍见 [MindSpore 动态图场景的 kernel dump 说明](./28.kernel_dump_MindSpore.md);MindSpore 静态图场景详细介绍见《MindSpore 场景的数据采集》中的 ["**8.1 静态图场景**"](./06.data_dump_MindSpore.md#81-静态图场景)小节;<br/>"mix":dump module 模块级和 API 级精度数据,即"L0"+"L1",仅 PyTorch、MSAdapter 以及 MindSpore 动态图场景支持。<br/>"debug":单点保存功能,细节详见[单点保存工具 README](./28.debugger_save_instruction.md)<br/> **配置示例**:"level": "L1"。 | 否 |
|
|
20
20
|
| enable_dataloader | 自动控制开关,bool 类型,仅 PyTorch 场景支持。可选参数 true(开启)或 false(关闭),默认为 false。配置为 true 后自动识别 step 参数指定的迭代,并在该迭代执行完成后退出训练,此时 start、stop 和 step 函数可不配置,开启该开关要求训练脚本是通过 torch.utils.data.dataloader 方式加载数据。仅支持 PyTorch 单卡训练使用,分布式训练场景下存在数据 dump 不全问题。 **这个特性下个版本将被废弃** | 否 |
|
|
21
21
|
| async_dump | 异步 dump 开关,bool 类型。可选参数 true(开启)或 false(关闭),默认为 false。配置为 true 后开启异步 dump,即采集的精度数据会在当前 step 训练结束后统一落盘,训练过程中工具不触发同步操作。由于使用该模式有**显存溢出**的风险,当 task 配置为 tensor 时,即真实数据的异步dump模式,必须配置 [list](#13-task-配置为-tensor) 参数,指定需要 dump 的 tensor 。该模式暂不支持复数类型 tensor <br/>的统计量计算。 | 否 |
|
|
22
22
|
|
|
23
23
|
#### 1.1.1 模块级精度数据 dump 说明
|
|
24
24
|
|
|
25
|
-
仅 PyTorch
|
|
25
|
+
仅 PyTorch、MSAdapter以及 MindSpore 动态图场景支持。
|
|
26
26
|
|
|
27
27
|
大模型场景下,通常不是简单的利用自动迁移能力实现从 GPU 到 NPU 的训练脚本迁移,而是会对 NPU 网络进行一系列针对性的适配,因此,常常会造成迁移后的 NPU 模型存在部分子结构不能与 GPU 原始模型完全对应。模型结构不一致导致 API 调用类型及数量不一致,若直接按照 API 粒度进行精度数据 dump 和比对,则无法完全比对所有的 API。
|
|
28
28
|
|
|
29
29
|
本小节介绍的功能是对模型中的大粒度模块进行数据 dump,使其比对时,对于无法以 API 粒度比对的模块可以直接以模块粒度进行比对。
|
|
30
30
|
|
|
31
|
-
模块指的是继承 nn.Module 类(PyTorch场景)或 nn.Cell 类(MindSpore场景)的子类,通常情况下这类模块就是一个小模型,可以被视为一个整体,dump 数据时以模块为粒度进行 dump。
|
|
31
|
+
模块指的是继承 nn.Module 类(PyTorch 与 MSAdapter 场景)或 nn.Cell 类(MindSpore 场景)的子类,通常情况下这类模块就是一个小模型,可以被视为一个整体,dump 数据时以模块为粒度进行 dump。
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
@@ -36,21 +36,23 @@
|
|
|
36
36
|
|
|
37
37
|
<table>
|
|
38
38
|
<tr><th>参数</th><th>解释</th><th>是否必选</th></tr>
|
|
39
|
-
<tr><td>scope</td><td>PyTorch
|
|
39
|
+
<tr><td>scope</td><td>PyTorch、MSAdapter 以及 MindSpore 动态图场景 dump 范围,list[str] 类型,默认未配置(list 也未配置时表示 dump 所有 API 的数据)。该参数可以在 [ ] 内配置两个模块名或 API 名,要求列表长度必须为2,需要配置按照工具命名格式的完整模块名或API名称,用于锁定区间,dump 该范围内的数据。<br/><b>配置示例</b>:
|
|
40
40
|
"scope": ["Module.conv1.Conv2d.forward.0", "Module.fc2.Linear.forward.0"],
|
|
41
41
|
或 "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名。</td><td>否</td></tr>
|
|
42
42
|
<tr><td rowspan="4">list</td><td>自定义采集的算子列表,list[str] 类型,默认未配置(scope 也未配置时表示 dump 所有 API 的数据),包含以下配置方法:</td><td rowspan="4">否</td></tr>
|
|
43
|
-
<tr><td>PyTorch
|
|
43
|
+
<tr><td>PyTorch、MSAdapter 以及 MindSpore 动态图场景配置具体的 API 全称,dump 该 API 数据。在 PyTorch 场景,如果 level 配置成 L2,该配置为必填项。<br/><b>配置示例</b>:"list": ["Tensor.permute.1.forward", "Tensor.transpose.2.forward", "Torch.relu.3.backward"]。<br/> PyTorch 和 MindSpore 动态图场景在level为 mix 级别时可以配置模块名称,dump该模块展开数据 (dump该模块从执行开始到执行结束期间的所有数据)。
|
|
44
44
|
<br/><b>配置示例</b>:"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"]</td></tr>
|
|
45
|
-
<tr><td>PyTorch
|
|
46
|
-
<tr><td>MindSpore 静态图场景配置 kernel_name,可以是算子的名称列表,也可以指定算子类型(
|
|
45
|
+
<tr><td>PyTorch、MSAdapter 以及 MindSpore 动态图场景指定某一类 API,dump 某一类的 API 级别输入输出数据。<br/><b>配置示例</b>:"list": ["relu"]。 <br/> PyTorch、MSAdapter 以及 MindSpore 动态图场景在level为 mix 级别时, 会dump名称中包含list中配置的字符串的API数据,还会将名称中包含list中配置的字符串的模块进行展开dump (dump该模块从执行开始到执行结束期间的所有数据)。</td></tr>
|
|
46
|
+
<tr><td>MindSpore 静态图场景配置 kernel_name,可以是算子的名称列表,也可以指定算子类型(jit_level=O2 时不支持),还可以配置算子名称的正则表达式(当字符串符合“name-regex(xxx)”格式时,后台则会将其作为正则表达式。<br/><b>配置示例</b>:list: ["name-regex(Default/.+)"]<br/>可匹配算子名称以“Default/”开头的所有算子。</td></tr>
|
|
47
47
|
<tr><td rowspan="3">data_mode</td><td>dump 数据过滤,str 类型。</td><td rowspan="3">否</td></tr>
|
|
48
|
-
<tr><td>PyTorch
|
|
48
|
+
<tr><td>PyTorch、MSAdapter 以及 MindSpore 动态图场景:支持"all"、"forward"、"backward"、"input"和"output",除"all"外,其余参数可以自由组合。默认为["all"],即保存所有 dump 的数据。<br/> <b>配置示例</b>:"data_mode": ["backward"] (仅保存反向数据)或 "data_mode": ["forward", "input"](仅保存前向的输入数据)。</td></tr>
|
|
49
49
|
<tr><td>MindSpore 静态图场景:仅支持"all"、"input"和"output"参数,且各参数只能单独配置,不支持自由组合。<br/><b>配置示例</b>:"data_mode": ["all"]。</td></tr>
|
|
50
|
-
<tr><td rowspan="
|
|
50
|
+
<tr><td rowspan="3">summary_mode</td><td>控制 dump 文件输出的模式,str 类型,支持 PyTorch、MSAdapter、MindSpore 动态图以及 MindSpore 静态图 jit_level=O2 场景。</td><td rowspan="3">否</td></tr>
|
|
51
|
+
<tr><td>PyTorch、MSAdapter 以及 MindSpore 动态图场景:可选参数为<br/> md5:dump 输出包含 CRC-32 值以及 API 统计信息的 dump.json 文件,用于验证数据的完整性;<br/> statistics:dump 仅输出包含 API 统计信息的 dump.json 文件,默认值。<br/><b>配置示例</b>:"summary_mode": "md5"。</td></tr>
|
|
52
|
+
<tr><td>MindSpore 静态图 jit_level=O2 场景:支持上述配置的同时额外支持配置统计项列表,可选统计项为max、min、mean、l2norm,可从中任意选取组合搭配。其中mean、l2norm的结果为float数据格式。<br/><b>配置示例</b>:"summary_mode": ["max", "min"]。</td></tr>
|
|
51
53
|
</table>
|
|
52
54
|
|
|
53
|
-
**说明**:"summary_mode"配置为"md5"时,所使用的校验算法为CRC-32算法。
|
|
55
|
+
**说明**:"summary_mode" 配置为 "md5" 时,所使用的校验算法为 CRC-32 算法。
|
|
54
56
|
|
|
55
57
|
### 1.3 task 配置为 tensor
|
|
56
58
|
|
|
@@ -86,16 +88,16 @@
|
|
|
86
88
|
|
|
87
89
|
### 1.5 task 配置为 overflow_check
|
|
88
90
|
|
|
89
|
-
PyTorch
|
|
91
|
+
PyTorch、MSAdapter 以及 MindSpore 动态图场景下,"level"须为"L0"或"L1";MindSpore 静态图场景下,"level"须为"L2",且模型编译优化等级(jit_level)须为"O2"。
|
|
90
92
|
|
|
91
93
|
| 参数 | 解释 | 是否必选 |
|
|
92
94
|
| ------------- | ---------------------- | -------- |
|
|
93
|
-
| overflow_nums | 最大溢出次数,int 类型,默认为 1,仅 PyTorch
|
|
94
|
-
| check_mode | 溢出类型,str 类型,仅 MindSpore
|
|
95
|
+
| overflow_nums | 最大溢出次数,int 类型,默认为 1,仅 PyTorch、MSAdapter 以及 MindSpore 动态图场景支持。表示第 N 次溢出后,不再进行溢出检测。过程中检测到溢出 API 对应的 输入输出 数据均 dump。<br/>**配置示例**:"overflow_nums": 3。配置为 -1 时,表示持续检测溢出直到训练结束。 | 否 |
|
|
96
|
+
| check_mode | 溢出类型,str 类型,仅 MindSpore v2.3.0 以下版本的静态图场景支持,可选参数:<br/>"aicore":开启 AI Core 的溢出检测;<br/>"atomic":开启 Atomic 的溢出检测;<br/>"all":开启算子的溢出检测,默认值。<br/>**配置示例**:"check_mode": "all"。 | 否 |
|
|
95
97
|
|
|
96
98
|
### 1.6 task 配置为 free_benchmark
|
|
97
99
|
|
|
98
|
-
仅 PyTorch
|
|
100
|
+
仅 PyTorch 与 MindSpore 动态图场景支持,且"level"为"L1"。
|
|
99
101
|
|
|
100
102
|
- task 配置为 free_benchmark 时,开启**无标杆比对**,在 NPU 环境下通过对当前模型 API 的输入添加扰动因子,二次执行,将得到的输出与未添加扰动因子前的输出进行比对,从而**得出该模型中可能存在因迁移等变化导致精度降低的 API**。
|
|
101
103
|
|
|
@@ -34,6 +34,8 @@ level 配置为"L0"或"mix"时,必须在该接口或 **start** 接口中配置
|
|
|
34
34
|
|
|
35
35
|
此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
|
|
36
36
|
|
|
37
|
+
注:此接口的初始化需与采集目标在同一个进程中,否则将无法采集目标数据。
|
|
38
|
+
|
|
37
39
|
### 1.2 start
|
|
38
40
|
|
|
39
41
|
**功能说明**:启动精度数据采集。在模型初始化之后的位置添加。需要与 stop 函数一起添加在 for 循环内。
|
|
@@ -183,10 +185,25 @@ save(variable, name, save_backward=True)
|
|
|
183
185
|
**参数说明**:
|
|
184
186
|
| 参数名称 | 参数含义 | 支持数据类型 | 是否必选|
|
|
185
187
|
| ---------- | ------------------| ------------------- | ------------------- |
|
|
186
|
-
| variable | 需要保存的变量 |dict, list, torch.tensor, int, float, str | 是 |
|
|
188
|
+
| variable | 需要保存的变量 |dict, list, tuple, torch.tensor, int, float, str | 是 |
|
|
187
189
|
| name | 指定的名称 | str | 是 |
|
|
188
190
|
| save_backward | 是否保存反向数据 | boolean | 否 |
|
|
189
191
|
|
|
192
|
+
### 1.10 set_init_step
|
|
193
|
+
|
|
194
|
+
**功能说明**:设置起始step数,step数默认从0开始计数,使用该接口后step从指定值开始计数。该函数需要写在训练迭代的循环开始前,不能写在循环内。
|
|
195
|
+
|
|
196
|
+
**原型**:
|
|
197
|
+
|
|
198
|
+
```Python
|
|
199
|
+
debugger.set_init_step(step)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**参数说明**:
|
|
203
|
+
|
|
204
|
+
1.step: 指定的起始step数。
|
|
205
|
+
|
|
206
|
+
|
|
190
207
|
## 2 示例代码
|
|
191
208
|
|
|
192
209
|
### 2.1 快速上手
|
|
@@ -321,6 +338,57 @@ if __name__ == "__main__":
|
|
|
321
338
|
debugger.stop()
|
|
322
339
|
```
|
|
323
340
|
|
|
341
|
+
### 2.5 跨文件采集数据
|
|
342
|
+
为了确保所有API都被工具封装,PrecisionDebugger的实例化通常放在训练工程的入口位置,但有的时候,模型定义会在另一个文件中。 假设有两个文件,train.py(为训练工程入口)module.py(为模型定义文件),为了采集module.py中定义的ModuleOP模块中某些子模块或API的前反向数据,需要在train.py和module.py文件中分别导入PrecisionDebugger并进行如下配置。
|
|
343
|
+
|
|
344
|
+
train.py文件:
|
|
345
|
+
|
|
346
|
+
```Python
|
|
347
|
+
# 根据需要import包
|
|
348
|
+
import torch
|
|
349
|
+
from module import ModuleOP
|
|
350
|
+
|
|
351
|
+
# 导入工具的数据采集接口
|
|
352
|
+
from msprobe.pytorch import PrecisionDebugger
|
|
353
|
+
|
|
354
|
+
# 将PrecisionDebugger的实例化放在文件的开始位置,即导包后的位置,确保所有API都被封装
|
|
355
|
+
debugger = PrecisionDebugger(config_path='./config.json')
|
|
356
|
+
|
|
357
|
+
if __name__ == "__main__":
|
|
358
|
+
module = ModuleOP()
|
|
359
|
+
|
|
360
|
+
x = torch.randn(10, 8)
|
|
361
|
+
out = module(x)
|
|
362
|
+
loss = out.sum()
|
|
363
|
+
loss.backward()
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
module.py文件:
|
|
367
|
+
|
|
368
|
+
```Python
|
|
369
|
+
import torch
|
|
370
|
+
import torch.nn as nn
|
|
371
|
+
import torch.nn.functional as F
|
|
372
|
+
|
|
373
|
+
from msprobe.pytorch import PrecisionDebugger
|
|
374
|
+
|
|
375
|
+
# 定义网络
|
|
376
|
+
class ModuleOP(nn.Module):
|
|
377
|
+
def __init__(self) -> None:
|
|
378
|
+
super().__init__()
|
|
379
|
+
self.linear_1 = nn.Linear(in_features=8, out_features=4)
|
|
380
|
+
self.linear_2 = nn.Linear(in_features=4, out_features=2)
|
|
381
|
+
|
|
382
|
+
def forward(self, x):
|
|
383
|
+
PrecisionDebugger.start()
|
|
384
|
+
x1 = self.linear_1(x)
|
|
385
|
+
PrecisionDebugger.stop()
|
|
386
|
+
x2 = self.linear_2(x1)
|
|
387
|
+
r1 = F.relu(x2)
|
|
388
|
+
return r1
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
|
|
324
392
|
## 3 dump 结果文件介绍
|
|
325
393
|
|
|
326
394
|
训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。目录结构示例如下:
|
|
@@ -355,7 +423,7 @@ if __name__ == "__main__":
|
|
|
355
423
|
```
|
|
356
424
|
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
357
425
|
* `dump_tensor_data`:保存采集到的张量数据。
|
|
358
|
-
* `dump.json`: 保存API或Module前反向数据的统计量信息。包含dump数据的API名称或Module名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#1-
|
|
426
|
+
* `dump.json`: 保存API或Module前反向数据的统计量信息。包含dump数据的API名称或Module名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#1-PyTorch场景下的dump.json文件)。
|
|
359
427
|
* `stack.json`:API/Module的调用栈信息。
|
|
360
428
|
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
361
429
|
|
|
@@ -31,7 +31,7 @@ dump 的"tensor"模式采集数据量大小,可以参考[数据量基线](data
|
|
|
31
31
|
## 5. 场景介绍
|
|
32
32
|
|
|
33
33
|
### 5.1 静态图场景
|
|
34
|
-
在静态图场景下,msprobe 仅支持 **L2 Level**
|
|
34
|
+
在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集,且当 MindSpore 版本高于 2.5.0 时,必须使用编包时添加了`--include-mod=adump`选项的 mindstudio-probe whl 包进行 msprobe 工具安装。
|
|
35
35
|
- **L2 Level(Kernel 级)** :采集底层算子的输入输出数据,适用于深入分析算子级别的精度问题。
|
|
36
36
|
|
|
37
37
|
采集方式请参见[示例代码 > 静态图场景](#71-静态图场景)。详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#2-mindspore-静态图场景) 中的“MindSpore 静态图场景”。
|
|
@@ -144,13 +144,27 @@ save(variable, name, save_backward=True)
|
|
|
144
144
|
**参数说明**:
|
|
145
145
|
| 参数名称 | 参数含义 | 支持数据类型 | 是否必选|
|
|
146
146
|
| ---------- | ------------------| ------------------- | ------------------- |
|
|
147
|
-
| variable | 需要保存的变量 |dict, list, torch.tensor, int, float, str | 是 |
|
|
147
|
+
| variable | 需要保存的变量 |dict, list, tuple, torch.tensor, int, float, str | 是 |
|
|
148
148
|
| name | 指定的名称 | str | 是 |
|
|
149
149
|
| save_backward | 是否保存反向数据 | boolean | 否 |
|
|
150
150
|
|
|
151
151
|
|
|
152
|
+
#### 6.1.6 set_init_step
|
|
152
153
|
|
|
153
|
-
|
|
154
|
+
**功能说明**:设置起始step数,step数默认从0开始计数,使用该接口后step从指定值开始计数。该函数需要写在训练迭代的循环开始前,不能写在循环内。。
|
|
155
|
+
|
|
156
|
+
**原型**:
|
|
157
|
+
|
|
158
|
+
```Python
|
|
159
|
+
set_init_step(step)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**参数说明**:
|
|
163
|
+
|
|
164
|
+
1.step: 指定的起始step数。
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
### 6.2 msprobe.mindspore.MsprobeStep
|
|
154
168
|
|
|
155
169
|
**功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
|
|
156
170
|
|
|
@@ -164,7 +178,17 @@ MsprobeStep(debugger)
|
|
|
164
178
|
|
|
165
179
|
1. debugger:PrecisionDebugger对象。
|
|
166
180
|
|
|
167
|
-
### 6.3 msprobe.mindspore.
|
|
181
|
+
### 6.3 msprobe.mindspore.MsprobeInitStep
|
|
182
|
+
|
|
183
|
+
**功能说明**:MindSpore Callback 类,自动获取并设置初始 step 值。仅适用于静态图 O0/O1 模式的断点续训场景。
|
|
184
|
+
|
|
185
|
+
**原型**:
|
|
186
|
+
|
|
187
|
+
```Python
|
|
188
|
+
MsprobeInitStep()
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 6.4 msprobe.mindspore.seed_all
|
|
168
192
|
|
|
169
193
|
**功能说明**:用于固定网络中的随机性和开启确定性计算。
|
|
170
194
|
|
|
@@ -181,9 +205,6 @@ seed_all(seed=1234, mode=False, rm_dropout=True)
|
|
|
181
205
|
|
|
182
206
|
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例:rm_dropout=True。该参数设置为 True 后,将会使mindspore.ops.Dropout,mindspore.ops.Dropout2D,mindspore.ops.Dropout3D,mindspore.mint.nn.Dropout和mindspore.mint.nn.functional.dropout失效,以避免因随机dropout造成的网络随机性。建议在采集mindspore数据前开启。注意:通过rm_dropout控制dropout失效或生效需要在初始化Dropout实例前调用才能生效。
|
|
183
207
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
208
|
## 7. 示例代码
|
|
188
209
|
|
|
189
210
|
### 7.1 静态图场景
|
|
@@ -303,9 +324,10 @@ trainer.train(1, train_dataset)
|
|
|
303
324
|
|
|
304
325
|
训练结束后,数据将保存在 `dump_path` 指定的目录下。
|
|
305
326
|
|
|
306
|
-
若jit_level=O2,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
|
|
327
|
+
若jit_level=O2,MindSpore 版本不低于 2.5.0,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
|
|
307
328
|
```
|
|
308
329
|
├── dump_path
|
|
330
|
+
│ ├── acl_dump_{device_id}.json
|
|
309
331
|
│ ├── rank_0
|
|
310
332
|
│ | ├── {timestamp}
|
|
311
333
|
│ | │ ├── step_0
|
|
@@ -329,10 +351,9 @@ trainer.train(1, train_dataset)
|
|
|
329
351
|
**说明**
|
|
330
352
|
1. 若配置文件中指定落盘npy格式,但是实际数据格式不在npy支持范围内(如bf16、int4等),则该tensor会以原始码流落盘,并不会转换为npy格式。
|
|
331
353
|
2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
|
|
354
|
+
3. acl_dump_{device_id}.json 为在 Dump 接口调用过程中生成的中间文件,一般情况下无需关注。
|
|
332
355
|
|
|
333
|
-
|
|
334
|
-
其他场景请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
|
|
335
|
-
|
|
356
|
+
其他场景下,除 kernel_kbyk_dump.json(jit_level=O0/O1)、kernel_graph_dump.json(jit_level=O2)等无需关注的中间文件外的其他 dump 结果文件请参见 MindSpore 官方文档中的[ Ascend 下 O0/O1 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)与[ Ascend 下 O2 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D-1)。
|
|
336
357
|
### 8.2 动态图场景
|
|
337
358
|
|
|
338
359
|
dump 结果目录结构示例如下:
|
|
@@ -372,7 +393,7 @@ dump 结果目录结构示例如下:
|
|
|
372
393
|
|
|
373
394
|
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
374
395
|
* `dump_tensor_data`:保存采集到的张量数据。
|
|
375
|
-
* `dump.json`: 保存API或Cell前反向数据的统计量信息。包含dump数据的API名称或Cell名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#2-
|
|
396
|
+
* `dump.json`: 保存API或Cell前反向数据的统计量信息。包含dump数据的API名称或Cell名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#2-MindSpore场景下的dump.json文件)。
|
|
376
397
|
* `stack.json`:API/Cell的调用栈信息。
|
|
377
398
|
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
378
399
|
|
|
@@ -107,7 +107,7 @@ msprobe -f pytorch multi_run_ut -api_info ./dump_path/step{step_number}/rank{ran
|
|
|
107
107
|
| -save_error_data | 保存精度未达标的 API 输入输出数据。 | 否 |
|
|
108
108
|
| -o 或 --out_path | 指定 run_ut 执行结果存盘路径,默认“./”。 | 否 |
|
|
109
109
|
| -j 或 --jit_compile | 开启 jit 编译。 | 否 |
|
|
110
|
-
| -n
|
|
110
|
+
| -n 或 --num_splits | 同时执行 run_ut 线程的数量,默认为 8,最大支持 64,但每个 Device 最大支持 8 个线程。当指定多个线程和多个 Device 时,线程数在每张卡上均分。 | 否 |
|
|
111
111
|
| -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0~7,共 8 个 Device。 | 否 |
|
|
112
112
|
| -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | run_ut 操作中断后继续执行场景下必须配置 |
|
|
113
113
|
| -f 或 --filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的 API。适用于模型较大且重复 API 较多的场景。 | 否 |
|
|
@@ -295,3 +295,13 @@ a:误差比对法指标。
|
|
|
295
295
|
- npu_scaled_masked_softmax
|
|
296
296
|
|
|
297
297
|
- npu_swiglu
|
|
298
|
+
|
|
299
|
+
- npu_apply_adam
|
|
300
|
+
|
|
301
|
+
- npu_group_norm_silu
|
|
302
|
+
|
|
303
|
+
- npu_mish
|
|
304
|
+
|
|
305
|
+
- npu_moe_gating_top_k_softmax
|
|
306
|
+
|
|
307
|
+
- npu_sort_v2
|
|
@@ -60,7 +60,9 @@ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据
|
|
|
60
60
|
|
|
61
61
|
#### 3.1.3 局域网场景配置示例
|
|
62
62
|
|
|
63
|
-
若采用 TLS1.2 协议加密传输 api 数据,需配置 SSL
|
|
63
|
+
若采用 TLS1.2 协议加密传输 api 数据,需配置 SSL 证书,可参考如下生成自签名证书方法。
|
|
64
|
+
|
|
65
|
+
以下秘钥生成方法仅为简单示例,客户应使用与自己需求相符的秘钥生成和存储机制并保证秘钥安全性与机密性,必要时可采用分层秘钥机制。
|
|
64
66
|
```shell
|
|
65
67
|
# 创建私钥文件server.key
|
|
66
68
|
openssl genrsa -out server.key 2048
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1 简介
|
|
4
4
|
|
|
5
|
-
**MindSpore 动态图精度预检**<sup>a</sup>通过扫描昇腾 NPU 上用户训练 MindSpore 模型中的所有 Mint API
|
|
5
|
+
**MindSpore 动态图精度预检**<sup>a</sup>通过扫描昇腾 NPU 上用户训练 MindSpore 模型中的所有 Mint API 以及 Msadapter场景下迁移的 Mindspore API,输出精度情况的诊断和分析。工具以模型中所有 API 前反向的 dump 结果为输入,构造相应的 API 单元测试,将 NPU 输出与标杆(CPU 高精度)比对,计算对应的精度指标,从而找出 NPU 中存在精度问题的 API。本工具支持**随机生成模式和真实数据模式**<sup>b</sup>。
|
|
6
6
|
|
|
7
7
|
a. 支持 Mindspore 版本:2.4/2.5;
|
|
8
8
|
|
|
@@ -51,14 +51,14 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
|
|
|
51
51
|
|
|
52
52
|
完整参数说明:
|
|
53
53
|
|
|
54
|
-
| 参数名 | 说明
|
|
55
|
-
|
|
56
|
-
| -i 或 --input_path | 指定[比对文件](#214-比对文件),str 类型。
|
|
57
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型,默认在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx
|
|
58
|
-
| -s 或 --stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,根据[比对文件](#214-比对文件)的参数说明配置stack_path;多卡场景开启时,自动识别npu_dump目录下stack.json文件,如存在生成详细调用栈信息,否则不生成,此参数不生效。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
54
|
+
| 参数名 | 说明 | 是否必选 |
|
|
55
|
+
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
56
|
+
| -i 或 --input_path | 指定[比对文件](#214-比对文件),str 类型。 | 是 |
|
|
57
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型,默认在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 否 |
|
|
58
|
+
| -s 或 --stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,根据[比对文件](#214-比对文件)的参数说明配置stack_path;多卡场景开启时,自动识别npu_dump目录下stack.json文件,如存在生成详细调用栈信息,否则不生成,此参数不生效。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
59
59
|
| -c 或 --compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
60
|
-
| -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
61
|
-
| -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#215-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-api和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#214-比对文件)的单卡场景示例。
|
|
60
|
+
| -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
61
|
+
| -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#215-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-api和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#214-比对文件)的单卡场景示例。 | 否 |
|
|
62
62
|
|
|
63
63
|
#### 2.1.2 整网比对场景
|
|
64
64
|
|
|
@@ -180,13 +180,13 @@ compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_mat
|
|
|
180
180
|
|
|
181
181
|
**参数说明**:
|
|
182
182
|
|
|
183
|
-
| 参数名 | 说明
|
|
184
|
-
| ------------
|
|
183
|
+
| 参数名 | 说明 | 是否必选 |
|
|
184
|
+
| ------------ |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
185
185
|
| input_param | 配置 dump 数据文件及目录,dict 类型。配置参数包括:<br> "npu_json_path":指定 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"npu_json_path": "./npu_dump/dump.json"。<br/> "bench_json_path":指定 CPU、GPU 或 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"bench_json_path": "./bench_dump/dump.json"。<br/> "stack_json_path":指定 NPU dump 目录下的 stack.json 文件。<br/>**配置示例**:"stack_json_path": "./npu_dump/stack.json"。<br/> "is_print_compare_log":配置是否开启单个算子的日志打屏。<br/>**配置示例**:True 或 False。 | 是 |
|
|
186
|
-
| output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx
|
|
187
|
-
| stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要,开启时比对结果呈现NPU_Stack_Info,关闭时不呈现。当不配置stack_json_path 时,自动识别是否存在stack.json,存在时呈现NPU_Stack_Info,否则不呈现。<br/>**配置示例**:stack_mode=True,默认为 False。
|
|
188
|
-
| auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。
|
|
189
|
-
| fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。
|
|
186
|
+
| output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 是 |
|
|
187
|
+
| stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要,开启时比对结果呈现NPU_Stack_Info,关闭时不呈现。当不配置stack_json_path 时,自动识别是否存在stack.json,存在时呈现NPU_Stack_Info,否则不呈现。<br/>**配置示例**:stack_mode=True,默认为 False。 | 否 |
|
|
188
|
+
| auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。 | 否 |
|
|
189
|
+
| fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。 | 否 |
|
|
190
190
|
|
|
191
191
|
**函数示例**:
|
|
192
192
|
|
|
@@ -215,12 +215,12 @@ compare_distributed(npu_dump_dir, bench_dump_dir, output_path, **kwargs)
|
|
|
215
215
|
|
|
216
216
|
**参数说明**:
|
|
217
217
|
|
|
218
|
-
| 参数名 | 说明
|
|
219
|
-
| --------------
|
|
220
|
-
| npu_dump_dir | 配置 NPU 环境下的 dump 目录。str 类型。dump 数据目录须指定到 step 级。<br/>**配置示例**:'./npu_dump/step0'。
|
|
221
|
-
| bench_dump_dir | 配置 CPU、GPU 或 NPU 环境下的 dump 目录。str 类型。<br/>**配置示例**:'./gpu_dump/step0'。
|
|
222
|
-
| output_path | 配置比对结果文件存盘目录。需要预先创建 output_path 目录。str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_rank{npu_ID}-rank{cpu/gpu/npu_ID}_{timestamp}.xlsx
|
|
223
|
-
| **kwargs | 支持 compare 的所有可选参数。 其中,stack_mode不生效,自动识别是否存在stack.json,如存在,呈现NPU_Stack_Info,否则不呈现。
|
|
218
|
+
| 参数名 | 说明 | 是否必选 |
|
|
219
|
+
| -------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
220
|
+
| npu_dump_dir | 配置 NPU 环境下的 dump 目录。str 类型。dump 数据目录须指定到 step 级。<br/>**配置示例**:'./npu_dump/step0'。 | 是 |
|
|
221
|
+
| bench_dump_dir | 配置 CPU、GPU 或 NPU 环境下的 dump 目录。str 类型。<br/>**配置示例**:'./gpu_dump/step0'。 | 是 |
|
|
222
|
+
| output_path | 配置比对结果文件存盘目录。需要预先创建 output_path 目录。str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_rank{npu_ID}-rank{cpu/gpu/npu_ID}_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 是 |
|
|
223
|
+
| **kwargs | 支持 compare 的所有可选参数。 其中,stack_mode不生效,自动识别是否存在stack.json,如存在,呈现NPU_Stack_Info,否则不呈现。 | 否 |
|
|
224
224
|
|
|
225
225
|
**函数示例**:
|
|
226
226
|
|
|
@@ -257,11 +257,11 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
|
|
|
257
257
|
|
|
258
258
|
统计量有 4 种:最大值(max)、最小值(min)、平均值(mean)和 L2-范数(L2 norm)。
|
|
259
259
|
|
|
260
|
-
|dump 数据模式|Cosine (tensor 余弦相似度)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 CRC-32 值)|BENCH MD5 (bench 数据 CRC-32 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)|Data_Name (NPU
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|MD5
|
|
260
|
+
|dump 数据模式|Cosine (tensor 余弦相似度)|EucDist (tensor 欧式距离)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 CRC-32 值)|BENCH MD5 (bench 数据 CRC-32 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)| Data_Name ([NPU真实数据名,Bench真实数据名]) |
|
|
261
|
+
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---------------------------------:|
|
|
262
|
+
|真实数据模式|√|√|√|√|√|√|||√||||√|√|√| √ |
|
|
263
|
+
|统计数据模式|||||||√|√|√|||√||√|√| |
|
|
264
|
+
|MD5 模式||||||||||√|√|√|||√| |
|
|
265
265
|
|
|
266
266
|
上表中NPU_Stack_Info字段需要配置-s参数生成。
|
|
267
267
|
|
|
@@ -320,7 +320,7 @@ MD5 模式:
|
|
|
320
320
|
5. "This is empty data, can not compare.":读取到的数据为空(真实数据模式);
|
|
321
321
|
6. "Shape of NPU and bench Tensor do not match. Skipped.":NPU 和 Bench 的数据结构不一致(真实数据模式);
|
|
322
322
|
7. "The Position of inf or nan in NPU and bench Tensor do not match.":NPU 和 Bench 的数据有 nan/inf(真实数据模式);
|
|
323
|
-
8. "This is type of 0-d tensor, can not calculate 'Cosine', 'One Thousandth Err Ratio' and 'Five Thousandths Err Ratio'.":NPU 为0维张量(真实数据模式);
|
|
323
|
+
8. "This is type of 0-d tensor, can not calculate 'Cosine', 'EucDist', 'One Thousandth Err Ratio' and 'Five Thousandths Err Ratio'.":NPU 为0维张量(真实数据模式);
|
|
324
324
|
9. "Dtype of NPU and bench Tensor do not match.":NPU 和 Bench 数据的数据类型不同(真实数据模式);
|
|
325
325
|
10. "":除以上情况的其余情况(真实数据模式、统计数据模式)。
|
|
326
326
|
|
|
@@ -330,18 +330,24 @@ MD5 模式:
|
|
|
330
330
|
|
|
331
331
|
1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于 1 说明计算出的两个张量越相似,实际可接受阈值为大于 0.99。在计算中可能会存在 nan,主要由于可能会出现其中一个向量为 0。
|
|
332
332
|
|
|
333
|
-
2.
|
|
333
|
+
2. EucDist:通过计算两个向量的欧式距离来判断其相似度,定义为多维空间中两个点之间的绝对距离。数值越接近0,张量越相似,数值越大,差异越大。
|
|
334
|
+
|
|
335
|
+
3. MaxAbsErr:当最大绝对误差越接近 0 表示其计算的误差越小,实际可接受阈值为小于 0.001。
|
|
334
336
|
|
|
335
|
-
|
|
337
|
+
4. MaxRelativeErr:当最大相对误差越接近 0 表示其计算的误差越小。
|
|
336
338
|
|
|
337
339
|
当 dump 数据中存在 0 或 Nan 时,比对结果中最大相对误差则出现 inf 或 Nan 的情况,属于正常现象。
|
|
338
340
|
|
|
339
|
-
|
|
341
|
+
5. One Thousandth Err Ratio(相对误差小于千分之一的元素比例)、Five Thousandths Err Ratio(相对误差小于千分之五的元素比例)精度指标:是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于千分之一、千分之五的比例占总元素个数的比例。该数据仅作为精度下降趋势的参考,并不参与计算精度是否通过的判定。
|
|
340
342
|
|
|
341
343
|
## 4 多卡比对结果提取汇总通信算子数据
|
|
342
344
|
|
|
343
345
|
本功能是将多卡比对场景的比对结果,进行通信算子数据提取和汇总,输出整理好的通信算子多卡比对精度表。
|
|
344
346
|
|
|
347
|
+
**使用场景**
|
|
348
|
+
|
|
349
|
+
已完成精度比对,获得多卡精度比对结果,但是通信算子数据分布在多个结果件中,不利于精度问题的分析。通过此功能,可以汇总多卡通信算子数据,减少问题定位时间。
|
|
350
|
+
|
|
345
351
|
**约束**
|
|
346
352
|
|
|
347
353
|
不支持MD5比对结果。
|
|
@@ -354,11 +360,11 @@ msprobe -f pytorch merge_result -i ./input_dir -o ./output_dir -config ./config.
|
|
|
354
360
|
|
|
355
361
|
**完整参数说明**
|
|
356
362
|
|
|
357
|
-
| 参数名 | 说明
|
|
358
|
-
| ----------------------
|
|
359
|
-
| -i 或 --input_dir | 多卡比对结果存盘目录,即使用compare比对的结果输出目录,str类型。所有比对结果应全部为真实数据比对结果或统计数据比对结果,否则可能导致汇总数据不完整。
|
|
360
|
-
| -o 或 --output_dir | 数据提取汇总结果存盘目录,str类型。文件名称基于时间戳自动生成,格式为:`multi_ranks_compare_merge_{timestamp}.xlsx
|
|
361
|
-
| -config或--config-path | 指定需要汇总数据的API和比对指标的yaml文件路径,str类型。<br>yaml文件详细介绍见下文“**yaml文件说明**”。
|
|
363
|
+
| 参数名 | 说明 | 是否必选 |
|
|
364
|
+
| ---------------------- |-------------------------------------------------------------------------------------------------------------------| -------- |
|
|
365
|
+
| -i 或 --input_dir | 多卡比对结果存盘目录,即使用compare比对的结果输出目录,str类型。所有比对结果应全部为真实数据比对结果或统计数据比对结果,否则可能导致汇总数据不完整。 | 是 |
|
|
366
|
+
| -o 或 --output_dir | 数据提取汇总结果存盘目录,str类型。文件名称基于时间戳自动生成,格式为:`multi_ranks_compare_merge_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 是 |
|
|
367
|
+
| -config或--config-path | 指定需要汇总数据的API和比对指标的yaml文件路径,str类型。<br>yaml文件详细介绍见下文“**yaml文件说明**”。 | 是 |
|
|
362
368
|
|
|
363
369
|
**yaml文件说明**
|
|
364
370
|
|
|
@@ -389,3 +395,23 @@ compare_index:
|
|
|
389
395
|
2. rank*列为多卡数据。
|
|
390
396
|
3. 不同比对指标的数据通过不同sheet页呈现。
|
|
391
397
|
4. 如果一个API或module在某张卡上找不到数据,汇总结果中将空白呈现。
|
|
398
|
+
5. 如果比对指标值为N/A,unsupported,Nan,表示无法计算该比对指标值,汇总结果将以”NPU:’NPU max值‘ Bench:’Bench max值‘“呈现。
|
|
399
|
+
6. 针对图示案例,此处NPU:N/A Bench:N/A表示output为None。
|
|
400
|
+
|
|
401
|
+
<br>
|
|
402
|
+
如何基于group信息查看分组数据:
|
|
403
|
+
|
|
404
|
+
以Distributed.all_reduce.0.forward为例。这个API将多卡数据规约操作,输出为一个group内的规约结果,同一个group内的输出保持一致。<br>这个API中,rank0-3为一个group,Distributed.all_reduce.0.forward.input.group展示为tp-0-1-2-3,rank0-3输出一致;rank4-7为一个group,展示为tp-4-5-6-7,rank4-7输出一致。<br>group除了这种形式,还有如[0, 1, 2, 3]的呈现形式。
|
|
405
|
+
|
|
406
|
+
<br>
|
|
407
|
+
常见通信API预期结果:
|
|
408
|
+
|
|
409
|
+
1. Distributed.all_gather:多卡数据汇总,每张卡输入可以不一致,同group内输出一致,输出是张量列表。
|
|
410
|
+
2. Distributed.all_gather_into_tensor:多卡数据汇总,每张卡输入可以不一致,同group内输出一致,输出是张量。
|
|
411
|
+
3. Distributed.all_reduce:多卡数据规约操作,每张卡输入可以不一致,同group内输出一致,为规约结果。
|
|
412
|
+
4. Distributed.reduce_scatter:多卡数据规约操作,每张卡输入可以不一致,输出为group内规约结果的不同部分,输入是张量列表。
|
|
413
|
+
5. Distributed.reduce_scatter_tensor:多卡数据规约操作,每张卡输入可以不一致,输出为group内规约结果的不同部分,输入是张量。
|
|
414
|
+
6. Distributed.broadcast:输入为要广播的数据,输出为广播后的数据。
|
|
415
|
+
7. Distributed.isend:点对点通信,输入为要发送的数据,输出为发送的数据。
|
|
416
|
+
8. Distributed.irecv:点对点通信,输入为原数据,输出为接收的新数据。
|
|
417
|
+
9. Distributed.all_to_all_single:输出数据为所有卡上的数据切分后合并的结果。
|