os.environ[‘CUDA_VISIBLE_DEVICES‘]指定GPU后,还是用的“0“卡

引言

随着深度学习在各领域的广泛应用,GPU计算已经成为了许多研究者和工程师的必备工具。特别是在使用诸如TensorFlow、PyTorch等深度学习框架时,我们经常需要指定特定的GPU设备来进行计算。然而,有时尽管已经设置了CUDA_VISIBLE_DEVICES环境变量,程序仍然会默认使用GPU设备“0”。本文将深入探讨这个问题,并提供相应的解决方案。


问题背景

CUDA_VISIBLE_DEVICES是一个环境变量,用于指定哪些GPU设备对CUDA可见。通过设置这个环境变量,我们可以控制程序使用哪些GPU进行计算。例如,如果我们想把程序限制在只使用第2块GPU(索引为1),我们可以设置CUDA_VISIBLE_DEVICES=1

然而,有时即使我们设置了CUDA_VISIBLE_DEVICES,程序仍然会默认使用GPU设备“0”。这可能是由于多种原因,如环境变量设置不正确、程序配置问题等。

错误原因分析

  1. 环境变量设置不正确:可能是由于在设置环境变量时出现了错误,导致指定的GPU设备不可见。
  2. 程序配置问题:某些深度学习框架或库在初始化时会默认使用GPU设备“0”。即使设置了CUDA_VISIBLE_DEVICES,这些框架的内部逻辑可能仍会绕过这个设置。
  3. 其他软件干扰:某些其他运行中的软件可能会影响GPU的使用,导致设置的环境变量不起作用。

可能的解决方案

  1. 检查环境变量设置:确保在设置CUDA_VISIBLE_DEVICES时使用了正确的GPU索引。注意,索引是从0开始的。
  2. 重新启动程序:有时候,简单地重新启动程序可以解决这个问题。因为某些框架或库在初始化后会缓存GPU设备的设置。
  3. 检查代码:对于特定的项目代码,即使设置了CUDA_VISIBLE_DEVICES,这些代码的内部逻辑可能仍会绕过这个设置。

实战举例

报错背景

实验室服务器有多张显卡,但今天“0”卡显存已被占满,因此在代码中添加os.environ['CUDA_VISIBLE_DEVICES']=“2”指定使用编号为"2"的显卡(显存够的前提下)。但跑VGG16的时候却报错:
贼迷惑
经过调试发现os.environ['CUDA_VISIBLE_DEVICES']想要生效,import torch的位置需要放在指令os.environ['CUDA_VISIBLE_DEVICES']后面才行。

验证方案

利用torch.cuda.device_count()协助判断指令os.environ['CUDA_VISIBLE_DEVICES']="x" 是否生效

# 实验室服务器有8台GPU
# 选择调用其中三台
# torch.cuda.device_count(): 查看可用的GPU数量

# 实验1. 将import torch放在指令os.environ['CUDA_VISIBLE_DEVICES']="x"前面
import os
import torch
os.environ['CUDA_VISIBLE_DEVICES']='0, 1, 2' # 程序可见的GPU
print(torch.cuda.device_count())  # 8  说明指令没生效

# 实验2. 将import torch放在指令os.environ['CUDA_VISIBLE_DEVICES']="x"后面
import os
os.environ['CUDA_VISIBLE_DEVICES']='0, 1, 2' # 程序可见的GPU
import torch
print(torch.cuda.device_count())  # 3  说明指令生效

小结

上述验证实验表明,如果想要os.environ['CUDA_VISIBLE_DEVICES']起作用,需将import torch放在指令os.environ['CUDA_VISIBLE_DEVICES']="x"后面。

结尾

亲爱的读者,首先感谢抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见,因为这对我们来说意义非凡。
俗话说,当局者迷,旁观者清。的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。
如果您觉得我们的博文给您带来了启发,那么,希望能为我们点个免费的赞/关注您的支持和鼓励是我们持续创作的动力
请放心,我们会持续努力创作,并不断优化博文质量,只为给带来更佳的阅读体验。
再次感谢的阅读,愿我们共同成长,共享智慧的果实!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高斯小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值