news 2026/10/16 1:09:43

Windows纯CPU版PyTorch安装全攻略:新手第一周环境配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows纯CPU版PyTorch安装全攻略:新手第一周环境配置指南

刚接触深度学习的人,十有八九都会卡在环境配置这一关。尤其是手头只有一台普通Windows笔记本、没有独立显卡的时候,一搜教程全是“CUDA、cuDNN、NVIDIA驱动”这些词,心里很容易发怵。这篇文章就是我实际走过一遍的Windows系统CPU版PyTorch安装全过程,也是我给自己定的“第一周”入门目标里最核心的一步。整个过程不需要显卡,不需要Linux,不需要翻来覆去改系统设置,就用一台集成显卡的笔记本,把PyTorch装好、验证通过,并且能顺利跑起来一个小训练任务。

如果你是纯新手,看完这篇文章能少走很多弯路;如果你装过但踩了坑,排查部分也许能帮上忙。下面从头梳理一遍。

1. 为什么CPU版PyTorch是新手的第一站

1.1 CPU版本到底能干什么

很多人有个误区,觉得不用GPU就等于“不能学深度学习”。其实完全不是这样。PyTorch本来就是一套深度学习框架,底层运算既支持GPU也支持CPU。CPU版本做的事情和GPU版本几乎完全一样:定义神经网络、计算梯度、做反向传播、跑卷积和全连接层……这些核心功能都在,只是具体的数学运算跑在CPU上,速度慢一些而已。

用CPU版来学习和理解深度学习的原理,反而是更合适的选择。因为模型很小、数据量不大,CPU足够应付,而且你不必一开始就跟显卡驱动较劲。等以后真要训练大规模模型、跑大数据集,再上GPU也不迟。把最基础的环境先搞定,才是最重要的。

1.2 CPU版与GPU版的差距

为了让你心里有底,我把两者的区别先列成一张表,实际用的时候就知道差异在哪里。

对比项CPU版GPU版
硬件要求任意普通CPU,无需独立显卡需要NVIDIA显卡且驱动支持CUDA
安装复杂度低,一条pip命令即可需要额外配置CUDA、cuDNN、显卡驱动
训练速度小模型够用,大模型明显慢速度快,适合大规模计算
程序代码与GPU版几乎完全一致支持.cuda()或device设置
学习门槛低,专注算法本身较高,还要弄清楚各种版本匹配关系

这里要特别说一句:新版的PyTorch中,CPU版和GPU版在代码层面区别非常小,最多就是声明设备时用device = torch.device("cpu"),这个即使以后升级到GPU也只需要改一行。所以完全不用担心学了CPU版以后白学。

1.3 选择CPU版的四个理由

第一个理由就是快,安装快。CPU版不需要下载CUDA工具包、不需要考虑显卡驱动,整体安装时间能压缩到十分钟左右,对新手特别友好。第二个理由是稳,不容易出幺蛾子,兼容性也更好。第三个理由是够用,学习阶段的线性回归、逻辑回归、简单图像分类,用CPU训练完全跑得动。第四个理由是便宜,不需要额外花几千块钱买显卡,一台普通办公本就能起步。

所以我一直建议真正想入门的人:第一周不需要纠结GPU,先把CPU环境装好,把代码跑通,把基础概念弄明白。这也是这篇文章标题里“第一周”的意义——这一周的任务不是追上别人多厉害,而是让自己稳稳地起步。

2. 准备工作:先搭好Python运行环境

2.1 到底选Anaconda、Miniconda还是裸Python

这一步是很多人刚开始容易纠结的。如果你之前已经装了Python,不一定需要卸载,但为了保证后面不出乱子,我强烈建议用conda来管理环境。

Anaconda像一个全家桶,里面带了几百个常用库,装完即用,但体积大;Miniconda像一个精简版,只带conda和最小依赖,需要啥装啥;裸Python就是直接官网下载安装包,配合pip一起用。给新手的建议是:用Miniconda或者Anaconda都行,我更推荐Miniconda,干净、不臃肿,还能避免后面环境变量冲突。

从官网下载Windows安装包时,注意选择64位的exe文件。安装时有个选项是“Add Anaconda to my PATH environment variable”,现在很多版本默认不勾选,这在后面用conda命令时可能会造成困扰,可以在安装时勾上,或者装完后手动把conda的Scripts目录加到PATH里。

2.2 把环境变量和虚拟环境一次搞清楚

环境变量不是难懂的东西,说白了就是告诉系统“你可以在哪些文件夹里找到可执行的命令”。装好Miniconda之后,你可以在开始菜单里找到“Anaconda Prompt”或者直接用PowerShell,输入下面这条命令验证:

conda --version

如果输出类似conda 24.1.2这样的版本号,说明conda已经能用了。

接下来创建一个干净独立的虚拟环境,这个虚拟环境就像给你安装PyTorch准备了一个“专用隔间”,以后装什么库都不影响系统里的其他Python程序。我自己创建环境的命令是这样的:

conda create -n pytorch_env python=3.9 -y conda activate pytorch_env

-pytorch_env是我给环境起的名字,你可以换成任何你喜欢的名字;python=3.9表示环境里默认的Python版本是3.9。

激活之后,命令行提示符前面会出现(pytorch_env)这样的前缀,说明你已经进入了这个虚拟环境。以后所有安装和运行命令都在这环境下进行,避免跟全局Python混在一起。

2.3 给pip和conda换个更快的源

安装PyTorch时最大的痛点往往是下载速度。默认情况下pip是去国外官方源拉包的,数据量一大就容易慢或者超时。解决办法是用国内的镜像源。

我这边用的清华源,配置pip的镜像源如下:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

这样配置一次之后,后续的pip命令都会自动走这个镜像地址。conda也可以换源,在用户目录下找到.condarc文件,写入以下内容:

channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

换源后建议运行conda clean -i清除缓存,然后测试一下下载速度。这一步能省下大量等待时间,值得提前做好。

3. 实战安装:三种方式实测记录

3.1 方式一:PyTorch官方CPU命令直装

这是最省事的方式。激活虚拟环境之后,直接执行官方提供的CPU版本安装命令。PyTorch官网的安装选择页面里,选好OS=Windows、Package=Pip、Language=Python、Compute Platform=CPU,它会给你一条现成的命令。

我实测过程中用的命令如下:

pip install torch torchvision torchaudio

这条命令默认安装的是当前最新的稳定版,如果配置了清华源,速度快到基本不用等待太久。但有一点要注意,默认情况下这条命令装的是GPU版本还是CPU版本,跟具体版本有关系。在你没有CUDA环境的时候,PyTorch会有一版叫“CPU版”的wheel包,而上面的下载逻辑是从官方源拉取,装到没显卡的机器上运行时可能会报错。所以更稳妥的做法是用下面这条指定CPU源:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

这是我实测最喜欢的方案。它会明确从PyTorch官方的CPU wheel目录拉取安装包,绝不跟你纠结CUDA的事。下载量在200MB左右,换不换国内镜像主要看网速,如果慢,可以再加入-i https://pypi.tuna.tsinghua.edu.cn/simple配合--extra-index-url一样用。不过官方CPU wheel地址有时候不在镜像里,所以我更推荐直接用官方地址,慢一点就耐心等,或者采取离线包方案。

3.2 方式二:用国内pypi镜像安装

如果你发现官方地址下载太慢,或者总是断流,可以在pip命令里直接指定国内镜像源:

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

这么做的好处是速度快,尤其是在网络不太稳定的情况下。但有个坑:很多国内镜像为了防止包体积过大污染存储,未必会同步最新的CPU wheel包,偶尔会遇到版本对不上的情况。我在实际测试中也遇到过torchvision版本和torch版本不匹配的问题。

比如你装好了torch 2.3.0,但torchvision从镜像里装出来是2.2.2,两个版本冲突,运行import torchvision时就会报module compiled with unexpected C++ ABI之类的错。解决思路是先装torch再接上torchvision,但版本要严格一一对应。PyTorch每个版本的torch、torchvision、torchaudio是一起发布的,必须匹配,具体对应关系在下面单独列。

3.3 方式三:conda离线包安装

如果你不想碰pip,也可以用conda直接安装。在虚拟环境里执行:

conda install pytorch torchvision torchaudio cpuonly -c pytorch

这里的cpuonly是一个关键标记,它表示只装CPU版本,不拉取任何CUDA相关组件。用conda装的优点是依赖管理很齐,会自动处理Python版本、numpy等库的对应关系,缺点主要是下载依赖时如果源慢会很痛苦,还有可能把环境中某些依赖给升级到不想要的新版本。

我个人的建议是:新手优先用pip方案,conda方案适合以后对conda比较熟悉了再用。

3.4 版本对照表与避雷建议

安装过程中会遇到版本匹配问题,这里给出我实测过的常见版本对应关系,方便你安装时对照。

PyTorch版本Python版本torchvision版本torchaudio版本
2.3.03.8-3.120.18.02.3.0
2.2.23.8-3.110.17.22.2.2
2.1.23.8-3.110.16.22.1.2
2.0.13.8-3.110.15.22.0.2
1.13.13.7-3.100.14.10.13.1

避雷建议就是一句话:装torch和装torchvision、torchaudio时,最好一次性指定相同的主版本和次版本数字,比如:

pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cpu

这样你就提前锁死了依赖关系,后面出错的概率会小很多。“能跑就行”和“一次性装对”之间,往往就差这一点细心。

4. 安装后的第一道验证:让训练真正跑起来

4.1 import测试与设备信息

安装完成后,先别急着写复杂代码。打开命令行,进入虚拟环境,输入python进入交互式解释器:

import torch print(torch.__version__)

如果输出2.3.0这样的版本号,说明核心安装已经成功了。这步虽然简单,但一定要做,因为很多看起来“玄乎”的问题,最后发现都是从第一步就没装上。

接着查看当前环境下的可用设备信息:

print(torch.cuda.is_available())

在CPU版下输出False是正常的,说明没有检测到CUDA设备,这也是预期结果。再看一下CPU信息:

print(torch.get_num_threads())

你会看到这台电脑CPU能用的线程数,一般是物理核心数乘以超线程数,这个数字会影响训练速度。如果要手动设置线程数,可以用:

torch.set_num_threads(4)

4.2 张量运算与自动求导

安装成功只是第一步,接下来要验证计算能力。PyTorch最核心的基本单位是张量(Tensor),你可以把它理解成带自动求导的多维数组。先跑一下张量创建和运算:

import torch x = torch.randn(100, 100) y = torch.randn(100, 100) z = x.mm(y) # 矩阵乘法 print(z.shape) # torch.Size([100, 100]) print(z.sum().item())

能正常输出结果,说明底层CPU数学库能正常工作。自动求导是深度学习的灵魂,再试试这一段:

w = torch.randn(1, requires_grad=True) loss = (w * 3 - 6) ** 2 loss.backward() print(w.grad) # 输出梯度值

这段代码相当于对f(w) = (3w - 6)^2求导,在w=2时导数应该为0。如果w.grad输出一个接近0的数值,说明反向传播机制正常。

4.3 安装torchvision与数据下载失败问题

跑完基础验证,新手一般会正式开始训练一个简单图像分类任务,这时你大概率会用到torchvision。它提供了大量经典数据集的下载接口,比如MNIST、CIFAR-10。如果你已经装好了,直接用:

from torchvision import datasets, transforms train_data = datasets.MNIST( root="./data", train=True, transform=transforms.ToTensor(), download=True )

但你很有可能会遇到一个问题:数据下载卡在某个进度之后就不动了,或者一直报连接超时。这是因为MNIST原始数据集的下载地址在国外的服务器上,网络环境不好时会失败。解决方法是先手动下载MNIST数据集的四个关键文件,然后放到./data/MNIST/raw/目录下,PyTorch会自动识别并跳过download。这四个文件分别是:

  • train-images-idx3-ubyte.gz
  • train-labels-idx1-ubyte.gz
  • t10k-images-idx3-ubyte.gz
  • t10k-labels-idx1-ubyte.gz

如果你用的不是MNIST,而是其他常见数据集,也可以用国内镜像下载或者把下载好的文件手动放到对应目录。总之一旦下载卡住,先别怀疑代码写错,检查下载源和网络是正事。

4.4 第一周小目标:跑一个MNIST训练片段

为了让“安装成功”这件事不只是一句口号,我建议第一周给自己设置一个明确的小目标:用CPU跑通一个MNIST训练片段,不要求跑完所有epoch,跑一个epoch甚至几十个batch都足够验证环境。

这里我给一个极简可运行的代码示例:

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms train_dataset = datasets.MNIST( root="./data", train=True, transform=transforms.ToTensor(), download=True ) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) # 一个非常简单的两层神经网络 model = nn.Sequential( nn.Flatten(), nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 10), ) loss_fn = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) for batch_idx, (data, target) in enumerate(train_loader): output = model(data) loss = loss_fn(output, target) optimizer.zero_grad() loss.backward() optimizer.step() if batch_idx % 100 == 0: print(f"Batch {batch_idx}, Loss: {loss.item():.4f}") if batch_idx >= 200: # 只跑200个batch,作为验证 break print("CPU 训练验证通过")

运行这段代码,如果能看到loss从2.3左右逐渐下降,比如100个batch后降到0.5左右,就说明你的PyTorch环境已经可以正常训练了。CPU跑这200个batch在我的测试机器上只需要十几秒,完全在可接受范围内。

5. 第一周里最常见的坑与排查方法

5.1 报错速查表

下面这张表是我自己踩过之后整理的,也是给“第一周”的同学最直接的排查指引。

现象原因解决办法
ModuleNotFoundError: No module named 'torch'没装成功,或者没进入虚拟环境重新执行安装命令,确认命令行前缀有(pytorch_env)
下载慢,卡在某个百分比不动网络问题,或者正在连国外源换清华源,或者用官方CPU wheel地址
AttributeError: module 'torch' has no attribute 'cuda'装的不是PyTorch,可能是同名冲突库卸载后重装,用pip uninstall torch清理
版本不匹配报错torch和torchvision版本号不一致用pip list检查版本,或者重新指定一组对齐版本
CondaHTTPErrorconda源没配好或网络问题检查.condarc配置,换国内conda镜像源
Unable to find installation candidatesconda找不到匹配包更新conda,或者改用pip安装
训练时CPU占用率始终很低线程数没优化调用torch.set_num_threads(4)等方法提高线程数

5.2 网络下载有关的特定处理

PyTorch相关下载包括两部分:包本身的下载和数据集的下载。包本身可以通过镜像解决,数据集则相对麻烦。我实际测试中,如果用官网直连下载MNIST数据,经常断断续续。后来手动下载四个文件放进去,速度一下就稳了。

另外还要提醒一点:有些数据集下载接口会从公开网址拉取,这类地址偶尔会变动。如果遇到下载失败,先在浏览器里打开那个URL,看能不能正常下载。如果浏览器能下载,说明只是Python端的连接问题,试着手动放置文件就行。

5.3 环境混乱后的彻底清理方法

刚开始装环境,很容易重复安装或者装错版本,搞得环境一团糟。最简单的办法是直接删掉虚拟环境重来:

conda deactivate conda remove -n pytorch_env --all

然后重新创建环境、重新安装,整个过程也就十分钟。删环境是一个“不心疼”的过程,因为里面并没有什么不可再生的数据。

如果你只是觉得torch相关包存疑,也可以在环境内卸载干净再装:

pip uninstall -y torch torchvision torchaudio

卸载完成后可以检查一下:

pip list | findstr torch

看到没有任何torch开头的包,再重新安装。我自己的习惯是:环境一乱就删除重建,干净利落。

6. 接下来一周还能做什么

6.1 动手建议

安装不是目的,用起来才是。“第一周”剩下的时间,可以给自己安排几个阶梯式的小任务。

第一天,用张量实现一次线性回归,完全手写梯度下降,不看任何框架封装,这样能理解梯度到底是什么。第二天,用PyTorch的autograd自动求导改写线性回归,感受框架替你做了什么。第三天,训练一个多层感知机在MNIST上跑分类,熟悉nn.Module、DataLoader这些核心API。第四天,尝试调参:改学习率、改batch size、改网络层数,记录loss曲线变化。第五天,尝试把MNIST的网络结构换成卷积层,看看效果怎么变化,也可以顺带熟悉一下torch.nn.Conv2d。

这些任务都不需要GPU,CPU完全可以扛住。你会发现,当你动手写完这些,对深度学习背后的数学和工程实现会有很不一样的感觉。

6.2 关于“第一周”这个起点的一点体会

我始终觉得,学深度学习最难的不是算法,也不是代码,而是“起步”时的环境搭建和心态调整。CPU版PyTorch对很多人来说是个“次优选择”,但恰恰是这个次优选择让门槛降到了最低。

装完环境、跑完训练验证之后,你会突然觉得很多东西开始变得顺理成章。以后再看到GPU、CUDA、分布式训练,也不会觉得无从下手。到了第二周,再去了解GPU版本怎么装、怎么配置CUDA,你会发现它们之间其实只是差了一个硬件的设置而已。

这也是为什么我会把“第一周”这个时间节点单独拎出来写——它代表的不是“我还没用上GPU”的遗憾,而是“我已经把最关键的起步问题解决了”的踏实感。保持这种“先把一件事做到底”的状态,后面学任何东西都很顺。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 1:09:09

unique_ptr自定义删除器与lambda实战:从原理到踩坑全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:08:28

小样本图像分类的极简基线:预训练特征+逻辑回归

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:07:22

TasNet原理与代码复现:时域语音分离实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:07:21

串联电池均衡方案实战:MP2642与TM4C1294构建BMS核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:07:21

钉钉小程序录音播放完整实践:从录音到上传避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:06:28

Python异常体系的核心:raise与assert的用法、机制与选型边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华