当前位置: 首页 > news >正文

NPU上PyTorch模型训练问题案例

在昇腾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入参数据类型转换为一致即可临时规避问题。

相关文章:

NPU上PyTorch模型训练问题案例

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

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…...

Ubuntu Postgresql开机自启动服务

1. 建立service文件 sudo vim /etc/systemd/system/postgresql.service2. postgresql service文件 [Unit] DescriptionPostgreSQL 14 database server Documentationman:postgres(1) Documentationhttp://www.postgresql.org/docs/14/static/ Afternetwork.target[Service] T…...

COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”

COTS 使用“不再做修理或改进”的模式出售的商务产品 COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”&#xff0c;指可以采购到的具有开放式标准定义的接口的软件或硬件产品&#xff0c;可以节省成本和时间。 中文名 商用现成品或技术 外文…...

idea开发Springboot出租车管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 出租车管理系统是一套完善的完整信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c; 系统具有完整的源代码和数据…...

Linux nohup

nohup 命令用于在 Linux 中将命令或程序在后台运行&#xff0c;并且在终端关闭后仍然保持运行。 nohup命令 描述 nohup 命令用于将命令或程序以不受终端挂断影响的方式在后台运行。 语法 nohup command [arguments] &参数 command&#xff1a;要在后台运行的命令或程…...

Linux 常见问题

1. 使用 sudo 命令时&#xff0c;提示 is not in the sudoers file. 是由于对应用户没有添加到 sudoers 文件中&#xff0c;可以在该文件中指定用户权限。运行以下命令即可打开该文件&#xff1a; visudo 添加上对应用户的权限 Ctrl x 退出保存即可。 2. Debian 新建的普通用…...

仕达利恩飞讯软件TPM设备管理项目正式启动,向数字化再迈一步

9月25日&#xff0c;仕达利恩(惠州)科技有限公司&#xff08;以下简称“仕达利恩”&#xff09;设备智能数采项目启动会成功召开&#xff0c;仕达利恩首席崔浩渊、杨翠琼次长携项目主要负责人共同出席本次启动会。为解决仕达利恩现阶段生产过程中的设备管理、设备配件仓管理以及…...

【算法】分治法

文章目录 概念原理和步骤代码示例 总结 概念 分治法&#xff08;Divide and Conquer&#xff09;是一种算法设计策略&#xff0c;其思想是将一个大问题划分为若干小规模的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将它们的解合并起来以得到原始问题的解。分治…...

Rabbit消息的可靠性

生产者重连 消费者重试 Confirm模式简介 消息的confirm确认机制&#xff0c;是指生产者投递消息后&#xff0c;到达了消息服务器Broker里面的exchange交换机&#xff0c;则会给生产者一个应答&#xff0c;生产者接收到应答&#xff0c;用来确定这条消息是否正常的发送到Broker…...

Java中的网络编程是什么?

Java中的网络编程是指使用Java编程语言进行网络通信的过程和技术。它允许Java程序在互联网或局域网上进行数据交换、通信和传输。 Java提供了许多类和接口&#xff0c;用于实现网络编程。主要的网络编程相关的类在java.net包中可以找到。以下是一些常用的类和接口&#xff1a;…...

Oracle 常用命令大全

数据库 ----数据库启动 & 关闭 启动数据库 SQL> startup nomount; SQL> alter database mount; SQL> alter database open;关闭数据库 SQL> shutdown immediate&#xff1b;更多内容请参考&#xff1a;Oracle数据库启动和关闭 ----连接数据库 登陆普通用…...

Mysql 开启ssl连接

本文是针对Mysql 5.7版本以上数据库 1. 检查当前SSL / TLS状态 我们将使用-h指定IPv4本地环回接口,以强制客户端与TCP连接,而不是使用本地套接字文件。 这将允许我们检查TCP连接的SSL状态: mysql -u root -p -h 127.0.0.1键入以下内容以显示SSL / TLS变量的状态: SHOW …...

Java Stream流对List集合进行分页

有一种情况&#xff0c;我们有时不便在数据库层面进行分页。我们知道Mybatis的startPage();方法也是对数据库进行limit操作&#xff0c;有没有一种方式&#xff0c;只对List集合进行分页呢&#xff1f; 当然有&#xff0c;我们可以使用Stream流的方式对List集合进行操作&#…...

Docker(二)、linux环境Docker的部署以及构建镜像

linux环境Docker的部署以及构建镜像 一、docker部署1、快速部署常用的命令&#xff1a;1.1、demo-部署tomcat1.2、tomcat容器内部结构1.2.1、每个tomcat容器&#xff0c;都包含三个组件1.2.2、在容器内部执行命令 1.3、容器生命周期 二、Dockerfile构建镜像1、demo-Dockerfile自…...

GEE错误——Image.select: Pattern ‘MDF‘ did not match any bands

问题 ImageCollection (Error) Collection query aborted after accumulating over 5000 elements. ImageCollection (268 elements) Mean DOD550: Layer error: ImageCollection.reduce: Error in map(ID=MCD19A2_A2001001_h15v17_061_2022161165308_01): Image.select: Patte…...

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS基础(四)

开始吧&#xff0c;做时间的主人&#xff01; 把时间分给睡眠&#xff0c;分给书籍&#xff0c;分给运动&#xff0c; 分给花鸟树木和山川湖海&#xff0c; 分给你对这个世界的热爱&#xff0c; 而不是将自己浪费在无聊的人和事上。 思维导图 函数 为什么需要函数 <!DO…...

mysql超级聚合with rollup

超级聚合&#xff0c;是在group by的基础上&#xff0c;再次进行聚合。 它再次聚合的列&#xff0c;是select中没有用到聚合函数的列。 文章目录 例子1解释例子2表以及数据 例子1 mysql> SELECT year, country, product, SUM(profit) AS profitFROM salesGROUP BY year, c…...

浅谈电动汽车充电桩设计与应用研究

安科瑞 华楠 摘要&#xff1a;目前&#xff0c;随着我国社会经济的快速发展&#xff0c;我国的各个领域都取得了突破性的发展&#xff0c;尤其是在电动汽车充电桩的设计方法&#xff0c;新型的电动汽车充电桩设计已经广泛的受到了人民群众的青睐与认可&#xff0c;而这种发展前…...

tensorflow Windows安装说明

TensorFlow官网教程 Tensorflow 2.10是最后一个在本地windows上支持GPU的版本。从2.11版本开始&#xff0c;需要在windows WLS2&#xff08;适用于 Linux 的 Windows 子系统&#xff09;上安装才能使用GPU。 在anaconda shell控制台中,切换至虚拟环境, 安装TensorFlow 这是用…...

【Leetcode热题】打卡 day11——20(更新至11)

1、合并两个有序链表 - 链表 暴力 / 递归 21. 合并两个有序链表 &#xff08;1&#xff09;暴力 class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode dummynew ListNode();ListNode curdummy;while(l1!null&&l2!null){if(l1.val&l…...

linux使用操作[3]

文章目录 版权声明环境变量$符号自行设置环境变量 上传、下载rz、sz命令 压缩、解压tar命令压缩tar解压zip 命令压缩文件unzip 命令解压文件 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相关权利人…...

梦想让生活得以忍受-寄语机器视觉工程师

我&#xff0c;曾梦想梦想走天涯&#xff0c;看看这世界的繁华&#xff0c;年少的心总有些轻狂&#xff0c;如今四海为家。 大家都听过这首歌&#xff0c;迎来很多打工人的共鸣&#xff0c;著名作家海明威曾说&#xff0c;“一个人可以被打败&#xff0c;但不可以被毁灭”&…...

linux 设置打开文件数

可以使用下面的文件进行设置 /etc/security/limits.d/90-nproc.conf 先来看/etc/security/limits.d/90-nproc.conf 配置文件&#xff1a; [root ~]# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of users processes to prevent # accidental fork…...

MySQL基础篇-约束

目录 1.约束概述 2.分类 3.测试user表的约束情况 主键约束 非空约束及唯一约束 检查约束 默认约束 4.外键约束 外键约束的语法 外键约束的删除/更新行为 小结 1.约束概述 MySQL约束&#xff08;Constraints&#xff09;是用于确保表中数据完整性和一致性的规则。它们定…...

系统工程知识体系(SEBoK)

介绍 《系统工程知识体系》&#xff08;SEBoK&#xff09;是以一种理念设计的&#xff0c;即如果工程师有一个实时更新、实用的指南&#xff0c;他们就能做出更优秀的工作。如果你以前没有使用过这个资源&#xff0c;也没有关系&#xff1b;因为已经有一个完整的指南供你参考&…...

Spring DI (Dependency Injection)

What Is DI? 当一个类需要依赖另一个对象&#xff0c;把另一个对象实例化之后注入给这个对象的过程我们称之为DI # Create an object dependency in traditional programming public class Store {private Item item;public Store() {item new ItemImpl1(); } }# Using …...

Spring Boot : ORM 框架 JPA 与连接池 Hikari

数据库方面我们选用 Mysql &#xff0c; Spring Boot 提供了直接使用 JDBC 的方式连接数据库&#xff0c;毕竟使用 JDBC 并不是很方便&#xff0c;需要我们自己写更多的代码才能使用&#xff0c;一般而言在 Spring Boot 中我们常用的 ORM 框架有 JPA 和 Mybaties &#xff0c;本…...

Wireshark抓包分析ICMP协议

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 分析目的&#xff1a;分析ICMP协议的数据格式、报文…...

C++——安装环境、工具

一、进入官网下载 Visual Studio 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/ 二、安装 三、安装完后如果出现window SDK 下载失败&#xff0c;可自行下载&#xff0c;如果没有请跳过这一步 Window SDK 官方地址&#xff1a;https://developer.microsoft…...

网站建设谈业务要知道什么/网络推广费用计入什么科目

js删除网页中图片width 和 height 一段代码轻松搞定 适用于&#xff1a; 电脑端网页带图片属性导致移动网页显示错位/错误 备注&#xff1a; 需搭配jquery.min.js (注&#xff01;jquery-2.0以上版本不再支持IE 6/7/8) 并不是最新的版本就最好的&#xff0c;而是根据您项目…...

政务公开网站建设重点/怎么样免费做网站

为了快速管理数据库&#xff0c;我们一般都会选择一款顺手的数据库管理工具。Navicat、DataGrip虽然很好用&#xff0c;但都是收费的。今天给大家推荐一款免费、功能强大的数据库管理工具DBeaver&#xff0c;希望对大家有所帮助&#xff01; SpringBoot实战电商项目mall&#x…...

侦探公司做网站的资料/电工培训机构

2020.04.08更新&#xff1a;在买电脑的时候&#xff0c;或许是因为预算所限&#xff0c;导致为了某些硬性需求&#xff08;显卡、CPU&#xff09;而在内存上选择了“够用”这一选项&#xff0c;又或者是看中的机型只有8G的“出厂标配”。现在笔记本自带的一般都是8G的内存&…...

京东商城企业网站建设分析/百度统计

一、TCP 1、建立连接 2、发送的会检测是否成功&#xff0c;有重发机制 TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议 TCP把数据流分区成适当长度的报文段&#xff0c; 之后TCP把结果包传给I…...

今日最新全国疫情/东莞网站建设优化排名

关于组织开展2012年南湖区青少年关于组织开展2012年南湖区青少年消防安全教育实践活动的通知各中小学校&#xff1a;为不断增强青少年消防安全意识&#xff0c;进一步扩大消防宣传教育的影响力和覆盖面&#xff0c;切实达到“教育一个孩子、带动一个家庭、影响整个社会”的目的…...

沧州做网站/百度seo关键词排名优化

http://blog.csdn.net/p96114/archive/2004/09/10/100617.aspx /** Created on 2004-9-10** 单链表中的结点类型声明.*/package org.arliang;/*** author 李梁** 单链表中的结点.*/public class node{private int data; //存放数据private node link; //链接的下一个接点.publi…...