摘要: 本文旨在帮助开发者和研究人员在 Ubuntu 24.04 LTS (Noble Numbat) 系统上,从零开始成功安装 NVIDIA 显卡驱动、CUDA Toolkit 12.5 以及配置 NVIDIA Container Toolkit,从而使 Docker 容器能够利用 GPU 的强大算力。适用于深度学习、机器学习、高性能计算等领域的用户。
前言
随着 Ubuntu 24.04 LTS 的发布,许多需要进行 GPU 加速计算的开发者都希望能够在这个最新的长期支持版本上搭建自己的开发环境。NVIDIA 显卡驱动是基础,CUDA 是连接硬件和上层计算框架(如 PyTorch, TensorFlow)的桥梁,而 NVIDIA Container Toolkit 则是实现容器化 GPU 应用的关键。
第一步:环境准备与清理
在开始安装之前,强烈建议先将系统中可能存在的旧版本 NVIDIA 驱动彻底卸载,以避免潜在的冲突。
打开终端(快捷键 Ctrl+Alt+T),执行以下命令:
sudo apt update
sudo apt-get --purge remove '*nvidia*'
sudo apt-get autoremove
sudo apt-get autoclean
执行完毕后,最好重启一下系统,确保所有旧的驱动模块都已被卸载。
sudo reboot
重启后,你可以通过 lspci 命令确认你的 NVIDIA 显卡型号,确保硬件被系统正确识别。
lspci | grep -i nvidia
你会看到类似下面的输出,显示你的显卡型号(例如 NVIDIA Corporation GA102 [GeForce RTX 3090])。
第二步:添加 NVIDIA CUDA 官方软件源
为了确保我们安装的是最新且最匹配的驱动和 CUDA 版本,最佳实践是使用 NVIDIA 官方提供的软件源。
更新软件包列表完成上述步骤后,再次更新你的 apt 软件包列表,以加载新的 CUDA 软件源。
sudo apt-get update
添加 CUDA 软件源
wget https://developer.download.nvidia.com/compute/cuda/12.5.1/local_installers/cuda-repo-ubuntu2404-12-5-local_12.5.1-555.42.06-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-12-5-local_12.5.1-555.42.06-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
下载并添加官方源的 GPG 密钥
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
第三步:安装 NVIDIA 驱动和 CUDA Toolkit
现在,我们可以直接通过 apt 来安装 CUDA Toolkit。一个好消息是,安装 cuda-toolkit 会自动处理其依赖关系,将最匹配的 NVIDIA 驱动一并安装上。
sudo apt-get -y install cuda-toolkit-12-5
安装完成后,再次重启系统以加载新的内核模块和驱动。
sudo reboot
第四步:配置系统环境变量
为了让系统能够在任何路径下都能找到 CUDA 的可执行文件(如 nvcc)和库文件,我们需要配置 PATH 和 LD_LIBRARY_PATH 环境变量。
PATH 变量用于指定可执行文件的搜索路径。
LD_LIBRARY_PATH 变量用于指定动态链接库的搜索路径。
${VAR:+:${VAR}} 是一种安全的写法,表示如果 VAR 变量已存在且非空,则在其前面添加一个冒号,否则不加,避免路径开头出现多余的冒号。
编辑 ~/.bashrc 文件
使用你喜欢的文本编辑器(如 nano 或 vim)打开 ~/.bashrc 文件。
nano ~/.bashrc
在文件末尾添加以下内容
export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使配置立即生效
保存并关闭文件后,执行以下命令让配置立即生效。
source ~/.bashrc
第五步:验证驱动和 CUDA 安装
现在是激动人心的验证环节!
验证 CUDA Toolkit
执行 nvcc -V 或 nvcc --version 命令,检查 CUDA 编译器的版本。
nvcc -V
如果安装成功,你会看到类似下面的输出,确认 CUDA Toolkit 12.5 已安装。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Mar_19_18:45:25_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34174849_0
验证 NVIDIA 驱动
执行 nvidia-smi 命令。
nvidia-smi
如果一切正常,你将看到一个表格,详细列出了你的 GPU 型号、驱动版本、CUDA 版本以及 GPU 的实时状态(温度、功耗、显存使用情况等)。
第六步:安装和配置 NVIDIA Container Toolkit
为了让 Docker 容器能够使用 GPU,我们需要安装 NVIDIA Container Toolkit。
设置 GPG 密钥和软件源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
更新软件包列表并安装
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
配置 Docker 守护进程
安装完成后,我们需要配置 Docker,让它知道如何使用 NVIDIA 运行时。
sudo nvidia-ctk runtime configure --runtime=docker
重启 Docker 服务
应用新的配置,需要重启 Docker 守护进程。
sudo systemctl restart docker
第七步:最终测试——在 Docker 容器中访问 GPU
最后一步,我们来验证一下 Docker 容器是否真的能调用到 GPU 资源。
我们将运行一个官方的 CUDA 基础镜像,并在容器内部执行 nvidia-smi。
sudo docker run --rm --gpus all nvidia/cuda:12.5.1-base-ubuntu22.04 nvidia-smi
如果命令成功执行,并且在容器的输出中看到了和主机上一样的 nvidia-smi 表格,那么恭喜你!整个环境已经完美搭建成功!
总结与常见问题
通过以上七个步骤,我们成功地在 Ubuntu 24.04 LTS 系统上完成了 NVIDIA 驱动、CUDA Toolkit 12.5 以及 NVIDIA Container Toolkit 的安装和配置。现在,你的系统已经准备就绪,可以投入到激动人心的 AI 开发和深度学习研究中去了。
常见问题 (FAQ):
- Q: 安装过程中提示
Secure Boot 相关问题怎么办?
- A: NVIDIA 驱动是第三方内核模块,需要在 BIOS/UEFI 中禁用安全启动 (Secure Boot) 才能正常加载。请重启电脑进入 BIOS 设置,找到
Secure Boot 选项并将其设置为 Disabled。
- Q:
nvidia-smi 命令找不到?
- A: 最大的可能是环境变量没有配置正确或没有生效。请检查
~/.bashrc 文件中的路径是否正确(特别是 CUDA 版本号),然后执行 source ~/.bashrc。如果还不行,请检查 /usr/local/ 目录下 CUDA 的实际安装路径。
- Q: Docker 测试时报错
docker: Error response from daemon: ...?
- A: 确保
nvidia-container-toolkit 已正确安装,并且 sudo systemctl restart docker 命令已成功执行。检查 Docker 服务的状态 (sudo systemctl status docker) 看是否有错误信息。