diff --git a/debug/accuracy_tools/msprobe/docs/06.data_dump_MindSpore.md b/debug/accuracy_tools/msprobe/docs/06.data_dump_MindSpore.md index fdf19b2b7905e15cdf52d964a5b235b3eb9cb5f8..651453fe8c37358f10121fb1e173048231b53aa5 100644 --- a/debug/accuracy_tools/msprobe/docs/06.data_dump_MindSpore.md +++ b/debug/accuracy_tools/msprobe/docs/06.data_dump_MindSpore.md @@ -100,7 +100,7 @@ start(model=None, token_range=None) #### 6.1.2 stop **功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。若 **stop** 函数添加在反向计算代码之后,则会采集 **start** 和该函数之间的前反向数据。 -若 **stop** 函数添加在反向计算代码之前,则需要将 [**step**](#613-step) 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。 +若 **stop** 函数添加在反向计算代码之前,则需要将 [**step**](#613-step) 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据,参考[**采集指定代码块的前反向数据**](#7213-采集指定代码块的前反向数据)。 **仅未使用 Model 高阶 API 的动态图场景支持。** **注意**:**stop** 函数必须调用,否则可能导致精度数据落盘不全。 @@ -364,6 +364,31 @@ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy' trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)]) ``` +##### 7.2.1.3 采集指定代码块的前反向数据 + +```python +import mindspore as ms +from mindspore.train import Model +ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend") + +from msprobe.mindspore import PrecisionDebugger +from msprobe.mindspore.common.utils import MsprobeStep +debugger = PrecisionDebugger(config_path="./config.json") + +# 模型、损失函数的定义及初始化等操作 +# ... +# 数据集迭代的位置一般为模型训练开始的位置 +for data, label in data_loader: + debugger.start() # 开启数据dump + # 如下是模型每个step执行的逻辑 + output = model(data) + + debugger.stop() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据,可以支持start-stop-start-stop-step分段采集。 + # ... + loss.backward() + debugger.step() # 结束一个step的dump +``` + #### 7.2.2 L2 级别 ##### 7.2.2.1 未使用 Model 高阶 API @@ -515,7 +540,7 @@ dump 结果目录结构示例如下: * `dump_tensor_data`:保存采集到的张量数据。 * `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-场景下的-dumpjson-文件)。 * `stack.json`:API/Cell的调用栈信息。 -* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。 +* `construct.json`:根据model层级展示分层分级结构,level为L1时,construct.json内容为空。 dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。 diff --git a/debug/accuracy_tools/msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md b/debug/accuracy_tools/msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md index 14bb2cd2c54793b5a61af5e106bcfcd484e8ecef..e5e43b6f8680d5eda9f8eaef9bf525c207c9e3be 100644 --- a/debug/accuracy_tools/msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +++ b/debug/accuracy_tools/msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md @@ -35,7 +35,7 @@ import os import numpy as np import mindspore as ms from mindspore import nn, ops -from mindspore import context +from mindspore import context, set_device, set_deterministic from mindspore import Tensor from msprobe.mindspore import PrecisionDebugger, seed_all @@ -50,7 +50,11 @@ config_path = os.path.join(script_dir, 'config.json') debugger = PrecisionDebugger(config_path=config_path) # 设置 MindSpore 设备上下文 -context.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend", device_id=0) +context.set_context(mode=ms.PYNATIVE_MODE) + +set_device("Ascend", 0) + +set_deterministic(True) print("Context set successfully. Please wait for the training task.") # 定义卷积层