选 Ubuntu 版本做深度学习开发,核心逻辑就一条:不要追新,要追稳;不要看发行年份,要看 NVIDIA 驱动和 CUDA Toolkit 的官方支持列表。
很多新手容易陷入一个误区:觉得 Ubuntu 24.04 LTS 是最新的,肯定性能最好、兼容性最强。大错特错。在 AI 训练这个领域,“最新”往往意味着“踩坑”。NVIDIA 的闭源驱动和 CUDA/cuDNN 生态对内核版本有严格依赖,激进的新系统经常遇到驱动装不上、内核头文件缺失或者 cuDNN 报错的问题。
以下是基于国内主流云厂商(阿里云、腾讯云、华为云等)常见镜像以及本地部署经验的实操建议:
1. 首选推荐:Ubuntu 20.04 LTS 或 22.04 LTS
这是目前最稳妥的两个选择,覆盖了市面上 90% 以上的现成镜像和预配置环境。
-
Ubuntu 20.04 LTS (Focal Fossa)
- 适用场景:老旧项目迁移、需要运行较老版本的 TensorFlow/PyTorch(如 1.x 系列)、或者使用某些特定商业软件(如部分旧版 Ansys、Matlab)。
- 优点:极度稳定,社区资源海量,几乎所有旧的 Docker 镜像都基于此构建。
- 缺点:默认 GCC 版本较低(9.x),如果要用最新的 C++ 特性编译自定义算子,可能需要手动升级编译器。
-
Ubuntu 22.04 LTS (Jammy Jellyfish) —— 【当前最推荐】
- 适用场景:新项目启动、使用 PyTorch 2.x / TensorFlow 2.x、现代深度学习框架。
- 优点:
- 默认 GCC 11/12,对 C++17/20 支持更好,编译自定义 CUDA 算子更顺畅。
- NVIDIA 驱动支持极其完善,从 510.xx 到最新的 535/550 系列驱动都能完美兼容。
- 各大云厂商的“AI 提速型”实例默认镜像多为 22.04。
- 内核版本 5.15+,对 NVLink、PCIe Gen4/5 的支持比 20.04 更好。
2. 谨慎尝试:Ubuntu 24.04 LTS (Noble Numbat)
- 现状:虽然它是最新的 LTS,但在 AI 领域属于“早期阶段”。
- 风险点:
- 默认内核 6.8,虽然新,但 NVIDIA 专有驱动对其验证周期较长。如果你遇到
nvidia-smi无法识别 GPU 的情况,排查成本极高。 - 部分第三方库(如某些非官方的 Python 包)可能尚未提供针对 24.04 的预编译 wheel,导致你需要从头源码编译,耗时且易出错。
- 默认内核 6.8,虽然新,但 NVIDIA 专有驱动对其验证周期较长。如果你遇到
- 建议:除非你明确知道你的硬件(如 RTX 4090, H100)和软件栈完全支持 24.04,否则不建议生产环境直接使用。如果是个人学习探索,可以尝试,但请做好备份快照。
3. 绝对避免:Ubuntu 23.10 / 24.10 等非 LTS 版本
- 原因:非 LTS 版本生命周期短(仅 9 个月),且在内核更新上过于激进。深度学习环境依赖稳定的 ABI(应用程序二进制接口),频繁的内核更新会导致驱动失效、CUDA 运行时错误。对于服务器环境,稳定性高于一切。
关键配套组件版本对照表(避坑指南)
选好 Ubuntu 后,必须匹配正确的 CUDA 和 cuDNN 版本。记住:CUDA 版本向下兼容驱动,但不向上兼容旧驱动;cuDNN 必须与 CUDA 版本严格对应。
| Ubuntu 版本 | 推荐 CUDA 版本 | 推荐 cuDNN 版本 | 说明 |
|---|---|---|---|
| 22.04 LTS | 12.2 或 12.4 | 8.9+ | 当前主流。PyTorch 2.3+ 默认支持 CUDA 12.1/12.4。NVIDIA 驱动建议 ≥ 535.xx |
| 22.04 LTS | 11.8 | 8.6+ | 适合需要兼容旧版 TF 1.x 或特定老项目的场景 |
| 20.04 LTS | 11.3 或 11.8 | 8.2+ | 经典组合,适合遗留系统维护 |
注意:NVIDIA 官方文档明确指出,CUDA Toolkit 的安装依赖于主机上的 NVIDIA 驱动版本。例如,安装 CUDA 12.4 要求 NVIDIA 驱动至少为 550.xx 以上。因此,先装驱动,再装 CUDA 是铁律。
实操步骤建议(以 Ubuntu 22.04 + CUDA 12.4 为例)
-
创建实例时选择镜像:
- 在国内云厂商控制台,搜索“深度学习”、“AI 提速”或“GPU”相关镜像。通常会直接预装好 NVIDIA 驱动和基础 CUDA 环境。
- 如果选择“公共镜像”,务必选择 Ubuntu Server 22.04 LTS。
-
检查显卡驱动:
nvidia-smi如果能正常显示 GPU 信息、驱动版本号和 CUDA Version(注意:这里是驱动支持的最高 CUDA 版本,不是已安装的 CUDA Toolkit 版本),则驱动安装成功。
-
安装 CUDA Toolkit:
- 强烈建议使用 runfile 或 local repo 方式安装指定版本,而不是通过 apt 安装默认版本。因为 apt 安装的往往是过时的版本。
- 去 NVIDIA CUDA Archive 下载对应
.run文件。 - 安装时注意勾选
Driver选项?不!如果你已经通过nvidia-smi确认驱动正常,千万不要在安装 CUDA 时再次安装驱动,否则会覆盖现有驱动导致黑屏或无法登录。只选Toolkit和Samples。
-
安装 cuDNN:
- 去 NVIDIA cuDNN Archive 下载与 CUDA 12.4 匹配的 cuDNN 库(通常是
.deb或.tar包)。 - 解压后将头文件和库文件复制到
/usr/local/cuda对应目录下。 - 验证:编写一个简单的 C 程序调用
cudnnGetVersion()并编译运行,或通过 Python 的torch.backends.cudnn.is_available()检查。
- 去 NVIDIA cuDNN Archive 下载与 CUDA 12.4 匹配的 cuDNN 库(通常是
-
设置环境变量:
在~/.bashrc中添加:export PATH=/usr/local/cuda-12.4/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}然后执行
source ~/.bashrc。
常见陷阱与排错
-
问题:
nvidia-smi能看,但nvcc --version报错或找不到命令。- 解决:环境变量没生效,或者 CUDA 安装路径不对。检查
/usr/local/cuda是否是软链接指向正确版本。
- 解决:环境变量没生效,或者 CUDA 安装路径不对。检查
-
问题:Python 中
import torch报错libcudart.so.12.0: cannot open shared object file。- 解决:CUDA 库路径未加入
LD_LIBRARY_PATH。确保上面第 5 步的环境变量设置正确,并使用ldconfig刷新缓存。
- 解决:CUDA 库路径未加入
-
问题:编译自定义算子时报错
GCC version mismatch。- 解决:Ubuntu 22.04 默认 GCC 11/12,而 CUDA 12.x 要求 GCC 不超过 12。如果你的 GCC 版本太高(如 13+),CUDA 编译会失败。此时需安装
gcc-11和g++-11,并通过update-alternatives切换默认编译器。
- 解决:Ubuntu 22.04 默认 GCC 11/12,而 CUDA 12.x 要求 GCC 不超过 12。如果你的 GCC 版本太高(如 13+),CUDA 编译会失败。此时需安装
总结
- 求稳、求兼容、做项目 → Ubuntu 22.04 LTS
- 老项目维护、特殊需求 → Ubuntu 20.04 LTS
- 尝鲜、研究新技术 → Ubuntu 24.04 LTS(但需准备好填坑)
永远记住:CUDA 生态的核心是 NVIDIA 驱动,而驱动的核心是 Linux 内核。 选择一个内核稳定、驱动支持良好的 LTS 版本,比你纠结哪个 Ubuntu 桌面更漂亮重要得多。
云技术博客