Torch-npu报错定位技巧

简介: torch_npu的使用定位思路

1,训练功能问题定位思路

训练功能问题定位思路

Torch-npu错误码

CANN错误码

2,精度问题定位思路

精度问题定位思路

3,未知错误定位技巧

3.1 通过torch.npu.synchronize定位

案例:训练网络过程中出现流同步报错,明显不是python报错行。

解决方案:使用torch.npu.synchronize()排查报错位置。

第一步:首先增加环境变量:export TASK_QUEUE_ENABLE=0

第二步:在77行代码前每几行就加 torch.npu.synchronize(),再执行

有两种可能:

1、代码挂在新增的torch.npu.synchronize()

2、代码没有挂在新增的torch.npu.synchronize()

如果是第一种,则说明真实报错点在新增的torch.npu.synchronize()之前

如果是第二种,则说明真实报错点在新增的torch.npu.synchronize()之后

第三步:不停地打torch.npu.synchronize(),直到找打这一行:它前面的torch.npu.synchronize()没有报错,它后面的torch.npu.synchronize()报错了。

第四步:构造torch.gather的单算子用例,成功复现报错:

3.2 通过msprof定位单算子问题

案例:训练网络过程中发现有算子报错,但不知道是哪个算子:

定位方案:使用msprof找到报错api。

第一步:脚本内设置callstack开关和 e2e profiling,

第二步:运行脚本,msprof数据会以PROF_XXX形式落盘到profiler_result_path

第三步:解析PROF_XXX目录

第四步:将timeline目录中的msprof.json拖入chrome://tracing/

第五步:从profiling timeline的末端观察报错的算子

第六步:torch.save输入输出后进行单算子问题复现,提供device日志给研发确认(提交issue、发帖)

第七步:研发确认,输入存在inf

3.3 编译debug版本调试

案例:发生coreDump或者Segment fault后,使用gdb查看堆栈,存在“??”符号:

第一步:编译debug版本的包:DEBUG=1 bash ci/build.sh --python=3.8

编完DEBUG,如果大小明显增加,如9M增加到200+M,说明DEBUG选项生效;

第二步:执行 gdb python,进入gdb,设置break,比如我们要debug GetDescForSerialization函数,就输入break GetDescForSerialization,选y,也可以直接break {文件}:{行数}。然后run脚本,例如此处我们的python脚本为tmp.py,就输入run tmp.py

第三步:gdb会一路执行到break的点

相较于release模式,debug模式下函数入参会显示为入参名字,可以直接print 出来。我们打印下要debug的对象,如 p desc,可以看到 desc.base_sizes_的内部成员的变量没有初始化赋值,主要是由于fake tensor没有storage但走到了这个流程导致的,我们直接添加storage是否为空的判断即可通过用例。

3.4 更换so实现debug功能

案例:机器不支持编译debug版本,但是其他人有编译的so。

解决方案:拷贝被人的so,替换自己torch-npu安装目录下的so

第一步:假如torch_npu安装目录为/root/miniforge-pypy3/envs/cbn/lib/python3.8/site-packages/torch_npu

打开dbg文件夹:

第二步:如果调用栈是libtorch_npu.so内的函数为问号,则将libtorch_npu.so.debug拷贝到/root/miniforge-pypy3/envs/cbn/lib/python3.8/site-packages/torch_npu/lib

注意:一定要保证debug文件和安装的torch_npu包是同一版本

3.5 python segment fault定位到行的方法

解决方案:用 python -X faulthandler xx.py

目录
相关文章
|
8月前
|
并行计算 TensorFlow 调度
推荐场景GPU优化的探索与实践:CUDA Graph与多流并行的比较与分析
RTP 系统(即 Rank Service),是一个面向搜索和推荐的 ranking 需求,支持多种模型的在线 inference 服务,是阿里智能引擎团队沉淀多年的技术产品。今年,团队在推荐场景的GPU性能优化上又做了新尝试——在RTP上集成了Multi Stream,改变了TensorFlow的单流机制,让多流的执行并行,作为增加GPU并行度的另一种选择。本文详细介绍与比较了CUDA Graph与多流并行这两个方案,以及团队的实践成果与心得。
|
7月前
|
并行计算 异构计算 Python
python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
【6月更文挑战第3天】python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
829 4
|
8月前
|
存储 机器学习/深度学习 PyTorch
PyTorch核心--tensor 张量 !!
PyTorch核心--tensor 张量 !!
71 1
|
8月前
|
并行计算 异构计算
使用多卡进行训练,你可以在训练脚本中设置`device="cuda"`
使用多卡进行训练,你可以在训练脚本中设置`device="cuda"`【1月更文挑战第2天】【1月更文挑战第6篇】
410 1
|
并行计算 PyTorch 算法框架/工具
关于电脑有独立显卡但torch.cuda.is_available()运行出现为False的问题解决方案
关于电脑有独立显卡但torch.cuda.is_available()运行出现为False的问题解决方案
293 0
|
并行计算 Java PyTorch
使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:
使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:
681 0
|
并行计算 PyTorch 算法框架/工具
关于电脑有独立显卡但torch.cuda.is_available()运行出现为False的问题解决方法
关于电脑有独立显卡但torch.cuda.is_available()运行出现为False的问题解决方法
364 0
|
并行计算 PyTorch 算法框架/工具
【PyTorch】cuda()与to(device)的区别
【PyTorch】cuda()与to(device)的区别
344 0
|
机器学习/深度学习 并行计算 数据可视化
PyTorch自定义CUDA算子教程与运行时间分析
PyTorch自定义CUDA算子教程与运行时间分析
351 0
|
TensorFlow 算法框架/工具 异构计算
TensorFlow训练报错:ResourceExhaustedError: OOM when allocating tensor device:GPU:0 by allocator G
如果在notebook中运行了很多代码,则会占用一定的内存,上面的代码顾名思义就是清楚掉之前运行的一些session,以释放空间。
256 0