pytorch 指定卡1_在pytorch中指定显卡

1. 利用CUDA_VISIBLE_DEVICES设置可用显卡

在CUDA中设定可用显卡,一般有2种方式:

(1) 在代码中直接指定

import os

os.environ['CUDA_VISIBLE_DEVICES'] = gpu_ids

(2) 在命令行中执行代码时指定

CUDA_VISIBLE_DEVICES=gpu_ids python3 train.py

如果使用sh脚本文件运行代码,则有3种方式可以设置

(3) 在命令行中执行脚本文件时指定:

CUDA_VISIBLE_DEVICES=gpu_ids sh run.sh

(4) 在sh脚本中指定:

source bashrc

export CUDA_VISIBLE_DEVICES=gpu_ids && python3 train.py

(5) 在sh脚本中指定

source bashrc

CUDA_VISIBLE_DEVICES=gpu_ids python3 train.py

如果同时使用多个设定可用显卡的指令,比如

source bashrc

export CUDA_VISIBLE_DEVICES=gpu_id1 && CUDA_VISIBLE_DEVICES=gpu_id2 python3 train.py

那么高优先级的指令会覆盖第优先级的指令使其失效。优先级顺序为:不使用sh脚本 (1)>(2); 使用sh脚本(1)>(5)>(4)>(3)

个人感觉在炼丹时建议大家从(2)(3)(4)(5)中选择一个指定可用显卡,不要重复指定以防造成代码的混乱。方法(1)虽然优先级最高,但是需要修改源代码,所以不建议使用。

2 .cuda()方法和torch.cuda.set_device()

我们还可以使用.cuda()[包括model.cuda()/loss.cuda()/tensor.cuda()]方法和torch.cuda.set_device()来把模型和数据加载到对应的gpu上。

(1) .cuda()

以model.cuda()为例,加载方法为:

model.cuda(gpu_id) # gpu_id为int类型变量,只能指定一张显卡

model.cuda('cuda:'+str(gpu_ids)) #输入参数为str类型,可指定多张显卡

model.cuda('cuda:1,2') #指定多张显卡的一个示例

(2) torch.cuda.set_device()

使用torch.cuda.set_device()可以更方便地将模型和数据加载到对应GPU上, 直接定义模型之前加入一行代码即可

torch.cuda.set_device(gpu_id) #单卡

torch.cuda.set_device('cuda:'+str(gpu_ids)) #可指定多卡

但是这种写法的优先级低,如果model.cuda()中指定了参数,那么torch.cuda.set_device()会失效,而且pytorch的官方文档中明确说明,不建议用户使用该方法。

第1节和第2节所说的方法同时使用是并不会冲突,而是会叠加。比如在运行代码时使用

CUDA_VISIBLE_DEVICES=2,3,4,5 python3 train.py

而在代码内部又指定

model.cuda(1)

loss.cuda(1)

tensor.cuda(1)

那么代码会在GPU3上运行。原理是CUDA_VISIBLE_DEVICES使得只有GPU2,3,4,5可见,那么这4张显卡,程序就会把它们看成GPU0,1,2,3,.cuda(1)把模型/loss/数据都加载到了程序所以为的GPU1上,则实际使用的显卡是GPU3。

如果利用.cuda()或torch.cuda.set_device()把模型加载到多个显卡上,而实际上只使用一张显卡运行程序的话,那么程序会把模型加载到第一个显卡上,比如如果在代码中指定了

model.cuda('cuda:2,1')

在运行代码时使用

CUDA_VISIBLE_DEVICES=2,3,4,5 python3 train.py

这一指令,那么程序最终会在GPU4上运行。

3.多卡数据并行torch.nn.DataParallel

多卡数据并行一般使用

torch.nn.DataParallel(model,device_ids)

其中model是需要运行的模型,device_ids指定部署模型的显卡,数据类型是list

device_ids中的第一个GPU(即device_ids[0])和model.cuda()或torch.cuda.set_device()中的第一个GPU序号应保持一致,否则会报错。此外如果两者的第一个GPU序号都不是0,比如设置为:

model=torch.nn.DataParallel(model,device_ids=[2,3])

model.cuda(2)

那么程序可以在GPU2和GPU3上正常运行,但是还会占用GPU0的一部分显存(大约500M左右),这是由于pytorch本身的bug导致的(截止1.4.0,没有修复这个bug)。

device_ids的默认值是使用可见的GPU,不设置model.cuda()或torch.cuda.set_device()等效于设置了model.cuda(0)

4. 多卡多线程并行torch.nn.parallel.DistributedDataParallel

(这个我是真的没有搞懂,,,,)

参考了这篇文章和这个代码,关于GPU的指定,多卡多线程中有2个地方需要设置

torch.cuda.set_device(args.local_rank)

torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank])

模型/loss/tensor设置为.cuda()或.cuda(args.local_rank)均可,不影响正常运行。

5. 推荐设置方式:

(1) 单卡

使用CUDA_VISIBLE_DEVICES指定GPU,不要使用torch.cuda.set_device(),不要给.cuda()赋值。

(2) 多卡数据并行

直接指定CUDA_VISIBLE_DEVICES,通过调整可见显卡的顺序指定加载模型对应的GPU,不要使用torch.cuda.set_device(),不要给.cuda()赋值,不要给torch.nn.DataParallel中的device_ids赋值。比如想在GPU1,2,3中运行,其中GPU2是存放模型的显卡,那么直接设置

CUDA_VISIBLE_DEVICES=2,1,3

(3) 多卡多线程

由于这块还有好多地方没有搞懂(尤其是torch.nn.parallel.DistributedDataParallel),所以文章中难免会有很多错误和疏漏,欢迎各位大佬指正。

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

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

相关文章

计算机学院五名学生开发手语app,大学生团队研发成功“聋人自然手语翻译器”APP...

把语音转换成文字,再将文字翻译成手语,在第25个“全国助残日”到来之际,江苏科技大学的一群平均年龄不到22岁的年轻创业者们,研发出了一款“聋人自然手语翻译器”,为普通人与聋哑群体搭建沟通的桥梁。拿起手机&#xf…

java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒

1:数据安全问题1.1:什么情况下会出现数据安全问题?多个线程对同一个资源进行操作,并且操作资源的语句有多条。那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行。导致数据安全问题。例子:有3…

苏州宾馆管理也计算机哪个学校好,苏州十大寄宿式中学学校排名榜

教师的素质目标是什么*的发展离不开教育,教育的发展离不开教师,教师的素质提高关系着民族的未来,教师不仅要教授知识,更重要的是教授做人,以下是小编为您整理的教师的素质目标是什么的相关内容。素质教育目标是提高国民…

aop注解配置切点 spring_Spring通过自定义注解灵活配置AOP切点

package com.lsz.config.enums;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** 加载配置注解** author lishuzhen* date 2020/11/4 11:22*/Target(Ele…

电大计算机网考上机操作题,电大计算机上机考试模拟题及答案 (1)

模拟试题模拟试题一:第001题:在Windows中添加”传真服务”.第002题:设置Internet Explorer,对所有官方微软网站不进行安全认证.操作步骤第003题:设置Outlook Express,新邮件.新闻邮件下载5天后即被删除, 当浪费的空间达到40%时压缩邮件,并将存储在C盘DDKS根目录下。…

python中哪个符号用于从包中导入模块__学小易找答案

【简答题】7个积分题【单选题】5. Is it time for the meeting now?【单选题】result lambda x: x * x print(result(5)) 以上代码输出结果为?【其它】第一次作业.docx【简答题】11个求导题!【单选题】18. Where does the woman want to work?【单选题】15. Where does the…

在职人员计算机网络管理总结,关于学校网络管理员个人工作总结

关于学校网络管理员个人工作总结主要工作职责1.按照规定流程开通校园网用户,做好审核与登记工作。2.接听办公室报修电话,负责校园网网络故障报修用户信息登记。3.凭证参加网络故障现场维护(自网络故障报修日起两个工作日内)。4.统计当天网络故障报修数据…

long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)

在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。1、引入起步依赖org.springframework.bootspring-boot-starter-weborg.springframework.boo…

小学计算机课程评价,小学信息技术课堂评价浅谈

小学信息技术是一门融知识性、趣味性和技能性于一体的学科,它着重于对小学生进行初步的信息意识、信息素养和信息技能的培养,集知识性和技能性于一体。而对于学生学习情况的评价,信息技术学科不像其他学科一样,可以留有课后作业或…

git 相同commit_Git 合并多次 commit 、 删除某次 commit

Git 合并多次 commit有时候在一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱,此时可以将一部分的 commit 合并为一个 commit,以美化整个 commit 历史,可以使用 rebase 的方法来合并多次 commit,主要步骤…

微服务 松耦合_超值干货:微服务架构下如何解耦,对于已经紧耦合下如何重构?...

今天准备谈下微服务架构下各个微服务间如何解耦,以及对于已经紧耦合的微服务如何进行重构。要明白实际上微服务后续出现的诸多问题往往都是一开始微服务模块划分就不合理导致,对于具体的模块划分方法和原则,我总结出了以下几点。原则1&#x…

西安电子科技大学研究生计算机专业王宇平教授学生就业岗位,西安电子科技大学计算机学院导师信息情况...

研究生考试招生以下是所有导师的详细资料姓名 权义宁 杨世勇 刘志镜 冯大政 王宇平 王宇平 马建峰职称 副教授 副教授 教授 教授 教授 教授 教授导师类别 硕士生导师 硕士生导师 博士生导师 博士生导师 博士生导师 硕士生导师 博士生导师电子信箱ynquanhttp://doc.xuehai.netsh…

增量式pid调节方式有何优点_增量式pid和位置式pid相比各有什么优缺点

展开全部位置PID和增量PID之间的差异是不同的输出,是否存在积分部分以及是否具有记忆功62616964757a686964616fe78988e69d8331333433626562能。1.输出不同:位置PID控制的输出与整个过去状态有关,并且使用了误差的累加值;而增量PID…

文件夹 计算机无法使用,电脑文件夹提示被使用无法删除怎么办

相信有朋友碰到过这样的问题,电脑上新建一个临时文件夹在使用完后进行删除,或者卸载某一个程序,在卸载完想手动删除残留的文件夹时,出现了下图所示的提示:这个时候我们一般都会在任务管理器中查找是哪个进程占用了&…

python之异常处理_Python之异常处理

异常对象请大家运行如下代码a 100/0print(a)就会发现解释器显示如下的错误提示Traceback (most recent call last): File "xxxxxxxxxx.py", line 1, in a 100/0ZeroDivisionError: division by zero大家要学会看解释器的报错。这就是解释器向我们报告, …

西安北苑附近哪有计算机学校,太古城北(北苑地铁站)附近大学院校

最佳答案:太古城北(北苑地铁站)附近有长安大学-团委,长安大学渭水校区,长安大学计算机实验教学中心,陕西科技大学化学与化工学院,陕西科技大学实验楼1A,陕西科技大学实验楼2A,陕西科技大学-工程训练中心,陕西科技大学管理学院,陕西科技大学西安校区,陕西科技大学信息…

http://www.od85c.com.cn/html/,OllyDbg script for unpacking Enigma 4.xx and 5.xx

[Asm] 纯文本查看 复制代码// Enigma Protector 4.xx and 5.XX unpacker by GIV (some parts are from LCF-AT Alternativ 1.1 script and the API fix is from SHADOW_UA script)// January 22 2016// givreversing.ro// PRIVATE// 3D00F000007E13B800000100 - API COMPARE AN…

hive 神盾特工局_《神盾局特工》第三季剧终惊人:两位超高人气的角色离开

原标题:《神盾局特工》第三季剧终惊人:两位超高人气的角色离开当“神盾局特工”几周前宣布一位主要角色将在本季最后一集中死亡时,粉丝开始猜测这个角色将会是谁。当一切真相揭开时,此剧对于“升天”这个词的承诺竟然有双重意义,第…

计算机软件著作权特征,计算机软件著作权的法律特征是什么

计算机软件著作权的法律特征是什么一、权利内容的法定性法定性有狭义、广义之分。作为一个法律概念的“权利”,都是由国家的法律所规定的,不存在任何法律规定之外的权利,譬如没有所谓“天赋”的权利。从这个意义上讲,凡法律上的权…

html img和背景图处理图片不拉伸_css 背景图不拉伸自适应屏幕大小

效果图全屏:背景图尺寸大于屏幕尺寸,背景图只显示跟屏幕一样大小内容小屏时:如效果图所示,图片并没有发生压缩、或者缩小比例,它只是显示跟屏幕尺寸大小的内容,至于如何控制缩小浏览器时图片的变化&#xf…