PrecisionDebugger功能使用
以resnet18网络模型为例,介绍通过PrecisionDebugger使能精度比对工具的方法。该模型参考了PyTorch官方教程的实现,随机生成伪训练数据进行数个迭代的梯度下降,当前脚本已完成工具代码的添加,仅作为学习精度比对工具素材使用。
- 参见工具安装完成精度比对工具安装。
- 参见代码样例准备模型代码并将代码上传至服务器任意目录,例如“/home/resnet”。
- 打开模型训练脚本,导入精度比对工具。
cd /home/resnet && vi ddp_basic.py
导入精度比对工具。
import torch import torch_npu ... from ptdbg_ascend import PrecisionDebugger as PD
- 初始化PrecisionDebugger为dump功能。
import torch import torch_npu ... from ptdbg_ascend import PrecisionDebugger as PD #dump debugger = PD(dump_path="./NPU_dump_path", hook_name="dump", step=[0], enable_dataloader=True)
在使用GPU与NPU训练分别训练时,请修改dump_path以区分路径,例如NPU训练时,dump_path为“./NPU_dump_path”。
代码框中加粗代码初始化了PrecisionDebugger并设置了数据存盘路径(dump_path)为当前目录下的dump_path文件夹,设置PrecisionDebugger为dump功能,配置step=[0]表示需要捕获模型数据的迭代为第0个迭代,配置enable_dataloader=True表示启用通过dataloader自动控制数据捕获开关,完整参数说明请参见表1。
- 执行命令启动训练。
- NPU训练:
python ddp_basic_main.py 8
8表示训练所用卡数。
- GPU训练:
python ddp_basic_main.py 8
需注释掉NPU自动迁移相关代码,进行训练。
可在打屏日志中查看回显,显示以下内容即表示已开启dump自动开启和关闭功能。
[INFO]Dump switch is turned on. Dump data will be saved to /home/resnet/dump_path/ptdbg_dump_v3.2 [INFO]Dump switch is turned off.
由于在初始化时PrecisionDebugger时启用了enable_dataloader选项,如果不配置enable_dataloader,则需要调用PrecisionDebugger.start()和PrecisionDebugger.stop()手动启停开关。
在开关关闭后,工具会自动停止训练,并显示以下内容。
ptdbg: exit after step [0]
此时可进入dump路径查看采集的数据。
启用enable_dataloader在个别特殊场景可能会失效,导致工具只能捕获到部分rank的数据,这种场景用户需要设置enable_dataloader=False,并在训练工程中添加PrecisionDebugger.start(), PrecisionDebugger.stop()手动启停开关。PrecisionDebugger.start()即为启动工具Dump开关,常写在训练迭代开始时,PrecisionDebugger.stop()即为关闭工具Dump开关,常写在step结束的时候。
- NPU训练: