mindstudio-probe 8.1.2__py3-none-any.whl → 8.2.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-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/METADATA +2 -2
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/RECORD +172 -147
- msprobe/README.md +6 -6
- msprobe/core/common/const.py +98 -41
- msprobe/core/common/db_manager.py +256 -0
- msprobe/core/common/file_utils.py +28 -5
- msprobe/core/common/log.py +7 -0
- msprobe/core/common/megatron_utils.py +59 -0
- msprobe/core/common/parallel_state.py +193 -0
- msprobe/core/common/utils.py +20 -13
- msprobe/core/common_config.py +5 -0
- msprobe/core/compare/acc_compare.py +140 -93
- msprobe/core/compare/check.py +13 -0
- msprobe/core/compare/compare_cli.py +64 -6
- msprobe/core/compare/config.py +10 -8
- msprobe/core/compare/diff_analyze/diff_analyze_threshold.yaml +14 -0
- msprobe/core/compare/diff_analyze/first_diff_analyze.py +135 -0
- msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
- msprobe/core/compare/find_first/__init__.py +0 -0
- msprobe/core/compare/find_first/analyzer.py +282 -0
- msprobe/core/compare/find_first/data_processor.py +35 -0
- msprobe/core/compare/find_first/graph.py +188 -0
- msprobe/core/compare/find_first/utils.py +189 -0
- msprobe/core/compare/highlight.py +74 -101
- msprobe/core/compare/layer_mapping/layer_mapping.py +14 -9
- msprobe/core/compare/merge_result/merge_result.py +2 -2
- msprobe/core/compare/multiprocessing_compute.py +45 -28
- msprobe/core/compare/npy_compare.py +7 -10
- msprobe/core/compare/utils.py +338 -130
- msprobe/core/config_check/checkers/dataset_checker.py +2 -1
- msprobe/core/config_check/checkers/env_args_checker.py +5 -5
- msprobe/core/config_check/checkers/hyperparameter_checker.py +30 -10
- msprobe/core/config_check/checkers/pip_checker.py +4 -3
- msprobe/core/config_check/checkers/random_checker.py +3 -3
- msprobe/core/config_check/checkers/weights_checker.py +2 -1
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +2 -0
- msprobe/core/config_check/resource/hyperparameter.yaml +11 -1
- msprobe/core/config_check/utils/hyperparameter_parser.py +7 -3
- msprobe/core/config_check/utils/utils.py +10 -0
- msprobe/core/data_dump/api_registry.py +49 -30
- msprobe/core/data_dump/data_collector.py +71 -29
- msprobe/core/data_dump/data_processor/base.py +2 -0
- msprobe/core/data_dump/data_processor/mindspore_processor.py +47 -53
- msprobe/core/data_dump/data_processor/pytorch_processor.py +227 -93
- msprobe/core/data_dump/json_writer.py +81 -7
- msprobe/core/data_dump/scope.py +4 -6
- msprobe/core/hook_manager.py +129 -70
- msprobe/core/monitor/csv2db.py +361 -0
- msprobe/core/monitor/db_utils.py +278 -0
- msprobe/core/monitor/utils.py +35 -1
- msprobe/core/service.py +31 -39
- msprobe/core/single_save/single_comparator.py +16 -3
- msprobe/docs/01.installation.md +51 -19
- msprobe/docs/02.config_introduction.md +16 -20
- msprobe/docs/03.config_examples.md +26 -0
- msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
- msprobe/docs/05.data_dump_PyTorch.md +6 -2
- msprobe/docs/06.data_dump_MindSpore.md +44 -7
- msprobe/docs/07.accuracy_checker_PyTorch.md +1 -1
- msprobe/docs/10.accuracy_compare_PyTorch.md +124 -44
- msprobe/docs/11.accuracy_compare_MindSpore.md +75 -7
- msprobe/docs/14.data_parse_PyTorch.md +1 -1
- msprobe/docs/19.monitor.md +94 -7
- msprobe/docs/21.visualization_PyTorch.md +71 -101
- msprobe/docs/22.visualization_MindSpore.md +69 -119
- msprobe/docs/23.generate_operator_PyTorch.md +1 -1
- msprobe/docs/25.tool_function_introduction.md +0 -1
- msprobe/docs/26.data_dump_PyTorch_baseline.md +7 -7
- msprobe/docs/28.debugger_save_instruction.md +184 -81
- msprobe/docs/29.data_dump_MSAdapter.md +6 -0
- msprobe/docs/31.config_check.md +4 -2
- msprobe/docs/36.calculation_result_change.md +75 -0
- msprobe/docs/FAQ.md +22 -1
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +6 -2
- msprobe/docs/img/compare_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/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +59 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +80 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +330 -0
- msprobe/mindspore/__init__.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_runner.py +9 -6
- msprobe/mindspore/api_accuracy_checker/compute_element.py +18 -12
- msprobe/mindspore/cell_processor.py +64 -25
- msprobe/mindspore/common/utils.py +51 -7
- msprobe/mindspore/compare/common_dir_compare.py +45 -37
- msprobe/mindspore/compare/ms_compare.py +10 -2
- msprobe/mindspore/compare/ms_graph_compare.py +47 -52
- msprobe/mindspore/debugger/debugger_config.py +18 -7
- msprobe/mindspore/debugger/precision_debugger.py +16 -12
- msprobe/mindspore/dump/cell_dump_process.py +130 -68
- msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +10 -2
- msprobe/mindspore/dump/graph_mode_cell_dump.py +35 -9
- msprobe/mindspore/dump/graph_tensor_dump.py +11 -0
- msprobe/mindspore/dump/hook_cell/api_register.py +19 -20
- msprobe/mindspore/dump/hook_cell/hook_cell.py +12 -34
- msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +142 -21
- msprobe/mindspore/dump/kernel_kbyk_dump.py +24 -0
- msprobe/mindspore/exception_dump/__init__.py +0 -0
- msprobe/mindspore/exception_dump/exception_dump_tool_factory.py +51 -0
- msprobe/mindspore/exception_dump/kernel_graph_exception_dump.py +57 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +5 -4
- msprobe/mindspore/mindspore_service.py +2 -2
- msprobe/mindspore/mindtorch/mindtorch_adaptor.py +12 -7
- msprobe/mindspore/monitor/features.py +82 -0
- msprobe/mindspore/monitor/module_hook.py +168 -10
- msprobe/mindspore/monitor/utils.py +27 -1
- msprobe/mindspore/ms_config.py +12 -4
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +1 -1
- msprobe/mindspore/task_handler_factory.py +3 -1
- msprobe/nan_analyze/graph.py +1 -1
- msprobe/pytorch/api_accuracy_checker/common/config.py +3 -36
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +0 -24
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +2 -12
- msprobe/pytorch/api_accuracy_checker/config.yaml +1 -6
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +12 -132
- msprobe/pytorch/common/utils.py +1 -21
- msprobe/pytorch/compare/pt_compare.py +10 -2
- msprobe/pytorch/{hook_module/jit_script_wrapper.py → compare/pt_diff_analyze.py} +3 -15
- msprobe/pytorch/compare/utils.py +2 -1
- msprobe/pytorch/debugger/debugger_config.py +18 -23
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +10 -7
- msprobe/pytorch/dump/module_dump/module_processer.py +41 -19
- msprobe/pytorch/free_benchmark/main.py +7 -4
- msprobe/pytorch/hook_module/api_register.py +62 -24
- msprobe/pytorch/hook_module/hook_module.py +9 -29
- msprobe/pytorch/hook_module/pt_hook_manager.py +84 -15
- msprobe/pytorch/hook_module/script_wrapper.py +140 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +6 -0
- msprobe/pytorch/monitor/csv2tb.py +1 -1
- msprobe/pytorch/monitor/features.py +94 -0
- msprobe/pytorch/monitor/module_hook.py +221 -81
- msprobe/pytorch/monitor/module_metric.py +27 -1
- msprobe/pytorch/monitor/optimizer_collect.py +109 -4
- msprobe/pytorch/online_dispatch/dispatch.py +42 -24
- msprobe/pytorch/online_dispatch/dump_compare.py +1 -1
- msprobe/pytorch/parse_tool/lib/visualization.py +0 -1
- msprobe/pytorch/pt_config.py +2 -51
- msprobe/pytorch/pytorch_service.py +7 -14
- msprobe/visualization/builder/graph_builder.py +192 -63
- msprobe/visualization/builder/graph_merger.py +986 -0
- msprobe/visualization/builder/msprobe_adapter.py +17 -15
- msprobe/visualization/compare/graph_comparator.py +26 -16
- msprobe/visualization/db_utils.py +252 -0
- msprobe/visualization/graph/base_node.py +2 -22
- msprobe/visualization/graph/distributed_analyzer.py +12 -12
- msprobe/visualization/graph/graph.py +44 -16
- msprobe/visualization/graph_service.py +143 -59
- msprobe/visualization/utils.py +103 -4
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +0 -295
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +0 -205
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +0 -378
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +0 -239
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +0 -115
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +0 -250
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +0 -63
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +0 -198
- msprobe/pytorch/attl_manager.py +0 -65
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/WHEEL +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/top_level.txt +0 -0
- /msprobe/{pytorch/api_accuracy_checker/tensor_transport_layer → core/compare/diff_analyze}/__init__.py +0 -0
msprobe/docs/19.monitor.md
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
| [采集module堆栈信息](#采集module堆栈信息) | 采集监控的第一个 step 的 module 对应的堆栈信息辅助问题定位 | PyTorch、MindSpore |
|
|
25
25
|
| [指定监控对象](#指定监控对象) | 指定监控的nn.Module(nn.Cell)及对应的输入输出 | PyTorch、MindSpore |
|
|
26
26
|
| [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch |
|
|
27
|
+
| [l2可解释特征监控](#l2可解释特征监控) | 开启模型状态的高阶监控 | PyTorch |
|
|
27
28
|
| [输出格式和统计量](#输出格式和统计量) | format PyTorch支持`csv`、`tensorboard`和`api`,MindSpore仅支持`csv`,`ops`、`ndigits`均支持 | PyTorch、MindSpore |
|
|
28
29
|
| [mbs粒度梯度监控](#mbs粒度梯度监控) | 开启梯度监控时,采集聚合前梯度时支持`micro_batch_size`粒度 | PyTorch、MindSpore |
|
|
29
30
|
| [异常告警](#异常告警) | 监控对象指标异常时自动告警,支持异常数据落盘 | PyTorch、MindSpore |
|
|
@@ -61,6 +62,8 @@ monitor.set_monitor(
|
|
|
61
62
|
)
|
|
62
63
|
```
|
|
63
64
|
|
|
65
|
+
*注意*:若框架为FSDP1,请先保证model包裹FSDP时设置use_orig_params=True。
|
|
66
|
+
|
|
64
67
|
*注意*:补充deepspeed下常用框架的使能位置。
|
|
65
68
|
|
|
66
69
|
deepspeed与accelerate、transformers同时使用时,optimizer传值方式为`optimizer=optimizer.optimizer`,若未使用deepspeed,单独使用accelerate、transformers,optimizer传值方式为`optimizer=optimizer`。
|
|
@@ -227,7 +230,7 @@ monitor.monitor_gnorm_with_ad(
|
|
|
227
230
|
module_name可以通过nn.Module的接口named_modules()获取。
|
|
228
231
|
|
|
229
232
|
#### 打印模型结构
|
|
230
|
-
工具提供可选项`print_struct`打印模型结构,帮助配置targets。工具会在在第一个step
|
|
233
|
+
工具提供可选项`print_struct`打印模型结构,帮助配置targets。工具会在在第一个step后打印结构并停止训练进程,每张卡上的模型结构默认保存在`$MONITOR_OUTPUT_DIR/module_struct/rank{rank}/module_struct.json`, 其中{rank}为对应的卡号。
|
|
231
234
|
```json
|
|
232
235
|
{
|
|
233
236
|
"print_struct": true
|
|
@@ -302,6 +305,34 @@ param_name可以通过nn.Module的接口`named_parameters()`获取。
|
|
|
302
305
|
}
|
|
303
306
|
```
|
|
304
307
|
|
|
308
|
+
### l2可解释特征监控
|
|
309
|
+
- 工具配置示例
|
|
310
|
+
```json
|
|
311
|
+
{
|
|
312
|
+
"l2_targets": {
|
|
313
|
+
"attention_hook": ["0:0.self_attention.core_attention.flash_attention"],
|
|
314
|
+
"linear_hook": ["0:0.self_attention.linear_qkv", "0:1.self_attention.linear_qkv"]
|
|
315
|
+
},
|
|
316
|
+
"recording_l2_features": true,
|
|
317
|
+
"sa_order": "b,s,h,d"
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
| 配置项 | 类型 | 说明 | 是否必选 |
|
|
321
|
+
|--------|------|------|--------|
|
|
322
|
+
| **l2_targets** | Dict[str, List[str]] | 指定需要监控的模型层配置<br>**支持的hook类型**:<br> • `attention_hook`:监控注意力层<br> ▪️ 采集指标:`entropy` `softmax_max`<br> ▪️ 必须通过[打印模型结构](#打印模型结构)获取准确层名<br> ▪️ 不配置或配置空列表均表示不采集<br>• `linear_hook`:监控线性层<br> ▪️ 采集指标:`sr`, `kernel_norm`<br> ▪️ 必须通过[打印模型结构](#打印模型结构)获取准确层名, 不配置表示不采集<br> ▪️ 配置空列表会自动识别符合条件的层(包含`weight`或`wg`2D参数属性的层) | 是 |
|
|
323
|
+
| **recording_l2_features** | bool | 是否开启L2层特征数据采集,默认为false表示不采集 | 否 |
|
|
324
|
+
| **sa_order** | str | 计算`attention_hook`内指标时,指定Attention输入(Q,K)的张量维度排列顺序,支持"s,b,h,d"和"b,s,h,d", 默认为"s,b,h,d"表示输入维度顺序为**s**equence_len->**b**atch_size->num_**h**eads->head_**d**im | 否 |
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
#### L2可解释特征监控指标说明
|
|
328
|
+
|
|
329
|
+
| **指标名称** | **适用Hook类型** | **数学定义/计算方式** | **监控意义** |
|
|
330
|
+
|--------------------|-------------------|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
|
|
331
|
+
| **entropy** | attention_hook | $H(p)=-\sum p_i \log p_i$,其中$p_i$为注意力权重 | 衡量注意力分布的不确定性,**低熵值**表示注意力集中 |
|
|
332
|
+
| **softmax_max** | attention_hook | $\max(\text{softmax}(QK^T/\sqrt{d}))$ | 反映注意力机制的聚焦程度,**高值**表示存在显著主导的注意力token |
|
|
333
|
+
| **sr(stable_rank)** | linear_hook | $\frac{\|W\|_F}{\|W\|_2}$(稳定秩,Frobenius范数除以谱范数) | 评估权重矩阵的有效秩,**低值**表示矩阵接近低秩不稳定状态 |
|
|
334
|
+
| **kernel_norm** | linear_hook | $\|W\|_F$(Frobenius范数) | 权重矩阵的缩谱范数,反映输入在矩阵最大奇异向量张成空间的放大系数 |
|
|
335
|
+
|
|
305
336
|
|
|
306
337
|
### 输出格式和统计量
|
|
307
338
|
|
|
@@ -403,6 +434,17 @@ export MONITOR_OUTPUT_DIR=/xxx/output_dir
|
|
|
403
434
|
},
|
|
404
435
|
```
|
|
405
436
|
|
|
437
|
+
注:当配置多条异常告警规则时,优先告警第一条,如以下配置时每一层会优先报AnomalyNan的告警(一般不建议配置多条规则):
|
|
438
|
+
```json
|
|
439
|
+
"alert": {
|
|
440
|
+
"rules": [
|
|
441
|
+
{"rule_name": "AnomalyNan", "args": {"threshold": 1e10}},
|
|
442
|
+
{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}
|
|
443
|
+
],
|
|
444
|
+
"dump": true
|
|
445
|
+
},
|
|
446
|
+
```
|
|
447
|
+
|
|
406
448
|
2. 实例化工具时传入流水线并行group
|
|
407
449
|
```python
|
|
408
450
|
monitor = TrainerMon(
|
|
@@ -430,12 +472,14 @@ monitor = TrainerMon(
|
|
|
430
472
|
}
|
|
431
473
|
```
|
|
432
474
|
|
|
475
|
+
其中call_{xxx}中的xxx为API的执行调用顺序,为后续异常事件排序做准备。
|
|
476
|
+
|
|
433
477
|
3. 异常事件排序
|
|
434
478
|
|
|
435
479
|
当模型训练过程中出现较多异常数据,需要对异常事件排序。工具提供topk的异常排序能力,按照api的执行顺序进行排序,便于定界首次异常点。异常分析命令示例:
|
|
436
480
|
|
|
437
481
|
```shell
|
|
438
|
-
python3 -m msprobe.
|
|
482
|
+
python3 -m msprobe.core.monitor.anomaly_processor -d $MONITOR_OUTPUT_DIR/anomaly_detected
|
|
439
483
|
```
|
|
440
484
|
异常事件分析结束,将topk事件写入文件`anomaly_detected/anomaly_analyse.json`。异常分析支持以下参数配置:
|
|
441
485
|
|
|
@@ -449,7 +493,7 @@ python3 -m msprobe.pytorch.monitor.anomaly_analyse -d $MONITOR_OUTPUT_DIR/anomal
|
|
|
449
493
|
|
|
450
494
|
### csv格式数据转tensorboard可视化显示
|
|
451
495
|
|
|
452
|
-
|
|
496
|
+
**将csv数据转换为tensorboard格式数据。**
|
|
453
497
|
|
|
454
498
|
```python
|
|
455
499
|
from msprobe.pytorch.monitor.csv2tb import csv2tensorboard_by_step
|
|
@@ -466,6 +510,31 @@ csv2tensorboard_by_step(
|
|
|
466
510
|
data_type_list=["param_origin"]
|
|
467
511
|
)
|
|
468
512
|
```
|
|
513
|
+
参数详细介绍请参见[公开接口](#公开接口)的“csv输出件转tensorboard输出件”
|
|
514
|
+
|
|
515
|
+
**将csv数据转换为sqlite db数据。**
|
|
516
|
+
1. 创建Python脚本,以`csv2db.py`命名为例,将以下配置拷贝到文件中, 并按实际情况修改。
|
|
517
|
+
|
|
518
|
+
```python
|
|
519
|
+
from msprobe.core.monitor.csv2db import CSV2DBConfig, csv2db
|
|
520
|
+
config = CSV2DBConfig(
|
|
521
|
+
monitor_path="~/monitor_output",
|
|
522
|
+
time_start="Dec03_21-34-40",
|
|
523
|
+
time_end="Dec03_21-34-42",
|
|
524
|
+
process_num=8,
|
|
525
|
+
data_type_list=["grad_unreduced"],
|
|
526
|
+
step_partition=500,
|
|
527
|
+
output_dirpath="~/monitor_output"
|
|
528
|
+
)
|
|
529
|
+
csv2db(config)
|
|
530
|
+
```
|
|
531
|
+
参数详细介绍请参见[公开接口](#公开接口)的“csv转sqlite数据库接口”
|
|
532
|
+
|
|
533
|
+
2. 执行如下命令开启转换。
|
|
534
|
+
```shell
|
|
535
|
+
python csv2db.py
|
|
536
|
+
```
|
|
537
|
+
完成转换,在`~/monitor_output`目录下生成`monitor_metrics.db`文件。
|
|
469
538
|
|
|
470
539
|
### 动态启停
|
|
471
540
|
动态启停模式:支持用户在训练过程中随时启动/更新监控。
|
|
@@ -553,6 +622,24 @@ csv2tensorboard_by_step(monitor_path, time_start, time_end, process_num=1, data_
|
|
|
553
622
|
| process_num | 指定拉起的进程个数,默认为1,更多的进程个数可以加速转换。 | 否 |
|
|
554
623
|
| data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated"]。<br/>不指定就转换全部数据。 | 否 |
|
|
555
624
|
| output_dirpath | 指定转换后的输出路径,默认输出到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳。 | 否 |
|
|
625
|
+
|
|
626
|
+
- csv转sqlite数据库接口
|
|
627
|
+
```python
|
|
628
|
+
csv2db(config: CSV2DBConfig) -> None
|
|
629
|
+
```
|
|
630
|
+
配置参数 (CSV2DBConfig)
|
|
631
|
+
|
|
632
|
+
| 参数 | 说明 | 是否必选 |
|
|
633
|
+
| -------------- | ------------------------------------------------------------ | -------- |
|
|
634
|
+
| monitor_path | 待转换的csv存盘目录。 | 是 |
|
|
635
|
+
| time_start | 起始时间, 例如"Dec03_21-34-40"。搭配time_end一起使用,从而指定一个时间范围(闭区间),会对这个范围内的文件进行转换。默认为None不限制。 | 否 |
|
|
636
|
+
| time_end | 结束时间,例如"Dec03_21-34-41"。搭配time_start一起使用,从而指定一个时间范围(闭区间),会对这个范围内的文件进行转换。默认为None不限制。 | 否 |
|
|
637
|
+
| process_num | 指定拉起的进程个数,默认为1,更多的进程个数可以加速转换。 | 否 |
|
|
638
|
+
| data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated", "other"]。<br/>不指定就转换全部数据。 | 否 |
|
|
639
|
+
| step_partition | 控制数据库中按step分区的间隔,默认每500步一个表。 | 否 |
|
|
640
|
+
| output_dirpath | 指定转换后的输出路径,默认输出到"{curtime}_csv2db"文件夹,其中curtime为自动获取的当前时间戳。 | 否 |
|
|
641
|
+
|
|
642
|
+
|
|
556
643
|
- 在模型任意位置获取当前参数**梯度**统计量
|
|
557
644
|
```python
|
|
558
645
|
TrainerMon.generate_wgrad_metrics() -> tuple[dict, dict]
|
|
@@ -642,7 +729,7 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
642
729
|
| "collect_times" | 可选 | 设置采集次数,达到该次数后停止监控,默认值为100000000,目的是一直采集。 |
|
|
643
730
|
| "start_step" | 可选 | 设置开始采集step,模型训练达到start_step后开始监控采集,默认值为0,表示从step0开始监控采集。注:在动态启停模式下该设置不生效,只会从下一步开始监控采集。 |
|
|
644
731
|
| "step_interval" | 可选 | 设置采集step间隔,默认值为1,表示每个step均采集监控数据。 |
|
|
645
|
-
| "print_struct" | 可选 | 设置为true
|
|
732
|
+
| "print_struct" | 可选 | 设置为true后监控工具会打印每张卡模型中module的名字和详细结构,并在第1个step后退出。不填默认为false。 |
|
|
646
733
|
| "module_ranks" | 可选 | 用于在分布式训练场景中希望控制在哪些rank开启module监控。如果不填,则默认在所有rank开启。 列表内rank要求为int类型。 |
|
|
647
734
|
| "ur_distribution" | 可选 | 若为true则会统计adam优化器指定模块(targets中指定)参数的update和ratio向量的数值分布,并展示在heatmap里,默认为false,同时format字段必须设置为tensorboard。<br/>依赖histc算子, 需要CANN8.0.rc2以上版本, 否则会有严重的性能问题。**仅PyTorch场景支持此参数**。 |
|
|
648
735
|
| "xy_distribution" | 可选 | 若为true则会监控指定module(targets中指定)的输入输出张量。 默认为false。 |
|
|
@@ -651,7 +738,7 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
651
738
|
| "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。 |
|
|
652
739
|
| "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false。版本<msprobe1.2.2时需要在TrainerMon构造函数正确指定opt_ty。 |
|
|
653
740
|
| "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。 |
|
|
654
|
-
| "monitor_mbs_grad" | 可选 | 若为true则会监控mbs粒度梯度统计量,默认为false。
|
|
741
|
+
| "monitor_mbs_grad" | 可选 | 若为true则会监控mbs粒度梯度统计量,默认为false。 |
|
|
655
742
|
| "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false。 |
|
|
656
743
|
| "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。 |
|
|
657
744
|
| "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的同步。 |
|
|
@@ -659,8 +746,8 @@ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_
|
|
|
659
746
|
| "format" | 可选 | 数据落盘格式,默认值为"csv",可选 \["csv", "tensorboard", "api"\]。仅PyThon和MindSpore动态图场景支持此参数,且MindSpore动态图场景仅支持\["csv"\]。 |
|
|
660
747
|
| "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指标。 |
|
|
661
748
|
| "eps" | 可选 | 若ops里包含"zeros"则需要配置,默认为1e-8。 |
|
|
662
|
-
| "ndigits" | 可选 | "format"为"csv"时,设置落盘文件中的小数位数,默认为6。
|
|
749
|
+
| "ndigits" | 可选 | "format"为"csv"时,设置落盘文件中的小数位数,默认为6。 |
|
|
663
750
|
| "step_count_per_record" | 可选 | "format"为"csv"时生效,每个csv记录多少个step的数据,默认为1。 |
|
|
664
751
|
| "append_output" | 可选 | 适用于断点续训场景。多卡场景下生效,指定两个时间戳,将输出续写到这两个时间戳范围间的输出件中,不在范围内的rank不被续写。时间戳应来自原有输出件目录前缀,例如["Dec03_21-34-40", "Dec03_21-34-41"]。默认为[],不续写。**仅PyTorch场景支持此参数**。 |
|
|
665
|
-
| "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True
|
|
752
|
+
| "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True。 |
|
|
666
753
|
|
|
@@ -4,18 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
工具支持PyTorch版本:2.1/2.2
|
|
6
6
|
|
|
7
|
-
## 更新通知
|
|
8
|
-
|
|
9
|
-
请注意,tb_graph_ascend插件已于2025/3/12更新到1.0.0版本,如果当前环境已安装旧版本插件,推荐升级。
|
|
10
|
-
|
|
11
|
-
更新内容如下:
|
|
12
|
-
|
|
13
|
-
- 优化了信息栏,使用了更人性化、更美观的展示界面;
|
|
14
|
-
- 提升了节点渲染和搜索性能;
|
|
15
|
-
- 双图比对场景画布分离,操作左图时不会影响到右图;
|
|
16
|
-
- 新增浏览器匹配节点功能,双图比对场景有未匹配节点时,可通过在浏览器页面手动选中调试侧和标杆侧的未匹配节点进行精度比对;
|
|
17
|
-
- 新增颜色图例可配置功能。
|
|
18
|
-
|
|
19
7
|
## 工具特性
|
|
20
8
|
|
|
21
9
|
- 支持重建模型的层级结构;
|
|
@@ -25,6 +13,7 @@
|
|
|
25
13
|
- 支持多卡场景的批量构图,能够关联各卡的通信节点,分析各卡之间的数据传递;
|
|
26
14
|
- 支持节点名称搜索,按精度比对结果筛选节点,按溢出检测结果筛选节点,支持自动跳转展开节点所在的层级;
|
|
27
15
|
- 支持跨套件、跨框架的模型比对。
|
|
16
|
+
- 支持不同切分策略下两个模型的精度数据比对:[不同切分策略下的图合并](#325-不同切分策略下的图合并)。
|
|
28
17
|
|
|
29
18
|

|
|
30
19
|
|
|
@@ -32,18 +21,16 @@
|
|
|
32
21
|
|
|
33
22
|
### 1.1 安装msprobe工具
|
|
34
23
|
|
|
35
|
-
[msprobe工具安装](
|
|
24
|
+
[msprobe工具安装](./01.installation.md)
|
|
36
25
|
|
|
37
26
|
### 1.2 安装tb_graph_ascend
|
|
38
27
|
|
|
39
28
|
**请安装tb_graph_ascend,否则无法解析构图结果。**
|
|
40
29
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
如需升级工具,请先``pip3 uninstall tb-graph-ascend``再``pip3 install tb-graph-ascend``即可。
|
|
30
|
+
[tb_graph_ascend安装](../../../../plugins/tensorboard-plugins/tb_graph_ascend#2-安装方式)
|
|
44
31
|
|
|
45
32
|
## 2.模型结构数据采集
|
|
46
|
-
[PyTorch场景的数据采集](
|
|
33
|
+
[PyTorch场景的数据采集](./05.data_dump_PyTorch.md)
|
|
47
34
|
|
|
48
35
|
**需要选择level为L0(module信息)或者mix(module信息+api信息),才能采集到模型结构数据,即采集结果件construct.json内容不为空**。
|
|
49
36
|
|
|
@@ -57,15 +44,14 @@ msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
|
57
44
|
```
|
|
58
45
|
**命令行参数说明**:
|
|
59
46
|
|
|
60
|
-
| 参数名 | 说明
|
|
61
|
-
|
|
62
|
-
| -f 或 --framework | 指定训练框架。pytorch。
|
|
63
|
-
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明)
|
|
64
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。
|
|
65
|
-
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。 配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm
|
|
66
|
-
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出
|
|
67
|
-
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明)
|
|
68
|
-
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
47
|
+
| 参数名 | 说明 | 是否必选 |
|
|
48
|
+
|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
|
|
49
|
+
| -f 或 --framework | 指定训练框架。pytorch。 | 是 |
|
|
50
|
+
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
51
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis.db或build_{timestamp}.vis.db`。 | 是 |
|
|
52
|
+
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。 配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。<br/><br/>可参考的实际案例:[MindSpeed&LLamaFactory数据采集和自动比对](./visualization/mindspeed_llamafactory_mapping.md) | 否 |
|
|
53
|
+
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出db文件中(`compare_{timestamp}.vis.db或build_{timestamp}.vis.db`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
54
|
+
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
69
55
|
|
|
70
56
|
#### 3.1.1 匹配说明
|
|
71
57
|
|
|
@@ -102,7 +88,7 @@ msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
|
102
88
|
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。 | 是 |
|
|
103
89
|
| bench_path | 指定标杆侧比对路径,str类型。单图构建场景可以不配置。 | 否 |
|
|
104
90
|
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。 | 否 |
|
|
105
|
-
|
|
91
|
+
| parallel_merge | 配置是否开启不同切分策略下的图合并,dict类型。rank_size、tp、pp参数按实际情况进行配置。比对时配置npu、bench,只构图配置npu。 配置示例见[3.2.5 不同切分策略下的图合并](#325-不同切分策略下的图合并)。 | 否 |
|
|
106
92
|
|
|
107
93
|
### 3.2 图构建和比对
|
|
108
94
|
|
|
@@ -150,7 +136,7 @@ msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
|
150
136
|
|
|
151
137
|
3.md5:dump了API和Module的输入输出数据统计信息和md5信息。
|
|
152
138
|
|
|
153
|
-
dump类型如何配置见[数据采集配置文件介绍](https://
|
|
139
|
+
dump类型如何配置见[数据采集配置文件介绍](https://gitcode.com/Ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/02.config_introduction.md)
|
|
154
140
|
|
|
155
141
|
**1. 准备比对文件**:
|
|
156
142
|
|
|
@@ -179,7 +165,7 @@ npu_path或bench_path格式:必须包含dump.json、stack.json和construct.jso
|
|
|
179
165
|
msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
180
166
|
```
|
|
181
167
|
|
|
182
|
-
比对完成后将在**output**下生成一个**vis后缀文件**。
|
|
168
|
+
比对完成后将在**output**下生成一个**vis.db后缀文件**。
|
|
183
169
|
|
|
184
170
|
#### 3.2.3 批量构建或比对
|
|
185
171
|
##### 3.2.3.1 多rank批量构建或比对
|
|
@@ -223,25 +209,15 @@ npu_path或bench_path格式:必须只包含rank+数字格式的文件夹,且
|
|
|
223
209
|
```
|
|
224
210
|
msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
225
211
|
```
|
|
226
|
-
比对完成后将在**output**下生成
|
|
212
|
+
比对完成后将在**output**下生成1个**vis.db后缀文件**。
|
|
227
213
|
|
|
228
214
|
图构建:
|
|
229
215
|
```
|
|
230
|
-
├──
|
|
231
|
-
├── build_rank1_{timestamp}.vis
|
|
232
|
-
├── build_rank2_{timestamp}.vis
|
|
233
|
-
├── build_rank3_{timestamp}.vis
|
|
234
|
-
├── ...
|
|
235
|
-
├── build_rankn_{timestamp}.vis
|
|
216
|
+
├── build_{timestamp}.vis.db
|
|
236
217
|
```
|
|
237
218
|
图比对:
|
|
238
219
|
```
|
|
239
|
-
├──
|
|
240
|
-
├── compare_rank1_{timestamp}.vis
|
|
241
|
-
├── compare_rank2_{timestamp}.vis
|
|
242
|
-
├── compare_rank3_{timestamp}.vis
|
|
243
|
-
├── ...
|
|
244
|
-
├── compare_rankn_{timestamp}.vis
|
|
220
|
+
├── compare_{timestamp}.vis.db
|
|
245
221
|
```
|
|
246
222
|
##### 3.2.3.2 多step批量构建或比对
|
|
247
223
|
批量构建或比对多个step下的所有rank的数据
|
|
@@ -288,33 +264,15 @@ npu_path或bench_path格式:必须只包含step+数字格式的文件夹,且
|
|
|
288
264
|
```
|
|
289
265
|
msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
290
266
|
```
|
|
291
|
-
比对完成后将在**output
|
|
267
|
+
比对完成后将在**output**下生成1个**vis.db后缀文件**。
|
|
292
268
|
|
|
293
269
|
图构建:
|
|
294
270
|
```
|
|
295
|
-
├──
|
|
296
|
-
├── build_step0_rank1_{timestamp}.vis
|
|
297
|
-
├── build_step0_rank2_{timestamp}.vis
|
|
298
|
-
├── build_step0_rank3_{timestamp}.vis
|
|
299
|
-
├── build_step1_rank0_{timestamp}.vis
|
|
300
|
-
├── build_step1_rank1_{timestamp}.vis
|
|
301
|
-
├── build_step1_rank2_{timestamp}.vis
|
|
302
|
-
├── build_step1_rank3_{timestamp}.vis
|
|
303
|
-
├── ...
|
|
304
|
-
├── build_stepn_rankn_{timestamp}.vis
|
|
271
|
+
├── build_{timestamp}.vis.db
|
|
305
272
|
```
|
|
306
273
|
图比对:
|
|
307
274
|
```
|
|
308
|
-
├──
|
|
309
|
-
├── compare_step0_rank1_{timestamp}.vis
|
|
310
|
-
├── compare_step0_rank2_{timestamp}.vis
|
|
311
|
-
├── compare_step0_rank3_{timestamp}.vis
|
|
312
|
-
├── compare_step1_rank0_{timestamp}.vis
|
|
313
|
-
├── compare_step1_rank1_{timestamp}.vis
|
|
314
|
-
├── compare_step1_rank2_{timestamp}.vis
|
|
315
|
-
├── compare_step1_rank3_{timestamp}.vis
|
|
316
|
-
├── ...
|
|
317
|
-
├── compare_stepn_rankn_{timestamp}.vis
|
|
275
|
+
├── compare_{timestamp}.vis.db
|
|
318
276
|
```
|
|
319
277
|
|
|
320
278
|
#### 3.2.4 仅模型结构比对
|
|
@@ -327,6 +285,49 @@ dump配置请参考[dump配置示例](./03.config_examples.md#16-task-配置为-
|
|
|
327
285
|
|
|
328
286
|
得到dump数据后,若需比较特定两个rank之间的数据,请参考[3.2.2 双图比对](#322-双图比对);若需进行多个rank或多个step的数据批量比对,请参考[3.2.3 批量构建或比对](#323-批量构建或比对)。
|
|
329
287
|
|
|
288
|
+
#### 3.2.5 不同切分策略下的图合并
|
|
289
|
+
|
|
290
|
+
适用场景:不同模型并行切分策略下,两个模型产生了精度差异,需要进行整网数据比对,但被切分的数据或模型结构分布于多rank中无法进行比对,需要将分布在各个rank的数据或模型结构合并后再进行比对。
|
|
291
|
+
|
|
292
|
+
使用限制:
|
|
293
|
+
|
|
294
|
+
- 当前支持的模型并行切分策略:Tensor Parallelism(TP)、Pipeline Parallelism(PP)、Virtual Pipeline Parallelism(VPP),暂不支持Context Parallelism(CP)和Expert Parallelism(EP)。
|
|
295
|
+
- 当前支持基于Megatron、MindSpeed-LLM套件的模型进行图合并,其他套件的模型图合并效果有待验证;
|
|
296
|
+
- 当前仅支持msprobe工具dump的statistics数据, level需指定L0或者mix;
|
|
297
|
+
- 图合并比对时要确保Data Parallelism(DP)切分一致,例如rank=8 tp=1 pp=8的配置,dp=1,图合并将得到一张图,rank=8 tp=1 pp=4的配置,dp=2,图合并将得到两张图,暂不支持数量不一致的图进行比对。
|
|
298
|
+
|
|
299
|
+
使能方式:
|
|
300
|
+
|
|
301
|
+
在compare.json里增加parallel_merge配置项, rank_size、tp、pp和vpp参数按实际情况进行配置。
|
|
302
|
+
|
|
303
|
+
参数说明:
|
|
304
|
+
|
|
305
|
+
所需tp、pp和vpp参数来自于Megatron、MindSpeed-LLM套件中的训练脚本实际配置。
|
|
306
|
+
|
|
307
|
+
| 参数名 | 说明 | 是否必填 |
|
|
308
|
+
|-----------|--------------------------------------------------------------------------------------------------------------------------|------|
|
|
309
|
+
| rank_size | 模型实际训练所用加速卡的数量,int类型。`rank_size=tp*pp*cp*dp`,由于暂不支持CP合并,图合并功能中默认cp=1。 | 是 |
|
|
310
|
+
| tp | 张量并行大小,int类型。实际训练脚本中需指定`--tensor-model-parallel-size T`,其中`T`表示张量模型并行大小,即**图合并所需的参数tp**, `tp=T`。 | 是 |
|
|
311
|
+
| pp | 流水线并行的阶段数,int类型。实际训练脚本中需指定`--pipeline-model-parallel-size P`,其中`P`表示流水线并行的阶段数,即**图合并所需的参数pp**, `pp=P`。 | 是 |
|
|
312
|
+
| vpp | 虚拟流水线并行阶段数,int类型。虚拟流水线并行依赖流水线并行,实际训练脚本中需指定`--num-layers-per-virtual-pipeline-stage V`,其中`V`表示每个虚拟流水线阶段的层数;指定`--num-layers L`,其中`L`表示模型总层数,**图合并所需的参数vpp**=`L/V/P`。vpp参数可以不配置,默认vpp=1代表未开启虚拟流水线并行。 | 否 |
|
|
313
|
+
| order | 模型并行维度的排序顺序,str类型。Megatron默认为`tp-cp-ep-dp-pp`。 如果使用msprobe工具dump数据指定level为L0并且实际训练脚本中的order非默认值(例如实际训练脚本中指定`--use-tp-pp-dp-mapping`),请传入修改后的order。dump数据指定level为mix则无需修改。 | 否 |
|
|
314
|
+
|
|
315
|
+
npu_path、bench_path的配置以及执行命令请参考[3.2.3 批量构建或比对](#323-批量构建或比对)
|
|
316
|
+
|
|
317
|
+
如果只进行图构建,"bench_path"和"parallel_merge"中的"bench"参数可不配置。
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
{
|
|
321
|
+
"npu_path": "./npu_dump",
|
|
322
|
+
"bench_path": "./bench_dump",
|
|
323
|
+
"is_print_compare_log": true,
|
|
324
|
+
"parallel_merge": {
|
|
325
|
+
"npu": {"rank_size": 8, "tp": 8, "pp": 1},
|
|
326
|
+
"bench": {"rank_size": 8, "tp": 1, "pp": 8}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
330
331
|
## 4.启动tensorboard
|
|
331
332
|
|
|
332
333
|
### 4.1 可直连的服务器
|
|
@@ -380,13 +381,18 @@ tensorboard --logdir out_path
|
|
|
380
381
|
|
|
381
382
|
### 5.1 浏览器打开图
|
|
382
383
|
推荐使用谷歌浏览器,在浏览器中输入机器地址+端口号回车,出现TensorBoard页面,其中/#graph_ascend会自动拼接。
|
|
384
|
+
|
|
383
385
|

|
|
386
|
+
|
|
384
387
|
如果您切换了TensorBoard的其他功能,此时想回到模型分级可视化页面,可以点击左上方的**GRAPH_ASCEND**
|
|
388
|
+
|
|
385
389
|

|
|
386
390
|
|
|
387
391
|
### 5.2 查看图
|
|
388
392
|

|
|
389
393
|
|
|
394
|
+
MicroStep是指在一次完整的权重更新前执行的多次前向和反向传播过程,一次完整的训练迭代(step)可以进一步细分为多个更小的步骤(micro step)。其中分级可视化工具通过识别模型首层结构中一次完整的前反向作为一次micro step。
|
|
395
|
+
|
|
390
396
|
### 5.3 名称搜索
|
|
391
397
|

|
|
392
398
|
|
|
@@ -412,14 +418,14 @@ tensorboard --logdir out_path
|
|
|
412
418
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
413
419
|
|
|
414
420
|
#### 6.1.1 真实数据模式
|
|
415
|
-
|
|
421
|
+
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**该数值越大,表明两组模型的精度差异越大,在图中标注的对应颜色会更深**。
|
|
416
422
|
|
|
417
423
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
418
424
|
|
|
419
425
|
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
420
426
|
|
|
421
427
|
#### 6.1.2 统计信息模式
|
|
422
|
-
|
|
428
|
+
节点中输出的统计量相对误差,**该数值越大,表明两组模型的精度差异越大,在图中标注的对应颜色会更深**。
|
|
423
429
|
|
|
424
430
|
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
425
431
|
|
|
@@ -499,42 +505,6 @@ yaml文件中只需配置待调试侧与标杆侧模型代码中功能一致但
|
|
|
499
505
|
|
|
500
506
|

|
|
501
507
|
|
|
502
|
-
### 7.2 堆栈信息说明
|
|
503
|
-
|
|
504
|
-
**精简堆栈**
|
|
505
|
-
|
|
506
|
-
保留一条当前模块或api的调用信息
|
|
507
|
-
|
|
508
|
-
```json
|
|
509
|
-
{
|
|
510
|
-
"Module.layer1.0.bn1.BatchNorm2d.forward.0": [
|
|
511
|
-
"File /home/torchvision/models/resnet.py, line 93, in forward, \n out = self.bn1(out)"
|
|
512
|
-
]
|
|
513
|
-
}
|
|
514
|
-
```
|
|
515
|
-
|
|
516
|
-
**完整堆栈**
|
|
517
|
-
|
|
518
|
-
当前模块或api完整的调用信息
|
|
519
|
-
|
|
520
|
-
```json
|
|
521
|
-
{
|
|
522
|
-
"Module.layer1.0.bn1.BatchNorm2d.forward.0": [
|
|
523
|
-
"File /home/torchvision/models/resnet.py, line 93, in forward, \n out = self.bn1(out)",
|
|
524
|
-
"File /home/torch/nn/modules/module.py, line 1568, in _call_impl, \n result = forward_call(*args, **kwargs)",
|
|
525
|
-
"File /home/torch/nn/modules/module.py, line 1518, in _wrapped_call_impl, \n return self._call_impl(*args, **kwargs)",
|
|
526
|
-
"File /home/torch/nn/modules/container.py, line 215, in forward, \n input = module(input)",
|
|
527
|
-
"File /home/torch/nn/modules/module.py, line 1568, in _call_impl, \n result = forward_call(*args, **kwargs)",
|
|
528
|
-
"File /home/torch/nn/modules/module.py, line 1518, in _wrapped_call_impl, \n return self._call_impl(*args, **kwargs)",
|
|
529
|
-
"File /home/torchvision/models/resnet.py, line 273, in _forward_impl, \n x = self.layer1(x)",
|
|
530
|
-
"File /home/torchvision/models/resnet.py, line 285, in forward, \n return self._forward_impl(x)",
|
|
531
|
-
"File /home/torch/nn/modules/module.py, line 1527, in _call_impl, \n return forward_call(*args, **kwargs)",
|
|
532
|
-
"File /home/torch/nn/modules/module.py, line 1518, in _wrapped_call_impl, \n return self._call_impl(*args, **kwargs)",
|
|
533
|
-
"File /home/visualization/resnet18.py, line 40, in <module>, \n outputs = model(inputs)"
|
|
534
|
-
]
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
```
|
|
538
508
|
# FAQ
|
|
539
509
|
1. 图比对场景,节点呈现灰色,且没有精度比对数据,怎么处理?
|
|
540
510
|
|