开始学PyTorch的第一周,我差点在安装环节直接放弃。笔记本只有一个普通的CPU,没有独立显卡,打开官网安装页面,满屏的CUDA、cuDNN、GPU选项让人头大。当时心里最大的疑问就是:没有显卡是不是就学不了PyTorch?这周结束我可以明确回答:不是。在Windows系统上,纯CPU环境不但能装好PyTorch,而且第一周所有学习任务都跑得动。这篇就把我这一周的完整过程写下来:安装前需要确认哪些环境、pip和conda两条路线怎么选、装完怎么验证、第一周最容易在哪儿翻车。内容不复制官网文档,全部来自真实操作,每一步都给出了命令和排查思路。准备学PyTorch、正卡在装环境这一步的朋友,可以直接照着走一遍。
1. 第一周只装CPU版:这个决定是怎么想清楚的
1.1 入门阶段的计算量,CPU真的扛得住
第一周的学习任务我列一下,你对照自己是不是也差不多:
- 张量的创建、切片、变形、四则运算
- 自动求导(autograd)机制
- 跑一个线性回归或者逻辑回归
- 最多再试一个手写数字识别的小网络
这些任务用CPU完成是什么体验?以线性回归为例,200个样本、100轮训练,我这次实测不到两秒就跑完。手写数字识别如果只是教学用的简单网络,一个epoch几十秒,整个训练几分钟也能接受。真正需要GPU的是后面那些大模型、大批量、大矩阵的场景,第一周完全到不了那个量级。
我之前也担心装了CPU版是不是走了弯路,后来想明白一件事:CPU版和GPU版在代码层面没有任何区别,唯一的区别是计算后端不同。也就是说,你现在写出来的每一行PyTorch代码,将来换成GPU环境一样能跑。第一周装CPU版不是妥协,而是把精力省下来放在真正该学的东西上。
1.2 CPU版和GPU版除了速度,还差什么
很多初学者会把GPU版脑补成一个功能更全的高级版,其实不是。我做了个简单对比:
| 对比项 | CPU版 | GPU版 |
|---|---|---|
| 安装包体积 | 几百MB级别 | 2GB以上 |
| 外部依赖 | 基本没有硬性要求 | 需要NVIDIA驱动,或本身捆绑CUDA运行时 |
| 代码API | 完全一样的torch | 完全一样的torch |
| 计算设备 | 始终用cpu | 代码里显式指定cuda才用GPU |
| 适合场景 | 学习、调试、小规模实验 | 大模型、大规模训练 |
这里有个反直觉的点值得多说一句:就算你装了GPU版,只要代码里没写.cuda()或者device='cuda',训练还是跑在CPU上的。所以第一周即使装了GPU版,你大概率也不会真的用到GPU。既然如此,何必为了一个暂时用不上的功能,多下载2GB安装包、多处理一堆环境依赖呢?
1.3 以后想换GPU,代价比你想象的小
这一周结束时,我特意验证了一下换GPU版的流程,结论是几乎无痛。操作无非是新建一个conda环境,再用GPU对应的安装命令装一次,代码一行都不用改。你甚至可以把CPU版和GPU版放在两个不同的conda环境里共存,互不干扰。也就是说,现在先装CPU版,完全不会给以后升级埋坑,第一周这个决定可以做得心安理得。
2. 安装前的环境自查:版本、环境与下载速度预判
2.1 Python版本与位数:少了这一步,后面会莫名奇妙
安装前最关键的一件事,不是急着敲命令,而是确认Python环境。PyTorch官方只支持64位的Python,并且对版本有要求。就当前稳定版来说,一般支持3.9及以上,但我个人建议直接用3.10或3.11。太新的版本有时候反而麻烦,因为torchvision这些配套库对新版Python的适配往往会慢半拍。
检查命令:
python --version python -c "import platform; print(platform.architecture())"如果输出里没有64bit字样,说明是32位Python,PyTorch装不了,需要先换一个64位版本。还有Windows上有个常见情况:装了应用商店版Python,终端里输python会打开应用商店而不是真正的解释器。遇到这种情况就别浪费时间了,直接装一个干净的原版Python或者Miniconda,省得后面排查到崩溃。
2.2 用conda还是venv:我为什么选了conda
第一周装PyTorch,会连带着装上numpy、typing-extensions、sympy、networkx、jinja2等一系列依赖。如果直接用系统Python装,一旦你以后还要搞别的项目,很容易出现一个项目升级了库、另一个项目就跑不了的局面。
我这一周选择的是conda环境,理由很实在:一条命令创建独立环境,将来换GPU版时再新建一个环境就行,互不污染。如果你已经熟悉venv也没问题,本质是一样的。
conda create -n torch_cpu python=3.10 -y conda activate torch_cpu创建完之后,先确认终端提示符前面出现了(torch_cpu),这一步漏了后面全乱。举个例子,如果你激活环境失败,后面所有包都会装到base环境里,到时候排查问题的成本比现在多花两分钟的成本高得多。
2.3 磁盘空间:看起来不起眼,最容易被忽略
PyTorch CPU版本身不算特别大,但算上依赖、虚拟环境和下载缓存,建议你预留5GB以上。我一个环境装下来大概占用了3GB多。如果你的C盘常年飘红,建议给conda换一个数据目录,或者干脆把环境建到其他盘。不要装到一半才想起来磁盘不够,conda装了一半的脏环境清理起来很麻烦,而且很容易在下次建环境时留下一些难以察觉的后遗症。
2.4 下载慢的真正瓶颈与提前应对
这一周我观察到一个现象:很多人说安装失败,其实不是安装命令错了,而是网络下载超时或中断。PyTorch的安装包在几百MB量级,网络不给力的时候,卡在下载阶段半小时很正常。
面对这个问题,我的思路是先分清下载来源:pip装CPU版时,包来自PyTorch官方的CPU索引地址(download.pytorch.org/whl/cpu);conda装时,包来自pytorch频道。如果你所在网络访问官方源很慢,可以提前准备一个下载工具,把对应的whl文件或conda包先拉到本地再安装,能省下反复重试的时间。
具体到pip路线,还有个细节值得注意:普通的pip镜像只加速PyPI上的包,而CPU版torch走的是独立索引,镜像不一定覆盖。所以要么直接用官方源慢慢下,要么手动下载whl到本地再pip install 本地文件,两者都不复杂。提前判断好这条路径,安装过程能少受很多罪。
2.5 完全没装过Python怎么办
如果你这台Windows机器上什么开发环境都没有,我的建议是直接装Miniconda。它体积小、自带Python和包管理,一条命令建环境,初学者用起来最省心。装的时候注意两点:一是安装器如果有把conda加入PATH的选项就勾上,二是装完之后重新开一个终端,确保环境变量配置生效再开始操作。别在刚装完的旧终端里直接敲命令,那个终端可能还没拿到最新的PATH,指不定就给你来一个找不到conda的提示。
3. pip和conda两条路线:完整命令与选择逻辑
3.1 路线一:pip装CPU版(我最推荐的方案)
激活环境之后执行:
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu这里有三点要解释清楚。第一,为什么用python -m pip而不是直接敲pip?因为在Windows上系统里可能同时存在好几个Python,直接敲pip很可能用的是另一个环境,装了等于白装。用python -m pip等于明确告诉系统:让当前这个Python对应的pip来装。
第二,三个包分别干什么?torch是核心框架;torchvision提供常用数据集、预训练模型和图像相关工具,绝大多数教程都会用到;torchaudio负责音频。如果你只是先学张量操作,只装torch也行,但从实用角度看,一次装齐最省事,省得后面跑教程跑一半发现缺包,再回头折腾环境。
第三,--index-url是关键。它会告诉pip只从CPU专用的索引地址下载,拿到的就是后缀带+cpu的版本。如果你漏掉这个参数,默认就会从PyPI拉取带CUDA的版本,下载量直接翻好几倍,安装时间肉眼可见地变长。我第一次没注意,看到下载进度条走了快2GB才发现不对劲,赶紧停掉重来。
下载完之后,包会自动安装好依赖。整个过程主要时间都花在等torch这个大包下载上,网络正常的话十几分钟能完成。装完之后顺手看一眼输出日志里有没有报错,有红字的Warning可能无所谓,但如果是Error一定要停下来处理。
3.2 路线二:conda装CPU版
同样是激活环境之后:
conda install pytorch torchvision torchaudio cpuonly -c pytorch这里的cpuonly是PyTorch在conda频道里提供的一个标记包,作用就是告诉conda我要CPU版。conda的优点是依赖解析比较完整,会自己处理所有配套库;缺点是依赖解析阶段有时会卡好几分钟,屏幕上一直显示Solving environment。这不是死机,如果电脑风扇在转,说明它还在干活。等待时可以看一眼任务管理器,确认CPU有占用,耐心等等就好。
如果解析时间长得离谱,可以试试把频道优先级调成flexible,或者搭配conda-forge频道一起搜索。但一般来说,默认命令在大多数机器上都能顺利跑完,不用一开始就搞复杂的配置。
3.3 两条路线怎么选:我的判断依据
说实话两条路都能装成功,区别在于使用习惯和网络条件。我列个简单的选择表:
| 场景 | 推荐路线 |
|---|---|
| 想要最新版本PyTorch | pip,官方索引版本更新最快 |
| 懒得手工管理依赖 | conda,依赖自动解决 |
| 官方源下载非常慢,但有下载工具 | 手动下载whl,再pip安装 |
| 习惯用conda管理多个项目环境 | conda |
| 只用venv或裸pip | pip |
我个人第一周用的是路线一,顺手记录一下结果:安装完成后在环境里执行pip list,能看到torch、torchvision、torchaudio都到齐了,环境里也没有多余的东西。选择路线一还有个私心:它的安装日志更直白,每个包下到多少都看得一清二楚,出错时更容易判断是哪一步出了问题。
3.4 安装中断了怎么办
安装过程最怕下到一半断网。pip有断点续传能力,重新执行同样的命令会继续利用已下载的部分,大概率能接着完成。conda如果中断,先执行conda clean -a清理缓存,再重新安装。还有个小提醒:不要同时开好几个终端重复执行安装命令,那样容易产生锁冲突,报出类似Another conda process is running的提示。真遇到这种提示,把多余的终端关掉等一会儿就行,别急着去删什么文件。
4. 验证环节:装好和装对是两件事
4.1 第一步:看版本号里有没有+cpu
安装结束先别急着高兴,用一条命令验证:
python -c "import torch; print(torch.__version__)"如果输出类似2.x.x+cpu,恭喜,装对了。那个+cpu后缀是识别CPU版最重要的标志。如果你看到的是+cu118、+cu121这种,说明下载的是带CUDA的版本,这一周用不上也没关系,只是白占了磁盘空间,回头换个命令重装一遍就行。
再顺便确认一下这台机器没有可用CUDA设备:
import torch print(torch.cuda.is_available()) # CPU版输出 False,这是正常的很多新手看到False会以为自己装坏了,其实对CPU版来说,这个结果是完全正确的。CPU版没带CUDA后端,cuda.is_available()返回False天经地义。
注意:
cuda.is_available()输出False不是安装失败,是CPU版的正常表现。想再多确认一步,可以看torch.backends.mkl.is_available(),一般返回True,说明Windows CPU版用的MKL数学库正常加载。
4.2 第二步:跑张量操作,确认计算和自动求导都正常
光import成功还不够,得让torch真正算点什么。第一周最常遇到的两个基础能力,一个是矩阵运算,一个是自动求导,我直接用一个小脚本验证:
import torch x = torch.randn(4, 4) print("x:", x.shape) y = x @ x.T print("y:", y.shape) z = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) loss = z.pow(2).sum() loss.backward() print("z.grad:", z.grad)如果脚本能一路打印到底,说明张量运算和autograd都没问题。特别是z.grad能输出tensor([2., 4., 6.])这种值,说明自动求导链路是通的。这一步其实是模仿你后面学习时会反复用到的基础流程,提前跑通会很有安全感。
4.3 第三步:跑一个第一周级别的小任务
验证的最高标准,是用完整的小任务跑通整个训练链路。我选了线性回归,数据是造的,模型只有一个线性层,代码很干净:
import torch import torch.nn as nn import torch.optim as optim torch.manual_seed(0) X = torch.randn(200, 1) * 2 true_w, true_b = 3.0, 1.0 y = true_w * X + true_b + torch.randn(200, 1) * 0.1 model = nn.Linear(1, 1) criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01) for epoch in range(100): optimizer.zero_grad() loss = criterion(model(X), y) loss.backward() optimizer.step() if epoch % 20 == 0: print(f"epoch {epoch:3d}, loss = {loss.item():.4f}") print("学习到的权重:", model.weight.item(), "偏置:", model.bias.item())我跑下来的结果是100轮大约不到2秒就结束,拟合出的权重和偏置落到了合理范围内。这说明CPU环境跑入门教学任务完全没问题,你就放心往下学吧。如果你后面要用手写数字识别,torchvision自带MNIST数据集,下载也就几十MB,第一周完全可以安排上,只是首次运行时需要联网确认一下数据集目录。
提示:第一次跑
torchvision.datasets.MNIST时,程序会在root参数指定的目录下载数据集。如果下载特别慢,可以手动把数据集压缩包放进去,程序检测到文件后会自动完成解压和处理。
4.4 性能预期:别拿CPU和GPU比速度
CPU版在入门阶段够用,但到了真正大规模训练,速度差距是数量级的。第一周你不需要追求速度,但心里要有数:如果后续发现一个epoch要十分钟以上,就该认真考虑GPU环境了。在这之前,CPU版的学习体验是很友好的,跑小任务几乎不觉得卡,调试错误也方便,反而是入门阶段的理想选择。
5. 第一周防坑手册:五个高频问题的排查链路
这一周下来,我自己踩的坑不算多,但在不少学习群里看到同样第一周的朋友卡在同类型的问题上。我把最高频的五个整理出来,每个都按现象、原因、排查、修复来讲,希望你能直接跳过这些坑。
5.1 在错误的Python环境里装包
现象:终端里import torch成功了,换一个终端或者换一个目录又报ModuleNotFoundError;或者明明刚装完,在另一个终端里pip list却找不到torch。
原因:Windows系统里经常同时存在多个Python,pip和python可能指向不同环境。
排查链路:
where python where pip python -m pip --version如果where输出的路径和你以为的不一致,基本就定位了。比如你明明激活了conda环境,但where python第一个结果是C盘的某个Python安装目录,那就说明环境激活没有生效,或者当前终端还在用旧路径。
修复:以后统一用python -m pip安装,装完必须用python -c "import torch"验证,不要只看pip list就认为大功告成。如果你用的是conda环境,养成习惯,每次开终端先conda activate torch_cpu,看到提示符前有(torch_cpu)再操作。
5.2 没加--index-url,结果装成了GPU版
现象:安装过程异常漫长,下载量显示有好几个GB;torch.__version__输出带+cu后缀而不是+cpu。
原因:PyPI上的默认torch包在Windows平台是带CUDA运行时的大包,没指定CPU索引时很容易中招。我自己第一周就踩过一次,看下载进度条走了很久才意识到命令少了参数。
排查:看版本号后缀,几秒钟就能确认。
修复:
python -m pip uninstall torch torchvision torchaudio -y python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu重新安装后再次确认版本带+cpu。如果之后真想换GPU,也是同样的流程,换索引地址重装即可。
5.3 IDE里import torch报错
现象:终端里一切正常,但PyCharm或VS Code里运行同样的代码却说找不到torch。
原因:IDE默认用的解释器是系统Python,不是你创建的那个conda环境。
排查:看IDE右下角或设置里的Python解释器路径,是不是指向torch_cpu环境下的python.exe。
修复:在IDE的项目配置里选择解释器为conda环境的Python,通常路径形如.../envs/torch_cpu/python.exe。选对之后,IDE会自动识别这个环境里已装的所有包,代码自动补全也能跟着工作,体验会好很多。
5.4 torch和torchvision版本不匹配
现象:单独装了torch之后,再装torchvision会提示找不到匹配版本,或者运行时torchvision.transforms直接报错。
原因:torchvision和torch之间有严格的版本对应关系,不是一个能随便配另一个。单独安装时很容易出现一个最新、一个稍旧的情况。
修复:最简单的方法是永远用同一条命令一次装齐三个包,不要分开装。如果已经分开装了,就全卸载再来一遍。真要手工对应,记得先查一下torch和torchvision的版本配对表,比如torch 2.4对应torchvision 0.19这种,一对一对地装,别抱侥幸心理。
5.5 卸载或升级之后,旧版本残留
现象:明明卸载了旧版torch,import torch还是能成功,或者显示的版本号还是旧的。
原因:系统里可能还有另一个位置的旧包,或者是IDE缓存了旧的解释器信息。
排查:
import torch print(torch.__file__)看这个文件路径指向哪里,就能找到真正被加载的torch是哪个环境里的。如果发现有多个site-packages目录里都有torch,按需清理即可。这个排查办法不只适用于torch,遇到任何包版本不对的问题都能用,是个通用的定位手段。
修复:确认哪些环境是你不需要的,删除多余环境对应目录下的包;如果是IDE缓存问题,重启IDE或者重建项目索引。清理干净之后,再重新执行一次版本验证,确保输出的是你期望的那个环境。
6. 第一周结束时的一点实际体会
装完之后,我又花了点时间把官方快速入门教程从头到尾跑了一遍。说实话,第一周的任务不是冲进度,而是把环境这两个字彻底搞定,让它不再成为后面学习路上的拦路虎。CPU版这个选择,帮我把注意力全部留给了张量、自动求导和训练流程本身,而不是跟显卡驱动和CUDA版本较劲。第一周能达到什么状态?在我看来很简单:打开终端,激活环境,import torch不报错,能跑通一个完整的训练小循环,这周就值回票价了。环境的问题解决得越干净,后面几周进入模型、损失函数、优化器这些概念时,你会少掉一大半无谓的心烦。剩下那些更深入的内容,咱们下周继续。