diff --git a/debug/accuracy_tools/atat/config/README.md b/debug/accuracy_tools/atat/config/README.md index 546cbbde18c006ec0a543c07b1bfaa3112775647..94fea911f410ff5c187af18afd9d3b058488512d 100644 --- a/debug/accuracy_tools/atat/config/README.md +++ b/debug/accuracy_tools/atat/config/README.md @@ -1,6 +1,6 @@ # 配置文件说明 -当前配置文件主要为PrecisionDebugger接口执行dump或无标杆比对操作时,调用的配置,当PrecisionDebugger接口未指定该配置文件时,使用该文件的默认配置。配置文件详见[config.json](./config.json)。 +当前配置文件主要为PrecisionDebugger接口执行dump或无标杆比对操作时调用的配置,当PrecisionDebugger接口未指定该配置文件时,使用该文件的默认配置。配置文件详见[config.json](./config.json)。 ## 参数说明 @@ -11,8 +11,8 @@ | task | dump的任务类型,str类型。可取值"free_benchmark"(无标杆比对)、"statistics"(仅dump API统计信息,默认值)、"tensor"(dump API统计信息和完全复刻整网的API运行情况的真实数据)、"overflow_check"(溢出检测)。配置示例:"task": "tensor"。根据task参数取值的不同,可以配置不同场景参数,详见:“**task配置为free_benchmark**”,“**task配置为statistics**”,“**task配置为tensor**”,“**task配置为overflow_check**”。 | 否 | | dump_path | 设置dump数据目录路径,str类型。配置示例:"dump_path": "./dump_path"。 | 是 | | rank | 指定对某张卡上的数据进行dump,list[int]类型,默认未配置(表示dump所有卡的数据),须根据实际卡的Rank ID配置。应配置为大于等于0的整数,且须根据实际卡的Rank ID配置,若所配置的值大于实际训练所运行的卡的Rank ID,则dump数据为空,比如当前环境Rank ID为0到7,实际训练运行0到3卡,此时若配置Rank ID为4或不存在的10等其他值,此时dump数据为空。配置示例:"rank": [1]。 | 否 | -| step | 指定dump某个step的数据,list[int]类型,默认未配置,表示dump所有step数据。dump特定step时,须指定为训练脚本中存在的step。step为list格式,可配置逐个step,例如:"step": [0,1,2]。 | 否 | -| level | dump级别,str类型,根据不同级别dump不同数据。可取值"L0"(dump module模块级精度数据,仅PyTorch场景支持,使用背景详见“**模块级精度数据dump说明**”)、"L1"(dump API级精度数据,默认值)、"L2"(dump kernel级精度数据,仅MindSpore场景支持)、"mix"(dump module模块级和API级精度数据)。配置示例:"level": "L1"。 | 否 | +| step | 指定dump某个step的数据,list[int]类型。默认未配置,表示dump所有step数据。dump特定step时,须指定为训练脚本中存在的step。step为list格式,可配置逐个step,例如:"step": [0,1,2]。 | 否 | +| level | dump级别,str类型,根据不同级别dump不同数据。可取值"L0"(dump module模块级精度数据,仅PyTorch场景支持,使用背景详见“**模块级精度数据dump说明**”)、"L1"(dump API级精度数据,默认值)、"L2"(dump kernel级精度数据,仅MindSpore场景支持)、"mix"(dump module模块级和API级精度数据,即"L0"+"L1")。配置示例:"level": "L1"。 | 否 | | seed | 随机种子数,int类型,默认值为:1234。通过固定随机数保证模型的输入或输出一致,可固定的随机数详见“**固定随机数范围**”。配置示例:"seed": 1234。 | 否 | | is_deterministic | 确定性计算模式,bool类型。可取值true(开启)或false(关闭),默认关闭。配置示例:"is_deterministic": true。
即使在相同的硬件和输入下,API多次执行的结果也可能不同,开启确定性计算是为了保证在相同的硬件和输入下,API多次执行的结果相同。
确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启。
rnn类算子、ReduceSum、ReduceMean等算子可能与确定性计算存在冲突,若开启确定性计算后多次执行的结果不相同,则考虑存在这些算子。 | 否 | | enable_dataloader | 自动控制开关,bool类型。可取值true(开启)或false(关闭),默认为false。配置为True后自动识别step参数指定的迭代,并在该迭代执行完成后退出训练,此时start、stop和step函数可不配置,开启该开关要求训练脚本是通过torch.utils.data.dataloader方式加载数据。仅支持PyTorch单卡训练使用,分布式训练场景下存在数据dump不全问题,**下个版本即将废弃该功能**。 | 否 | diff --git a/debug/accuracy_tools/atat/pytorch/doc/dump.md b/debug/accuracy_tools/atat/pytorch/doc/dump.md index 26cbcc7d73213f68203e62fcb5bfc306ce6c57c3..5d102f7ab1a8ddf85f8340179a4db515ded02608 100644 --- a/debug/accuracy_tools/atat/pytorch/doc/dump.md +++ b/debug/accuracy_tools/atat/pytorch/doc/dump.md @@ -17,10 +17,10 @@ atat工具主要通过在训练脚本内添加dump接口并启动训练的方式 **原型** ```Python -PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None) +PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model=None, step=None) ``` -说明:上述参数除config_path外,其他参数均在[config.json](../../config)文件中可配,此处的参数优先级高于config.json文件中的配置,而config.json文件可以配置更多参数,若需要进行更多场景的精度数据dump,建议配置[config.json](../../config)文件。 +说明:上述参数除config_path和model外,其他参数均在[config.json](../../config)文件中可配,此处的参数优先级高于config.json文件中的配置,而config.json文件可以配置更多参数,若需要进行更多场景的精度数据dump,建议配置[config.json](../../config)文件。 **参数说明** @@ -30,6 +30,47 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None) | task | dump的任务类型,String类型。可取值"statistics"(仅dump API统计信息)、"tensor"(dump API统计信息和完全复刻整网的API运行情况的真实数据)、"overflow_check"(溢出检测),默认未配置,取"statistics",参数示例:task="tensor"。 | 否 | | dump_path | 设置dump数据目录路径,String类型。参数示例:dump_path="./dump_path"。 | 是 | | level | dump级别,根据不同级别dump不同数据,String类型。可取值:
"L0":dump module模块级精度数据,仅PyTorch场景支持”。
"L1":dump API级精度数据,默认值。
"L2":dump kernel级精度数据,仅MindSpore场景支持。
"mix":dump module模块级和API级精度数据。
配置示例:level="L1"。 | 否 | +| model | 指定具体的torch.nn.Module,默认未配置,level配置为"L0"或"mix"时必须配置该参数。配置示例参见“**model配置代码示例**”。 | 否 | +| step | 指定dump某个step的数据,list[int]类型。默认未配置,表示dump所有step数据。dump特定step时,须指定为训练脚本中存在的step。step为list格式,可配置逐个step,例如:step=[0,1,2]。 | 否 | + +#### model配置代码示例 + +示例中定义了一个nn.Module类型的简单网络,在进行数据dump时使用原型函数PrecisionDebugger并传入config_path参数和model参数,其中model参数传入数据的类型为torch.nn.Module类型或torch.nn.Module子类型。 + +```python +#根据需要import包 +import os +import torch +import torch.nn as nn +import torch_npu +import torch.nn.functional as F +from atat.pytorch import PrecisionDebugger + +torch.npu.set_device("npu:0") +#定义一个简单的网络 +class ModuleOP(nn.Module) +def _init_(self) -> None: + super()._init_() + self.linear_1 = nn.Linear(in_features=8,out_features=4) + self.linear_2 = nn.Linear(in_features=4,out_features=2) +def forward(self,x): + x1 = self.linear_1(x) + x2 = self.linear_2(x1) + r1 = F.relu(x2) + return r1 + +if _name_ == "_main_" +module = ModuleOP() + +#注册工具 +debugger = PrecisionDebugger('./config.json',model=module) +debugger.start() +x = torch.randn(10,8) +out = module(x) +loss = out.sum() +loss.backward() +debugger.stop() +``` ### start函数 @@ -42,7 +83,7 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None) **原型** ```Python -debugger.start(model) +debugger.start() ``` 该函数为类函数,可以使用debugger.start()也可以使用PrecisionDebugger.start()。 @@ -88,12 +129,12 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path # 模型初始化 # 下面代码也可以用PrecisionDebugger.start()和PrecisionDebugger.stop() -debugger.start(model) +debugger.start() # 需要dump的代码片段1 debugger.stop() -debugger.start(model) +debugger.start() # 需要dump的代码片段2