一直用Windows跑深度学习模型的人初次转到Ubuntu 20.04上配PyTorchCPU版时可能会觉得这能有多难无非是pip install顶多再装个Anaconda而已。但我当时实际动手才发现坑远比我以为的多python命令前面要不要加3、pip到底带着哪个解释器、系统自带的Python 3.8和后来装的Python 3.10抢来抢去、cuda版本的包默认附带一堆用不到的东西……没有一个能省心。这篇东西不是从网上抄来的安装步骤复读而是我在Ubuntu 20.04上装CPU版PyTorch时实际踩过的坑和绕出来的路适合刚转Linux做深度学习、选CPU版过渡学习、以及正在为环境问题焦头烂额的人。1. 环境准备阶段最容易埋雷Python版本冲突大多数人第一反应是直接用系统自带的Python装PyTorch但Ubuntu 20.04的默认Python情况其实是很多坑的根源。1.1 先看清你的默认Python到底是谁Ubuntu 20.04默认自带的是Python 3.8。这个版本本身没有大问题但麻烦在系统的一些底层工具比如自带的软件管理、部分桌面组件也依赖这个Python。直接拿它来pip install PyTorch系统环境一旦被装乱轻则部分图形界面程序出现怪毛病重则系统包管理器瘫痪。我建议先执行以下命令看清楚which python which python3 python --version python3 --version这一段有一个非常容易踩的坑Ubuntu默认不提供python这个命令而是只有python3。在Windows上输入python已经习惯了在Ubuntu里输入python终端通常会告诉你找不到命令。如果你强行用apt install python装下来的大概率是Python 2的某个残留或者一个软链接非常迷惑。我当时就是在这里浪费了快半小时。明明python3.8可用python却提示不存在我一度以为自己的系统被弄坏了。这个事其实在Ubuntu 20.04里非常正常因为系统只保留了python3的入口。后续一切用python3来指代即可或者用虚拟环境后直接用python。1.2 一个干净的Anaconda环境能帮你规避一大半问题与其在系统Python上反复试探我推荐直接用Miniconda或者Anaconda单独建一个环境。理由很实在系统Python是给系统用的你的项目环境和它混在一起是Linux下最常见的环境事故来源。PyTorch对Python版本有一定要求单独环境里想用Python 3.9、3.10还是3.11随时切换不用心惊胆战。虚拟环境里不需要sudo权限问题直接少了一大截。我自己的习惯是装Miniconda而不是完整的Anaconda前者更轻量不需要的一堆预装库没有也省心。命令也就是:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh装完以后创建一个专门给PyTorch用的环境conda create -n torch_cpu python3.9 conda activate torch_cpu这里选择Python 3.9作为初装版本理由是它和Ubuntu 20.04的兼容度很高同时PyTorch的二进制包支持毫无问题。如果你后面需要用新一点的深度学习库再升级也没关系关键是先把一个稳定干净的底子打好。2. 第一波真正的坑pip 到底是谁家的pip创建好conda环境并激活之后很多人直接开始pip install torch。但我告诉你此处是cpu安装过程中一个隐蔽陷阱的高发区。2.1 激活了环境pip却可能仍指向系统在Ubuntu里最常见的问题就是你明明conda activate torch_cpu激活了环境但敲pip install torch的时候系统给你执行的其实是全局的/usr/bin/pip或者是某个旧版本Python自带的pip。最稳的检查方式which pip which pip3 pip --version如果在激活的conda环境里敲pip但返回路径中出现/usr/bin/pip字样说明环境变量的优先级有问题。常见原因是没有彻底conda init或者你的shell配置文件.bashrc里写死了某个pip路径。解决方式很简单先执行conda init bash source ~/.bashrc然后重新打开终端conda环境的前缀会出现在提示符前面。此时再检查which pip就应该指向你环境目录下的bin/pip了。2.2 另一个坑pip3和pip的Entry Point不一致就算pip看起来对了有时候你实际用的还是一个问题。我第一次在Ubuntu 20.04装的时候明明which pip显示的是conda环境路径但执行pip install torch之后却提示“Defaulting to user installation because normal site-packages is not writeable”。这个提示就非常坑它说明pip虽然在conda环境里但它的用户安装目录却被导向了系统的site-packages。说白了就是这套环境没有配置干净。我用两条命令治标兼治本python -m pip --version python -m pip install torch --user注意这个python -m pip的写法是更靠谱的因为它是显式使用当前环境的python来解释执行pip模块彻底绕开各种shims和软链接。其实如果你只用pip install就已经很顺也可以不写--user但一旦出现权限报错就要意识到环境联动出了问题而不是硬着头皮装。2.3 网络源的问题在国内网络环境下直接从默认的PyPI源下载大体积的PyTorch包慢到让你怀疑人生。一个两三GB的包下到一半断了再重来一遍真的很浪费生命。用国内镜像源如清华、阿里云、中科大基本是刚需。我个人的推荐是使用清华源但最好只对当前的pip命令生效不要全局修改配置文件这样既不影响以后其他需求也更可控。pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple顺便提醒一下有些源的同步存在滞后问题你有可能在清华源上看到一个次新版本而非最新版。如果对版本有硬性要求可以直接指定版本号pip install torch2.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple3. 最重要的一步cpu版本的包名到底怎么回事这个坑我见过太多人栽过装CPU版PyTorch却执行了pip install torch结果装下来的默认版本仍然带了CUDA支持。3.1 为什么默认包还是带CUDAPyTorch官方在PyPI上的torch包默认是包含CUDA依赖的哪怕你机器上根本没有NVIDIA显卡也不影响它把那一大堆CUDA库塞进你的环境。其后果是安装包体积极大、下载时间极长、磁盘占用极高。我最初在没看文档的情况下直接pip install torch装完之后一个环境占了5个多GB而真正用到的CPU推理功能根本不需要这一大堆东西。我后来有一次在一个没显卡的机器上做部署测试发现默认安装的torch包内部带着libcusparse等等一溜下来全是和GPU相关的库文件。问题是它们根本不是为我服务的也派不上用场。3.2 正确做法加上CPU标志从PyTorch官网的安装命令选择CPU版本来看最标准的命令是走PyTorch的官方源pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu这里--index-url是指定包下载来源不是普通的PyPI源而是PyTorch自己为各个平台和计算平台预编译好的whl仓库。这个仓库里对应cpu平台的包才是真正精简的CPU版本。我后来清理掉原来的默认版torch重装成官方源的CPU版本后环境体积直接降到了3GB左右。下载速度和安装时间都改善非常明显。3.3 CPU版本到底损失了什么很多人误以为CPU版PyTorch就是“阉割版”其实不完全对。你损失的只是GPU加速模块和对应的CUDA组件而PyTorch本身的张量计算、神经网络构建、推理支持都在。对于学习、跑小型模型、调试代码来说功能上基本没有差别。唯一需要留意的是有些模型库会在依赖安装时强行把带CUDA的torch再拉回来此时需要你手动重新装回CPU版本。如果你是装了GPU版发现不对再换CPU版我建议先彻底卸载干净把torch相关的包全部删掉再安装不然一些残留的. so库会混淆。pip uninstall torch torchvision torchaudio -y卸载干净后再执行CPU源的安装命令这样能避免很多莫名奇妙的导入冲突。4. 安装完成还不是终点import torch那一刻还有惊喜pip安装没有报错并不代表万事大吉。我第一次执行import torch时就直接迎来一个红色大报错当时一度以为自己的系统彻底废了。4.1 找不到libGL.so.1的那一幕在Ubuntu 20.04上跑import torch如果系统提示报错找不到libGL.so.1别慌这是CV相关库如torchvision的底层依赖缺系统库的问题和Python代码本身没关系。这个问题的根源是系统OpenGL库版本不匹配解决办法是安装对应的系统库sudo apt update sudo apt install libgl1 libglib2.0-0也可以顺便安装libegl1有些依赖它的场景也能一次性解决sudo apt install libegl1如果import时报错“libgomp.so.1: cannot open shared object file”再补一个sudo apt install libgomp1这类问题属于典型的“Linux底层动态库缺失”不看日志永远猜不到原因。它的排查方式其实也不难所有的报错都会写着“cannot open shared object file”用apt-file search去查对应的包名再安装就好。不过对新手而言直接按上面几个包名装一遍基本都能覆盖常见情况。4.2 验证CPU版是否真的生效装完之后我建议做以下验证一项项确认环境健康python -c import torch; print(torch.__version__) python -c import torch; print(torch.cuda.is_available())如果输出版本号正常且torch.cuda.is_available()返回False恭喜你装到的是CPU版。凡是返回True的说明你装到的还是带CUDA的版本需要按前面的步骤重新来过。我最开始装完cuda.is_available()返回的是True但我机器上根本没有NVIDIA GPU。这种情况最多是因为装了GPU包而并非真的检测到了显卡需要注意区分。4.3 一个小测试跑一个最简单的模型验证环境可用性最直接的就是拿一个小型网络跑一次前向推理import torch import torch.nn as nn model nn.Sequential( nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, 10) ) x torch.randn(1, 128) y model(x) print(y.shape)输出torch.Size([1, 10])就说明基本链路通了。要是连这个都跑不通再回头检查环境、版本、动态库别先急着装一堆别的库。5. 后续使用时几乎必然遇到的三个大坑安装成功并不表示后面能一帆风顺至少我在Ubuntu 20.04上面继续使用的时候又碰上了下面几个非常普遍的问题提前知道它们能少踩不少雷。5.1 明明装好了但Jupyter里import失败使用conda环境的人经常碰到一个情况你在终端里执行python能正常import torch但打开Jupyter Notebook新建kernel却提示ModuleNotFoundError: No module named torch。这个坑十有八九是Jupyter拉起了系统的Python环境而不是你在conda里创建的那个。解决办法也不是很难conda install ipykernel python -m ipykernel install --user --name torch_cpu --display-name Python (torch_cpu)这样把当前环境作为Jupyter的内核注册进去。在Jupyter里通过内核菜单切换到你注册的“Python (torch_cpu)”即可。我之前第一次遇到这个问题时一度以为自己要把Jupyter卸了重装后来才发现只是内核注册的问题。5.2 系统默认Python把conda环境“顶掉”有时候在终端里明明已经激活了torch_cpu环境但执行某些脚本时脚本还是调用了/usr/bin/python3去运行。究其原因可能是脚本里的shebang明确写死了#!/usr/bin/python3或者你在conda环境里运行某些自定义命令时PATH没有被正确传递。处理方式python ~/your_script.py确保用当前环境的python来启动脚本不要依赖脚本的自动解释器。如果在IDE中运行一定要把解释器路径手动指定到conda环境里的那个python路径通常在~/miniconda3/envs/torch_cpu/bin/python。IDE自动选择的解释器很可能还是系统默认的手动指定才能彻底规避。5.3 pip和conda的库混装引起的不稳定我后来为了安装某个OCR模型库不小心用pip给torch_cpu环境装了一堆依赖其中就有一个提示要升级numpy。当时也没在意结果升级完后另一个库开始报错提示numpy版本不适配。这种依赖冲突的链式反应在conda环境下特别容易蔓延。我的建议是把conda当作基础环境工具而pip尽量只用来安装conda上没有的库。当某次升级造成冲突时第一反应应该是看看是不是conda列表里的某个包被pip悄悄替换了。如果已经冲突乱了直接重建环境往往比梳理依赖更省事conda deactivate conda env remove -n torch_cpu conda create -n torch_cpu python3.9 conda activate torch_cpu pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu6. 关于版本选择与Ubuntu版本适配的个人经验最后说说版本选择的思路。PyTorch的CPU版本安装其实和操作系统版本的适配关系不算紧密但和Python版本的适配关系非常关键。选错了版本在安装阶段可能不会立即报错但运行时会出现奇奇怪怪的符号缺失问题。Python 3.6及以下不再建议老的PyTorch版本安全性也无保障。Python 3.8-3.10是目前PyTorch最成熟的区间推荐新手直接选3.9。Python 3.11及以上可以装但部分第三方库可能还没跟上比如某些视觉库、音频库的预编译wheel缺失需要自己编译容易劝退新手。Ubuntu 20.04本身和Python 3.9的匹配度非常舒服系统库的兼容性也已经被大量验证过了。如果纯粹为了跑PyTorch CPU版我强烈建议固定在这个组合上能省掉很多排查时间。另外安装完以后最好顺手做一次环境备份把依赖全部记下来这样后面换机器或者重建环境都有现成清单可用pip freeze requirements.txt这个文件是对付“环境突然炸了”的后悔药。虽然没有GPUCPU推理慢一点但足够让学习模型、写论文实验、调试生产链路的过程变得顺畅。环境这东西干净、可控、可复现比什么都重要。