PyTorch模型调试时GPU0报CUDA内存不足但显存充足的异常问题
解决CUDA_VISIBLE_DEVICES=0时显存不足报错的方案
1. 排查宿主机GPU 0的残留进程
容器内的nvidia-smi无法观测宿主机层面的进程占用,直接登录宿主机执行:
nvidia-smi -l
检查是否有未正常退出的进程(如遗留容器、后台服务)占用GPU 0显存,找到对应PID后用kill -9 <PID>终止,再重启容器测试。
2. 重置GPU 0硬件状态
若宿主机无占用进程,可能是GPU残留上下文导致显存异常,执行以下命令重置GPU 0(需root权限):
nvidia-smi --gpu-reset -i 0
重置完成后重启容器,再次测试CUDA_VISIBLE_DEVICES=0的场景。
3. 调整VSCode调试配置
VSCode调试时可能提前初始化CUDA上下文引发异常,修改launch.json添加CUDA_LAUNCH_BLOCKING=1环境变量,同时确保调试逻辑不预加载冗余组件:
{ "version": "0.2.0", "configurations": [ { "name": "Python: PyTorch Debug", "type": "python", "request": "launch", "program": "${file}", "env": { "CUDA_VISIBLE_DEVICES": "0", "CUDA_LAUNCH_BLOCKING": "1" }, "justMyCode": false } ] }
启用CUDA_LAUNCH_BLOCKING=1后,报错会显示准确的栈追踪,可定位具体显存分配失败的步骤。
4. 验证容器GPU映射完整性
进入容器执行以下命令,确认GPU 0的参数与其他GPU一致:
nvidia-smi --query-gpu=index,name,memory.total,memory.free --format=csv
若GPU 0参数异常,需重新创建容器时明确指定GPU设备,避免索引映射偏差:
docker run --gpus '"device=0,1,2,3"' [其他容器参数]
5. 测试GPU 0基础可用性
在容器内运行最小测试代码,排除模型本身问题:
import torch print(torch.cuda.is_available()) print(torch.cuda.device_count()) device = torch.device('cuda:0') x = torch.randn(1000, 1000).to(device) print(x.shape)
若该代码报错,需检查宿主机NVIDIA驱动版本与容器内CUDA版本是否匹配(驱动版本需≥容器内CUDA的最低要求)。
内容的提问来源于stack exchange,提问作者Carl Lu
相关产品推荐
相关产品推荐

