如何处理GPU上Error Number:700 an illegal memory access was encounter

2023-11-19

【现象描述】

GPU上网络运行过程中出现Error Number:700 an illegal memory access was encounter

【原因分析】

出现该现象,在框架稳定的背景下基本上可以确定是网络中有算子踩显存,因此CUDA上报非法内存访问,错误码为700,可能原因如下:

1.算子计算过程中使用的size比申请的显存大了,导致访问越界。

2.由于GPU的算子执行是host下发到device上异步执行的,host使用了CUDA一些同步接口导致不是device的期望值出现非法内存。

【解决方法】

步骤1:由于GPU的算子执行是host下发到device上异步执行的,因此执行报错的地方不一定是真凶,大概率是前面的算子有问题,但是device是异步执行的,所以执行到后面才会报错。可以设置环境变量export CUDA_LAUNCH_BLOCKING=1表示阻塞式执行,也就是一个算子在device执行完成后,host才会下发一个算子到device上执行,这种完全同步执行方式下如果还是报700非法内存错误的话,配合算子执行日志就可以确定是当前执行算子的问题了。

案例代码:https://gitee.com/mindspore/mindspore/pulls/962

步骤2:执行步骤1的操作后问题不复现,也就是同步执行的这种方式下没有问题,基本上可以确定是有算子里依赖同步执行的结果,因为正常device算子执行是异步执行,所以拿的结果不是预期值,同步执行就掩盖了这个问题。出现这种情况,除了走读代码去确认是哪个算子里有使用同步操作接口外,一般可以通过二分法去加同步流来去定位(如果一个网络中有100个算子,可以在第50个算子加同步流,如果加了同步流没有复现,说明就前面的某个算子有问题了),同步流添加方法:在GPUDeviceContext::LaunchKernel函数中调用DoLaunchKernel后面增加SyncStream()。

案例代码:

```

void FastTopK(const int outer_size, const int inner_size, const T *input, const S *k, T *output, S *output_index,
              const T init_K, cudaStream_t stream) {
  int block_num_limit = outer_size < 128 ? outer_size : 128;
  S k_cut = 0;
  cudaMemcpy(&k_cut, k, sizeof(S), cudaMemcpyDeviceToHost);
  if (k_cut > inner_size) k_cut = inner_size;

```

---》此处使用了cudaMemcpy期望从device同步到host,是个同步接口,但是实际上此次device的还未执行完,因此不是期望的值,导致后面执行逻辑都是错乱的,出现非法内存访问。

【建议与总结】

1.算子实现逻辑中针对size需要check,确保访问不越界。

2.由于GPU的算子执行是host下发到device上异步执行的,尽量避免使用CUDA同步接口,如果使用的话,需要确保数据是正确的。

【相关参考文档】

来源:如何处理GPU上Error Number:700 an illegal memory access was encounter_MindSpore_昇腾论坛_华为云论坛

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理GPU上Error Number:700 an illegal memory access was encounter 的相关文章

随机推荐

  • 当今职场,正在加速淘汰 “巨婴员工”

    我担任过多家上市公司的技术高管职位 在工作中经常会遇到巨婴型员工 他们外在的表现是 不能够很好地管理自己 缺乏自律 缺乏起码的抗挫折能力和抗压能力 需要领导呵护着 同事们忍让着 作为一名管理者 绝不能放任团队中的巨婴存在 必须时刻保持团队的
  • STM32F4之ADC1【库函数操作】

    折腾了两天ADC多通道采样 采样的结果都很乱 完全不是预期值 在amobbs求助也没有找到结果 于是决定从简单开始 一步步折腾着破ADC ADC试验1实验说明 1 这个实验仅仅是初始化一个ADC 对其输入进行采样 2 使用STM32F4的A
  • Windows下强大的包管理器(二)

    Windows下强大的包管理器 Scoop BB Time 官方解释 What does Scoop do 安装教程 配置教程 修改用户安装程序和全局安装程序默认安装位置 直接修改环境变量 命令行方式 未完待续 使用教程 查找软件 安装软件
  • webpack之处理字体图标资源和打包其他资源

    1 下载图标地址 iconfont 阿里巴巴矢量图标库 2 添加字体图标资源 按照网站要求将资源等引入使用 src fonts iconfont ttf src fonts iconfont woff src fonts iconfont
  • Qt之QSS(动态属性)

    简述 QSS可以定制应用程序的外观 无需关注Qt样式背后的魔力 从非常轻微到极其复杂的调整 样式表都可以做到 对于一个完全定制和独特的用户体验 QtQuick和QGraphicsView是更好的选择 简述 自定义属性 限制 示例 效果 源码
  • 如何打开mysql数据库?

    方法一 win r 输入cmd 点击确定 输入mysql uroot p命令 回车 输入密码 方法二 用图形化工具 navicat 点击链接 选择mySQL 输入用户名和密码 点击确定 打开即可看到myql中已有数据库
  • 因 Log4j 漏洞,ONUS 被黑客攻击后拒交赎金;OpenHarmony 3.0 实现全设备能力初步覆盖;压缩软件 7-Zip 新版发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 被 Log4j 黑客攻击后 这家金
  • postMan使用技巧

    使用postMan调试接口 一些接口要实现登录才能访问 即要还token才能访问 一般登录后 拿到token才复制到其他接口下添加token变量 如些复制感觉是挺麻烦的 这时我们可以设置postman的全局变量 操作如下 添加调试环境和全局
  • 攻防实战

    0x00 前言 本文介绍了笔者在某次攻防演练中 如何从外网渗透到某车企的内网的详细过程 为了保护敏感信息 所有数据都已经脱敏 有些截图也不完整 请见谅 这次网络攻防演练分为两个阶段一共十四天 前七天是私有资源阶段 后七天是公共资源池阶段 共
  • 洛谷 P1056 排座椅 桶排序

    桶排序大法好 每次一看到这种范围小的题 本萌新就想用桶排 因为题目中的m n都小于1000 我们就可以定义两个1000的数组 表示每一行或每一列可以隔开几对讲话的童鞋 然后再定义两个1000的数组用来对前两个数组的值进行桶排序 再用通道总数
  • c51简单delay函数i的值跟延时的时间呈线性关系

    c51简单delay函数i的值跟延时的时间呈线性关系 一 简单delay函数 晶振频率 11 0592 MHZ define uchar unsigned char void Delay uchar i while i 二 证明 1 调试计
  • 深入浅出:前端浏览器缓存、清除缓存的几种方法

    介绍一个浏览器缓存机制的原理 https blog csdn net u014590757 article details 80140654 https www cnblogs com vajoy p 5341664 html https
  • 脊柱神经系统分布在哪里,脊柱神经系统分布图片

    脊柱两侧分出多少对脊神经 它构成了颈丛 臂丛 腰丛和骶丛 接着分布到全身 构成周围神经 31对脊神经 分别对应于31个脊髓节段上 即8颈 12胸 5腰 5骶 1尾 脊髓每个节段发出一对脊神经 颈丛由第1 4颈神经的前支构成 臂丛由第5 8颈
  • 使用Robot Framework实现多平台自动化测试

    基于Robot Framework Jenkins Appium Selenium Requests AutoIt等开源框架和技术 成功打造了通用自动化测试持续集成管理平台 以下简称 平台 显著提高了测试质量和测试用例的执行效率 01 设计
  • [1076]使用IntelliJ IDEA配置Tomcat

    文章目录 一 下载Tomcat 二 Tomcat环境变量配置 三 在IntelliJ IDEA配置Tomcat 一 下载Tomcat 1 进入官网Http tomcat apache org 选择download 下载所需要的Tomcat版
  • 单表查询

    简单sql查询语句应用 1 基本查询 查询Student表中全体学生的全部信息 select from Student go 查询全体学生的学号 姓名 select sno sname from Student go 2 查询时改变列标题的
  • Segmentation简记-Hybrid Task Cascade for Instance Segmentation

    创新点 1 Hybrid Task Cascade HTC 总结 基于maskrcnn和cascade rcnn的改进 论文中提出的几种cascade结构 a b结构就不细说了 分析一下c和d c较ab多出了一个结构 就是mask的casc
  • 基于Matlab的双向长短时记忆网络(BiLSTM)数据预测

    基于Matlab的双向长短时记忆网络 BiLSTM 数据预测 概述 在数据分析与预测领域 使用深度学习模型进行时间序列数据预测已成为一种常用的方法 本文将介绍如何使用Matlab中的双向长短时记忆网络 BiLSTM 模型对时间序列数据进行预
  • 超详细的计算机网络基础知识总结 第四章:网络层

    本文基于 王道计算机考研 计算机网络 其他文章 超详细的计算机网络基础知识 第一章 概述 超详细的计算机网络基础知识 第二章 物理层 超详细的计算机网络基础知识 第三章 数据链路层 超详细的计算机网络基础知识 第五章 传输层 超详细的计算机
  • 如何处理GPU上Error Number:700 an illegal memory access was encounter

    现象描述 GPU上网络运行过程中出现Error Number 700 an illegal memory access was encounter 原因分析 出现该现象 在框架稳定的背景下基本上可以确定是网络中有算子踩显存 因此CUDA上报