本样例选用ResNet50模型,采用虚拟数据训练,节省数据集下载时间。
完成模型开发&迁移,得到可正常执行训练任务的GPU和NPU环境。
分别在GPU和NPU环境下安装msprobe工具,执行如下命令:
pip3 install mindstudio-probe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 23 24 import torch_npu 25 from torch_npu.contrib import transfer_to_npu 26 27 from msprobe.pytorch import PrecisionDebugger, seed_all 28 seed_all(seed=1234, mode=True) # 固定随机种子,开启确定性计算,保证每次模型执行数据均保持一样 ... 310 def train(train_loader, model, criterion, optimizer, epoch, device, args): ... 324 end = time.time() 325 326 debugger = PrecisionDebugger(dump_path="./dump_data", task="tensor", step=[0, 1]) 327 for i, (images, target) in enumerate(train_loader): 328 debugger.start() ... 337 # compute output 338 output = model(images) 339 loss = criterion(output, target) ... 347 # compute gradient and do SGD step 348 optimizer.zero_grad() 349 loss.backward() 350 optimizer.step() ... 359 debugger.stop() 360 debugger.step() |
精度数据会占据一定的磁盘空间,可能存在磁盘写满导致服务器不可用的风险。精度数据所需空间跟模型的参数、采集开关配置、采集的迭代数量有较大关系,须用户自行保证落盘目录下的可用磁盘空间。
python main.py -a resnet50 -b 32 --gpu 1 --dummy
日志打印出现如下信息表示前两个step的数据采集成功,即可手动停止模型训练查看采集数据。
1 2 3 | **************************************************************************** * msprobe ends successfully. * **************************************************************************** |
dump_path参数指定的路径下会出现如下目录结构,可以根据需求选择合适的数据进行分析。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | dump_data/ ├── step0 └── rank ├── construct.json # level为L0时,保存Module的层级关系信息,当前场景为空 ├── dump.json # 保存前反向API的输入输出的统计量信息和溢出信息等 ├── dump_tensor_data # 保存前反向API的输入输出tensor的真实数据信息等 │ ├── Functional.adaptive_avg_pool2d.0.backward.input.0.pt │ ├── Functional.adaptive_avg_pool2d.0.backward.output.0.pt │ ├── Functional.adaptive_avg_pool2d.0.forward.input.0.pt │ ├── Functional.adaptive_avg_pool2d.0.forward.output.0.pt ... └── stack.json # 保存API的调用栈信息 ├── step1 ... |