mindstudio-probe 1.3.0__py3-none-any.whl → 8.1.1__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.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/METADATA +4 -2
- {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/RECORD +204 -152
- msprobe/README.md +32 -1
- msprobe/core/__init__.py +17 -0
- msprobe/core/common/const.py +120 -21
- msprobe/core/common/exceptions.py +2 -2
- msprobe/core/common/file_utils.py +279 -50
- msprobe/core/common/framework_adapter.py +169 -0
- msprobe/core/common/global_lock.py +86 -0
- msprobe/core/common/runtime.py +25 -0
- msprobe/core/common/utils.py +136 -45
- msprobe/core/common_config.py +7 -0
- msprobe/core/compare/acc_compare.py +646 -428
- msprobe/core/compare/check.py +36 -103
- msprobe/core/compare/compare_cli.py +4 -0
- msprobe/core/compare/config.py +72 -0
- msprobe/core/compare/highlight.py +215 -215
- msprobe/core/compare/layer_mapping/layer_mapping.py +2 -0
- msprobe/core/compare/merge_result/merge_result.py +4 -4
- msprobe/core/compare/multiprocessing_compute.py +223 -110
- msprobe/core/compare/npy_compare.py +2 -4
- msprobe/core/compare/utils.py +214 -244
- msprobe/core/config_check/__init__.py +17 -0
- msprobe/{pytorch/dump/kernel_dump/kernel_config.py → core/config_check/checkers/__init__.py} +8 -16
- msprobe/core/config_check/checkers/base_checker.py +60 -0
- msprobe/core/config_check/checkers/dataset_checker.py +138 -0
- msprobe/core/config_check/checkers/env_args_checker.py +96 -0
- msprobe/core/config_check/checkers/hyperparameter_checker.py +170 -0
- msprobe/core/config_check/checkers/pip_checker.py +90 -0
- msprobe/core/config_check/checkers/random_checker.py +367 -0
- msprobe/core/config_check/checkers/weights_checker.py +147 -0
- msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +74 -0
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +302 -0
- msprobe/core/config_check/ckpt_compare/metrics.py +83 -0
- msprobe/core/config_check/ckpt_compare/name_mapping.yaml +12 -0
- msprobe/core/config_check/config_check_cli.py +51 -0
- msprobe/core/config_check/config_checker.py +100 -0
- msprobe/{mindspore/runtime.py → core/config_check/resource/dependency.yaml} +7 -4
- msprobe/core/config_check/resource/env.yaml +57 -0
- msprobe/core/config_check/resource/hyperparameter.yaml +21 -0
- msprobe/core/config_check/utils/hyperparameter_parser.py +115 -0
- msprobe/core/config_check/utils/utils.py +107 -0
- msprobe/core/data_dump/api_registry.py +67 -4
- msprobe/core/data_dump/data_collector.py +170 -89
- msprobe/core/data_dump/data_processor/base.py +72 -51
- msprobe/core/data_dump/data_processor/mindspore_processor.py +109 -55
- msprobe/core/data_dump/data_processor/pytorch_processor.py +90 -82
- msprobe/core/data_dump/json_writer.py +143 -27
- msprobe/core/debugger/precision_debugger.py +144 -0
- msprobe/core/grad_probe/constant.py +1 -1
- msprobe/core/grad_probe/grad_compare.py +1 -1
- msprobe/core/grad_probe/utils.py +1 -1
- msprobe/core/hook_manager.py +242 -0
- msprobe/core/monitor/anomaly_processor.py +384 -0
- msprobe/core/service.py +357 -0
- msprobe/core/single_save/__init__.py +0 -0
- msprobe/core/single_save/single_comparator.py +243 -0
- msprobe/core/single_save/single_saver.py +146 -0
- msprobe/docs/01.installation.md +6 -5
- msprobe/docs/02.config_introduction.md +79 -22
- msprobe/docs/03.config_examples.md +1 -0
- msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
- msprobe/docs/05.data_dump_PyTorch.md +118 -49
- msprobe/docs/06.data_dump_MindSpore.md +167 -20
- msprobe/docs/07.accuracy_checker_PyTorch.md +2 -2
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +69 -9
- msprobe/docs/09.accuracy_checker_MindSpore.md +18 -6
- msprobe/docs/10.accuracy_compare_PyTorch.md +212 -74
- msprobe/docs/11.accuracy_compare_MindSpore.md +87 -37
- msprobe/docs/12.overflow_check_PyTorch.md +2 -2
- msprobe/docs/13.overflow_check_MindSpore.md +2 -2
- msprobe/docs/14.data_parse_PyTorch.md +3 -3
- msprobe/docs/17.grad_probe.md +2 -1
- msprobe/docs/18.online_dispatch.md +2 -2
- msprobe/docs/19.monitor.md +90 -44
- msprobe/docs/21.visualization_PyTorch.md +68 -15
- msprobe/docs/22.visualization_MindSpore.md +71 -18
- msprobe/docs/25.tool_function_introduction.md +23 -22
- msprobe/docs/26.data_dump_PyTorch_baseline.md +14 -3
- msprobe/docs/27.dump_json_instruction.md +1 -1
- msprobe/docs/28.debugger_save_instruction.md +111 -20
- msprobe/docs/29.data_dump_MSAdapter.md +2 -2
- msprobe/docs/30.overflow_check_MSAdapter.md +2 -2
- msprobe/docs/31.config_check.md +95 -0
- msprobe/docs/32.ckpt_compare.md +69 -0
- msprobe/docs/33.generate_operator_MindSpore.md +181 -0
- msprobe/docs/34.RL_collect.md +92 -0
- msprobe/docs/35.nan_analyze.md +72 -0
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +12 -1
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +3 -1
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/save_compare_result_sample.png +0 -0
- msprobe/docs/img/visualization/proxy.png +0 -0
- msprobe/mindspore/__init__.py +1 -2
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +150 -58
- msprobe/mindspore/api_accuracy_checker/api_runner.py +7 -3
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +47 -69
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +4 -0
- msprobe/mindspore/api_accuracy_checker/compute_element.py +0 -1
- msprobe/mindspore/api_accuracy_checker/data_manager.py +2 -2
- msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +460 -0
- msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +2081 -0
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +9 -0
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
- msprobe/mindspore/cell_processor.py +204 -33
- msprobe/mindspore/code_mapping/graph_parser.py +4 -21
- msprobe/mindspore/common/const.py +17 -7
- msprobe/mindspore/common/utils.py +128 -11
- msprobe/mindspore/compare/common_dir_compare.py +382 -0
- msprobe/mindspore/compare/distributed_compare.py +2 -26
- msprobe/mindspore/compare/ms_compare.py +17 -405
- msprobe/mindspore/compare/ms_graph_compare.py +14 -5
- msprobe/mindspore/compare/utils.py +37 -0
- msprobe/mindspore/debugger/debugger_config.py +53 -3
- msprobe/mindspore/debugger/precision_debugger.py +72 -91
- msprobe/mindspore/dump/cell_dump_process.py +877 -0
- msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +864 -0
- msprobe/mindspore/dump/dump_tool_factory.py +13 -5
- msprobe/mindspore/dump/graph_mode_cell_dump.py +139 -0
- msprobe/mindspore/dump/graph_tensor_dump.py +123 -0
- msprobe/mindspore/dump/hook_cell/api_register.py +40 -6
- msprobe/mindspore/dump/hook_cell/hook_cell.py +18 -7
- msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +88 -0
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +8 -2
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +18 -0
- msprobe/mindspore/dump/jit_dump.py +21 -18
- msprobe/mindspore/dump/kernel_kbyk_dump.py +6 -3
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +110 -0
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +15 -15
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +12 -6
- msprobe/mindspore/free_benchmark/common/utils.py +1 -1
- msprobe/mindspore/grad_probe/global_context.py +7 -2
- msprobe/mindspore/grad_probe/grad_stat_csv.py +3 -2
- msprobe/mindspore/mindspore_service.py +114 -0
- msprobe/mindspore/monitor/common_func.py +52 -0
- msprobe/mindspore/monitor/data_writers.py +237 -0
- msprobe/mindspore/monitor/features.py +20 -7
- msprobe/mindspore/monitor/module_hook.py +281 -209
- msprobe/mindspore/monitor/optimizer_collect.py +334 -0
- msprobe/mindspore/monitor/utils.py +25 -5
- msprobe/mindspore/ms_config.py +16 -15
- msprobe/mindspore/task_handler_factory.py +5 -2
- msprobe/msprobe.py +19 -0
- msprobe/nan_analyze/__init__.py +14 -0
- msprobe/nan_analyze/analyzer.py +255 -0
- msprobe/nan_analyze/graph.py +189 -0
- msprobe/nan_analyze/utils.py +211 -0
- msprobe/pytorch/api_accuracy_checker/common/config.py +2 -2
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +36 -34
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +20 -20
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +4 -7
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +204 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +12 -11
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +1 -0
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +8 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +2 -3
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +29 -13
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +12 -2
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +45 -31
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +156 -0
- msprobe/pytorch/attl_manager.py +65 -0
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +27 -0
- msprobe/pytorch/common/utils.py +26 -14
- msprobe/pytorch/compare/distributed_compare.py +4 -36
- msprobe/pytorch/compare/pt_compare.py +13 -84
- msprobe/pytorch/compare/utils.py +47 -0
- msprobe/pytorch/debugger/debugger_config.py +34 -17
- msprobe/pytorch/debugger/precision_debugger.py +66 -118
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +93 -0
- msprobe/pytorch/dump/module_dump/module_dump.py +11 -58
- msprobe/pytorch/dump/module_dump/module_processer.py +143 -113
- msprobe/pytorch/grad_probe/grad_stat_csv.py +3 -2
- msprobe/pytorch/hook_module/api_register.py +29 -5
- msprobe/pytorch/hook_module/hook_module.py +9 -18
- msprobe/pytorch/hook_module/jit_script_wrapper.py +33 -0
- msprobe/pytorch/hook_module/pt_hook_manager.py +68 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +22 -1
- msprobe/pytorch/hook_module/utils.py +28 -2
- msprobe/pytorch/monitor/csv2tb.py +6 -2
- msprobe/pytorch/monitor/data_writers.py +259 -0
- msprobe/pytorch/monitor/module_hook.py +227 -158
- msprobe/pytorch/monitor/module_metric.py +14 -0
- msprobe/pytorch/monitor/optimizer_collect.py +242 -270
- msprobe/pytorch/monitor/utils.py +16 -3
- msprobe/pytorch/online_dispatch/dispatch.py +4 -2
- msprobe/pytorch/online_dispatch/dump_compare.py +5 -2
- msprobe/pytorch/parse_tool/lib/utils.py +3 -3
- msprobe/pytorch/pt_config.py +8 -7
- msprobe/pytorch/pytorch_service.py +73 -0
- msprobe/visualization/builder/graph_builder.py +33 -13
- msprobe/visualization/builder/msprobe_adapter.py +24 -11
- msprobe/visualization/compare/graph_comparator.py +53 -45
- msprobe/visualization/compare/mode_adapter.py +31 -1
- msprobe/visualization/graph/base_node.py +3 -3
- msprobe/visualization/graph/graph.py +2 -2
- msprobe/visualization/graph_service.py +250 -103
- msprobe/visualization/utils.py +27 -11
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +0 -106
- msprobe/mindspore/monitor/anomaly_detect.py +0 -404
- msprobe/mindspore/monitor/module_spec_verifier.py +0 -94
- msprobe/mindspore/service.py +0 -549
- msprobe/pytorch/monitor/anomaly_analyse.py +0 -201
- msprobe/pytorch/monitor/anomaly_detect.py +0 -410
- msprobe/pytorch/monitor/module_spec_verifier.py +0 -95
- msprobe/pytorch/monitor/unittest/test_monitor.py +0 -160
- msprobe/pytorch/service.py +0 -473
- {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/WHEEL +0 -0
- {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/top_level.txt +0 -0
- /msprobe/{mindspore → core}/compare/ms_to_pt_api.yaml +0 -0
- /msprobe/{mindspore/dump → core}/kernel_dump/kernel_config.py +0 -0
- /msprobe/{pytorch/monitor/unittest → core/monitor}/__init__.py +0 -0
msprobe/docs/19.monitor.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
要求:
|
|
11
11
|
|
|
12
12
|
- PyTorch场景:torch不低于**2.0**
|
|
13
|
-
- MindSpore场景:mindspore不低于**2.4.10**,仅支持**MindSpore
|
|
13
|
+
- MindSpore场景:mindspore不低于**2.4.10**,仅支持**MindSpore动态图**,已支持**msadapter**套件
|
|
14
14
|
|
|
15
15
|
## 功能介绍
|
|
16
16
|
下表中字段为训练状态轻量化监控工具的完整功能点:
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
| [权重梯度监控](#权重梯度监控) | 开启权重梯度监控 | PyTorch、MindSpore |
|
|
22
22
|
| [激活值监控](#激活值监控) | 开启激活值监控 | PyTorch、MindSpore |
|
|
23
23
|
| [优化器状态监控](#优化器状态监控) | 开启优化器状态监控 | PyTorch、MindSpore |
|
|
24
|
+
| [采集module堆栈信息](#采集module堆栈信息) | 采集监控的第一个 step 的 module 对应的堆栈信息辅助问题定位 | PyTorch、MindSpore |
|
|
24
25
|
| [指定监控对象](#指定监控对象) | 指定监控的nn.Module(nn.Cell)及对应的输入输出 | PyTorch、MindSpore |
|
|
25
26
|
| [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch |
|
|
26
|
-
| [
|
|
27
|
-
| [
|
|
28
|
-
| [
|
|
29
|
-
| [梯度异常时序判断](#梯度异常时序判断) | 梯度异常时自动梯度落盘 | PyTorch |
|
|
27
|
+
| [输出格式和统计量](#输出格式和统计量) | format PyTorch支持`csv`、`tensorboard`和`api`,MindSpore仅支持`csv`,`ops`、`ndigits`均支持 | PyTorch、MindSpore |
|
|
28
|
+
| [mbs粒度梯度监控](#mbs粒度梯度监控) | 开启梯度监控时,采集聚合前梯度时支持`micro_batch_size`粒度 | PyTorch、MindSpore |
|
|
29
|
+
| [异常告警](#异常告警) | 监控对象指标异常时自动告警,支持异常数据落盘 | PyTorch、MindSpore |
|
|
30
30
|
| [csv格式数据转tensorboard可视化显示](#csv格式数据转tensorboard可视化显示) | 将csv转为tensorboard文件显示 | PyTorch |
|
|
31
31
|
| [动态启停](#动态启停) | 训练过程中动态修改配置开启监控 | PyTorch、MindSpore |
|
|
32
32
|
| [功能重载](#功能重载) | 训练中开启激活值监控。待废弃,请使用动态启停功能代替。 | PyTorch |
|
|
@@ -205,12 +205,26 @@ monitor.monitor_gnorm_with_ad(
|
|
|
205
205
|
|
|
206
206
|
本工具针对分布式计算框架megatron和deepspeed框架做了适配,暂不支持其他框架。
|
|
207
207
|
|
|
208
|
+
### 采集module堆栈信息
|
|
209
|
+
- 工具配置示例:
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"targets": {
|
|
213
|
+
},
|
|
214
|
+
"format": "csv",
|
|
215
|
+
"stack_info": true
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
开启 `stack_info` 后会采集监控的第一个 step 的所有 module 的堆栈信息,输出格式仅支持 csv 。
|
|
208
219
|
|
|
209
220
|
## 高阶功能
|
|
210
221
|
|
|
222
|
+
|
|
211
223
|
### 指定监控对象
|
|
212
224
|
|
|
213
|
-
|
|
225
|
+
工具支持对指定nn.Module进行状态监控,在配置文件的`targets`字段中指定,`targets`格式为{module_name: {}}。
|
|
226
|
+
|
|
227
|
+
module_name可以通过nn.Module的接口named_modules()获取。
|
|
214
228
|
|
|
215
229
|
#### 打印模型结构
|
|
216
230
|
工具提供可选项`print_struct`打印模型结构,帮助配置targets。工具会在在第一个step后打印结构并停止训练进程,模型结构默认打印在`$MONITOR_OUTPUT_DIR/module_struct.json`。
|
|
@@ -221,7 +235,6 @@ monitor.monitor_gnorm_with_ad(
|
|
|
221
235
|
```
|
|
222
236
|
|
|
223
237
|
输出样例:
|
|
224
|
-
字段`config`用于配置文件中指定module target。其余为各个元素的shape和dtype。
|
|
225
238
|
|
|
226
239
|
```json
|
|
227
240
|
"0:63.mlp.linear_fc2": {
|
|
@@ -245,40 +258,30 @@ monitor.monitor_gnorm_with_ad(
|
|
|
245
258
|
}
|
|
246
259
|
},
|
|
247
260
|
```
|
|
261
|
+
对于module对象,通常关心前向/反向传播的输入和输出:
|
|
248
262
|
|
|
249
|
-
-
|
|
250
|
-
|
|
263
|
+
- 前向的输入(input)
|
|
264
|
+
- 前向的输出(output)
|
|
265
|
+
- 反向的输入,表示前向输出的梯度(output_grad)
|
|
266
|
+
- 反向的输出,表示前向输入的梯度(input_grad)
|
|
251
267
|
|
|
252
|
-
"tensor"可以直接用来计算统计量,"tuple"需要进一步指定监控的索引。如"tuple[2]:0",表示该对象为长度2的tuple,对第0元素进行监控;不指定索引时,默认对第0元素进行监控。
|
|
253
268
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
{
|
|
258
|
-
"targets": {
|
|
259
|
-
"module.encoder.layers.0.mlp": {
|
|
260
|
-
"input": "tuple[2]:0",
|
|
261
|
-
"output": "tensor"
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
```
|
|
266
|
-
#### Module全量监控
|
|
267
|
-
工具提供简便的全量module监控方式。或不配置targets、all_xy字段,同样表示全量监控。
|
|
269
|
+
#### 指定监控对象
|
|
270
|
+
|
|
271
|
+
targets字段指定监控对象示例如下:
|
|
268
272
|
|
|
269
273
|
```json
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
"
|
|
274
|
+
// 示例:对一个名为"module.encoder.layers.0.mlp"的module。
|
|
275
|
+
"targets": {
|
|
276
|
+
"module.encoder.layers.0.mlp": {}
|
|
273
277
|
}
|
|
274
278
|
```
|
|
275
279
|
|
|
280
|
+
对于parameter对象,通常会关注其在一个训练迭代中的梯度(weight grad)、adam类优化器中的动量(1st moment, 2nd moment)。
|
|
281
|
+
parameter归属于某一module,可以通过指定module_name来监控包含在这一module中的**所有**parameter。
|
|
276
282
|
|
|
277
|
-
|
|
278
|
-
对于parameter对象,通常会关注其在一个训练迭代中的梯度(weight grad)、adam类优化器中的动量(1st moment, 2nd moment)。
|
|
279
|
-
parameter归属于某一module,也可以通过指定module_name来监控包含在这一module中的**所有**parameter。
|
|
283
|
+
param_name可以通过nn.Module的接口`named_parameters()`获取。
|
|
280
284
|
|
|
281
|
-
param_name可以通过nn.Module的接口`named_parameters()`获取。
|
|
282
285
|
```json
|
|
283
286
|
// 示例:监控"module.encoder.layers.0.mlp"的所有参数和"module.embedding.word_embedding.weight"这一参数
|
|
284
287
|
{
|
|
@@ -289,8 +292,9 @@ monitor.monitor_gnorm_with_ad(
|
|
|
289
292
|
}
|
|
290
293
|
```
|
|
291
294
|
|
|
292
|
-
####
|
|
293
|
-
|
|
295
|
+
#### 全量监控
|
|
296
|
+
|
|
297
|
+
工具提供简便的全量module对象监控方式。
|
|
294
298
|
|
|
295
299
|
```json
|
|
296
300
|
{
|
|
@@ -298,7 +302,9 @@ monitor.monitor_gnorm_with_ad(
|
|
|
298
302
|
}
|
|
299
303
|
```
|
|
300
304
|
|
|
305
|
+
|
|
301
306
|
### 输出格式和统计量
|
|
307
|
+
|
|
302
308
|
工具配置示例:
|
|
303
309
|
```json
|
|
304
310
|
{
|
|
@@ -333,7 +339,7 @@ export MONITOR_OUTPUT_DIR=/xxx/output_dir
|
|
|
333
339
|
监控结果写入csv文件中,可以通过`ndigits`字段设置小数位数。
|
|
334
340
|
表头为 vpp_stage | name | step | micro_step(optional) | *ops |。
|
|
335
341
|
仅在激活值监控的输出文件中包含micor_step。
|
|
336
|
-
激活值监控的name为<module_name>.\<input or output>, 其他任务的name为<param_name
|
|
342
|
+
激活值监控的name为<module_name>.\<input or output>, 其他任务的name为<param_name>
|
|
337
343
|
|
|
338
344
|
- **api**
|
|
339
345
|
监控结果不落盘,在训练过程中可以通过`generate_wgrad_metrics`、`generate_xy_metrics`等接口获取,使用方式参考[公开接口](#公开接口) 。
|
|
@@ -349,16 +355,54 @@ export MONITOR_OUTPUT_DIR=/xxx/output_dir
|
|
|
349
355
|
|
|
350
356
|

|
|
351
357
|
|
|
352
|
-
###
|
|
358
|
+
### mbs粒度梯度监控
|
|
359
|
+
|
|
360
|
+
当配置梯度监控任务时,工具默认`global_batch_size`粒度进行梯度监控。当需要监控`micro_batch_size`粒度梯度信息时,在配置文件中配置`monitor_mbs_grad`为`true`,配置示例如下:
|
|
361
|
+
|
|
362
|
+
```json
|
|
363
|
+
{
|
|
364
|
+
"wg_distribution": true,
|
|
365
|
+
"monitor_mbs_grad": true
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
应用范围
|
|
370
|
+
|
|
371
|
+
- **仅支持采集聚合前梯度**,在梯度累积场景下,聚合后梯度已无法区分`micro_batch`数据。
|
|
372
|
+
- PyTorch场景下,Megatron和DeepSpeed训练框架下均支持,FSDP训练框架下暂不支持。
|
|
373
|
+
- MindSpore场景下均支持。
|
|
374
|
+
|
|
375
|
+
### 异常告警
|
|
376
|
+
|
|
377
|
+
工具的异常告警功能旨在自动判断训练过程中的异常现象,用户可通过在配置文件中配置alert字段来指定告警规则,并在训练过程中根据该规则及时打屏对用户发出告警。
|
|
378
|
+
|
|
379
|
+
|
|
353
380
|
1. 训练前配置相关参数
|
|
354
381
|
|
|
355
|
-
|
|
382
|
+
当前支持的异常告警规则如下:
|
|
383
|
+
|
|
384
|
+
| 异常告警 |解释| rule_name | args是否可选 |
|
|
385
|
+
|--------------|----|-----------|---------------------------------------------------------------------|
|
|
386
|
+
| 历史均值偏离告警 |将当前数值与历史均值比较。如果相对偏差超过阈值,会在打屏信息中提示用户指标偏离。当前仅对`norm`和`mean`指标生效。| AnomalyTurbulence | 否,必须传入threshold。当指标超过`(1+threshold)*avg`时,识别为偏离历史均值。 |
|
|
387
|
+
| nan值/极大值告警 |根据是否提供threshold来判断nan值或极大值| AnomalyNan | 是, 若未配置args或未配置threshold,则默认检测nan,若提供threshold,则检测nan值以及绝对值超过阈值的极大值 |
|
|
388
|
+
|
|
389
|
+
除此之外,我们在alert中支持dump配置项,如果打开"`dump`"选项,则会将异常信息落盘到目录`monitor_output/anomaly_detected`。
|
|
390
|
+
|
|
391
|
+
- 历史均值偏离告警案例如下:
|
|
356
392
|
```json
|
|
357
393
|
"alert": {
|
|
358
|
-
"rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}],
|
|
394
|
+
"rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}], // 0.5表示偏离50%则提示偏离
|
|
359
395
|
"dump": true
|
|
360
396
|
},
|
|
361
397
|
```
|
|
398
|
+
- nan值/极大值告警案例如下:
|
|
399
|
+
```json
|
|
400
|
+
"alert": {
|
|
401
|
+
"rules": [{"rule_name": "AnomalyNan", "args": {"threshold": 1e10}}],
|
|
402
|
+
"dump": true
|
|
403
|
+
},
|
|
404
|
+
```
|
|
405
|
+
|
|
362
406
|
2. 实例化工具时传入流水线并行group
|
|
363
407
|
```python
|
|
364
408
|
monitor = TrainerMon(
|
|
@@ -395,9 +439,9 @@ python3 -m msprobe.pytorch.monitor.anomaly_analyse -d $MONITOR_OUTPUT_DIR/anomal
|
|
|
395
439
|
```
|
|
396
440
|
异常事件分析结束,将topk事件写入文件`anomaly_detected/anomaly_analyse.json`。异常分析支持以下参数配置:
|
|
397
441
|
|
|
398
|
-
| 字段名 | 解释
|
|
399
|
-
| ----------------- |
|
|
400
|
-
| -d 或 --data_path |
|
|
442
|
+
| 字段名 | 解释 | 是否必选 |
|
|
443
|
+
| ----------------- | --------------------------------------------------------- | -------- |
|
|
444
|
+
| -d 或 --data_path | 指定异常落盘文件夹,监控功能输出,一般为$MONITOR_OUTPUT_DIR/anomaly_detected。 | 是 |
|
|
401
445
|
| -o 或 --out_path | 排序后的异常落盘文件地址,默认在--data_path路径下落盘一个anomaly_analyse.json文件。 | 否 |
|
|
402
446
|
| -k 或 --topk | 指定保留前topk个异常,默认为8。 | 否 |
|
|
403
447
|
| -s 或 --step_list | 指定分析的step范围,默认为[]。 | 否 |
|
|
@@ -412,14 +456,14 @@ from msprobe.pytorch.monitor.csv2tb import csv2tensorboard_by_step
|
|
|
412
456
|
# 前三个参数用来指定需要转换的一批文件,指定monitor输出目录及一个时间范围,会对这个范围内的文件进行转换
|
|
413
457
|
# process_num指定拉起的进程个数,默认为1,更多的进程个数可以加速转换
|
|
414
458
|
# data_type_list是一个列表,指定需要转换的数据类型,默认转换全部数据,数据类型应来自输出件文件前缀,所有类型数据:
|
|
415
|
-
# ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "
|
|
459
|
+
# ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated"]
|
|
416
460
|
# output_dirpath可指定输出目录,默认保存到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳
|
|
417
461
|
csv2tensorboard_by_step(
|
|
418
462
|
monitor_path="~/monitor_output", # 必填
|
|
419
463
|
time_start="Dec03_21-34-40", # 必填
|
|
420
464
|
time_end="Dec03_21-34-42", # 必填
|
|
421
465
|
process_num=8,
|
|
422
|
-
data_type_list=["
|
|
466
|
+
data_type_list=["param_origin"]
|
|
423
467
|
)
|
|
424
468
|
```
|
|
425
469
|
|
|
@@ -507,7 +551,7 @@ csv2tensorboard_by_step(monitor_path, time_start, time_end, process_num=1, data_
|
|
|
507
551
|
| time_start | 起始时间戳。搭配time_end一起使用。指定一个时间范围,会对这个范围内的文件进行转换。左闭右闭的区间。 | 是 |
|
|
508
552
|
| time_end | 结束时间戳。搭配time_start一起使用。指定一个时间范围,会对这个范围内的文件进行转换。左闭右闭的区间。 | 是 |
|
|
509
553
|
| process_num | 指定拉起的进程个数,默认为1,更多的进程个数可以加速转换。 | 否 |
|
|
510
|
-
| data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "
|
|
554
|
+
| data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated"]。<br/>不指定就转换全部数据。 | 否 |
|
|
511
555
|
| output_dirpath | 指定转换后的输出路径,默认输出到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳。 | 否 |
|
|
512
556
|
- 在模型任意位置获取当前参数**梯度**统计量
|
|
513
557
|
```python
|
|
@@ -569,6 +613,7 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
569
613
|
"mv_distribution": true,
|
|
570
614
|
"param_distribution": true,
|
|
571
615
|
"wg_distribution": true,
|
|
616
|
+
"monitor_mbs_grad": true,
|
|
572
617
|
"cc_distribution": {"enable":true, "cc_codeline":[]},
|
|
573
618
|
"alert": {
|
|
574
619
|
"rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}],
|
|
@@ -606,6 +651,7 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
606
651
|
| "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。 |
|
|
607
652
|
| "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false。版本<msprobe1.2.2时需要在TrainerMon构造函数正确指定opt_ty。 |
|
|
608
653
|
| "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。 |
|
|
654
|
+
| "monitor_mbs_grad" | 可选 | 若为true则会监控mbs粒度梯度统计量,默认为false。 |
|
|
609
655
|
| "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false。 |
|
|
610
656
|
| "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。 |
|
|
611
657
|
| "cc_distribution" | 可选 | 其中"enable"字段控制通信监控模块的开关,仅支持在多卡训练时开启;需要监控通信算子时,务必尽量早地实例化`TrainerMon`, 因为监控通过劫持原始func后挂hook实现,部分加速库初始化时会保存原始function,避免监控失效。"cc_codeline"字段指定监控的代码行,如:`train.py\\[23\\]`,默认为空列表,不特别指定;"cc_pre_hook"字段控制是否监控通输入; 模块会在第二个optimize.step之前打印通信日志,包括通信api的调用栈、输入dtype、通信group。 "cc_log_only"为true时,仅打印日志,不监控通信的输入输出,并在打印后中断训练。可以根据通信日志设置"cc_codeline",规避与训练过程不相关的通信,比如一些时间、metrics的同步。 |
|
|
@@ -613,7 +659,7 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
613
659
|
| "format" | 可选 | 数据落盘格式,默认值为"csv",可选 \["csv", "tensorboard", "api"\]。仅PyThon和MindSpore动态图场景支持此参数,且MindSpore动态图场景仅支持\["csv"\]。 |
|
|
614
660
|
| "ops" | 可选 | 类型为list,与ur_distribution、xy_distribution、mv_distribution、wg_distribution、mg_direction、cc_distribution配合,监控所选张量的统计指标,目前支持"min"、"max"、"norm"、"mean"、"zeros"、"nans"。其中,zeros代表监控所选张量的元素小于eps的比例,nans代表张量中nan的数量。当ops中无有效指标时,默认监控norm指标。 |
|
|
615
661
|
| "eps" | 可选 | 若ops里包含"zeros"则需要配置,默认为1e-8。 |
|
|
616
|
-
| "ndigits" | 可选 | "format"为"csv"时,设置落盘文件中的小数位数,默认为6
|
|
662
|
+
| "ndigits" | 可选 | "format"为"csv"时,设置落盘文件中的小数位数,默认为6。 |
|
|
617
663
|
| "step_count_per_record" | 可选 | "format"为"csv"时生效,每个csv记录多少个step的数据,默认为1。 |
|
|
618
664
|
| "append_output" | 可选 | 适用于断点续训场景。多卡场景下生效,指定两个时间戳,将输出续写到这两个时间戳范围间的输出件中,不在范围内的rank不被续写。时间戳应来自原有输出件目录前缀,例如["Dec03_21-34-40", "Dec03_21-34-41"]。默认为[],不续写。**仅PyTorch场景支持此参数**。 |
|
|
619
665
|
| "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True |
|
|
@@ -57,14 +57,14 @@ msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
|
57
57
|
```
|
|
58
58
|
**命令行参数说明**:
|
|
59
59
|
|
|
60
|
-
| 参数名 | 说明
|
|
61
|
-
|
|
62
|
-
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明)
|
|
63
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。
|
|
64
|
-
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。
|
|
65
|
-
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明)
|
|
66
|
-
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明)
|
|
67
|
-
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明)
|
|
60
|
+
| 参数名 | 说明 | 是否必选 |
|
|
61
|
+
|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
|
|
62
|
+
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
63
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。 | 是 |
|
|
64
|
+
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。 配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。| 否 |
|
|
65
|
+
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
66
|
+
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
67
|
+
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
68
68
|
|
|
69
69
|
#### 3.1.1 匹配说明
|
|
70
70
|
|
|
@@ -344,8 +344,22 @@ ubuntu是机器地址,6008是端口号。
|
|
|
344
344
|
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入http://10.123.456.78:6008**
|
|
345
345
|
|
|
346
346
|
### 4.2 不可直连的服务器
|
|
347
|
-
**如果链接打不开(服务器无法直连需要挂vpn
|
|
347
|
+
**如果链接打不开(服务器无法直连需要挂vpn才能连接等场景),可以尝试以下方法,选择其一即可:**
|
|
348
348
|
|
|
349
|
+
1.本地电脑网络手动设置代理,例如Windows10系统,在【手动设置代理】中添加服务器地址(例如10.123.456.78)
|
|
350
|
+
|
|
351
|
+

|
|
352
|
+
|
|
353
|
+
然后,在服务器中输入:
|
|
354
|
+
```
|
|
355
|
+
tensorboard --logdir out_path --bind_all --port 6008[可选,端口号]
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
最后,在浏览器窗口输入http://10.123.456.78:6008
|
|
359
|
+
|
|
360
|
+
**注意,如果当前服务器开启了防火墙,则此方法无效,需要关闭防火墙,或者尝试后续方法**
|
|
361
|
+
|
|
362
|
+
2.或者使用vscode连接服务器,在vscode终端输入:
|
|
349
363
|
```
|
|
350
364
|
tensorboard --logdir out_path
|
|
351
365
|
```
|
|
@@ -353,6 +367,14 @@ tensorboard --logdir out_path
|
|
|
353
367
|
|
|
354
368
|
按住CTRL点击链接即可
|
|
355
369
|
|
|
370
|
+
3.或者将构图结果件vis文件从服务器传输至本地电脑,在本地电脑中安装tb_graph_ascend插件查看构图结果
|
|
371
|
+
|
|
372
|
+
电脑终端输入:
|
|
373
|
+
```
|
|
374
|
+
tensorboard --logdir out_path
|
|
375
|
+
```
|
|
376
|
+
按住CTRL点击链接即可
|
|
377
|
+
|
|
356
378
|
## 5.浏览器查看
|
|
357
379
|
|
|
358
380
|
### 5.1 浏览器打开图
|
|
@@ -384,25 +406,56 @@ tensorboard --logdir out_path
|
|
|
384
406
|
|
|
385
407
|
## 6.图比对说明
|
|
386
408
|
|
|
387
|
-
### 颜色
|
|
409
|
+
### 6.1 颜色
|
|
388
410
|
|
|
389
411
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
390
412
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
#### 真实数据模式
|
|
413
|
+
#### 6.1.1 真实数据模式
|
|
394
414
|
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**值越大精度差距越大,颜色标记越深**。
|
|
395
415
|
|
|
396
416
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
397
417
|
|
|
398
|
-
|
|
418
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
419
|
+
|
|
420
|
+
#### 6.1.2 统计信息模式
|
|
399
421
|
节点中输出的统计量相对误差,**值越大精度差距越大,颜色标记越深**。
|
|
400
422
|
|
|
401
423
|
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
402
424
|
|
|
403
|
-
|
|
425
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
426
|
+
|
|
427
|
+
#### 6.1.3 md5模式
|
|
404
428
|
节点中任意输入输出的md5值不同。
|
|
405
429
|
|
|
430
|
+
### 6.2 指标说明
|
|
431
|
+
|
|
432
|
+
精度比对从三个层面评估 API 的精度,依次是:真实数据模式、统计数据模式和 MD5 模式。比对结果分别有不同的指标。
|
|
433
|
+
|
|
434
|
+
**公共指标**:
|
|
435
|
+
- name: 参数名称,例如input.0
|
|
436
|
+
- type: 类型,例如torch.Tensor
|
|
437
|
+
- dtype: 数据类型,例如torch.float32
|
|
438
|
+
- shape: 张量形状,例如[32, 1, 32]
|
|
439
|
+
- Max: 最大值
|
|
440
|
+
- Min: 最小值
|
|
441
|
+
- Mean: 平均值
|
|
442
|
+
- Norm: L2-范数
|
|
443
|
+
|
|
444
|
+
**真实数据模式指标**:
|
|
445
|
+
- Cosine: tensor 余弦相似度
|
|
446
|
+
- EucDist: tensor 欧式距离
|
|
447
|
+
- MaxAbsErr: tensor 最大绝对误差
|
|
448
|
+
- MaxRelativeErr: tensor 最大相对误差
|
|
449
|
+
- One Thousandth Err Ratio: tensor 相对误差小于千分之一的比例(双千分之一)
|
|
450
|
+
- Five Thousandth Err Ratio: tensor 相对误差小于千分之五的比例(双千分之五)
|
|
451
|
+
|
|
452
|
+
**统计数据模式指标**
|
|
453
|
+
- (Max, Min, Mean, Norm) diff: 统计量绝对误差
|
|
454
|
+
- (Max, Min, Mean, Norm) RelativeErr: 统计量相对误差
|
|
455
|
+
|
|
456
|
+
**MD5模式指标**
|
|
457
|
+
- md5: CRC-32 值
|
|
458
|
+
|
|
406
459
|
## 7.附录
|
|
407
460
|
### 7.1 自定义映射文件(Layer)
|
|
408
461
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
分级可视化工具将msprobe工具dump的精度数据进行解析,还原模型图结构,实现模型各个层级的精度数据比对,方便用户理解模型结构、分析精度问题。
|
|
4
4
|
|
|
5
|
-
工具支持MindSpore
|
|
5
|
+
工具支持MindSpore版本:>=2.4.0
|
|
6
6
|
|
|
7
7
|
## 更新通知
|
|
8
8
|
|
|
@@ -61,7 +61,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
61
61
|
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
62
62
|
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
63
63
|
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。 | 是 |
|
|
64
|
-
| -lm 或 --layer_mapping| 跨框架比对,MindSpore和PyTorch的比对场景。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer), 如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)
|
|
64
|
+
| -lm 或 --layer_mapping| 跨框架比对,MindSpore和PyTorch的比对场景。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer), 如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。 | 否 |
|
|
65
65
|
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
66
66
|
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
67
67
|
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
@@ -76,7 +76,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
76
76
|
- 节点的层级一致(父节点们一致)
|
|
77
77
|
|
|
78
78
|
2.模糊匹配
|
|
79
|
-
- Cell节点dump名称一致,两个匹配上的Cell
|
|
79
|
+
- Cell节点dump名称一致,两个匹配上的Cell节点,忽略各自节点下所有api的dump调用次数,按照名称一致+Cell节点内的调用顺序进行匹配
|
|
80
80
|
- 
|
|
81
81
|
- 参数shape一致
|
|
82
82
|
|
|
@@ -97,11 +97,11 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
97
97
|
```
|
|
98
98
|
**比对文件参数说明**:
|
|
99
99
|
|
|
100
|
-
| 参数名 | 说明
|
|
101
|
-
|
|
102
|
-
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。
|
|
103
|
-
| bench_path | 指定标杆侧比对路径,str
|
|
104
|
-
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。
|
|
100
|
+
| 参数名 | 说明 | 是否必选 |
|
|
101
|
+
|-------------------|----------------------------------------------------------------------------|------|
|
|
102
|
+
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。 | 是 |
|
|
103
|
+
| bench_path | 指定标杆侧比对路径,str类型。单图构建场景可以不配置。 | 否 |
|
|
104
|
+
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。 | 否 |
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
### 3.2 图构建和比对
|
|
@@ -328,7 +328,7 @@ dump配置请参考[dump配置示例](./03.config_examples.md#35-task-配置为-
|
|
|
328
328
|
得到dump数据后,若需比较特定两个rank之间的数据,请参考[3.2.2 双图比对](#322-双图比对);若需进行多个rank或多个step的数据批量比对,请参考[3.2.3 批量构建或比对](#323-批量构建或比对)。
|
|
329
329
|
|
|
330
330
|
|
|
331
|
-
## 4.启动
|
|
331
|
+
## 4.启动TensorBoard
|
|
332
332
|
|
|
333
333
|
### 4.1 可直连的服务器
|
|
334
334
|
|
|
@@ -343,11 +343,25 @@ tensorboard --logdir out_path --bind_all --port [可选,端口号]
|
|
|
343
343
|
|
|
344
344
|
ubuntu是机器地址,6008是端口号。
|
|
345
345
|
|
|
346
|
-
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入http://10.123.456.78:6008**
|
|
346
|
+
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入 http://10.123.456.78:6008**
|
|
347
347
|
|
|
348
348
|
### 4.2 不可直连的服务器
|
|
349
|
-
**如果链接打不开(服务器无法直连需要挂vpn
|
|
349
|
+
**如果链接打不开(服务器无法直连需要挂vpn才能连接等场景),可以尝试以下方法,选择其一即可:**
|
|
350
350
|
|
|
351
|
+
1.本地电脑网络手动设置代理,例如Windows10系统,在【手动设置代理】中添加服务器地址(例如10.123.456.78)
|
|
352
|
+
|
|
353
|
+

|
|
354
|
+
|
|
355
|
+
然后,在服务器中输入:
|
|
356
|
+
```
|
|
357
|
+
tensorboard --logdir out_path --bind_all --port 6008[可选,端口号]
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
最后,在浏览器窗口输入 http://10.123.456.78:6008
|
|
361
|
+
|
|
362
|
+
**注意,如果当前服务器开启了防火墙,则此方法无效,需要关闭防火墙,或者尝试后续方法**
|
|
363
|
+
|
|
364
|
+
2.或者使用vscode连接服务器,在vscode终端输入:
|
|
351
365
|
```
|
|
352
366
|
tensorboard --logdir out_path
|
|
353
367
|
```
|
|
@@ -355,6 +369,14 @@ tensorboard --logdir out_path
|
|
|
355
369
|
|
|
356
370
|
按住CTRL点击链接即可
|
|
357
371
|
|
|
372
|
+
3.或者将构图结果件vis文件从服务器传输至本地电脑,在本地电脑中安装tb_graph_ascend插件查看构图结果
|
|
373
|
+
|
|
374
|
+
电脑终端输入:
|
|
375
|
+
```
|
|
376
|
+
tensorboard --logdir out_path
|
|
377
|
+
```
|
|
378
|
+
按住CTRL点击链接即可
|
|
379
|
+
|
|
358
380
|
## 5.浏览器查看
|
|
359
381
|
|
|
360
382
|
### 5.1 浏览器打开图
|
|
@@ -386,25 +408,56 @@ tensorboard --logdir out_path
|
|
|
386
408
|
|
|
387
409
|
## 6.图比对说明
|
|
388
410
|
|
|
389
|
-
### 颜色
|
|
411
|
+
### 6.1 颜色
|
|
390
412
|
|
|
391
413
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
392
414
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
#### 真实数据模式
|
|
415
|
+
#### 6.1.1 真实数据模式
|
|
396
416
|
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**值越大精度差距越大,颜色标记越深**。
|
|
397
417
|
|
|
398
418
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
399
419
|
|
|
400
|
-
|
|
420
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
421
|
+
|
|
422
|
+
#### 6.1.2 统计信息模式
|
|
401
423
|
节点中输出的统计量相对误差,**值越大精度差距越大,颜色标记越深**。
|
|
402
424
|
|
|
403
|
-
``相对误差:abs
|
|
425
|
+
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
404
426
|
|
|
405
|
-
|
|
427
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
428
|
+
|
|
429
|
+
#### 6.1.3 md5模式
|
|
406
430
|
节点中任意输入输出的md5值不同。
|
|
407
431
|
|
|
432
|
+
### 6.2 指标说明
|
|
433
|
+
|
|
434
|
+
精度比对从三个层面评估 API 的精度,依次是:真实数据模式、统计数据模式和 MD5 模式。比对结果分别有不同的指标。
|
|
435
|
+
|
|
436
|
+
**公共指标**:
|
|
437
|
+
- name: 参数名称,例如input.0
|
|
438
|
+
- type: 类型,例如mindspore.Tensor
|
|
439
|
+
- dtype: 数据类型,例如BFloat32
|
|
440
|
+
- shape: 张量形状,例如[32, 1, 32]
|
|
441
|
+
- Max: 最大值
|
|
442
|
+
- Min: 最小值
|
|
443
|
+
- Mean: 平均值
|
|
444
|
+
- Norm: L2-范数
|
|
445
|
+
|
|
446
|
+
**真实数据模式指标**:
|
|
447
|
+
- Cosine: tensor 余弦相似度
|
|
448
|
+
- EucDist: tensor 欧式距离
|
|
449
|
+
- MaxAbsErr: tensor 最大绝对误差
|
|
450
|
+
- MaxRelativeErr: tensor 最大相对误差
|
|
451
|
+
- One Thousandth Err Ratio: tensor 相对误差小于千分之一的比例(双千分之一)
|
|
452
|
+
- Five Thousandth Err Ratio: tensor 相对误差小于千分之五的比例(双千分之五)
|
|
453
|
+
|
|
454
|
+
**统计数据模式指标**
|
|
455
|
+
- (Max, Min, Mean, Norm) diff: 统计量绝对误差
|
|
456
|
+
- (Max, Min, Mean, Norm) RelativeErr: 统计量相对误差
|
|
457
|
+
|
|
458
|
+
**MD5模式指标**
|
|
459
|
+
- md5: CRC-32 值
|
|
460
|
+
|
|
408
461
|
## 7.附录
|
|
409
462
|
### 7.1 自定义映射文件(Layer)
|
|
410
463
|
|