教程概述
目标
在 Ubuntu 22.04 系统中,完成「NVIDIA 555 驱动(原生支持 CUDA 12.5)+ CUDA 12.5 Toolkit + NVIDIA Container Toolkit」全环境部署,实现宿主机 / 容器双端 CUDA 12.5 开发 / 运行能力,解决版本冲突、依赖断裂、Docker 识别 GPU 等核心问题。环境基础
- 系统:Ubuntu 22.04 LTS (amd64)
- GPU:NVIDIA GeForce RTX 2080 Ti(适配 555 驱动,其他 GPU 通用)
- 最终目标:宿主机 nvcc -V 显示 12.5,Docker 容器运行 nvidia/cuda:12.5.0-devel-ubuntu22.04 并正常调用 GPU + nvcc
一、前置准备:清理旧环境(避免版本冲突)
1.1 卸载旧版本 NVIDIA 驱动 / CUDA
bash 运行 - # 彻底卸载所有 NVIDIA 相关包
- sudo apt purge -y nvidia-* libnvidia-* cuda-*
- # 清理残留依赖
- sudo apt autoremove -y --purge
- # 删除 DKMS 残留
- sudo rm -rf /usr/src/nvidia-*
- sudo dkms remove --all nvidia
- # 清空 CUDA 残留目录
- sudo rm -rf /usr/local/cuda*
复制代码 1.2 备份关键配置(可选)
bash 运行 - # 备份 apt 源和 Docker 配置
- sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 2>/dev/null
复制代码 1.3 重启系统(清空内核模块残留)
bash 运行 二、步骤 1:安装 NVIDIA 555 驱动(适配 CUDA 12.5)
555 是 NVIDIA 官方适配 CUDA 12.5 的稳定版,避开 590 版本的依赖冲突问题。2.1 添加 NVIDIA 官方源
bash 运行 - # 安装密钥和源
- wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
- sudo dpkg -i cuda-keyring_1.1-1_all.deb
- # 更新源
- sudo apt update
复制代码 2.2 安装 555 驱动(仅驱动,不装 CUDA 元包)
bash 运行 - # 安装 555 驱动(跳过推荐依赖,避免拉取 590 版本)
- sudo apt install -y nvidia-driver-555 --no-install-recommends
- # 重启系统使驱动生效
- sudo reboot
复制代码 2.3 验证驱动安装
bash 运行 预期输出: plaintext - +-----------------------------------------------------------------------------------------+
- | NVIDIA-SMI 555.42.06 Driver Version: 555.42.06 CUDA Version: 12.5 |
- |-----------------------------------------+------------------------+----------------------+
- | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
- | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
- | | | MIG M. |
- |=========================================+========================+======================|
- | 0 NVIDIA GeForce RTX 2080 Ti Off | 00000000:01:00.0 Off | N/A |
- | 34% 46C P8 25W / 260W | 1MiB / 22528MiB | 0% Default |
- +-----------------------------------------+------------------------+----------------------+
复制代码 核心验证点:Driver Version: 555.x、CUDA Version: 12.5。三、步骤 2:离线安装 CUDA 12.5 Toolkit(绕开 APT 依赖冲突)
通过 NVIDIA 官方离线 .run 包安装,避免 APT 源依赖混乱(核心解决 590 版本冲突问题)。3.1 下载 CUDA 12.5 离线包
bash 运行 - # 创建临时目录
- mkdir -p ~/cuda125 && cd ~/cuda125
- # 下载最新 CUDA 12.5 离线包(适配 Ubuntu 22.04)
- wget https://developer.download.nvidia.com/compute/cuda/12.5.1/local_installers/cuda_12.5.1_555.42.06_linux.run
- # 赋予执行权限
- chmod +x cuda_12.5.1_555.42.06_linux.run
复制代码 3.2 静默安装 CUDA 12.5 Toolkit(仅装工具包,不装驱动)
bash 运行 - # 关键参数:--toolkit 仅装工具包,--driver false 跳过驱动(已手动装 555)
- sudo ./cuda_12.5.1_555.42.06_linux.run --silent --toolkit --driver false --toolkitpath=/usr/local/cuda-12.5
复制代码 3.3 配置 CUDA 环境变量(永久生效)
bash 运行 - # 写入当前用户环境变量
- echo -e "\n# CUDA 12.5 环境变量" >> ~/.bashrc
- echo "export CUDA_HOME=/usr/local/cuda-12.5" >> ~/.bashrc
- echo "export PATH=\$CUDA_HOME/bin:\$PATH" >> ~/.bashrc
- echo "export LD_LIBRARY_PATH=\$CUDA_HOME/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc
- # 加载环境变量
- source ~/.bashrc
- # (可选)配置系统级环境变量(所有用户生效)
- sudo echo -e "\n# CUDA 12.5 系统环境变量" >> /etc/profile
- sudo echo "export CUDA_HOME=/usr/local/cuda-12.5" >> /etc/profile
- sudo echo "export PATH=\$CUDA_HOME/bin:\$PATH" >> /etc/profile
- sudo echo "export LD_LIBRARY_PATH=\$CUDA_HOME/lib64:\$LD_LIBRARY_PATH" >> /etc/profile
- sudo source /etc/profile
复制代码 3.4 验证 CUDA Toolkit 安装
bash 运行 预期输出: plaintext - nvcc: NVIDIA (R) Cuda compiler driver
- Copyright (c) 2005-2024 NVIDIA Corporation
- Built on Thu_Jun__6_02:18:23_PDT_2024
- Cuda compilation tools, release 12.5, V12.5.82
- Build cuda_12.5.r12.5/compiler.34385749_0
复制代码 核心验证点:release 12.5。四、步骤 3:配置 NVIDIA Container Toolkit(Docker 调用 GPU)
4.1 安装 nvidia-docker2(核心组件,解决 Docker 识别 GPU 问题)
bash 运行 - # 添加 NVIDIA Container Toolkit 源
- curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
- distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
- curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- # 更新源并安装 nvidia-docker2
- sudo apt update
- sudo apt install -y nvidia-docker2
复制代码 4.2 配置 Docker 守护进程(加载 NVIDIA 运行时)
bash 运行 - # 覆盖/生成正确的 daemon.json 配置
- sudo echo '{
- "ipv6": false,
- "registry-mirrors": ["http://docker.882286.xyz"],
- "runtimes": {
- "nvidia": {
- "path": "/usr/bin/nvidia-container-runtime",
- "runtimeArgs": []
- }
- }
- }' > /etc/docker/daemon.json
- # 重启 Docker 服务
- sudo systemctl daemon-reload
- sudo systemctl restart docker
复制代码 4.3 验证 Docker 运行时配置
bash 运行 - sudo docker info | grep -i runtime
复制代码 预期输出: plaintext - Runtimes: io.containerd.runc.v2 nvidia runc
- Default Runtime: runc
复制代码 核心验证点:nvidia 出现在 Runtimes 列表中。五、步骤 4:验证 Docker 容器运行 CUDA 12.5
5.1 关键说明:CUDA 镜像选择
镜像标签包含组件是否有 nvcc用途12.5.0-base-ubuntu22.04仅 CUDA Runtime❌ 无运行已编译的 CUDA 程序12.5.0-devel-ubuntu22.04Runtime + Toolkit(含 nvcc)✅ 有开发 / 编译 CUDA 程序5.2 运行 CUDA 12.5 开发镜像(验证 nvcc + GPU)
bash 运行 - # 运行 devel 镜像,验证 nvcc 和 GPU 识别
- sudo docker run --rm --gpus all nvidia/cuda:12.5.0-devel-ubuntu22.04 bash -c "nvcc -V && echo '---' && nvidia-smi"
复制代码 预期输出: plaintext - nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2024 NVIDIA CorporationBuilt on Wed_Apr_17_19:19:55_PDT_2024Cuda compilation tools, release 12.5, V12.5.40Build cuda_12.5.r12.5/compiler.34080961_0---+-----------------------------------------------------------------------------------------+
- | NVIDIA-SMI 555.42.06 Driver Version: 555.42.06 CUDA Version: 12.5 |
- |-----------------------------------------+------------------------+----------------------+
- | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
- | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
- | | | MIG M. |
- |=========================================+========================+======================|
- | 0 NVIDIA GeForce RTX 2080 Ti Off | 00000000:01:00.0 Off | N/A |
- | 34% 46C P8 25W / 260W | 1MiB / 22528MiB | 0% Default |
- +-----------------------------------------+------------------------+----------------------+
复制代码 六、常见问题与解决方案
问题 1:Docker 报错 could not select device driver "" with capabilities: [[gpu]]
- 原因:缺少 nvidia-docker2 组件,Docker 无法识别 GPU 驱动。
- 解决:重新安装 nvidia-docker2(参考步骤 4.1),重启 Docker。
问题 2:容器内报错 exec: "nvcc": executable file not found in $PATH
- 原因:使用了 base 镜像(无 nvcc),仅 devel 镜像包含编译器。
- 解决:改用 nvidia/cuda:12.5.0-devel-ubuntu22.04 镜像。
问题 3:安装驱动时出现 590 版本依赖冲突
- 原因:APT 源自动拉取 590 版本,与 555 冲突。
- 解决:清理 590 缓存(sudo rm -f /var/cache/apt/archives/*590*.deb),通过 apt-preferences 锁定 555 版本。
问题 4:CUDA 安装时报 --no-driver 未知参数
- 原因:CUDA 12.x 离线包参数调整,--no-driver 改为 --driver false。
- 解决:使用 --silent --toolkit --driver false 参数(参考步骤 3.2)。
七、总结
本教程完成了从「环境清理 → 驱动升级 → CUDA 安装 → Docker 配置 → 容器验证」的全流程,核心解决了:
- NVIDIA 590 版本依赖冲突问题(选择 555 稳定版);
- APT 源依赖混乱问题(离线安装 CUDA 12.5);
- Docker 无法识别 GPU 驱动问题(安装 nvidia-docker2);
- CUDA 镜像无 nvcc 问题(选择 devel 镜像)。
最终实现:
- 宿主机:555 驱动 + CUDA 12.5 Toolkit,支持 CUDA 程序编译;
- Docker 容器:无缝调用 GPU,运行 CUDA 12.5 开发 / 运行环境。
该环境可直接用于 CUDA 程序开发、深度学习训练、容器化 GPU 部署等场景。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |