ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Ubuntu深度学习环境:TensorFlow与PyTorch GPU安装避坑

2026/9/30 3:33:49 拓冰建站 浏览量
Ubuntu深度学习环境:TensorFlow与PyTorch GPU安装避坑 Ubuntu配置深度学习环境TensorFlow和PyTorch这件事我前后在实验室、公司和自己的笔记本上折腾过不下二十次。有人觉得不就是几条pip命令吗真正上手才发现显卡驱动、CUDA、cuDNN、conda、pip、TensorFlow、PyTorch每一层都可能互相卡版本。这篇文章不打算只给你一串命令而是把我在Ubuntu 20.04、22.04、24.04上反复验证过的流程、版本选择和排错经验完整摊开。无论你是刚装完Ubuntu系统准备搭第一套PyTorch环境还是想让TensorFlow和PyTorch在同一台机器上共存都能按这里的步骤直接抄作业。虚拟机、双系统、WSL、Docker这些场景也会顺带讲清楚避免你在一个坑里反复重装。1. 先想清楚Ubuntu配置深度学习环境到底在配什么1.1 驱动、CUDA、cuDNN、框架四层关系很多人一上来就搜“PyTorch安装教程GPU”结果命令执行完发现torch.cuda.is_available()返回False于是开始怀疑人生。问题通常不在PyTorch本身而在下面这四层没有对齐。第一层是NVIDIA显卡驱动。它负责让Ubuntu认到显卡nvidia-smi能跑起来是底线。驱动版本决定了你的机器最高能支持到哪个CUDA运行时版本。注意nvidia-smi右上角显示的“CUDA Version”是驱动支持的最高版本不是你系统里已经安装的CUDA版本。这一点我见过太多人误解。第二层是CUDA Toolkit。严格说PyTorch的pip wheel和conda包通常会自带所需的CUDA运行时不一定依赖系统级CUDA。但TensorFlow 2.x的GPU版大多需要系统里安装匹配的CUDA和cuDNN。所以如果你只玩PyTorch系统CUDA可以少折腾如果TensorFlow也要GPU系统CUDA和cuDNN就得认真装。第三层是cuDNN。这是NVIDIA的深度学习加速库TensorFlow对它的版本非常敏感。cuDNN版本不对典型报错就是Could not load dynamic library libcudnn.so.8或者GPU识别不到。第四层才是TensorFlow和PyTorch。它们各自对Python版本、CUDA版本、cuDNN版本有要求。我的经验是先确定框架版本再倒推CUDA和cuDNN最后看驱动够不够。顺序反了就会陷入“驱动装了最新版结果TensorFlow不支持”的尴尬。1.2 为什么我建议用Miniconda做隔离裸pip安装不是不行但我不推荐。原因很简单TensorFlow和PyTorch对依赖版本的要求经常打架。比如某个项目需要TensorFlow 2.15另一个项目需要PyTorch 2.1它们可能依赖不同版本的NumPy、protobuf、typing-extensions。你在系统Python里混装迟早会遇到“装完PyTorchTensorFlow坏了”的情况。Miniconda的好处是环境隔离。你可以给TensorFlow建一个环境给PyTorch建另一个环境互不干扰。需要哪个就conda activate哪个切换成本很低。Anaconda当然也可以但它预装了大量用不到的包体积大、下载慢。Miniconda更干净适合自己从零搭深度学习环境。另外conda不仅能管Python包还能管CUDA Toolkit、cuDNN这类非Python依赖。比如conda install pytorch-cuda12.1会帮你把匹配的CUDA运行时装进环境里省去手动配置LD_LIBRARY_PATH的麻烦。当然pip安装PyTorch也很成熟后面我会对比两种方式。1.3 版本选择先定框架再定CUDA最后看驱动下面这张表是我根据常见稳定组合整理的实际安装时以TensorFlow和PyTorch官网为准。注意我刻意避开“最新版一定最好”的思路因为深度学习框架的新版本经常刚发布就有一堆兼容问题。框架版本推荐PythonCUDA要求cuDNN要求备注PyTorch 2.13.9-3.11cu118/cu121/cu124wheel自带pip安装最省心TensorFlow 2.153.9-3.11CUDA 12.2cuDNN 8.9GPU支持需要系统CUDATensorFlow 2.143.9-3.11CUDA 11.8cuDNN 8.7较常见组合TensorFlow 2.133.8-3.11CUDA 11.8cuDNN 8.6老项目常用TensorFlow 2.123.8-3.11CUDA 11.8cuDNN 8.6兼容性不错TensorFlow 2.103.7-3.10CUDA 11.2cuDNN 8.1旧卡可考虑选择逻辑如果你的显卡驱动比较新nvidia-smi显示支持CUDA 12.4那你可以装PyTorch的cu124版本也可以装TensorFlow 2.15要求的CUDA 12.2。但如果驱动只支持到CUDA 11.8就别硬上TensorFlow 2.15的CUDA 12.2要么升级驱动要么降TensorFlow版本。1.4 装之前先确认这五件事动手之前我习惯先跑一遍检查清单能省掉很多返工。显卡型号lspci | grep -i nvidia确认是NVIDIA卡不是AMD或Intel核显。系统版本lsb_release -aUbuntu 20.04、22.04、24.04都行但驱动安装命令略有差异。内核版本uname -r某些新内核和旧驱动不兼容。是否开启Secure Bootmokutil --sb-state开启后安装第三方驱动需要设置MOK密码。磁盘空间df -h深度学习环境加上数据集建议至少留50GB。这五件事确认完再开始装驱动。不要一边装驱动一边装框架出问题很难定位。2. Ubuntu系统准备从裸机到能跑nvidia-smi2.1 系统版本与基础更新如果你刚装完Ubuntu第一件事是更新软件源。我一般用清华或阿里云镜像速度比默认源快很多。编辑/etc/apt/sources.list把archive.ubuntu.com和security.ubuntu.com替换成镜像地址。Ubuntu 22.04之后的版本源文件可能在/etc/apt/sources.list.d/ubuntu.sources格式是deb822改的时候注意语法。更新命令sudo apt update sudo apt upgrade -y sudo apt install build-essential cmake git wget curl vim -ybuild-essential包含gcc、g、make很多Python包编译时需要。cmake版本问题后面会讲先用apt装一个够用的版本。如果你遇到ubuntu安装gcc失败大概率是源没配好或者依赖冲突先sudo apt update再sudo apt install --fix-broken。Ubuntu 24.04默认Python是3.12有些老框架还不支持。如果要用TensorFlow 2.15建议用Miniconda装Python 3.10或3.11。不要试图降级系统Python会搞坏系统工具。2.2 安装NVIDIA驱动ubuntu-drivers和手动安装的取舍Ubuntu装NVIDIA驱动有两种主流方式apt/ubuntu-drivers和NVIDIA官方runfile。我90%的情况推荐第一种省事、和内核更新配合好。先查看推荐驱动sudo apt update sudo apt install ubuntu-drivers-common -y ubuntu-drivers devices输出里会列出driver: nvidia-driver-535 - third-party free recommended之类的信息。推荐版本通常是经过Ubuntu测试的。直接自动安装sudo ubuntu-drivers autoinstall或者指定版本sudo apt install nvidia-driver-535 -y安装完必须重启sudo reboot重启后运行nvidia-smi如果看到显卡型号、驱动版本、显存占用说明驱动OK。什么时候用手动runfile通常是apt源里的驱动太旧或者你需要特定版本。手动安装前要禁用nouveau否则会冲突。步骤sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u sudo reboot重启后按CtrlAltF3进入文本模式关闭图形界面sudo systemctl stop gdm3然后运行NVIDIA驱动安装包按提示走。手动安装的坑在于每次内核升级后可能需要重装驱动Secure Boot开启时还要签名。所以除非有特殊需求优先用apt。2.3 验证驱动与nouveau处理nvidia-smi能跑不代表CUDA可用。继续检查nvidia-smi nvcc --version如果nvcc找不到说明没装CUDA Toolkit。只玩PyTorch的话可以先不装系统CUDA。但TensorFlow GPU需要后面再装。检查nouveau是否真的禁用lsmod | grep nouveau没有输出就是禁用了。如果有输出说明黑名单没生效检查/etc/modprobe.d/下的配置文件再sudo update-initramfs -u并重启。注意如果你用的是Ubuntu 22.04/24.04Secure Boot开启时apt安装驱动会弹出MOK管理界面让你设置密码。重启后会出现蓝色界面选择Enroll MOK输入密码。这一步不完成驱动不会加载nvidia-smi会报“No devices were found”。2.4 周边配置SSH、中文输入法、Docker按需处理这些不是深度学习环境的核心但实际用起来少不了。SSH如果你用Xshell或VSCode Remote连接Ubuntu先装openssh-serversudo apt install openssh-server -y sudo systemctl enable ssh sudo systemctl start ssh如果连不上检查sudo ufw status放行22端口sudo ufw allow 22。还要确认IP地址ip addr。虚拟机的话网络模式选桥接或NATNAT需要端口转发。中文输入法Ubuntu默认有IBus可以装拼音。如果习惯搜狗去搜狗输入法官网下载Linux版deb包然后sudo dpkg -i sogoupinyin.deb缺依赖就sudo apt install -f。不过搜狗在Ubuntu 24.04上偶尔有兼容问题我現在更多用IBus智能拼音或Fcitx5。Docker如果你要用容器跑深度学习装Docker和NVIDIA Container Toolkitsudo apt install docker.io -y sudo systemctl enable docker sudo systemctl start docker sudo usermod -aG docker $USERNVIDIA Container Toolkit需要添加官方仓库然后sudo apt install nvidia-container-toolkit重启Docker。这样docker run --gpus all才能用显卡。虚拟机场景VMware或VirtualBox装Ubuntu通常无法直通NVIDIA显卡只能跑CPU版PyTorch和TensorFlow。如果你只是学习语法、跑小模型CPU版够用。要用GPU建议双系统或物理机。3. Miniconda与Python环境让TensorFlow和PyTorch各自独立3.1 安装Miniconda并配置镜像源下载Minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程中会问安装路径默认~/miniconda3就行。安装完激活source ~/.bashrc conda --version如果conda命令找不到手动初始化~/miniconda3/bin/conda init bash source ~/.bashrc配置国内镜像源加快下载速度conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --set show_channel_urls yes要注意PyTorch的官方conda channel有时不在镜像里同步安装PyTorch时可能需要临时指定-c pytorch。如果镜像源里找不到某个包可以换回默认源或者用pip安装。3.2 创建独立环境与Python版本选择给PyTorch建一个环境conda create -n pytorch_env python3.10 -y conda activate pytorch_env给TensorFlow建另一个conda create -n tf_env python3.10 -y conda activate tf_envPython版本怎么选我的建议PyTorch 2.xPython 3.9、3.10、3.11都行3.10最省心。TensorFlow 2.15支持3.9-3.11选3.10。老项目TensorFlow 2.10支持3.7-3.10选3.8或3.9。不要选太新的Python比如3.12很多包还没出wheelpip会尝试源码编译容易失败。也不要选太老的新框架不支持。3.3 conda和pip混用原则这是重灾区。我的原则是一个环境里能用conda就用conda不能用再用pip并且记录安装顺序。不要交替反复装同一个包。比如PyTorch可以用conda装conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia也可以用pip装pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121两种方式都可以但不要先conda装一半再用pip覆盖。如果你已经pip装了发现有问题最干净的做法是删掉环境重建conda deactivate conda env remove -n pytorch_env conda create -n pytorch_env python3.10 -y另外pip安装时尽量加--index-url指定官方wheel源不要用乱七八糟的第三方源避免版本不对。如果网络慢可以临时用清华PyPI镜像但PyTorch的CUDA wheel通常在I/O官方源镜像可能不全。3.4 环境导出与迁移环境配好后导出依赖清单conda env export environment.yml但environment.yml里会包含本地路径和精确版本换机器可能装不上。我更推荐导出pip清单pip freeze requirements.txt迁移时在新机器创建空环境然后pip install -r requirements.txt注意PyTorch的CUDA版本可能因机器驱动不同而需要调整所以requirements.txt里最好只写torch2.1.0不写cu121后缀安装时再根据驱动选wheel。4. PyTorch安装实操GPU版、CPU版和验证方法4.1 查驱动、查CUDA、查PyTorch官网命令先跑nvidia-smi看右上角CUDA Version。比如显示12.4说明驱动支持到CUDA 12.4。你可以装cu121或cu124的PyTorch。如果显示11.8就装cu118。去PyTorch官网选择对应的OS、Package、Language、Compute Platform它会生成安装命令。比如Linux、pip、Python、CUDA 12.1pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121CPU版pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpuconda版conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia我实测下来pip安装PyTorch更简单因为wheel自带CUDA运行时不依赖系统CUDA。conda安装有时会解析依赖很久但好处是能统一管理。如果你只玩PyTorch推荐pip。4.2 conda安装与pip安装的实测对比方式优点缺点适用场景pip速度快wheel自带CUDA不管理非Python依赖大多数PyTorch用户conda依赖统一可管CUDA解析慢镜像可能不同步需要环境完全隔离源码编译可定制耗时长易失败特殊硬件或研究需求我自己的选择PyTorch用pipTensorFlow用pip系统CUDA。这样两个环境互不干扰PyTorch升级也方便。安装完成后记录版本python -c import torch; print(torch.__version__)4.3 安装后必须做的三项验证第一项检查CUDA是否可用import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0))如果is_available()返回False先别急着重装。检查驱动是否装好nvidia-smi是否正常PyTorch版本是否CPU版。如果你装的是CPU wheel那当然不支持CUDA。第二项跑一个张量运算import torch x torch.randn(3, 3).cuda() y torch.randn(3, 3).cuda() z x y print(z)能输出结果说明GPU计算链路通了。第三项测一个小网络import torch import torch.nn as nn model nn.Sequential( nn.Linear(10, 64), nn.ReLU(), nn.Linear(64, 1) ).cuda() x torch.randn(32, 10).cuda() y model(x) print(y.shape)这一步能跑通基本可以开始做PyTorch实战了比如图像分类、Transformer训练、TD3强化学习代码。4.4 PyTorch常见报错与处理报错AssertionError: Torch not compiled with CUDA enabled说明你装的是CPU版。卸载重装GPU版pip uninstall torch torchvision torchaudio -y pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121报错CUDA out of memory显存不够。减小batch size用torch.cuda.empty_cache()清理缓存或者用梯度累积。如果是多卡检查是否默认占用了0号卡。报错RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED通常是cuDNN版本和PyTorch不匹配。pip wheel自带的cuDNN一般没问题如果你手动装过系统cuDNN可能冲突。建议在干净conda环境里用pip重装。报错nvidia-smi has failed because it couldnt communicate with the NVIDIA driver驱动掉了。可能内核更新后驱动没重新编译。重启试试不行就重装驱动。5. TensorFlow安装实操2.x版本的GPU支持与兼容坑5.1 TensorFlow与CUDA/cuDNN对应关系TensorFlow 2.x的GPU支持比PyTorch麻烦因为它依赖系统级CUDA和cuDNN。你必须严格按照官方对应表来。比如TensorFlow 2.15需要CUDA 12.2和cuDNN 8.9。如果你系统装的是CUDA 11.8就装TensorFlow 2.14或2.13。安装系统CUDA Toolkit推荐用NVIDIA官方apt仓库wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update sudo apt install cuda-toolkit-12-2 -y安装cuDNNsudo apt install libcudnn88.9.* libcudnn8-dev8.9.* -y如果apt里找不到精确版本可以去NVIDIA官网下载对应版本的tar包解压后复制到CUDA目录。配置环境变量echo export PATH/usr/local/cuda-12.2/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc验证nvcc --version5.2 pip安装TensorFlow的完整步骤创建TensorFlow环境conda create -n tf_env python3.10 -y conda activate tf_env安装TensorFlowpip install tensorflow2.15.0如果你不需要GPU直接pip install tensorflow就行。如果需要GPU确保系统CUDA和cuDNN版本匹配。安装完成后TensorFlow不会自动把所有GPU库都找到有时需要手动设置export LD_LIBRARY_PATH/usr/local/cuda-12.2/lib64:/usr/local/cuda-12.2/extras/CUPTI/lib64:$LD_LIBRARY_PATHcuDNN的库路径也要加进去如果装在/usr/lib/x86_64-linux-gnu通常已经在默认路径里。5.3 验证GPU是否被识别import tensorflow as tf print(tf.__version__) print(tf.config.list_physical_devices(GPU))如果输出[]说明没识别到GPU。检查nvidia-smi是否正常。CUDA版本是否匹配。cuDNN版本是否匹配。LD_LIBRARY_PATH是否包含CUDA和cuDNN路径。还可以跑一个矩阵乘法import tensorflow as tf with tf.device(/GPU:0): a tf.random.normal([1000, 1000]) b tf.random.normal([1000, 1000]) c tf.matmul(a, b) print(c.shape)如果报错Could not create cudnn handle多半是cuDNN版本不对。TensorFlow对cuDNN非常挑差一个小版本都可能失败。5.4 TensorFlow和PyTorch共存的冲突处理共存的核心是环境隔离。我给TensorFlow和PyTorch分别建conda环境用的时候切换。系统级只装一份NVIDIA驱动CUDA Toolkit可以装多个版本通过LD_LIBRARY_PATH切换或者让TensorFlow环境用系统CUDAPyTorch环境用自带CUDA。如果你非要在同一个环境里同时装TensorFlow和PyTorch要注意先装TensorFlow再装PyTorch避免pip依赖冲突。不要同时用conda和pip反复覆盖。如果NumPy版本冲突优先满足TensorFlow因为TensorFlow对NumPy上限要求更严。protobuf版本也容易冲突TensorFlow 2.15要求protobuf3.20,5PyTorch一般兼容。我的建议还是分开。两个环境加起来也就几百MB比调试冲突省时间。6. 常见问题排查速查表与避坑心得6.1 问题速查表问题可能原因解决方法nvidia-smi命令找不到驱动未安装ubuntu-drivers autoinstall后重启nvidia-smi无设备Secure Boot未签名、nouveau冲突完成MOK注册禁用nouveautorch.cuda.is_available()False装了CPU版、驱动异常重装GPU版PyTorch检查驱动TensorFlow不识别GPUCUDA/cuDNN版本不匹配按官方对应表安装libcudnn.so.8找不到cuDNN未装或路径不对安装cuDNN配置LD_LIBRARY_PATHconda安装慢默认源慢配置国内镜像源pip安装超时网络问题换镜像源或重试SSH无法连接未装openssh-server、防火墙安装ssh放行22端口Ubuntu环境变量配置错误.bashrc重复追加清理.bashrc重新sourcegcc安装失败依赖冲突、源问题apt update apt install -fcmake版本低apt版本旧用pip安装或源码编译Docker无法用GPU未装nvidia-container-toolkit安装并重启Docker6.2 虚拟机、双系统、WSL场景的区别VMware虚拟机安装Ubuntu默认无法直通NVIDIA显卡只能CPU版。如果你只是学PyTorch张量基础CPU够用。要GPU需要VMware支持显卡直通但配置复杂笔记本上经常失败。双系统安装Ubuntu能直接用物理显卡性能最好。注意安装时给Ubuntu留足空间至少100GB。驱动和Windows可以共存但Windows快速启动可能影响Ubuntu挂载NTFS分区。WSL2Windows下用WSL2跑Ubuntu可以支持CUDA但需要Windows装NVIDIA驱动WSL里不要装驱动。PyTorch和TensorFlow都能用GPU性能接近原生。适合不想折腾双系统的用户。Docker适合环境隔离和部署。用nvidia-container-toolkit后容器里也能用GPU。镜像可以基于nvidia/cuda或pytorch/pytorch。6.3 环境变量、gcc、cmake等周边问题环境变量配置错误最常见的是~/.bashrc里重复追加export PATH导致PATH越来越长。解决方法是手动编辑~/.bashrc删掉重复行然后source ~/.bashrc。可以用echo $PATH检查。gcc版本Ubuntu 22.04默认gcc 1124.04默认gcc 13。有些老代码需要gcc 9可以sudo apt install gcc-9 g-9然后用update-alternatives切换。不过深度学习框架现在对gcc要求不严用默认的就行。cmake版本apt装的cmake可能比较旧。如果某个库要求cmake 3.20可以用pip装pip install cmake --upgrade或者去cmake官网下载二进制包解压后把bin目录加入PATH。CUDA多版本切换如果你装了CUDA 11.8和12.2可以通过软链接切换sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-12.2 /usr/local/cuda但更推荐用环境变量控制避免影响其他用户。6.4 我的几条实操心得第一条装驱动前先看主板BIOS。有些笔记本默认开启Secure Boot导致驱动装不上。如果不想处理MOK可以在BIOS里关闭Secure Boot装完驱动再开。但注意关闭Secure Boot可能影响Windows双系统启动。第二条不要迷信最新CUDA。TensorFlow和PyTorch对CUDA的支持有滞后。比如CUDA 12.4刚出时PyTorch可能只有cu124预览版TensorFlow还没跟上。选一个框架官方明确支持的版本比追新省事。第三条每次重装系统后先做快照。如果是虚拟机装好驱动和Miniconda后拍个快照。后面环境搞乱了直接回滚比排查半天快得多。物理机可以用Timeshift。第四条记录成功配置。我有个习惯每配好一套环境就把nvidia-smi输出、pip freeze、CUDA版本、cuDNN版本记在笔记里。下次装新机器直接照抄不用重新试错。第五条PyTorch和TensorFlow分开环境。哪怕你觉得自己只用一个也建议分开。因为项目迁移时依赖冲突会让你抓狂。分开环境导出requirements.txt换机器重建几分钟搞定。最后再分享一个小技巧如果你在Ubuntu上遇到torch.cuda.is_available()时好时坏先别怀疑PyTorch。跑一下watch -n 1 nvidia-smi看看显卡是否被其他进程占用或者驱动是否频繁掉线。显卡被占满时PyTorch会报显存不足但有时表现成CUDA初始化失败。确认没有僵尸进程占卡再重启环境。这套流程帮我省下不少重装时间也希望对你有用。