ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows下PyTorch深度学习环境搭建:Anaconda虚拟环境与CUDA版本对齐指南

Windows下PyTorch深度学习环境搭建:Anaconda虚拟环境与CUDA版本对齐指南

简介:这份文档面向刚接触深度学习、需要在本地搭建 PyTorch 运行环境的开发者与学习者,重点解决框架安装时版本冲突、依赖混乱等常见问题。内容围绕在 Anaconda 中新建独立虚拟环境展开,涵盖环境创建与激活、显卡驱动版本查看、CUDA 与 cuDNN 版本匹配、PyTorch 及 torchvision 版本选择,以及国内镜像源加速安装等关键环节,并给出验证 GPU 是否可用的思路。资源包共 1 个 docx 文件,约 170KB,以图文步骤形式记录配置流程,便于边看边操作。目前已有 1610 人学习下载,适合希望避开 base 环境直接安装、建立可复用深度学习环境的中级入门读者参考,也可作为环境排错与版本对照的速查材料。

1. 装 PyTorch 之前,先把虚拟环境这件事想明白

上周帮一位同学收拾一台开发机,开机进桌面挺正常,一跑训练脚本就报ImportError: DLL load failed,再换一个项目又提示torch版本不对。翻了下环境才发现,他把 PyTorch、TensorFlow 还有一堆图像库全塞进了 Anaconda 的 base 环境,两个框架互相抢依赖,谁也跑不顺。深度学习环境搭建这件事,翻车点往往不在 PyTorch 本身,而在「装在哪」这一步没想清楚。这篇笔记记录的是我反复装过多次的一套流程:用 Anaconda 建独立虚拟环境,锁定 Python 版本,再按显卡驱动倒推 CUDA 与 PyTorch 版本,最后用几行代码验证 GPU 是否真的可用。适合刚接触深度学习、准备在 Windows 上跑第一个训练脚本的开发者,也适合已经装过但环境一团乱、想推倒重来的熟手。整套流程的核心就一句:一个项目一个环境,base 环境只留 conda 自己。

2. 环境准备:Anaconda、Python 与显卡驱动的版本对齐

2.1 为什么必须在虚拟环境里装 PyTorch

Anaconda 的价值不在它自带多少库,而在于它能用conda create把每个项目的解释器和依赖隔离开。base 环境是所有环境的公共底座,一旦在里面装了 PyTorch,后面再想装 TensorFlow 或者换一个 PyTorch 版本,依赖解析就会互相打架,轻则版本回退,重则整个 base 环境起不来。我一般把 base 环境当成「干净的工具箱」,只保留 conda、pip 这类管理工具,所有框架都装进命名环境里。这样做的好处很直接:项目 A 用 PyTorch 1.7.0 + CUDA 11.0,项目 B 用更新的版本,两者互不影响,删环境时一条conda remove -n 环境名 --all就能清干净,不留残渣。

2.2 装 Anaconda 与确认 Python 版本

Anaconda 从官网下载对应系统位数的安装包即可,安装时勾选「Add Anaconda to my PATH environment variable」这一步有争议,我的习惯是不勾,改用 Anaconda Prompt 操作,避免和系统里其他 Python 冲突。装完后打开 Anaconda Prompt,先确认 conda 能用:

conda --version conda info --envs

第一条输出 conda 版本号,第二条列出当前所有环境,正常情况下只有 base 一个。如果conda命令找不到,说明 PATH 没配好,回到安装目录手动执行Scripts\activate再试。Python 版本不用单独装,建环境时用python=x.x指定,conda 会自动拉取对应版本。这里有个取舍:PyTorch 1.7.0 官方轮子对 Python 3.6 到 3.9 支持比较稳,我一般选 3.8,兼容性和生态都够用,太新的 Python 版本反而可能找不到预编译包。

2.3 查显卡驱动,倒推 CUDA 版本上限

CUDA 版本不是想装哪个就装哪个,它受显卡驱动版本约束。在 Windows 上打开 NVIDIA 控制面板,点「帮助」→「系统信息」,看「驱动程序版本」那一栏。原文里记录的情况是驱动版本 11.2,而 CUDA 11.0 要求驱动版本不低于对应门槛,11.2 大于 11,所以装 CUDA 11.0 没问题。这个判断逻辑要记住:驱动版本号的前两位大致对应它能支持的最高 CUDA 大版本,驱动越新,能装的 CUDA 上限越高,但没必要追最新,选 PyTorch 官方有预编译轮子的版本最省事。

组件本项目选定版本选择依据
Python3.8PyTorch 1.7.0 轮子覆盖范围
CUDA11.0显卡驱动 11.2 可向下兼容
cuDNN8.0与 CUDA 11.0 配套
PyTorch1.7.0较新且与 CUDA 11.0 匹配
Torchvision0.8.1与 PyTorch 1.7.0 对应

这张表是整个安装的锚点,后面所有命令都围绕它展开。版本一旦定下来就别中途改,CUDA、cuDNN、PyTorch 三者是绑定的,改一个往往要连带改另外两个。

3. 建环境与装框架:conda 命令逐条落地

3.1 新建并激活独立环境

环境名我习惯直接用框架名,比如pytorch,一眼能看出用途。新建命令如下:

# 新建名为 pytorch 的环境,指定 Python 3.8 conda create -n pytorch python=3.8 # 激活环境,后续所有安装都在这个环境里进行 conda activate pytorch

-n后面跟环境名,python=3.8指定解释器版本,conda 会提示确认安装的包列表,输入y回车。激活成功后命令行提示符前面会出现(pytorch),这是判断当前在哪个环境的最直接标志。原文里提到「其实可以不用 activate」,指的是如果只在 PyCharm 里配置解释器路径,日常命令行不激活也能用,但我建议还是养成激活的习惯,因为装包、验证、排错都依赖当前环境上下文,不激活很容易把包装到 base 里去。

3.2 安装 CUDA 11.0 与 cuDNN 8.0

CUDA 和 cuDNN 从 NVIDIA 官网下载,搜索对应版本号,选 Windows 本地安装包。CUDA 安装时选「自定义」,把不需要的组件(比如旧版驱动)取消勾选,避免覆盖现有显卡驱动。cuDNN 是压缩包形式,解压后把里面的bin、include、lib三个目录的文件分别复制到 CUDA 安装目录的同名文件夹下,这是 Windows 上的常规做法。装完在命令行验证:

# 查看 CUDA 编译器版本,能输出版本号说明 CUDA 装好了 nvcc --version

如果提示nvcc不是内部命令,说明 CUDA 的 bin 目录没进 PATH,手动加到系统环境变量里再开一个新终端。cuDNN 没有独立命令验证,它的版本会在后面 PyTorch 调用 GPU 时间接体现,装错版本通常表现为训练时报 cuDNN 相关错误。

3.3 按官方命令装 PyTorch 1.7.0

PyTorch 版本不要凭感觉装,去官网的 previous-versions 页面找对应 CUDA 11.0 的安装命令,直接复制。原文记录的命令形态大致如下:

# 安装 PyTorch 1.7.0 + torchvision 0.8.1,CUDA 11.0 版本 pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 -f https://download.pytorch.org/whl/torch_stable.html

torch==1.7.0+cu110里的+cu110是关键,它表示这个轮子编译时链接的是 CUDA 11.0,不带这个后缀装到的可能是 CPU 版本。-f指定额外的轮子索引地址,保证能拉到对应版本。如果下载速度慢,可以换国内源,但要注意国内 PyPI 镜像通常只有 CPU 版本的 torch,带+cu110的轮子还是得走官方地址,这一点很多人踩过:换了源装完发现torch.cuda.is_available()返回 False,就是因为装成了 CPU 版。

# 国内源示例,仅适合装纯 Python 包,torch 的 CUDA 轮子仍建议走官方 pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple

原文里还提到装 TensorFlow 1.5.0 的命令,那是另一个项目的需求,和 PyTorch 环境不要混着装,真要两个框架共存,就再建一个独立环境,这是虚拟环境存在的意义。

3.4 在 PyCharm 里挂上这个环境

PyCharm 新建项目时,解释器选「Existing interpreter」,路径指向 Anaconda 安装目录下的envs\pytorch\python.exe。这样 PyCharm 里的代码运行、包管理都走这个环境,和命令行激活的效果一致。配置完在 PyCharm 的终端里敲conda activate pytorch确认一下,如果提示 conda 命令不可用,在设置里把终端 shell 路径改成 Anaconda Prompt 对应的启动脚本即可。这一步不做,后面在 IDE 里跑脚本会莫名其妙用到 base 环境的包,排查起来很费时间。

4. 避坑与排查:装完跑不起来时先看这几处

4.1 现象:torch.cuda.is_available()返回 False

原因通常有三种:装成了 CPU 版 torch、CUDA 版本和 torch 轮子不匹配、显卡驱动太旧。先执行pip list | findstr torch看版本号后面有没有+cu110,没有就是装错了,卸载重装。再看nvcc --version和驱动版本是否满足要求。解决顺序是先确认轮子带 CUDA 后缀,再确认驱动版本够,最后才怀疑硬件。

4.2 现象:ImportError: DLL load failed

这是 Windows 上最典型的翻车现场,多半是 CUDA 的 bin 目录没进 PATH,或者 cuDNN 文件复制位置不对。检查系统环境变量里有没有 CUDA 的bin和libnvvp路径,cuDNN 的三个目录是否真的合并进了 CUDA 安装目录。改完环境变量必须重开终端,旧终端不会自动刷新。

4.3 现象:conda 建环境卡在 solving environment

conda 的依赖求解器在包多的时候会非常慢,常见做法是换用conda create -n pytorch python=3.8 --no-deps先建空环境再逐个装,或者直接改用 pip 装框架。我一般建环境时只指定 Python 版本,不额外加包,能明显减少求解时间。

4.4 现象:pip 装包报 SSL 证书错误

公司网络或代理环境下常见,表现为Could not fetch URL ... certificate verify failed。临时办法是加--trusted-host参数指定镜像域名,长期办法是把镜像源写进 pip 配置文件。注意这只影响纯 Python 包,torch 的 CUDA 轮子还是走官方地址。

4.5 现象:环境装乱了想重来

别手动删文件夹,用 conda 命令清理:conda remove -n pytorch --all,确认后整个环境连同里面的包一起删掉,再按第 3 章重新建。这比在文件系统里乱删安全得多,也是虚拟环境给的后悔药。

5. 装完怎么验证:三行代码确认环境真的通了

环境装完不等于能用,必须跑一遍验证。激活环境后依次执行:

conda activate pytorch python

进入 Python 交互界面后输入:

import torch # 导入 PyTorch,能导入说明包装好了 print(torch.__version__) # 输出 torch 版本,应为 1.7.0+cu110 print(torch.cuda.is_available()) # 输出 True 表示 GPU 可用 print(torch.cuda.get_device_name(0)) # 输出显卡型号,确认识别到硬件

四行输出对应四个检查点:第一行验证包完整性,第二行验证版本是否带 CUDA 后缀,第三行验证 CUDA 运行时是否正常,第四行验证显卡是否被正确识别。第三行返回 False 时,回到第 4 章按顺序排查。全部通过后,再跑一个最小张量运算确认计算链路:

x = torch.randn(3, 3).cuda() # 在 GPU 上创建张量 y = torch.randn(3, 3).cuda() print((x + y).sum().item()) # 能输出数值说明 GPU 计算正常

这一步能过,说明从驱动到 CUDA 到 PyTorch 的整条链路都通了,可以开始跑训练脚本。我还会顺手在 PyCharm 里新建一个测试文件跑同样的代码,确认 IDE 用的确实是这个环境,而不是 base。从那以后我每次装完环境都强制走一遍这四行加一个张量运算,不看到True和显卡型号就不往下走,因为环境问题拖到训练中途才暴露,排查成本要高好几倍。希望这套流程能帮到你,少在环境上耗时间,把精力留给模型本身。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进