NPU上PyTorch模型训练问题案例

news2025/1/8 12:07:32

在昇腾AI处理器上训练PyTorch框架模型时,可能由于环境变量设置问题、训练脚本代码问题,导致打印出的堆栈报错与实际错误并不一致、脚本运行异常等问题,那么本期就分享几个关于PyTorch模型训练问题的典型案例,并给出原因分析及解决方法:

1、在训练模型时报错“Inner Error xxxx”,但打印的堆栈报错信息与实际错误无关

2、在模型训练时报错“terminate called after throwing an instance of 'c10::Error' what(): 0 INTERNAL ASSERT”

3、在模型训练时报错“MemCopySync:drvMemcpy failed.”

01 在训练模型时报错“Inner Error xxxx”,但打印的堆栈报错信息与实际错误无关

问题现象描述

报错截图举例:

%E5%9B%BE%E7%89%871.png

原因分析

NPU模型训练时默认为异步运行,因此打印出的堆栈报错与实际错误并不一致。如果想要打印出与实际错误相对应的堆栈报错信息,需要修改环境变量将运行模式改为同步运行。

解决措施

可以在以下方案中选择一种来解决该问题,然后再次运行模型,即可得到与实际错误一致的堆栈报错信息:

1、将环境变量TASK_QUEUE_ENABLE设置为0:

export TASK_QUEUE_ENABLE=0

2、若用户使用的PyTorch为2.1版本,也可将环境变量ASCEND_LAUNCH_BLOCKING修改为为1:

export ASCEND_LAUNCH_BLOCKING=1

02 在模型训练时报错“terminate called after throwing an instance of 'c10::Error' what(): 0 INTERNAL ASSERT”

问题现象描述

报错示例如下:

terminate called after throwing an instance of 'c10::Error' 
  what(): 0 INTERNAL ASSERT FAILED at /***/pytorch/c10/npu/NPUStream.cpp:146, please report a bug to PyTorch. Could not compute stream ID for Oxffff9f77fd28 on device -1 (something has gone horribly wrong!) (NPUStream_getStreamId at /***/pytorch/c10/npu/NPUStream.cpp:146 
frame #0: c10::Error::Error(c10::SourceLocation, std::__cxxll::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) + 0x74 (0xffffa0c11fe4 in /usr/local/lib64/python3.7/site.packages/torch/lib/libc10.so)

原因分析

执行代码后出现报错。

import torch 
import torch_npu 
def test_cpu(): 
    input = torch.randn(2000, 1000).detach().requires_grad_() 
    output = torch.sum(input) 
    output.backward(torch.ones_like(output)) 
def test_npu(): 
    input = torch.randn(2000, 1000).detach().requires_grad_().npu() 
    output = torch.sum(input) 
    output.backward(torch.ones_like(output)) 
if __name__ == "__main__": 
    test_cpu() 
    torch_npu.npu.set_device("npu:0") 
    test_npu()

在运行backward运算时,若没有设置device,程序会自动默认初始化device为0,相当于执行了set_device("npu:0")。由于目前不支持切换device进行计算,若再通过set_decice()方法手动设置device设备,则可能出现该错误。

解决措施

在运行backward运算前,通过set_decice()方法手动设置device。

原代码如下:

if __name__ == "__main__":

    test_cpu() 

    torch_npu.npu.set_device("npu:0") 

    test_npu()

修改后代码如下:

if __name__ == "__main__":

    torch_npu.npu.set_device("npu:0") 

    test_cpu() 

    test_npu()

03 在模型训练时报错“MemCopySync:drvMemcpy failed.”

问题现象描述

  • shell脚本报错信息如下:
RuntimeError: Run:/usr1/workspace/PyTorch_Apex_Daily_c20tr5/CODE/aten/src/ATen/native/npu/utils/OpParamMaker.h:280 NPU error,NPU error code is:500002 
[ERROR] RUNTIME(160809)kernel task happen error, retCode=0x28, [aicpu timeout]. 
[ERROR] RUNTIME(160809)aicpu kernel execute failed, device_id=0, stream_id=512, task_id=24, fault so_name=, fault kernel_name=, extend_info=. 
Error in atexit._run_exitfuncs: 
Traceback (most recent call last): 
File "/usr/local/python3.7.5/lib/python3.7/site-packages/torch/__init__.py", line 429, in _npu_shutdown 
    torch._C._npu_shutdown() 
RuntimeError: npuSynchronizeDevice:/usr1/workspace/PyTorch_Apex_Daily_c20tr5/CODE/c10/npu/NPUStream.cpp:806 NPU error, error code is 0
  • 日志报错信息如下:
[ERROR] RUNTIME(12731,python3.7):2021-02-02-22:23:56.475.679 [../../../../../../runtime/feature/src/npu_driver.cc:1408]12828 MemCopySync:drvMemcpy failed: dst=0x108040288000, destMax=1240, src=0x7fe7649556d0, size=1240, kind=1, drvRetCode=17! 
[ERROR] RUNTIME(12731,python3.7):2021-02-02-22:23:56.475.698 [../../../../../../runtime/feature/src/logger.cc:113]12828 KernelLaunch:launch kernel failed, kernel=140631803535760/ArgMinWithValue_tvmbin, dim=32, stream=0x55b22b3def50 
[ERROR] RUNTIME(12731,python3.7):2021-02-02-22:23:56.475.717 [../../../../../../runtime/feature/src/api_c.cc:224]12828 rtKernelLaunch:ErrCode=207001, desc=[module new memory error], InnerCode=0x70a0002

原因分析

样例脚本如下:

import torch 
import torch_npu 
def test_sum(): 
    xs_shape = [22400, 8] 
    ys_shape = [22400, 8] 
    gt_bboxes_shape = [22400, 8,4] 
    xs = torch.rand(xs_shape).npu() 
    ys = torch.rand(ys_shape).npu() 
    gt_bboxes = torch.rand(gt_bboxes_shape).npu().half() 
    left = xs - gt_bboxes[..., 0] 
    right = gt_bboxes[..., 2] - xs 
    top = ys - gt_bboxes[..., 1] 
    bottom = gt_bboxes[..., 3] - ys 
    # stream = torch_npu.npu.current_stream() 
    # stream.synchronize() 
    # left, top 结果是fp32,  right, bottom 结果是fp16, 
    # print(left.dtype, top.dtype, right.dtype, bottom.dtype) 
    bbox_targets = torch.stack((left, top, right, bottom), -1)  #报错位置在这里 
    # stream.synchronize() 
    bbox_targets = torch.sum(bbox_targets)

根据shell和日志报错信息,两者报错信息不匹配。shell报错是在同步操作中和AI CPU错误,而日志报错信息却是在min算子(内部调用ArgMinWithValue_tvmbin),二者报错信息不对应。一般这类问题出现的原因是由于日志生成的报错信息滞后。报错信息滞后可能是由于AI CPU算子的异步执行,导致报错信息滞后。

解决措施

对于该报错需要根据实际的错误来定位,可参考如下步骤进行处理:

1、通过关闭多任务算子下发后,发现结果不变,推断在shell脚本报错位置和日志报错算子之前就已出现错误。

2、根据报错加上stream同步操作,缩小错误范围,定位错误算子。stream同步操作的作用在于其要求代码所运行到的位置之前的所有计算必须为完成状态,从而定位错误位置。

3、通过在代码中加上stream同步操作,确定报错算子为stack。

4、打印stack所有参数的shape、dtype、npu_format,通过构造单算子用例复现问题。定位到问题原因为减法计算输入参数数据类型不同,导致a - b和b - a结果的数据类型不一致,最终在stack算子中报错。

5、将stack入参数据类型转换为一致即可临时规避问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态照片怎么制作?教你如何制作gif动图

Gif动图想必大家都不陌生吧&#xff01;那么&#xff0c;这种gif格式的动图要怎么操作呢&#xff1f;很简单通过使用gif动态图片制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&#xff0c;只需上传jpg、png格式的两张以上图片无需下载软件&#xff0c;手机、…

为什么说网络安全是IT行业最后的红利?是风口行业?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

uniapp ui安装 阿里图标库使用 报错 Assignment to constant variable.

安装 ui uni-app官网 (dcloud.net.cn) &#xff08;一&#xff09;安装 pages.js配置 安装 sassnpm i sass -D 或 yarn add sass -D 安装 sass-loader npm i sass-loader10.1.1 -D 或 yarn add sass-loader10.1.1 -D安装 uni-uinpm i dcloudio/uni-ui 或 yarn a…

VMware:一个多云+AI的未来

“以往在应用人工智能时&#xff0c;首先你需要一个基础算法模型&#xff0c;然后使用特定的数据进行处理&#xff0c;最后再将其加人到应用程序上…… 但是很显然&#xff0c;这里的每一步骤都涉及到法律和隐私问题&#xff1a;算法模型的知识产权、私人数据的法律风险&#x…

计算机竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

解决VUE报错GET http://127.0.0.1:5500/favicon.ico 404 (Not Found)

当我们启动VUE项目的时候控制台会报错错误GET http://127.0.0.1:5500/favicon.ico 404 (Not Found) 原因就是项目下的 favicon.ico 找不见&#xff0c;缺少一个页签图标 解决方法&#xff1a; 在根目录下放置一张图片&#xff0c;重命名为favicon.ico 这个时候选中的图片就会…

算法-版本号升级

背景 今天看到了一个工具类AutoUpgradeVersionUtil&#xff0c;觉得很有意思&#xff0c;大体的作用是版本号的升级&#xff0c;类似于从0.0.1-> 0.0.2这样的。我一想&#xff0c;我之前刷算法的时候这样的案例遇到的多着呢&#xff0c;还有很多种的变种&#xff01; 数字…

云原生Kubernetes:K8S安全机制

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

IDM中下载请求两次无法下载的解决办法

IDM中下载请求两次无法下载的解决办法 遇到的问题描述solution分析原因 遇到的问题描述 如果你在其他地方的帖子无法解决&#xff0c;试试我的包治百病&#xff01; 本人的idm版本老一点&#xff0c;很久没更新。在下载很多文件的时候会出现两次重复下载的情况&#xff0c;今天…

【设计模式】四、工厂模式

文章目录 概述工厂模式简单工厂模式&#xff1a;工厂方法模式抽象工厂模式小结 概述工厂模式 传统方式&#xff1a; 简单工厂模式&#xff1a; 简单工厂模式的设计方案: 定义一个可以实例化 Pizaa 对象的类&#xff0c;封装创建对象的代码。 存在的问题&#xff1a; 简单工厂…

微信小程序 语法学习

1. 注册小程序账号 https://mp.weixin.qq.com/cgi-bin/wx 2. 获取appId 开发管理 -> 开发设置 3. 下载开发工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html 4. 登录开发工具 不推荐游客模式&#xff0c;使用微信扫描 工具内置了很多模…

25835-2010 缆索用环氧涂层钢丝 阅读笔记

声明 本文是学习GB-T 25835-2010 缆索用环氧涂层钢丝. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了缆索用环氧涂层钢丝的术语和定义、产品标记、订货内容、材料、涂覆、技术要求、涂层 的修补、试验方法、检验规则、包装、标…

转载-C#学习笔记-基本概念(CLR、CTS、CLS...)

1. CLR(Common Language Runtime&#xff0c;公共语言运行时(库)) 可由多种.NET语言使用的运行时环境&#xff0c;其主要作用是定位、加载和管理.NET类型、内存管理、安全检查、线程管理等。.NET运行库提供了一个定义明确的运行库层&#xff0c;可以被支持.NET的所有语言和平台…

【萌新的RiscV学习之流水线结构的概述-7】

萌新的RiscV学习之流水线结构的概述-7 之前写完了单周期的指令 目前朝着流水线迈进 由于涉及学业机密 就不展示代码了 主要展示学习过程和一些想法 由于时钟周期必须满足所有指令中最坏的情况&#xff0c;所以不能使用那些缩短常用指令执行时间而不改变最坏情况的实现技术。因…

一键导入照片就能转成电子相册?

每次旅行、每个瞬间&#xff0c;都值得被珍藏。无论是生日、聚会还是旅行&#xff0c;这款神器都能帮你记录下美好瞬间。你只需要上传照片&#xff0c;选择几个模板&#xff0c;就能在几分钟内拥有一本精美的电子相册&#xff01; 首先这个神器叫做FLBOOK制作3D仿真翻页电子杂志…

VMware CentOS7 忘记root密码如何更改

VMware CentOS7 忘记root密码如何更改 1、进来的页面马上点上下键停止自动进入 &#xff08;Immediately click the up and down buttons on the incoming page to stop automatic entry&#xff09; 2、点键盘e键进入编辑页面e &#xff08;Click the keyboard e key to en…

基于51单片机气体检测报警系统-proteus仿真-源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、MQ5采集气体值送到液晶1602显示。 3、按键设置报警阀值&#xff0c;声光报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void init_1602() //初始化 { lcdwc(0x01); lcdwc(0x38)…

ArcGIS实战教程

ArcGIS实践教程&#xff08;1&#xff09;通过ArcMap把mxd格式转换为dwg格式 ArcGIS实践教程&#xff08;2&#xff09;ArcMap将excel数据转换为shp ArcGIS实践教程&#xff08;3&#xff09;ArcMap导入Excel属性数据 ArcGIS实践教程&#xff08;4&#xff09;利用ArcGIS进行…

NPDP证书,为什么这么多人考?

NPDP证书至2016年引进国内&#xff0c;考试人数就持续增长&#xff0c;不仅是新产品开发唯一 的职业证书&#xff0c;在产品管理这一领域的知名度也在前列&#xff0c;那么这个证书的作用在哪里呢&#xff1f; 想考npdp证书&#xff0c;npdp干货可下载&#xff1a; 1、就业范围…

YOLOV1论文精度

YOLOV1&#xff1a;You only look once 1.介绍 1.1 简介&#xff1a; 传统的目标检测算法如R-CNN都是先生成候选框&#xff0c;然后在分类器上进行分类&#xff0c;由于每个部分都是分开训练&#xff0c;所以很难去优化而且速度比较慢。而yolov1把目标检测当成一个回归问题&…