☰
Windows上安装PyTorch实战指南:CUDA版与CPU版避坑全流程
2026/10/15 17:46:35 网站建设 项目流程

说件糟心事。上周帮同组同事配台新笔记本的 PyTorch 环境,Windows 11、刚开箱的系统,按理说半小时收工,结果折腾了两个多小时。原因是同事照着网上某篇三年前的教程一步步点,装完才发现 CUDA 压根调用不上,驱动又不敢乱动,只能从头逐项排查。这种事我见得太多了——Windows 上装 PyTorch 本身不难,难的是你根本不知道面前这篇教程是写给哪个版本、哪个环境、哪块显卡的。这篇文章就是把我在 Windows 上反复配环境的经验一次说清,覆盖 CPU 版和 CUDA 版两条安装路线、环境验证、常见报错排查,以及那些官方文档不会告诉你的细节。刚入门深度学习的同学、需要给同事配开发机的工程师,都可以照着做,省得再踩一遍我踩过的坑。

1. 开始之前先想清楚三件事

Windows 上配 PyTorch,失败案例九成不是因为操作错,而是因为一开始的选型就没想明白。动手敲命令之前,我建议你先确认三个问题:用什么方式跑 PyTorch、机器上是什么显卡、以及选 conda 还是 pip。这三件事定了,后面就不会反复推翻重来。

1.1 三条路线怎么选:原生 Windows、WSL2 还是 Docker

不少人以为深度学习一定要跑在 Linux 上,Windows 只是不得已的选择。这个观念对,但不全对。实际项目里,Windows 跑 PyTorch 有原生、WSL2、Docker 三条路线,各自适合的人群完全不同。

原生 Windows 是最直观的路线,直接在系统里装 Python、装 PyTorch,双击脚本就能跑。优点是没有虚拟化开销,文件访问直观,适合调试单卡训练、跑跑小模型、给课程作业写代码的学生。缺点也明显:Windows 的深度框架生态里,很多 Linux 下习以为常的操作(比如某些分布式训练的通信库)经常出现兼容性问题,遇到问题你在网上搜 "Windows 版" 这个关键词,资料量直接少一半。

WSL2 是我自己最常推荐的路线。WSL2 本质是 Windows 上的轻量虚拟机,跑着一个完整的 Linux 内核,你在里面用的是 Linux 版的 pip 包、Linux 版的 CUDA 工具链,踩坑搜索资料时直接搜 Linux 方案就行,适配问题的概率小很多。性能方面,WSL2 的 GPU 透传通过 Windows 的 WSL 驱动实现,基准测试下来和原生 Linux 的差距在个位数百分比以内,日常训练完全够用。代价是你要习惯"文件在 Windows 侧,项目在 WSL 侧"的双系统文件访问,跨盘读写会有 IO 损耗,而且刚开始接触的同学会觉得"多了一层东西"。

Docker 则更适合需要复现他人环境、或者要交付给多个同事共用环境的场景。把镜像一拉,环境全在容器里,和宿主机隔离得干干净净。但 Docker Desktop 在 Windows 上跑 GPU 需要配置 WSL2 后端,本身就依赖前两条路线的基础,所以我不建议新手第一步就上 Docker。

三者的关系不是互斥的,反而像俄罗斯套娃:如果你是新手,先装原生 Windows 那条线;如果你要长期做深度学习,干脆一步到位用 WSL2;Docker 是进阶工具,等前两种都熟练了再接触。

1.2 看清你的显卡和驱动,再决定装哪个版本

无论走哪条路线,有一个检查你绝对绕不开:显卡是什么、驱动是什么、算力够不够。很多人在这一步偷懒,直接导致后面 CUDA 装不上或者 PyTorch 检测不到 GPU。

先打开命令行,输入nvidia-smi,能看到显卡型号和当前驱动版本。右上角显示的 "CUDA Version: 12.4" 不是你系统里装了什么 CUDA,而是你的驱动最高支持到哪个 CUDA 版本。这个数字是上限,你后续装 PyTorch 时选的 CUDA 版本只要不超过它就不会有驱动问题。

然后确认你的显卡算力。PyTorch 官方对显卡的最低算力要求一般是 3.5 以上,老一点的 GTX 750、GTX 960 还能用,但再老的卡基本就没法跑新版本框架了。查自己显卡算力的方法很简单,打开浏览器搜 "显卡型号 compute capability",对照表一查便知。如果你的显卡是集成显卡或者非常老的独显,也别灰心,CPU 版照样能跑深度学习实验,只是速度慢几个数量级,用来学原理、调代码完全可行。

显存大小也要心里有数。我自己给实验室配机器时遇到过这种情况:显卡是够新,但显存只有 4GB,装完一个稍大的预训练模型就显存溢出。不是环境问题的报错,折腾半天才发现是显存不够。所以装环境前先记住自己显卡的显存,至少知道默认 batch size 该调多少。

1.3 conda 与裸 Python:环境管理的核心逻辑

第三个决定是环境管理工具。Windows 下装 Python 生态工具有两条主流路线:一条是直接用 Python 官方安装包加 venv 虚拟环境,另一条是装 Anaconda 或 Miniconda 再用 conda 管理环境。

我的建议非常简单:深度学习方向,直接用 Miniconda。Anaconda 自带的几十个预装包对深度学习日常使用而言九成是冗余,Miniconda 只有 conda 本体和 Python,轻量且可控。从裸 Python 开始装也不差,但深度学习的依赖链非常长——NumPy、SciPy、OpenCV、PyTorch——每个包都要求特定版本组合,Python 官方 venv 不是不能用,而是依赖解析能力相对弱,遇到版本冲突时你会被折腾得怀疑人生。conda 的核心优势在于它有一个独立的依赖解析器,能自动帮你算出一套互相兼容的版本组合,把冲突概率降到最低。

另外不少人有一个误解:装 PyTorch 时,conda 里的 Python 版本和 PyTorch 必须严格对应。其实 PyTorch 官方提供的是编译好的 wheel 包,只要你用 conda 建好环境,然后激活环境再安装,Python 版本在 3.9 到 3.12 之间基本都能匹配上。唯一要注意的是别用太新的 Python——有些 PyTorch 版本还没跟上,后面我专门讲版本选择。

2. 实操安装:CUDA 版与 CPU 版两条线

这几件事想清楚之后,就可以上手装了。下面是 Windows 原生环境的具体过程,WSL2 用户把命令行换成 WSL 终端就行,原理完全一致。

2.1 先用 Miniconda 把环境创建好

第一步永远是安装 Miniconda。去官网下载 Windows 安装包,双击安装,基本上全选默认即可,但有一个选项建议勾上:把 conda 加入系统 PATH。虽然 Anaconda 官方建议不勾,理由是避免和系统其他 Python 冲突,但实际工作中勾上会让命令行调用方便很多。如果你担心冲突,也可以不勾,每次用 Anaconda Prompt 打开也一样。

装好后打开一个新终端,确认 conda 可用:

conda --version

然后创建并激活一个专属环境,名字随意,比如我常用torch:

conda create -n torch python=3.10 -y conda activate torch

为什么我建议 Python 选 3.10 而不是最新的 3.12?这是实用主义的妥协。PyTorch 官方对每个版本支持的 Python 范围有限,3.10 是目前兼容面最广的版本,几乎所有 PyTorch 版本都有对应的 wheel,第三方库也几乎都能装。等你在新版本里遇到某个库还没有 wheel 包的时候,就会感谢当初的这个选择。

2.2 CPU 版安装:一条命令但别急着点回车

CPU 版是最稳的一条路,不用考虑 CUDA、显卡驱动这些乱七八糟的东西,适合纯学习、代码调试、模型推理。命令非常简单:

pip install torch torchvision torchaudio

注意,直接这么装在 Windows 上会走到默认的 PyPI 源,速度慢不说,有时候还会因为网络问题下载到一半中断。国内用户建议加镜像参数:

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

但这里有个细节很多人不知道:PyTorch 官方在 pip 上的默认包是带 CUDA 依赖的版本,体积巨大,一套下来可能超过 2GB。如果你只想装 CPU 版,应该到 PyTorch 官网的安装页面选 "CPU" 标签,复制对应的 index-url 命令:

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

这样装下来的包体积小一个量级,安装时间少一大半,还不容易下载失败。不过用 CPU 版就意味着你彻底放弃 GPU 加速,跑大模型会非常煎熬,建议预算允许的读者还是优先走下面的 CUDA 版。

2.3 CUDA 版安装:关键是选对安装命令

CUDA 版安装也没有想象中复杂,正确流程分两步:第一步确认驱动,第二步用 PyTorch 官方命令安装。

驱动这一步,前面已经看了nvidia-smi,只要驱动版本不是古董,直接跳过手动装 CUDA 和 cuDNN。这里我必须强调一个最常见的误解:很多人以为装 PyTorch 前要先去下载 NVIDIA 的 CUDA Toolkit 完整包,再装 cuDNN,配置环境变量,折腾一圈。其实完全没必要。PyTorch 的 wheel 包已经把运行 PyTorch 所需的 CUDA 运行库打进去了,你要做的是用nvidia-smi确保驱动能支持你选的 CUDA 版本,剩下的交给 pip 就行。手动装整套 CUDA Toolkit 这种操作,是给做 CUDA 原生开发的人准备的,和用 PyTorch 的人八竿子打不着。

接下来去 PyTorch 官网安装页面,选择你的系统、安装方式(pip 或 conda)、CUDA 版本。官网会给你生成对应的命令。截至我写这篇文章的经验,推荐优先选 CUDA 11.8 或 CUDA 12.1 的版本,因为它们的生态最成熟,第三方扩展支持也最全面。以 CUDA 12.1 + pip 为例,命令是:

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

conda 用户也可以选官网提供的 conda 命令,但实测 conda 从默认源安装 PyTorch 时速度非常慢,经常卡在 "Solving environment" 那一步。我的建议是:用 conda 建环境,用 pip 装 PyTorch,这是两种工具的最佳组合。conda 负责管理 Python 版本和虚拟环境,pip 负责把 PyTorch 装进来,互不冲突,还避开了 conda 源慢的问题。

2.4 镜像源下载失败的临时思路

如果下载 PyTorch 的 wheel 包时网络不给力,做了镜像源还是慢,可以临时切换 pip 源到国内镜像。清华、阿里云、中科大这几个镜像都有 PyTorch 的 CUDA 版本包,直接指定镜像源即可:

pip install torch torchvision torchaudio -i https://mirrors.aliyun.com/pypi/simple/

注意不是所有国内镜像的 PyTorch 包都包含 CUDA 版本的 wheel,如果你发现装下来的包是 CPU 版,或者装完检测不到 GPU,先检查是不是镜像源的包不带 CUDA。这种情况不算罕见,我建议还是优先用 PyTorch 官方 index-url,网络实在不行再用镜像,并在装完后务必验证 CUDA 是否可用。

3. 验证环境:能不能用不是你说了算,是这几条命令说了算

装完包只是第一步,"能用"和"看起来能用"之间差了十万八千里。我见过太多人兴高采烈地说装好了,结果一跑torch.cuda.is_available()返回 False,又花半天排查。所以验证环节不能省,我按由浅入深的顺序给你一套完整的验证流程。

3.1 先验证 import 和版本信息

激活环境后,在命令行敲:

python -c "import torch; print(torch.__version__)"

正常会输出类似2.4.1+cu121的版本号,看到+cu121就说明装的是带 CUDA 12.1 支持的版本。如果只有2.4.1或者标注了+cpu,那你装的是 CPU 版,要么你本来就要装 CPU 版,要么就是命令没用对。

这一步也能顺手排查一个经典问题:如果你电脑上同时有多个 Python 环境,命令行输入python指向的可能是系统自带的旧版 Python,而不是 conda 环境里的 Python。这时候 import torch 会报 "No module named 'torch'",但明明你刚装好。解决办法是确认当前终端显示的环境前缀是(torch),以及用where python看实际调用的是哪个路径。

3.2 验证 CUDA 是否真正可用

紧接着验证 CUDA:

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

两行输出分别是True和你的显卡型号名。看到True就说明 PyTorch 已经成功和显卡驱动通信了。

这里有个容易混淆的点值得单独说明:torch.version.cuda这个属性显示的是 PyTorch 内置的 CUDA 版本,比如 12.1,而nvcc --version显示的是系统里有没有安装 CUDA Toolkit。这两者经常不一样,但只要你用 PyTorch 官方 wheel,torch.version.cuda才是真正决定 PyTorch 使用哪个 CUDA 版本的变量。系统里没有 nvcc 完全不影响 PyTorch 跑 GPU,这个坑我帮你好几个人排过。

3.3 跑一段真实计算验证 GPU 参与度

有一类隐蔽的故障是:cuda.is_available()返回 True,但实际运算还是落在了 CPU 上。比如你在代码里创建了模型,却忘了调用.cuda()或.to('cuda')。为了一次性确认 GPU 真的在工作,我建议跑这样一个简单脚本:

import torch print(torch.cuda.is_available()) x = torch.randn(10000, 10000, device='cuda') y = torch.randn(10000, 10000, device='cuda') z = torch.matmul(x, y) torch.cuda.synchronize() print(z.sum().item())

torch.cuda.synchronize()这行很关键,它迫使 CUDA 计算同步完成,避免异步执行导致脚本立即结束。跑完没有报错,说明不仅仅是"检测到了显卡",而是 GPU 真正参与了矩阵运算。如果显存不够,这一步会报CUDA out of memory,你也可以借此估算你机器能跑多大的 batch。

3.4 用基准测试感受 CPU 与 GPU 的差距

装好环境后,我建议花两分钟做个最简单的基准测试,也顺便验证安装质量。用同一段矩阵乘法代码分别跑 CPU 和 GPU,感受量级差异。方法很简单,上面那段脚本把device='cuda'改成'cpu'再跑一次,用秒表粗略计时比较即可。

实测结果通常是 GPU 比 CPU 快几十倍甚至上百倍,这个直观冲击比任何文档都管用,能帮你确认整个链条没白折腾。如果做出来的差异不大,怀疑一下代码是不是有if torch.cuda.is_available():但没有正确把数据搬进显存,这种情况在别人给你的代码里尤其常见。

4. 高频报错与排查实录:这些都是我替你们踩过的

装 PyTorch 环境,几乎不可能一次顺利。下面的问题是我帮同事、同学排查时反复遇到的,每条都是真实场景,建议先收藏再动手。

4.1 典型报错速查表

把高频问题整理成一张表,方便你对照排查:

报错/现象常见原因处理方法
No module named 'torch'没有激活 conda 环境,或装到别的 Python 里确认终端前缀是(torch),再执行pip list看看 torch 在不在;必要时重启终端
torch.cuda.is_available()返回 FalseGPU 驱动太旧、装成 CPU 版、或显卡为 AMD/集成卡先看nvidia-smi驱动版本,再确认 pip 安装命令带+cu版本号
ImportError: DLL load failed while importing torch缺少 VC++ 运行库、Python 版本与 PyTorch 不匹配装最新的 Microsoft Visual C++ Redistributable,确认 Python 版本在 PyTorch 支持范围内
安装时网络报错ReadTimeoutError下载大包超时换国内镜像,或调高 pip 超时时间:pip --default-timeout=120 install ...
运行时CUDA out of memory显存不足减小 batch size、降低输入尺寸,或使用torch.no_grad();多卡机器检查是不是别的进程占用了显存
激活环境后python仍是系统 Python系统 PATH 顺序问题检查环境变量 PATH,把 conda 的路径置于系统 Python 前;或用conda activate torch后手动用python全路径调用

这个速查表不是全量覆盖,但覆盖了新手装环境时九成以上的拦路虎。特别要提醒 DLL load failed 这个问题,在 Windows 上尤其常见。PyTorch 依赖微软的 VC++ 运行库,很多精简版系统没装,表现就是 import 直接崩。解决办法去微软官网下载最新的 "Visual C++ Redistributable for Visual Studio 2015-2022",装完重启终端即可。这个坑官方文档写得不显眼,但踩中的人极多。

4.2 版本选择的黄金组合

版本这东西,不是越新越好。我踩过追新的坑:新 PyTorch 刚发布,立刻升级,结果某个训练库还没适配,白白浪费两天。现在我的原则是"看生态,不看版本号"。

目前最稳的组合是:

  • Python 3.10
  • PyTorch 2.x(选 CUDA 11.8 或 12.1 版本)
  • 驱动版本确保支持对应的 CUDA 版本

这个组合的优势在于,绝大多数第三方库(比如用于可视化的 tensorboard、用于优化的大多数工具包)都已经适配,不会出现"库找不到 wheel"的尴尬。如果你已经在用 3.11 或 3.12,也不用着急降级,PyTorch 新版本慢慢跟上,下次重装环境时再统一即可。唯一要避免的是在 3.12 刚发布不久的时候装 PyTorch,那时候踩雷概率最高。

另外提醒一个细节:不少人有一个误区,以为 CUDA 版本越高性能越好。其实 PyTorch 的推理和训练性能主要取决于显卡算力和驱动,CUDA 工具版本的影响在大多数情况下可忽略。选一个生态兼容性最好的版本(比如 11.8 或 12.1),远比选最高版本明智。

4.3 几条独家小技巧

第一个技巧是关于多环境管理的。深度学习项目之间依赖冲突很普遍,装了 A 库就装不了 B 库的情况经常发生。我习惯每个项目建一个独立 conda 环境,名字就叫项目名,需要哪个激活哪个。别人问我借机器跑程序,我开个新环境让他自己装,装坏了删除重来,宿主环境完全不受影响。

第二个技巧专门针对 Windows 的路径坑。装 PyTorch 本身跟路径无关,但跑代码时 Windows 的默认用户名经常带中文或空格,比如C:\Users\张三这种路径,某些底层库处理中文路径会出错。我的建议是:项目代码一律放在无中文、无空格的路径下,比如直接放在D:\code\。这种问题报错信息往往看不懂,你会排查很久,实际上改个路径就好了。

第三个技巧是善用 pip 的缓存。PyTorch 的 wheel 包动辄 2GB 以上,如果多次重装,每次重新下载非常浪费时间和流量。pip 默认有缓存,重装同一版本时不会重新下载,但如果你不小心清了缓存,再装大包就得很久。想确认缓存位置可以用pip cache dir,必要时可以手动保留缓存副本,以备离线安装。

4.4 环境装好后最容易犯的三个错误

环境装好不等于万事大吉。我见过太多人在这几个地方翻车,值得单独说明。

第一是不小心在未激活环境时用系统 Python 跑代码。这个前面提过,症状是代码能跑,但import torch失败。症结在于终端界面初始化时会自动加载系统里某个旧 Python 的路径,你敲conda activate torch激活了,但如果你打开的不是新的命令行窗口,而是之前就开着的终端,环境变量可能没刷新。我的习惯是切换环境后,干脆关掉旧终端重新开一个,彻底避免变量残留问题。

第二是在 WSL2 和 Windows 文件系统之间胡乱跨盘读写。WSL2 访问 Windows 侧文件(比如/mnt/c/)有较大性能损耗,如果你把数据集放在 Windows 的C:\Users\下,训练脚本却跑在 WSL2 里,每次读数据都会慢到让你怀疑人生。正确做法是数据放在 WSL2 内部的文件系统(即 Linux 一侧)里,Windows 侧只做代码文件的编辑查看。

第三是忽略显卡驱动和 PyTorch 的匹配关系,看了别的博客说装 CUDA 11.8 就直接装,也不管驱动支不支持。驱动不支持的后果是:PyTorch 安装成功,但一跑 GPU 相关操作就崩,报错信息五花八门,排查成本极高。所以检查驱动版本永远是第一步,而不是最后一步。

5. 安装完成后的日常维护建议

环境装好,跑通第一个训练脚本,这算是成功了一半,另一半在日后的维护。

PyTorch 和周边库的版本迭代很快,每个月都有新版本发布。我的建议是不要看到一个 "New" 就去升级。训练代码调试到一半,库升级后 API 变了,一个参数名改了,整个脚本可能直接跑不了。正确做法是:项目稳定后冻结版本,在需求文档里记录下你用的 Python 版本、PyTorch 版本、CUDA 版本,需要复现环境时比对着装。尤其是以后要把代码交给别人复现,一份清晰的环境说明比任何口头讲解都有用。

如果你要同时管理多台 Windows 机器,可以导出一个环境清单,直接换机器上执行:

conda env export -n torch > environment.yaml

别的机器上只要装好 conda,执行conda env create -f environment.yaml就能复刻一模一样的环境。这个操作在给实验室多台电脑统一环境时非常省事,我每配好一台新机器都会顺手导出一份,存到项目仓库里。

还有一点是关于 WSL2 用户的:WSL2 会占不少内存,默认配置下可能抢占宿主机一半内存,导致 Windows 本身卡顿。如果你主要在 WSL2 里做训练,建议在%UserProfile%\.wslconfig文件里限制内存占用:

[wsl2] memory=8GB swap=4GB

这个配置不是 PyTorch 本身的事,但实际使用中,环境装好了,电脑卡到无法操作,一样影响开发效率。配一次能省心很久。

最后分享一下我个人的体会:Windows 装 PyTorch 这件事,难度其实不在"装"这个动作上,而在于每一步都有"看似可替换实则天差地别"的选项。驱动版本错了、源选错了、环境没激活,任何一个都会让结果偏离预期。如果你照着这篇文章走一遍发现还有问题,记住一条排查铁律:先确认环境,再确认版本,最后才怀疑网络。按这个顺序排查,九成的环境问题都能在十分钟内定位。祝各位一次装成,少踩坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询