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

目录
相关文章
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
2467 0
|
24天前
|
存储 人工智能 测试技术
Hermes Agent:深度技术剖析报告
Hermes Agent 是Nous Research于2026年开源的自主AI智能体框架,首创“闭环学习回路”,通过五层记忆系统、自主技能生成(Skill)、辩证式用户建模(Honcho)与FTS5跨会话搜索,解决LLM“失忆症”。MIT许可,Python构建,支持多平台、多模型Provider及MCP双向集成,GitHub星标超1.7万。
691 1
|
7月前
|
存储 缓存 搜索推荐
01_万亿级推荐系统嵌入表的技术挑战与现状
推荐系统中,Embedding表规模随用户与物品增长呈指数膨胀,成为存储与计算瓶颈。传统静态存储导致冗余,而生成式模型更需高维向量与海量参数,加剧资源压力。业界通过Embedding卸载、多级缓存、预取流水线与分片优化等技术,在有限显存下实现超大规模模型训练。美团MTGR框架基于TorchRec构建,支持TB级Embedding与混合并行,显著提升训练效率与推荐效果,推动推荐系统向生成式演进。
544 19
|
8月前
|
人工智能 自动驾驶 计算机视觉
CVPR 2024 目标检测!开放词汇
YOLO-World是CVPR 2024提出的一种实时开放词汇目标检测模型,首次将YOLO的高速特性与开放词汇识别能力结合。它无需微调即可通过文本提示检测任意物体,支持零样本推理,兼具高精度与灵活性,适用于机器人、自动驾驶等实时感知场景,标志着目标检测迈向通用化新阶段。
644 0
CVPR 2024 目标检测!开放词汇
|
缓存 PyTorch 算法框架/工具
AI Infra之模型显存管理分析
本文围绕某线上客户部署DeepSeek-R1满血版模型时进行多次压测后,发现显存占用一直上升,从未下降的现象,记录了排查过程。
1610 41
AI Infra之模型显存管理分析
|
API 异构计算 并行计算
PyTorch 2.2 中文官方教程(九)(4)
PyTorch 2.2 中文官方教程(九)
404 1
PyTorch 2.2 中文官方教程(九)(4)
|
PyTorch 编译器 算法框架/工具
NPU上如何使能pytorch图模式
本文介绍了PyTorch的`torch.compile`技术和TorchAir的相关内容。`torch.compile`通过将动态图转换为静态图并结合JIT编译,提升模型推理和训练效率。示例代码展示了如何使用`torch.compile`优化模型。TorchAir是昇腾为PyTorch提供的图模式扩展库,支持在昇腾设备上进行高效训练和推理。它基于Dynamo特性,将计算图转换为Ascend IR,并通过图引擎优化执行。文章还提供了TorchAir的使用示例及功能配置方法。
|
索引 Python
|
存储 并行计算 Java
一文读懂 PyTorch 显存管理机制
一文读懂 PyTorch 显存管理机制
1542 1
|
缓存 前端开发 JavaScript
优化前端性能的五种最佳实践
在现代 web 开发中,前端性能的优化是提高用户体验的关键。本文探讨了五种最佳实践来提升前端性能,包括代码分割、懒加载、压缩资源、优化渲染和使用缓存策略。这些方法不仅有助于减少加载时间,还能提高应用的响应速度和整体用户满意度。

热门文章

最新文章