RuntimeError: CUDA error: an illegal memory access was encountered 解决思路

2023-11-02

问题描述:

在跑编译正常通过CPU上也正常运行的某项目时,在运行到某个epoch时,程序突然出现以下错误:

RuntimeError: CUDA error: an illegal memory access was encountered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

如下图所示
请添加图片描述


原因分析:

网络上有很多解决方案,但是实测都不太适用(因为出现这种bug的原因是多种的):

  1. [彻底解决]CUDA error: an illegal memory access was encountered(CUDA错误 非法访问内存)
  2. 【debug】报错RuntimeError: CUDA error: an illegal memory access was encountered
  3. 如何解决一个诡异的pytorch的illegal memory access报错? - 知乎
  4. pytorch报错:CUDA error: an illegal memory access was encountered

有一个博客评论指出:这种错误会出现在自己编写的一些loss或指标函数上面,由于转化为了cpu运行numpy所出现的错误。这种情况与笔者遇到的问题是类似的,其在里面加time.sleep(1)可以解决;

另一篇博客指出:在外网的评论说可能是GPU硬件问题导致的错误

综合起来并实测来看,可能是GPU负载过大访问冲突/越界导致的,并且受多种因素影响。


解决方案:

首先,一定要在CPU模式下,完全编译通过!很多情况是代码本身写错了,出现访问越界之类的情况。

.cpu().numpy() 处出现报错

  1. 在模型训练代码相关位置里面添加延时函数 Thread.sleep(毫秒数) 或者 time.sleep(1) ,以延缓GPU压力;
  2. 减小dataloader里的 num_worker 数量,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RuntimeError: CUDA error: an illegal memory access was encountered 解决思路 的相关文章

  • 如何以干净高效的方式在 pytorch 中获得小批量?

    我试图做一件简单的事情 即使用火炬通过随机梯度下降 SGD 训练线性模型 import numpy as np import torch from torch autograd import Variable import pdb def
  • GPU上动态分配内存

    是否可以在内核内的 GPU 全局内存上动态分配内存 我不知道我的答案有多大 因此我需要一种方法为答案的每个部分分配内存 CUDA 4 0 允许我们使用 RAM 这是一个好主意还是会降低速度 可以在内核中使用 malloc 检查以下内容 摘自
  • 导入pytorch时,未安装microsoft Visual C++ Redistributable

    我在一台带有 GPU 的 Windows 机器上工作 我已经在 conda 环境中安装了 pytorch conda install pytorch torchvision cudatoolkit 10 1 c pytorch 然后我运行
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • 使用 Huggingface 变压器仅保存最佳权重

    目前 我正在使用 Huggingface transformers 构建一个新的基于 Transformer 的模型 其中注意力层与原始模型不同 我用了run glue py检查我的模型在 GLUE 基准测试上的性能 但是 我发现huggi
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 如何在没有 nvcc 的情况下在编译时获取 CUDA 工具包版本?

    我在 cpp 文件中对 cuSPARSE 库进行了一些调用 这些调用在旧工具包中不可用 为了支持使用旧工具包的系统 我想使用编译器指令编译不同的代码部分 特别是 我想使用旧工具包的 CSR 格式矩阵和新工具包的 BSR 格式矩阵来求解稀疏三
  • 对 CUDA 操作进行计时

    我需要计算 CUDA 内核执行的时间 最佳实践指南说我们可以使用事件或标准计时函数 例如clock 在Windows中 我的问题是使用这两个函数给出了完全不同的结果 事实上 与实践中的实际速度相比 事件给出的结果似乎是巨大的 我实际上需要这
  • 如何在pytorch中动态索引张量?

    例如 我有一个张量 tensor torch rand 12 512 768 我得到了一个索引列表 说它是 0 2 3 400 5 32 7 8 321 107 100 511 我希望从给定索引列表的维度 2 上的 512 个元素中选择 1
  • 完全禁用 NVCC 优化

    我正在尝试测量 GPU 上的峰值单精度触发器 为此我正在修改 PTX 文件以在寄存器上执行连续的 MAD 指令 不幸的是 编译器正在删除所有代码 因为它实际上没有做任何有用的事情 因为我没有执行任何数据的加载 存储 是否有编译器标志或编译指
  • PyTorch 中的标签平滑

    我正在建造一个ResNet 18分类模型为斯坦福汽车使用迁移学习的数据集 我想实施标签平滑 https arxiv org pdf 1701 06548 pdf惩罚过度自信的预测并提高泛化能力 TensorFlow有一个简单的关键字参数Cr
  • 为什么使用 boost::none 无法通过 nvcc 编译?

    我正在尝试编译以下代码 include
  • 带有填充掩码的 TransformerEncoder

    我正在尝试使用 src key padding mask 不等于 none 来实现 torch nn TransformerEncoder 想象输入的形状src 20 95 二进制填充掩码的形状为src mask 20 95 填充标记的位置
  • 如何转储所有 NVCC 预处理器定义?

    我想达到同样的效果 gcc dM E lt dev null 如所描述的here https stackoverflow com q 2224334 1593077 但对于 nvcc 也就是说 我想转储所有 nvcc 的预处理器定义 唉 n
  • goto 指令对 CUDA 代码中扭曲内发散的影响

    对于CUDA中简单的warp内线程发散 我所知道的是SM选择一个重新收敛点 PC地址 并在两个 多个路径中执行指令 同时禁用未采用该路径的线程的执行效果 例如 在下面的代码中 if threadIdx x lt 16 A do someth
  • 从 torch.autograd.gradcheck 导入 zero_gradients

    我想复制代码here https github com LTS4 DeepFool blob master Python deepfool py 并且我在 Google Colab 中运行时收到以下错误 ImportError 无法导入名称
  • 针对“CUDA 驱动程序版本不足以满足 CUDA 运行时版本”该怎么办?

    当我去 usr local cuda samples 1 Utilities deviceQuery并执行 moose pc09 usr local cuda samples 1 Utilities deviceQuery sudo mak
  • CUDA双指针内存复制[重复]

    这个问题在这里已经有答案了 我这样写了我的示例代码 int d ptr cudaMalloc void d ptr sizeof int N int tmp ptr N for int i 0 i
  • PyTorch:加速数据加载

    我正在使用 dendnet121 从 Kaggle 数据集进行猫 狗检测 我启用了cuda 看起来训练速度非常快 然而 数据加载 或者可能是处理 似乎非常慢 有一些方法可以加快速度吗 我尝试玩女巫批量大小 但没有提供太多帮助 我还将 num
  • 如何在 Pytorch 中将一维 IntTensor 转换为 int

    如何将一维 IntTensor 转换为整数 这 IntTensor int 给出错误 KeyError Variable containing 423 torch IntTensor of size 1 我所知道的最简单 最干净的方法 In

随机推荐

  • C++11标准模板(STL)- 算法(std::rotate)

    定义于头文件
  • logistics回归之sklearn中的LogisticRegressionCV

    一 Logistic回归的认知与应用场景 Logistic回归为概率型非线性回归模型 是研究二分类观察结果与一些影响因素之间关系的 一种多变量分析方法 通常的问题是 研究某些因素条件下某个结果是否发生 比如医学中根据病人的一些症状 来判断它
  • Android-打包AAR步骤以及最为关键的注意事项

    转自 https www jianshu com p f391d0a6691e 简介 最近因为项目的要求 需要把开发的模块打包成aar 供其他项目调用 在搞了一段时间后 发现这里还是有很多需要注意的地方 所以记录一下 帮助大家不要走弯路 首
  • 调试for循环的技巧

    今天用IDEA调试for循环时 断点打在了for的左边 不小心按了F9 跳到下一个断点 意外发现原来可以通过这种方式对for循环的每次循环进行调试 不必自己手动一行行调试才到下一次for循环 这对于一种场景特别适用 假设你需要查看第 5 次
  • 并发编程系列之重入锁VS读写锁

    前言 上节我们介绍了Java中的锁基础篇 也算是对锁有了个基本的认识 对锁底层的一些原理有所掌握 那么今天我们就来看看2个最常见的锁的实例应用 重入锁和读写锁 这是今天旅途最美的两大景点 是不是有点迫不及待了 OK 那就让我们一起开启今天的
  • 电磁式继电器使用注意事项

    电磁继电器的使用 1 触点通断时线圈两端会感应出较大的电动势 如果不加隔离 便很容易通过地电势将干扰引入板上其它电路 导致单片机复位 线圈控制端加光耦隔离 线圈的电源与板子的电源隔离 另外线圈两端要加续流二极管 见后说明 可选常用的1N40
  • 【计算机组成原理】16-定点数与浮点数

    一 定点数的表示方法 1 纯小数 乘以比例因子以满足定点数保存格式 2 纯整数 小数点在后面 二 浮点数的表示方法 计算机处理的很大程度上不是纯小数或纯整数 数据范围很大 定点数难以表达 1 浮点数的表示格式 科学计数法 j S 尾数 r
  • 华为人才在线--华为认证进阶路径

    华为人才在线 华为认证进阶路径网址 网址 https e huawei com cn talent cert roadmap 在这个网址可以学习华为的各类技术方向 能下载到培训教程和实验手册 以及在线学习 如学习路由交换的HCIA点击红色的
  • Numpy数组

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray 它是一系列同类型数据的集合 以 0 下标为开始进行集合中元素的索引 ndarray 对象是用于存放同类型元素的多维数组 ndarray 中的每个元素在内存中都有相同存储大小的
  • 预装载功能探究一:比较/捕获寄存器预装载使能的意义

    以沁恒CH32V307VCT6芯片测试为基准 测试开发板 CH32V307V R1 1V0 以下内容均为解析调用此句代码的意义 TIM OC1PreloadConfig TIM1 TIM OCPreload Enable 第一层 解析底层代
  • 使用 Git Extensions 简单入门 Git

    使用 Git Extensions 简单入门 Git 独立观察员 2015 11 25 前言 关于这个主题 之前我录了段视频教程 在本地看清晰度还可以 但传到优酷上就很不清晰了 即使是后来重制后还是一样不清晰 所以现在想整理成文字版 当然
  • 计算机网络基础学习 --- 第四章--网络层(ipv4概述)

    1 网络层 1 1 网络层概述 1 2 网络层提供的2种服务 1 3 IPV4 1 3 1 IPV4概述 1 3 2 分类编址的IPV4地址 1 3 3 划分子网的IPV4地址 1 3 4 无分类编制的IPV4地址 1 3 5 IPV4地址
  • jvm分析工具简介

    根据开源谷粒商城学习总结的笔记 觉得是个很好用的工具 推荐 因为jdk自带不用单独安装且很好用不像jprofiler还得安装和破解 1 jconsole 安装jdk配置好环境变量 win R输入cmd进入dos命令行 启动应用 想要分析的项
  • Go语言面试题--基础语法(26)

    文章目录 1 下面这段代码能否正常结束 2 下面这段代码输出什么 为什么 3 下面代码是否能编译通过 如果通过 输出什么 1 下面这段代码能否正常结束 func main v int 1 2 3 for i range v v append
  • 安装nvm管理node版本详细步骤

    安装nvm管理node版本详细步骤 首先需要把已经安装的node进行卸载 注 卸载node之前 最好把node的版本记录一下 方便安装nvm之后可以下载你需要的node版本 具体卸载步骤如下 打开电脑的控制面板 gt 点击程序 gt 点击程
  • win7+nfs文件服务器,win7如何挂载nfs服务器

    在linux下面 除了samba 一种在局域网内的不同计算机之间提供文件及打印机等资源的共享服务 服务之外 我们还可以通过nfs服务共享文件 以达到跨本台访问的需求 下面是学习啦小编收集整理的win7如何挂载nfs服务器 希望对大家有帮助
  • 学 Rust 最好的图书之一,原版豆瓣 9.7分“封神之作”

    1 瓜王 争霸赛总冠军 开发者版图同步飞涨 Rust 大概是世界上 瓜 最多的编程语言了 最近的一个 瓜 来自微软 用 Rust 重写 Windows 内核 一边是不断有大厂使用 Rust 重构某个版块的老旧代码 一边是 Rust 内部传出
  • 企业场景篇

    企业场景篇 设计模式 简单工厂模式 工厂 factory 处理创建对象的细节 一旦有了SimpleCoffeeFactory CoffeeStore类中的orderCoffee 就变成此对象的客户 后期如果需要Coffee对象直接从工厂中获
  • 一句sql搞定Mysql删除数据后自增列从1开始

    在数据库应用 我们经常要用到唯一编号 以标识记录 在MySQL中可通过数据列的AUTO INCREMENT属性来自动生成 MySQL支持多种数据表 每种数据表的自增属性都有差异 这里将介绍各种数据表里的数据列自增属性 数据库中设置了自增列
  • RuntimeError: CUDA error: an illegal memory access was encountered 解决思路

    问题描述 在跑编译正常通过 CPU上也正常运行的某项目时 在运行到某个epoch时 程序突然出现以下错误 RuntimeError CUDA error an illegal memory access was encountered CU