CUDA 编程&工具
参考资料
- Tutorial 01: Say Hello to CUDA - CUDA Tutorial (cuda-tutorial.readthedocs.io)
- 北京大学高性能计算平台 (pku.edu.cn)
docker cuda
问题描述:
在 Docker 中使用 GPU 时遇到驱动版本冲突问题,具体表现如下:
- 官方镜像正常工作:
使用nvcr.io/nvidia/cuda:12.8.0-base-ubuntu22.04+--gpus all时,nvidia-smi能正确显示 CUDA 版本,PyTorch 可调用 GPU。 - 自定义镜像异常:
基于ubuntu:22.04自建镜像时,nvidia-smi显示 CUDA 版本为N/A,PyTorch 报错No GPU driver found。若在镜像内手动安装驱动,则出现NVML driver/library version mismatch(宿主机驱动版本与容器内不一致)。 - 疑问:
- 为何 NVIDIA 官方镜像无需安装驱动(
apt list无nvidia-driver)却能工作? - 如何解决自定义镜像的驱动版本冲突?强制对齐宿主机和容器内驱动的小版本难度大,是否有通用方案?
1. 官方镜像为何无需安装驱动?
NVIDIA 官方镜像(如 nvcr.io/nvidia/cuda)通过 NVIDIA Container Toolkit 实现 GPU 透传,其核心机制为:
- 挂载宿主机驱动库:容器启动时,自动挂载宿主机侧的 NVIDIA 驱动库(如
libcuda.so、libnvidia-ptxjitcompiler.so)到容器内的/usr/local/nvidia/lib64。 - 环境变量配置:镜像内已设置
LD_LIBRARY_PATH,优先加载挂载的宿主机驱动库,而非容器内自带的库。
查看 nvidia/cuda 镜像的 layer:Image Layer Details - nvidia/cuda:12.8.0-cudnn-devel-ubuntu22.04 | Docker Hub
其中确实大量设置了
然后容器内该目录却并不存在。不过通过 locate libcuda.so 发现确实和自己的镜像不同
➜ ~ dpkg -S /usr/lib/x86_64-linux-gnu/libcuda.so.535.183.01
libnvidia-compute-535:amd64: /usr/lib/x86_64-linux-gnu/libcuda.so.535.183.01
CUDA 安装
总结:
- 最简单方式是看 cuda 下载页面提供的安装命令
- deb 安装貌似无法只安装 cuda,不安装驱动
- runfile 安装可以做到不重启
- cuda-toolkit-12-1 包含 cuda
- nvidia-driver-530 包含驱动


.png)