镜像里执行 nvidia-smi 正常,跑训练脚本却报 CUDA 不可用,torch 版本是 GPU 版。
一开始怀疑是「镜像里的 CUDA 版本高于驱动支持」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。容器没有加 GPU 设备参数。另一种情况是运行时不是 nvidia 的容器运行时。
另外,环境变量限制了可见设备。
上来先启动容器时显式申请显卡
docker run --gpus all -it image_name bash
然后确认容器内能看到设备
docker run --gpus all image_name nvidia-smi -L
接着检查 torch 是否识别
python -c "import torch;print(torch.cuda.is_available(), torch.version.cuda)"
剩下的就是核对可见设备变量
python -c "import os;print(os.environ.get('CUDA_VISIBLE_DEVICES'))"
那几天正好在做别的变更,先把时间线对齐才敢动手。
改完先别撤,确认这几项。容器内 torch 能识别显卡并完成一次张量运算,训练正常开始,显存占用也会如实出现在显卡监控里,日志里不再出现 CUDA 不可用的警告。
设备挂载和运行库是两件事,nvidia-smi 能用只说明设备可见,运行库不匹配时照样用不了 GPU,排查时优先核对 torch 编译时的 CUDA 版本。这类问题最好一次改到位,反复小改反而容易把原因搅混。