当前位置: 首页 > news >正文

完整教程:Ubuntu 22.04 部署 CUDA 12.5 + NVIDIA 驱动 555 + Docker 容器化 GPU 环境

教程概述

目标

在 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
 
运行
 
 
 
 
sudo reboot
 

二、步骤 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
 
运行
 
 
 
 
nvidia-smi
 
 
预期输出
 
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.xCUDA 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
 
运行
 
 
 
 
nvcc -V
 
 
预期输出
 
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.04 Runtime + 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 driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:19:55_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build 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 配置 → 容器验证」的全流程,核心解决了:
 
  1. NVIDIA 590 版本依赖冲突问题(选择 555 稳定版);
  2. APT 源依赖混乱问题(离线安装 CUDA 12.5);
  3. Docker 无法识别 GPU 驱动问题(安装 nvidia-docker2);
  4. CUDA 镜像无 nvcc 问题(选择 devel 镜像)。
 
最终实现:
 
  • 宿主机:555 驱动 + CUDA 12.5 Toolkit,支持 CUDA 程序编译;
  • Docker 容器:无缝调用 GPU,运行 CUDA 12.5 开发 / 运行环境。
 
该环境可直接用于 CUDA 程序开发、深度学习训练、容器化 GPU 部署等场景。
http://www.jsqmd.com/news/135768/

相关文章:

  • 38、TCP网络编程
  • C#基础语言练习--排序列表、File文件读写操作、FileStream文件流、二进制数据读写操作
  • 鸿蒙应用开发之用户首选项(Preferences)使用
  • 在CentOS云服务器上安装LAMP(Linux, Apache, MySQL, PHP)环境
  • 别再盲目手写论文了!6款AI写论文工具,真实参考文献,AIGC率低至11%
  • 基于PLC的自动门控制系统设计感应门控制博图HMI仿真组态
  • gazebo栅格地图生成(ros1/ros2均可启用)
  • MTPA数值求解的两种方法
  • 我发现数据中心冷却成本骤降后来才知道是ACTN动态优化温控策略的隐藏技巧
  • 2025 核心DeepSeek推广公司大全 - 品牌2025
  • 日总结 44
  • Python 的类型提示(type hint)
  • ServiceWorker 通信
  • 鸿蒙应用开发之通过ListItemGroup、nestedScroll实现商城活动可折叠分组滚动效果
  • 推出新型面向 AI 加速器的高性能编程框架——PyPTO
  • Java计算机毕设之基于springboot的公司财务预算管理系统财务收支管理 收入/支出记录(完整前后端代码+说明文档+LW,调试定制等)
  • VMware替代 | ZStack Cloud与NSX二层三层网络对比分析
  • 2025 年公众号排版软件怎么选?6 款主流编辑器真实横评
  • 18.0环实现线程和进程的监控(ObRegisterCallbacks函数)-Windows驱动
  • Dockerfile
  • 【Linux】进程控制(2)进程等待
  • 硬件有限,如何部署“大”模型?AMCT模型压缩工具3步解忧
  • 有关LangChain
  • 软件工程学习日志2025.12.24
  • 52、卷积层(填充paddinng)
  • 用NLMS实现对语音的回声的消除,共4个文件,语音原声,语音回声,NLMS的实现
  • 【毕业设计】基于springboot的公司财务预算管理系统(源码+文档+远程调试,全bao定制等)
  • 乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
  • 49、图像的相关知识
  • 基于VMD分解算法的信号处理与故障诊断:程序化实现及数据预测分类研究