努力
加油

使用NVIDIA显卡进行深度学习训练,推荐Ubuntu 20.04还是22.04?

直接给结论:首选 Ubuntu 22.04 LTS。

除非你有极其特殊的“历史包袱”(比如必须跑某些只支持 Python 3.8 且无法升级的老旧商业软件),否则在 2024 年及以后,Ubuntu 22.04 是更优解。

下面从驱动兼容性、内核特性、CUDA 生态和实际踩坑经验四个维度,把为什么选 22.04 讲清楚。

1. NVIDIA 驱动与内核版本的匹配度

这是最核心的考量因素。NVIDIA 闭源驱动对 Linux 内核版本非常敏感。

  • Ubuntu 20.04:默认内核通常是 5.4 或 5.15(取决于 HWE 栈)。虽然稳定,但较老的内核意味着你很难用到最新的 PCIe 带宽优化、更好的电源管理策略以及针对新显卡架构(如 Ada Lovelace RTX 40 系列)的底层支持。
  • Ubuntu 22.04:默认内核是 5.15,HWE 更新后可到 6.2+。更重要的是,NVIDIA 官方推荐的最新驱动(如 535.xx, 550.xx 系列)对 5.15 及以上内核的支持更加完善。如果你买的是 RTX 4090 或 A100/H100 等较新硬件,强行在 20.04 上安装最新驱动往往需要手动编译 DKMS,或者只能降级使用旧版驱动,这反而增加了维护成本和不稳定性。

2. CUDA Toolkit 与 PyTorch/TensorFlow 的版本迭代

深度学习框架更新极快,而它们对 CUDA 版本的依赖也日益严格。

  • PyTorch 现状:目前主流版本(2.x)默认推荐 CUDA 11.8 或 12.1+。这些版本的预编译 wheel 包在较新的 glibc 环境下运行更顺畅。
  • glibc 差异:Ubuntu 22.04 使用的是 glibc 2.35,而 20.04 是 2.31。很多现代 AI 库(如 xFormers, FlashAttention 的二进制依赖)开始倾向于基于更新的 glibc 编译。在 20.04 上,你可能会遇到 libstdc++.so.6 或 libc.so.6 版本过低的报错,需要手动安装额外的兼容库,甚至出现动态链接库冲突导致训练中途崩溃。
  • Docker 镜像支持:NVIDIA 官方 Docker 镜像(nvidia/cuda)现在主要维护基于 Ubuntu 22.04 (Jammy) 的基础镜像。如果你在容器化部署中混用 20.04,可能会发现拉取到的镜像层变多,或者需要自己折腾 base image,增加运维复杂度。

3. 硬件支持与长周期稳定性

  • 新卡支持:如果你用的是 RTX 30/40 系列或 A100/A800/H800,22.04 的内核模块对这些卡的 ACPI 表、PCIe 配置空间解析更好。
  • LTS 生命周期:两者都是 LTS,支持周期都很长(标准支持 5 年,ESM 更长)。但在社区活跃度上,22.04 已经过了初期的磨合期,现在的 bug 修复频率和第三方软件适配度远高于刚发布时的 20.04。

4. 什么情况下才考虑 Ubuntu 20.04?

只有以下几种极端情况,我才建议回退到 20.04:

  1. 遗留业务锁定:公司内部的某个核心推理服务或训练脚本,明确声明只支持 Python 3.8 及以下,且代码量巨大,重构成本极高。22.04 默认 Python 是 3.10,虽然可以装低版本,但环境隔离会更麻烦。
  2. 特定科研集群规范:你所在的实验室或超算中心统一规定所有节点必须为 20.04,为了保持环境一致性,不得不跟随。
  3. 极度老旧的专有软件:某些工业界专用的仿真软件或编译器,厂商明确表示不支持 5.15 以上内核。

实操建议

如果你决定用 22.04,为了避免常见的“驱动-内核-CUDA”三角坑,建议按以下步骤操作:

  1. 安装系统时:勾选 "Install third-party software for graphics and Wi-Fi hardware"(确保能自动加载闭源驱动)。
  2. 禁用 Nouveau:在安装 NVIDIA 驱动前,务必在 /etc/modprobe.d/blacklist-nouveau.conf 中禁用开源驱动,并执行 sudo update-initramfs -u。
  3. 驱动安装方式:
    • 推荐:使用 ubuntu-drivers autoinstall 或者去 NVIDIA 官网下载 .run 文件安装指定版本(如 535 或 550)。
    • 不推荐:直接用 apt install nvidia-driver-xxx,因为 apt 源里的驱动版本可能滞后,导致无法发挥新卡性能。
  4. CUDA 安装:
    • 不要通过 apt 安装 CUDA,容易版本混乱。
    • 去 NVIDIA 开发者网站下载对应的 Runfile 安装包,注意取消勾选 "Driver" 选项(因为你已经装了驱动),只安装 Toolkit 和 Samples。
    • 配置环境变量 PATH 和 LD_LIBRARY_PATH,写入 ~/.bashrc。

总结

对于绝大多数个人开发者、初创团队和企业用户,Ubuntu 22.04 是当前的最佳实践。它在内核对新硬件的支持、CUDA 生态的兼容性以及开发工具链的现代性上都优于 20.04。除非你有明确的反向约束,否则别回头。