为什么显存空闲的GPU无法被PyTorch/TensorFlow调用还报显存不足?
无法使用空闲3号GPU的常见原因及排查方向
- 设备编号映射错误
多数深度学习框架会优先读取CUDA_VISIBLE_DEVICES环境变量的配置,该变量会重映射可见的CUDA设备编号。比如你全局设置了CUDA_VISIBLE_DEVICES=0,1,2,那么代码里写的cuda:3实际指向不存在的设备,或者会默认 fallback 到已占用的0号GPU,触发显存不足报错。可以在代码开头加入以下内容验证当前可见设备:import torch print(torch.cuda.device_count()) print([torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())]) - GPU设置了独占访问模式
部分场景下3号GPU可能被设置为独占进程模式,哪怕当前仅占用11MB显存,其他进程也无法申请该设备的资源。可以执行命令nvidia-smi -i 3 -q | grep "Compute Mode"查看模式,如果结果为Exclusive_Process则说明是独占模式,需要管理员权限修改为默认的Default模式。 - 显存碎片化/实际申请显存大于剩余可用
你看到的11MB占用是当前总占用值,但如果显存存在碎片化,没有连续的大块显存空间容纳你要加载的模型张量、batch数据,也会触发OOM。另外部分框架(比如TensorFlow 1.x/2.x默认模式)会预申请整块GPU的所有显存,只要有少量显存被其他进程占用就会直接申请失败。 - 代码设备指定错误
如果你仅在代码中写了device = torch.device("cuda")而没有指定具体编号cuda:3,框架会默认选择编号最靠前的可用GPU,如果0/1/2号GPU已经被占满,同样会抛出OOM错误。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

