GCloud K8s环境下Deep Learning容器中PyTorch无法识别GPU
GCloud Kubernetes集群PyTorch无法识别GPU故障排查
故障场景
- 运行环境:GCloud Kubernetes 集群,业务容器选用基础镜像
gcr.io/deeplearning-platform-release/pytorch-gpu/,框架为PyTorch - 故障表现:集群组件可正常启动,模型可完成全流程训练,但仅能调用CPU算力计算,GPU资源无法被调用
- 异常复现:在容器内执行PyTorch CUDA检查代码时,触发初始化报错
>>> import torch >>> torch.cuda.is_available() /opt/conda/lib/python3.7/site-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: CUDA driver initialization failed, you might not have a CUDA gpu. (Triggered internally at /opt/conda/conda-bld/pytorch_1614378098133/work/c10/cuda/CUDAFunctions.cpp:109.) return torch._C._cuda_getDeviceCount() > 0 False
基础校验信息
- 宿主机节点层面GPU状态正常,在节点上执行
nvidia-smi输出如下:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 | | N/A 62C P8 32W / 149W | 11MiB / 11441MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
- 容器内环境版本信息
>>> torch.__version__ '1.8.0' >>> torch.version.cuda '11.1'
故障根源
宿主机驱动版本与容器内PyTorch编译的CUDA版本不匹配
- 宿主机安装的NVIDIA驱动版本为418.67,官方支持的最高CUDA版本为10.1
- 容器内预装的PyTorch 1.8.0 是基于CUDA 11.1 编译的,该CUDA版本要求宿主机NVIDIA驱动版本最低不低于450.00
- 宿主机搭载的Tesla K80 显卡计算能力为3.7,本身也不在CUDA 11.1的官方支持列表范围内
- 版本跨度过大,导致容器内CUDA初始化流程无法和宿主机GPU驱动建立通信,最终触发识别失败
解决步骤
- 匹配对应版本的业务镜像:替换当前拉取的最新版PyTorch GPU镜像,选用适配宿主机418.x驱动、CUDA 10.1环境的固定版本镜像(对应PyTorch 1.7.1 版本,编译CUDA为10.2,属于418驱动可兼容的版本范围)
- 校验集群GPU设备插件配置:确认节点上的NVIDIA GPU Device DaemonSet 运行状态正常,已将宿主机的GPU设备文件、驱动动态库正确挂载到容器内部
- 容器内二次验证:替换镜像部署完成后,进入Pod执行
torch.cuda.is_available(),确认返回值为True,可正常执行GPU算力调度 - 长期适配方案:如果需要使用高版本CUDA的PyTorch特性,可将节点的NVIDIA驱动升级到对应支持版本,从底层消除版本错配问题
内容的提问来源于stack exchange,提问作者Shadesfear
相关产品推荐
相关产品推荐

