Ubuntu 18.04 配置 TensorFlow 与 PyTorch GPU 环境实战指南
在深度学习项目中,一个稳定、高效且支持 GPU 加速的开发环境几乎是标配。然而,对于刚接触 Linux 和 CUDA 生态的新手来说,从零开始搭建这样一个环境往往意味着要面对驱动冲突、版本不兼容、网络超时等一系列“经典坑”。本文基于Ubuntu 18.04 + RTX 2080 Ti的真实配置,完整记录了如何一步步构建支持TensorFlow 2.5 和 PyTorch 1.9 GPU 加速的双框架开发环境,全程使用国内镜像加速,避免因网络问题导致安装失败。
整个过程涵盖了系统源更换、显卡驱动安装、Anaconda 环境管理、CUDA 与 cuDNN 配置、以及两大主流框架的离线部署方案。所有操作均经过实测验证,适用于大多数 NVIDIA 显卡用户。
换源提速:让软件安装不再龟速
Ubuntu 默认的官方源位于境外,apt update动辄几分钟,下载包更是经常中断。第一步就是切换为国内高速镜像源,推荐阿里云或清华源。
以阿里云为例,编辑源列表:
sudo vim /etc/apt/sources.list将原内容全部注释或清空,替换为以下内容(对应 Ubuntu 18.04,即 bionic):
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse保存后立即更新索引并升级系统:
sudo apt-get update && sudo apt-get upgrade -y如果遇到锁文件错误:
sudo rm /var/lib/dpkg/lock-frontend sudo dpkg --configure -a顺手装个vim,后面频繁用到:
sudo apt install vim -y这一步虽小,却是后续所有操作流畅进行的基础——毕竟没人愿意每次安装都等半小时。
屏蔽 nouveau,迎接官方驱动
NVIDIA 官方驱动和开源的nouveau驱动互斥。若不提前禁用,轻则安装失败,重则黑屏无法进入系统。
编辑黑名单文件:
sudo vim /etc/modprobe.d/blacklist.conf在末尾添加:
blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb然后更新 initramfs 并重启:
sudo update-initramfs -u sudo reboot重启后检查是否生效:
lsmod | grep nouveau没有输出说明成功屏蔽。这是关键一步,跳过它等于给后续埋雷。
安装编译工具链
NVIDIA 驱动安装过程中需要编译内核模块,因此必须先准备好基础开发工具:
sudo apt install build-essential -y这个包包含了gcc、g++和make,是 Linux 下几乎所有编译任务的前提。确认安装成功:
gcc --version看到版本号即可继续下一步。
安装 NVIDIA 显卡驱动(Runfile 方式)
图形界面下直接安装驱动极易失败,建议关闭 GUI 进入 TTY 模式。
按Ctrl + Alt + F3切换到终端登录界面,输入用户名密码登录。
停止显示管理器:
sudo service lightdm stop前往你下载的.run文件目录(如/home/yourname/),赋予执行权限:
cd /home/yourname/ sudo chmod +x NVIDIA-Linux-x86_64-*.run执行安装命令,并带上关键参数:
sudo ./NVIDIA-Linux-x86_64-*.run \ --no-x-check \ --no-nouveau-check \ --no-opengl-files参数含义如下:
---no-x-check:跳过 X Server 检查,避免因图形服务未完全关闭而报错;
---no-nouveau-check:我们已手动禁用,无需再次检测;
---no-opengl-files:防止替换系统的 OpenGL 库,引发桌面环境异常。
安装完成后重启:
sudo reboot回到桌面后,打开终端运行:
nvidia-smi如果能看到类似下面的信息,恭喜你,GPU 已经被系统识别:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.82.01 Driver Version: 470.82.01 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce RTX 208... Off | 00000000:01:00.0 Off | N/A | | 30% 45C P8 18W / 250W | 0MiB / 11019MiB | 0% Default | +-------------------------------+----------------------+----------------------+注意右上角显示的 CUDA Version 是 11.4,这意味着后续安装的 CUDA Toolkit 版本应尽量匹配或略低。
安装 Anaconda 并设置 Python 环境隔离
Anaconda 是目前最主流的 Python 科学计算发行版,其conda能完美实现多环境隔离,特别适合同时维护多个深度学习项目的场景。
前往 Anaconda 官网 下载 Linux 版本(建议选 2021 年左右的版本,兼容性好)。
假设下载的是Anaconda3-2021.05-Linux-x86_64.sh,在终端运行:
bash Anaconda3-2021.05-Linux-x86_64.sh一路回车阅读协议,输入yes接受许可。安装路径默认即可。当询问是否初始化 conda 时,选择no—— 我们希望手动控制环境变量加载时机。
安装完成后,编辑 shell 配置文件:
vim ~/.bashrc在文件末尾添加:
# 区分系统 Python 与 Anaconda Python alias python3="/usr/bin/python3.6" export PATH="/home/yourname/anaconda3/bin:$PATH"这样设置后:
- 执行python自动调用 Anaconda 的解释器;
- 执行python3则调用系统自带的 Python 3.6,避免影响系统脚本;
- 不依赖 conda 自动注入的初始化逻辑,更可控。
保存退出后执行:
source ~/.bashrc验证:
python --version # 应显示 Anaconda 的 Python 版本(如 3.8.8) python3 --version # 应显示 3.6.x接着创建两个独立虚拟环境,分别用于 PyTorch 和 TensorFlow:
conda create -n pytorch python=3.8 -y conda create -n tensorflow python=3.8 -y查看环境列表:
conda env list激活某个环境只需:
conda activate pytorch如果你遇到conda: command not found,可以手动初始化:
~/anaconda3/bin/conda init然后重新打开终端或执行source ~/.bashrc。
安装 CUDA Toolkit 11.4
虽然驱动已经包含部分 CUDA 支持,但完整的开发套件仍需单独安装 CUDA Toolkit。
前往 NVIDIA CUDA 下载页,选择 Runfile (local) 安装方式,下载cuda_11.4.2_470.57.02_linux.run。
⚠️ 注意:不要勾选 Driver!因为我们已经安装了兼容版本的驱动。
切换到 TTY 或确保图形界面已关闭,执行安装:
sudo sh cuda_11.4.2_470.57.02_linux.run进入交互界面后:
- 输入accept同意协议;
- 使用方向键取消左侧[X] Driver的勾选;
- 其他组件保持默认;
- 选择 Install 开始安装。
安装完成后,配置环境变量:
vim ~/.bashrc追加以下内容:
export PATH=/usr/local/cuda-11.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH export CUDA_HOME=/usr/local/cuda-11.4保存并加载:
source ~/.bashrc验证安装结果:
nvcc --version输出中应包含release 11.4,表示 CUDA 编译器就绪。
安装 cuDNN 8.2
cuDNN 是深度神经网络的核心加速库,对卷积、池化等操作做了高度优化。它是闭源组件,需注册 NVIDIA 账号后才能下载。
前往 cuDNN 官网,选择与 CUDA 11.4 对应的版本(如cudnn-linux-x86_64-8.2.1.32_cuda11.4-archive.tar.gz)。
下载解压:
tar -xzvf cudnn-linux-x86_64-8.2.1.32_cuda11.4-archive.tar.gz复制头文件和库文件到 CUDA 目录:
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include/ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*最后刷新动态链接缓存:
sudo ldconfig至此,底层 GPU 计算栈已全部打通:驱动 → CUDA → cuDNN,三位一体。
离线安装 PyTorch 1.9(GPU 版)
PyTorch 官方通过 Conda 提供预编译的 GPU 版本,但由于服务器在国外,直接conda install极易超时。推荐使用清华镜像站离线安装。
访问 清华 Anaconda 镜像 - pytorch 频道,搜索:
pytorch-1.9.0-py3.8_cuda11.1_尽管你的 CUDA 是 11.4,但 PyTorch 官方只打包到了 11.1,这没关系——高版本驱动完全兼容低版本运行时。
下载.tar.bz2文件到本地(如~/Downloads/)。
激活环境并离线安装:
conda activate pytorch conda install --offline ~/Downloads/pytorch-1.9.0-py38_cuda11.1_*.tar.bz2等待安装完成。若提示找不到 torch 模块,务必重启一次系统再试,因为某些 GPU 设备节点可能尚未正确挂载。
验证:
import torch print(torch.cuda.is_available()) # True print(torch.version.cuda) # '11.1' print(torch.device('cuda')) # <torch.device 'cuda'>返回True表示 PyTorch 成功调用 GPU。
离线安装 TensorFlow 2.5(GPU 版)
TensorFlow 的 GPU 支持较为复杂,尤其是旧版本对 CUDA/cuDNN 版本要求严格。TF 2.5 正好适配 CUDA 11.2 ~ 11.4 和 cuDNN 8.1+,与当前环境完全契合。
前往 清华 PyPI 镜像 - tensorflow,查找:
tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl注意cp38表示适用于 Python 3.8。
下载后进入 TensorFlow 环境:
conda activate tensorflow pip install numpy wheel pip install ~/Downloads/tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl安装前先装numpy和wheel可避免依赖缺失错误。
验证:
import tensorflow as tf print("TensorFlow Version:", tf.__version__) print("GPU Available: ", tf.test.is_gpu_available()) print("Visible GPUs: ", tf.config.experimental.list_physical_devices('GPU'))预期输出:
TensorFlow Version: 2.5.0 GPU Available: True Visible GPUs: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]💡 提示:
tf.test.is_gpu_available()在 TF 2.9+ 中已被弃用,但在 2.5 中依然有效。
常见问题与避坑清单
| 问题现象 | 根本原因 | 解决方法 |
|---|---|---|
nvidia-smi: command not found | 驱动未安装或路径未加入 | 检查驱动安装日志,确认--no-opengl-files参数使用正确 |
torch.cuda.is_available()返回 False | conda 包损坏或 CUDA 不匹配 | 使用清华镜像离线安装指定版本,避免自动解析错误版本 |
ImportError: libcudnn.so.8: cannot open shared object file | cuDNN 文件未复制或未刷新缓存 | 检查路径是否正确,执行sudo ldconfig |
conda: command not found | conda 未初始化 | 执行~/anaconda3/bin/conda init并重启终端 |
| 安装过程卡死或崩溃 | 图形界面干扰 | 切换至 TTY,关闭 lightdm 后再操作 |
此外,建议定期清理不必要的 conda 环境和缓存包:
conda clean --all避免磁盘空间被大量临时文件占用。
这套环境之所以稳定,是因为它遵循了一个清晰的技术选型逻辑:长期支持系统 + 主流中间版本工具链 + 明确的版本对应关系。
Ubuntu 18.04 虽然发布已久,但仍在 LTS 支持周期内,稳定性远胜新版;CUDA 11.4 是 PyTorch 和 TensorFlow 多个重要版本共同支持的“黄金交叉点”;而 Anaconda 的环境隔离机制,则让我们可以在同一台机器上安全地运行不同需求的项目。
更重要的是,通过国内镜像离线安装核心组件,彻底规避了网络不稳定带来的不确定性。这种“确定性交付”的思路,在生产环境中尤为宝贵。
如今,无论是训练图像分类模型,还是部署 NLP 服务,这套环境都能提供坚实支撑。当你看到nvidia-smi中 GPU 利用率飙升的那一刻,就知道所有的配置努力都是值得的。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考