Ubuntu 24.04 LTS 保姆级教程:安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包

Ubuntu 24.04 LTS 保姆级教程:安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包

摘要: 本文为一篇详尽的指南,旨在帮助开发者和研究人员在最新的 Ubuntu 24.04 LTS (Noble Numbat) 系统上,从零开始成功安装 NVIDIA 显卡驱动、CUDA Toolkit 12.5 以及配置 NVIDIA Container Toolkit,从而使 Docker 容器能够利用 GPU 的强大算力。本文适用于深度学习、机器学习、高性能计算等领域的用户。

目录

  1. 前言
  2. 第一步:环境准备与清理
  3. 第二步:添加 NVIDIA CUDA 官方软件源
  4. 第三步:安装 NVIDIA 驱动和 CUDA Toolkit
  5. 第四步:配置系统环境变量
  6. 第五步:验证驱动和 CUDA 安装
  7. 第六步:安装和配置 NVIDIA Container Toolkit
  8. 第七步:最终测试——在 Docker 容器中访问 GPU
  9. 总结与常见问题

前言

随着 Ubuntu 24.04 LTS 的发布,许多需要进行 GPU 加速计算的开发者都希望能够在这个最新的长期支持版本上搭建自己的开发环境。NVIDIA 显卡驱动是基础,CUDA 是连接硬件和上层计算框架(如 PyTorch, TensorFlow)的桥梁,而 NVIDIA Container Toolkit 则是实现容器化 GPU 应用的关键。

本文将手把手带你走完整个安装流程,确保每一步都清晰明了,避免踩坑。

第一步:环境准备与清理

在开始安装之前,强烈建议先将系统中可能存在的旧版本 NVIDIA 驱动彻底卸载,以避免潜在的冲突。

打开终端(快捷键 Ctrl+Alt+T),执行以下命令:

# 更新软件包列表 sudo apt update # 卸载所有与 nvidia 相关的软件包 sudo apt-get --purge remove '*nvidia*' sudo apt-get autoremove sudo apt-get autoclean 

执行完毕后,最好重启一下系统,确保所有旧的驱动模块都已被卸载。

sudo reboot 

重启后,你可以通过 lspci 命令确认你的 NVIDIA 显卡型号,确保硬件被系统正确识别。

# 查看 PCI 设备列表,并筛选出 NVIDIA 相关的设备 lspci | grep -i nvidia 

你会看到类似下面的输出,显示你的显卡型号(例如 NVIDIA Corporation GA102 [GeForce RTX 3090])。

第二步:添加 NVIDIA CUDA 官方软件源

为了确保我们安装的是最新且最匹配的驱动和 CUDA 版本,最佳实践是使用 NVIDIA 官方提供的软件源。

更新软件包列表完成上述步骤后,再次更新你的 apt 软件包列表,以加载新的 CUDA 软件源。

sudo apt-get update 

添加 CUDA 软件源

# 下载 CUDA for Ubuntu 24.04 的仓库配置文件 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 # 使用 dpkg 安装该仓库配置文件 sudo dpkg -i cuda-repo-ubuntu2404-12-5-local_12.5.1-555.42.06-1_amd64.deb # 从本地仓库中提取 GPG 密钥并添加到系统的信任列表 sudo cp /var/cuda-repo-ubuntu2404-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/ 

下载并添加官方源的 GPG 密钥

# 下载官方的 .pin 文件,用于指定仓库优先级 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin # 将 .pin 文件移动到 apt 的偏好设置目录 sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 

第三步:安装 NVIDIA 驱动和 CUDA Toolkit

现在,我们可以直接通过 apt 来安装 CUDA Toolkit。一个好消息是,安装 cuda-toolkit 会自动处理其依赖关系,将最匹配的 NVIDIA 驱动一并安装上。

# 安装 CUDA Toolkit 12.5 # 这个过程会下载并安装驱动、CUDA 核心组件等,可能需要一些时间 sudo apt-get -y install cuda-toolkit-12-5 

安装完成后,再次重启系统以加载新的内核模块和驱动。

sudo reboot 

第四步:配置系统环境变量

为了让系统能够在任何路径下都能找到 CUDA 的可执行文件(如 nvcc)和库文件,我们需要配置 PATHLD_LIBRARY_PATH 环境变量。

    • PATH 变量用于指定可执行文件的搜索路径。
    • LD_LIBRARY_PATH 变量用于指定动态链接库的搜索路径。
    • ${VAR:+:${VAR}} 是一种安全的写法,表示如果 VAR 变量已存在且非空,则在其前面添加一个冒号,否则不加,避免路径开头出现多余的冒号。

使配置立即生效保存并关闭文件后,执行以下命令让配置立即生效。

source ~/.bashrc 

在文件末尾添加以下内容

# NVIDIA CUDA Toolkit Environment Variables 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}} 

说明:

编辑 ~/.bashrc 文件使用你喜欢的文本编辑器(如 nanovim)打开 ~/.bashrc 文件。

nano ~/.bashrc 

第五步:验证驱动和 CUDA 安装

现在是激动人心的验证环节!

验证 CUDA Toolkit执行 nvcc -Vnvcc --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。

重启 Docker 服务应用新的配置,需要重启 Docker 守护进程。

sudo systemctl restart docker 

配置 Docker 守护进程安装完成后,我们需要配置 Docker,让它知道如何使用 NVIDIA 运行时。

sudo nvidia-ctk runtime configure --runtime=docker 

更新软件包列表并安装

sudo apt-get update sudo apt-get install -y 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 

第七步:最终测试——在 Docker 容器中访问 GPU

最后一步,我们来验证一下 Docker 容器是否真的能调用到 GPU 资源。

我们将运行一个官方的 CUDA 基础镜像,并在容器内部执行 nvidia-smi

# --gpus all 参数是关键,它告诉 Docker 为该容器分配所有可用的 GPU 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) 看是否有错误信息。

希望这篇博客能对你有所帮助!如果你在安装过程中遇到任何问题,欢迎在评论区留言交流。

Read more

[linux仓库]线程与进程的较量:资源划分与内核实现的全景解析[线程·贰]

[linux仓库]线程与进程的较量:资源划分与内核实现的全景解析[线程·贰]

🌟 各位看官好,我是egoist2023! 🌍 Linux == Linux is not Unix ! 🚀 今天来学习Linux的指令知识,并学会灵活使用这些指令。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享更多人哦! 目录 Linux线程控制 多线程角度理解资源"划分" 可执行程序角度理解资源"划分" 进程 vs 线程 线程背景 Linux多线程的实现 -- 内核角度 pthread库 进程vs线程, 线程其他理论话题 面试题 线程优点 线程缺点 线程异常 线程用途 哪些资源共享,哪些独占 进程和线程 进程的多个线程共享 总结 Linux线程控制 为了方便理解资源划分的本质,这里直接通过编写代码从实践再到理论. 多线程角度理解资源"划分" int

By Ne0inhk
【Linux系统编程】(三十五)揭秘 Linux 信号产生:从终端到内核全解析

【Linux系统编程】(三十五)揭秘 Linux 信号产生:从终端到内核全解析

前言         在 Linux 系统中,信号是进程间异步通信的 “信使”,而 “信号产生” 则是这个通信过程的起点。无论是我们熟悉的Ctrl+C终止进程,还是程序运行中出现的段错误、定时器超时,本质上都是信号被触发产生的过程。很多开发者只知道 “信号能终止进程”,却不清楚信号到底是怎么来的 —— 是用户操作触发的?还是系统自动产生的?不同场景下信号的产生机制有何不同?         本文将基于 Linux 内核原理,结合 5 种核心信号产生场景(终端按键、系统命令、函数调用、软件条件、硬件异常),用通俗的语言,带你全方位揭秘信号产生的底层逻辑,让你不仅 “知其然”,更 “知其所以然”。下面就让我们正式开始吧! 一、信号产生的核心本质:谁在 “发送” 信号?         在深入具体场景之前,我们先明确一个核心问题:信号是由谁产生并发送的?答案是操作系统(OS)。         无论信号的触发源头是用户按键、函数调用还是硬件异常,

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 bluez 玩转 Linux 风格的蓝牙操作(蓝牙底层互操作)

Flutter for OpenHarmony:Flutter 三方库 bluez 玩转 Linux 风格的蓝牙操作(蓝牙底层互操作)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 前言 随着鸿蒙(OpenHarmony)在工业互联网、智能座舱和物联网(IoT)领域的深入应用,与蓝牙设备的底层通信成为了许多开发者的刚需。在一些基于鸿蒙内核的特定工业版或车机版系统中,底层可能由于适配历史原因或分层设计,保留了类似 Linux 的 D-Bus 通信机制。 bluez 是一个专门用于与 Linux BlueZ 蓝牙协议栈通过 D-Bus 进行交互的 Dart 库。虽然对于普通的 HarmonyOS NEXT 手机开发我们通常使用官方的蓝牙插件,但在深度定制的鸿蒙发行版中,bluez 库为我们提供了一扇通往蓝牙底层控制的大门。 一、原理解析 / 概念介绍 1.1 基础概念 bluez 库并不直接操作蓝牙硬件,而是通过 D-Bus (Desktop Bus) 系统总线与系统级的蓝牙守护进程进行会话。 D-Bus

By Ne0inhk
Linux 动静态库完全指南:制作、使用、原理与实战

Linux 动静态库完全指南:制作、使用、原理与实战

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 库的基础认知:是什么?有哪些? * 1.1 库的本质 * 1.2 库的分类与系统位置 * 1.3 预备工作:自定义库源码 * 二. 静态库:编译时链接,独立运行 * 2.1 整体图示:理清思路 * 2.2 静态库制作流程(Makefile 自动化,更简便) * 2.3 静态库使用场景与命令 * 2.4 静态库核心特点 * 三. 动态库:运行时链接,

By Ne0inhk