【引路帖】【使用GPU】使用os.environ[‘CUDA_VISIBLE_DEVICES‘]指定GPU无法生效解决方案

问题:os.environ[‘CUDA_VISIBLE_DEVICES‘]无法生效

参考链接:详解

tip:

当只使用一块GPU的时候,不管你设置的是服务器上的几号GPU,在代码运行中,都是当做GPU0
当使用多块GPU的时候,不管你设置的使用服务器上的哪几块GPU,在代码运行中,都是按照GPU0,GPU1…进行编号
例如:

CUDA_VISIBLE_DEVICES=2,0,3  只有编号为0,2,3的GPU对程序是可见的,但是在代码中gpu[0]指的是第2块儿
### 使用方法 `os.environ["CUDA_VISIBLE_DEVICES"] = opt.gpu` 通常用于在Python脚本中动态指定可见的GPU设备。这里的 `opt` 一般是一个包含命令行参数的对象,`opt.gpu` 表示用户通过命令行指定GPU设备编号。 示例代码如下: ```python import os import argparse # 创建命令行参数解析器 parser = argparse.ArgumentParser() parser.add_argument('--gpu', type=str, default='0', help='Specify visible GPU devices') opt = parser.parse_args() # 设置可见的GPU设备 os.environ["CUDA_VISIBLE_DEVICES"] = opt.gpu ``` 在上述代码中,首先使用 `argparse` 模块创建了一个命令行参数解析器,用户可以通过 `--gpu` 参数指定可见的GPU设备编号。然后将这个编号赋值给 `os.environ["CUDA_VISIBLE_DEVICES"]`,从而实现对可见GPU设备的动态设置。 ### 作用 `os.environ["CUDA_VISIBLE_DEVICES"] = opt.gpu` 的主要作用是限制当前程序可以使用GPU设备。当系统中有多个GPU设备时,通过设置这个环境变量,可以让程序只看到指定GPU设备,从而实现对GPU资源的分配和隔离。例如,当 `opt.gpu = '0,1'` 时,程序将只看到编号为0和1的GPU设备,其他GPU设备对该程序不可见。这在多用户共享服务器或者需要进行分布式训练时非常有用,可以避免不同程序之间的GPU资源冲突[^1]。 ### 可能的报错及解决方法 1. **`opt.gpu` 类型错误**:如果 `opt.gpu` 不是字符串类型,可能会导致报错。解决方法是确保 `opt.gpu` 是字符串类型,可以在赋值前进行类型转换,例如: ```python os.environ["CUDA_VISIBLE_DEVICES"] = str(opt.gpu) ``` 2. **GPU设备编号无效**:如果 `opt.gpu` 中指定GPU设备编号不存在,程序可能会报错。解决方法是在设置环境变量之前,先检查指定GPU设备编号是否有效。可以使用 `nvidia-smi` 命令查看系统中可用的GPU设备编号。 3. **环境变量设置时机错误**:如果在程序中已经初始化了CUDA相关的操作,再设置 `os.environ["CUDA_VISIBLE_DEVICES"]` 可能会无效。解决方法是在程序的顶部尽早设置该环境变量。理想情况下,该环境变量应设置在程序的顶部。如果在设置 `torch.backends.cudnn.benchmark` 之后调用 `CUDA_VISIBLE_DEVICES` 变量,则更改 `CUDA_VISIBLE_DEVICES` 变量将不起作用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值