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

DL中的GPU使用问题

写在前面
在使用GPU进行深度学习训练经常会遇到下面几个问题,这里做一个解决方法的汇总。

🐕Q1🐕:在一个多卡服务器上,指定了cuda:1,但是0号显卡显存还是会被占用一定量的显存。

这个问题很经典的出现场景就是0号卡已经几乎要被占满了,但是1号卡空的很。本想指定在1号卡上跑DL,结果因为一直会占用0号卡一定量的显存,但0号卡此时已经不够显存了,就会反复报:CUDA OUT OF MEMORY.

A1:这个问题是因为模型的部分初始化操作会默认在0号卡上进行,后续的cuda:1没法将这个初试化操作放到1号卡上,所以就占用了部分0号卡的情况。解决的方法可以直接在代码运行的时候指定模型的可见显卡环境。比如现在有一台双卡服务器,现在要将代码指定在1号卡进行,可通过下面代码运行:

CUDA_VISIBLE_DEVICES=1 python3 train.py

其中CUDA_VISIBLE_DEVICES=1的作用是将你的1号显卡暴露给这个代码,这个代码在运行过程中只看到了这张卡,这时候你代码中可以通过调用cuda:0就能够实现只占用这张卡的内存了。另外CUDA_VISIBLE_DEVICES这里指定的顺序也有讲究,如果是如下这样指定:

CUDA_VISIBLE_DEVICES=0,1 python3 train.py

那代码中如果是调用cuda:0的话对应调用的就是0号卡,但如果是按照下面这样指定的话:

CUDA_VISIBLE_DEVICES=1,0 python3 train.py

调用cuda:0的话对应调用的就是1号卡。

🐕Q2🐕:在一个多卡服务器上,想要同时利用多张卡同时训练。

这个一般就是用于模型需要较多显存,但是单卡的显存不够的情况了。

A2:使用如下代码即可:

    if torch.cuda.device_count() > 1:model = nn.DataParallel(model)

注意,在模型分布到多卡上之后,输入数据直接按照下面方式存入显存即可:

input = input.cuda()

数据会进行自适应分流到各个显卡上的。

To be continued…

http://www.lryc.cn/news/251147.html

相关文章:

  • Linux命令——watch
  • 力扣题:字符的统计-12.2
  • Python----Pandas
  • 【UE】UEC++获取屏幕颜色GetPixelFromCursorPosition()
  • 数学建模-基于BL回归模型和决策树模型对早产危险因素的探究和预测
  • 接口测试 —— 接口测试的意义
  • 一些常见的爬虫库
  • 2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)
  • 【EMFace】《EMface: Detecting Hard Faces by Exploring Receptive Field Pyramids》
  • 详细学习Pyqt5的20种输入控件(Input Widgets)
  • 【JavaEE初阶】Thread 类及常见方法、线程的状态
  • 0 NLP: 数据获取与EDA
  • 159.库存管理(TOPk问题!)
  • 【开源】基于Vue+SpringBoot的康复中心管理系统
  • 设计模式总览
  • 数据链路层之VLAN基本概念和基本原理
  • UVA11729 Commando War
  • 【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性
  • 大文件分片上传、分片进度以及整体进度、断点续传(一)
  • Pytest 的小例子
  • 大数据(十一):概率统计基础
  • web前端之TypeScript
  • 计网Lesson6 - IP 地址分类管理
  • Nat. Mach. Intell. | 预测人工智能的未来:在指数级增长的知识网络中使用基于机器学习的链接预测
  • MySQL海量数据配置优化教程
  • Mac-idea快捷键操作
  • HarmonyOS脚手架:UI组件之文本和图片
  • 详细学习Pyqt5中的6种按钮
  • 【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)
  • 利用Python爬虫爬取豆瓣电影排名信息