RuntimeError: CUDA error: an illegal memory access was encountered

前言

我在跑深度学习模型。其中卷积用CUDA写的。数据集是cifar10。在运行了1个epoch后,就报错:RuntimeError: CUDA error: an illegal memory access was encountered。这个错误是在调用loss.backward()方法时出现的。
在网上看了很多方法,有说改小batch_size的,有说让input_data和input_label都放在GPU上的,有说升级pytorch版本的,有说换GPU卡的…

解决办法

我在取数据进行训练时,先看看GPU内存和缓存的使用情况,具体是在出错的地方使用

print(torch.cuda.memory_allocated())
print(torch.cuda.memory_cached())

查看存储空间的使用情况。发现这两个值很接近。这说明内存被占用满了。但是我查看GPU的利用率,发现GPU的利用率才达到59%。
感觉挺玄乎的,我在调用loss.backward()前先使用torch.cuda.empty_cache()释放内存,把batch_size改小,就能运行了。
代码如下所示:

    for step, (x, y) in enumerate(train_loader):x = x.cuda()y = y.cuda()if step == 0:batch_size = len(y)optimizer.zero_grad()output = net(x)loss = loss_function(output, y).cuda()#####加上了代码######print(torch.cuda.memory_allocated())print(torch.cuda.memory_cached())torch.cuda.empty_cache()#####加上了代码######loss.backward()if args.trainspflag:UpdateBnFactor()optimizer.step()total_loss += (loss.item()/length)#####在一次epoch完后再释放一次内存####torch.cuda.empty_cache()............

总结

玄乎!GPU内存利用率不高,但是就是说内存不够用。最开始我把batch_size调整为1,还是报同样的错!但是当我一边释放内存,一边改小batch_size后,又能用了。唉,我这个小白+菜鸟独闯CUDA编程,特别是涉及到内存管理上,真的是有N多坑要踩啊!

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

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

相关文章

linux自定义命令

文章目录 1、自定义命令介绍2、自定义命令步骤 (centos7)2.1 新建隐藏目录存放自定义命令脚本文件2.2 将新建的目录配置环境变量2.3 取别名的方式简化已有命令2.4 编写自定义命令脚本 1、自定义命令介绍 不管是linux系统还是windows系统都支持自定义命令,windows端…

学习 C++ 一定要搭配 Linux 吗?

学习C并不一定非要搭配Linux,但使用Linux环境进行学习和开发确实有其独特的优势,尤其对于深入理解和实践某些高级主题及特定领域的开发工作。以下是关于是否需要搭配Linux学习C的详细分析: 为了帮助您更好地入门并深入掌握C,我们精…

PLC的大脑和心脏——CPU及西门子S7-1200CPU分类、CPU型号及端子接线图示例

CPU不断地采集输入信号,执行用户程序,刷新系统的输出。 根据供电方式和输入/输出方式的不同,西门子S7-1200 CPU分为3类,如下图1。 图1 CPU的分类 第1对字母,表示CPU的供电方式,AC(Alternating…

Python实现的网页爬虫示例

当然可以。以下是一个使用Python实现的基础网页爬虫示例。这个示例将使用requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML文档。如果你还没有安装这两个库,请先使用pip进行安装: pip install requests beautifulsoup4接下来是网页…

代码随想录第25天|216.组合总和III 17.电话号码的字母组合

216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 代码随想录 (programmercarl.com) 和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 找出所有相加之和为 n 的 k 个数的组…

【KingSCADA】播放语音

1.函数介绍 PlaySound(string strWaveFileName, int nMode);下面是官方帮助文档中的解释: 2.生成语音文件 3.使用脚本播放音频文件 将音频文件存放在工程目录下面,我存放在了…\Resources\文件夹下: 我简单的写了一个定时1分钟播放一次语…

Fluent循环流动案例(模拟循环泵,含换热、散热、VOF、UDF)

在此特意记录下循环通道的fluent思路和参数设置 该案例中,主要关注的是催化剂域的温度变化情况,因此需要监控的是温度的变化曲线,关于泵如何进行模拟,这里有两种思路,一种是用风扇代替泵,优点是整个流体域基…

HarmonyOS ArkTS 骨架屏加载显示(二十五)

目录 前言1、骨架屏代码显示2、代码中引用3、效果图展示 前言 所谓骨架屏,就是在页面进行耗时加载时,先展示的等待 UI, 以告知用户程序目前正在运行,稍等即可。 等待的UI大部分是 loading 转圈的弹窗,有的是自己风格的小动画。其实…

JS - const 关键字声明的变量并不是常量

// 1. 赋值给一个变量 const declare function (x) { return x * x; }; 读到这部分时‘ 疑惑注释为什么会是说 把这个函数表达式赋值给一个变量 在 JavaScript 中,使用 const 关键字声明的变量并不是常量(immutable),而是常量引用…

vue3路由跳转

在 Vue 3 中,路由跳转通常是通过 Vue Router 实现的。Vue Router 是 Vue.js 官方的路由管理器,它和 Vue.js 深度集成,使构建单页面应用变得易如反掌。 下面是一些在 Vue 3 中使用 Vue Router 进行路由跳转的基本步骤: 安装 Vue …

武汉大学开设 “雷军班”:计算机专业、今年招收 15 名本科生。武汉大学已经联合小米成立了机器系

更多精彩内容在公众号。 3月25日,武汉大学官方网站发布了一则新闻,报道了校长张平文对计算机学院的调研活动。在报道中,张平文校长特别强调了关于“雷军班”及机器人系的发展规划。他表示,希望计算机学院能够立足于更高层次&#…

【python从入门到精通】-- 第三战:输入输出 运算符

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

前端虚拟滚动列表 vue虚拟列表

前端虚拟滚动列表 在大型的企业级项目中经常要渲染大量的数据,这种长列表是一个很普遍的场景,当列表内容越来越多就会导致页面滑动卡顿、白屏、数据渲染较慢的问题;大数据量列表性能优化,减少真实dom的渲染 看图:绿色…

构建 3D+虚拟人+ai 结合虚拟直播间

构建 3D 虚拟人与 AI 结合的虚拟直播间可以通过以下步骤实现: 1. 选择合适的平台和工具: 首先,你需要选择适合构建虚拟直播间的平台和工具。一些常用的平台包括 Unity、Unreal Engine 等,它们提供了强大的 3D 渲染和物理引擎&…

Qt之QSoundEffect播放简单音效

文章目录 前言一、为什么需要他二、QSoundEffect的使用2.1 简单使用2.2 QSoundEffect API2.3 槽函数2.4 信号总结前言 在开发Qt应用程序时,为用户提供音效可以增强用户体验,并且能够使应用程序更加生动和交互。Qt提供了QSoundEffect类,用于播放简单的音效,例如按键音、警告…

Prometheus +Grafana +node_exporter可视化监控Linux + windows虚机

1、介绍 背景:需要对多台虚机进行负载可视乎监控,并进行及时的报警 2、架构图 node_exporter :主要是负责采集服务器的信息。 Prometheus :主要是负责存储、抓取、聚合、查询方面。 Grafana : 主要是…

Pandas | value_counts() 的详细用法

value_counts() 函数得作用 用来统计数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据指定得参数返回排序后结果。 返回得是Series对象 value_counts(values,sortTrue, ascendingFalse, normalizeFal…

SSTI 服务器端模板注入(Server-Side Template Injection)

1.Web_python_template_injection {{}}是变量包裹标识符,里面存放的是一个变量,当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功,说明存在模版注入。接下来,开始想办法编代码拿到服务器的控制台权限 。 首先&#xff0c…

unity 打包安卓错误汇集

Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装,最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题,会报错那种&#xff…

Java中常见的锁策略

目录 乐观锁 vs 悲观锁 悲观锁: 乐观锁: 重量级锁 vs 轻量级锁 ⾃旋锁(Spin Lock) 公平锁 vs 非公平锁 可重⼊锁 vs 不可重入锁 读写锁 乐观锁 vs 悲观锁 悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别…