cuda_device的血泪教训

之前声明cuda设备的方式都是首先os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3,4,5,6,7', 代表能看到所有设备,然后再通过device = 'cuda:6'+model = model.to(device), 放到其中某个设备上。今天要跑一个新模型,仍然选择这种方式,但是非常神奇,我生命了'cuda:6',但是模型偏偏就是会跑到'cuda:0''cuda:6'

于是换了种方式,os.environ['CUDA_VISIBLE_DEVICES'] = '5',只声明看到要跑的那个设备,然后device = 'cuda:0'+model = model.to(device)将设备放在这唯一的设备上,于是只能在这个设备上跑了

但又出现了新的问题,就是之后在模型的forward过程时,会报错,说模型和变量不在同一个设备上,这一点我之前经常会遇到,因此我自己写的代码里,除了会声明模型的设备外,还会通过tensor = tensor.cuda(DEVICE = 'cuda:0')把模型也放在这个设备上。但是这是我直接down的论文的代码呀,肯定不会让我在调bug的时候额外加这么多代码

当时为了换成自己的方式,把作者的model = nn.DataParallel(model).cuda()语句换成了自己的model = model.to(device),于是我又改了回去,现在的声明设备的语句是先os.environ['CUDA_VISIBLE_DEVICES'] = '5',然后model = nn.DataParallel(model).cuda(),再运行,发现不再报错了,难道是这个语句在声明model设备的同时还能声明张量设备?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值