ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Win10下用conda搭建PyTorch GPU环境完整指南

Win10下用conda搭建PyTorch GPU环境完整指南 Win10装conda和pytorch-gpu这件事看起来是个入门操作但真正上手你会发现卡壳的地方往往不是命令本身而是驱动、CUDA、环境隔离这些前置概念没理清楚。我最近刚在一台Win10机器上完整走了一遍流程中间还踩了几个不常见的坑这篇就把我的安装全过程和排查思路都写出来给正准备折腾环境的朋友一个参考。这篇内容适合这几类人看刚接触深度学习、需要在本机跑PyTorch的新手被各种CUDA报错困扰的老哥以及想在Windows上复现项目但总是败在环境配置这一步的朋友。里面不会有高深理论全是可以直接照着操作的东西。1. 装之前先把三件事想清楚1.1 这三个东西到底各管什么很多人上来就搜安装命令结果装完还是跑不起来原因就是把Win10、conda、PyTorch GPU这三者的关系搞混了。Win10是你电脑的操作系统负责最底层的硬件调度包括让你的显卡驱动正常运行。conda是一个包管理和环境管理工具你可以把它理解成一个独立的软件仓库加一个虚拟环境管家它允许你在同一台机器上创建多个互不干扰的Python运行环境每个环境可以有不同的Python版本和包版本。PyTorch则是深度学习框架它的GPU版本在训练神经网络时会调用NVIDIA显卡进行并行计算大幅缩短训练时间。三者的关系可以类比成Win10是城市的基础设施conda是你在城市里租的独立房间PyTorch GPU则是房间里那台性能强劲的工作站。装好一个环境本质上就是在这台Windows机器上划出一块干净、可复现的区域然后往里面放入PyTorch及其所有依赖。我见过不少人在base环境里直接莽装PyTorch后来项目多了依赖冲突最后整个Python环境都废掉。所以从一开始就养成用conda创建独立环境的习惯能帮你省掉后面大量的修复时间。1.2 显卡驱动、CUDA和PyTorch之间的兼容关系这一块是新手最容易混淆的地方我单独拿出来说。你在命令行输入nvidia-smi能看到右上角有个CUDA Version比如12.4。很多新手以为这说明自己已经装好了CUDA 12.4于是直接去PyTorch官网安装对应版本结果发现有时候能装上有时候却报错。实际上nvidia-smi显示的CUDA Version是当前显卡驱动能支持的最高CUDA版本它不代表你已经安装了对应版本的CUDA Toolkit。那真正的CUDA Toolkit是什么它是一个完整的开发工具包里面包含CUDA编译器、运行时库等组件。对于跑PyTorch来说你通常不需要手动单独安装完整的CUDA Toolkit因为PyTorch的安装包内部已经捆绑了它需要的那部分CUDA运行库和cuDNN。你只需要确保显卡驱动版本足够新能够支持PyTorch对应的CUDA版本即可。举个例子如果PyTorch官网写着cu118表示这个包自带CUDA 11.8的运行库那么你的显卡驱动版本必须支持CUDA 11.8及以上才能正常调用。换句话说驱动版本要大于等于PyTorch所需的CUDA版本这一点决定了兼容性的下限。所以装之前先看一眼nvidia-smi的驱动版本再决定下载哪个PyTorch包通常就不会出错。1.3 conda环境隔离为什么值得花两分钟做我理解很多人想快点装完快点跑模型觉得创建虚拟环境是多此一举。但我还是要说这一步请务必养成习惯。假设你同时在做两个项目一个要求PyTorch 1.13一个要求PyTorch 2.1如果你全装在base环境里那么其中一个项目的依赖必然被破坏最后只能含泪重装环境。而conda创建的环境相互隔离你在某个环境里怎么折腾都不会影响其他环境更不会弄坏系统自带的Python。用conda创建环境命令很简单conda create -n pytorch python3.10 conda activate pytorch-n后面的pytorch是环境名你可以随便起python3.10是指定环境内Python的版本。激活之后你命令行前面的提示符会出现(pytorch)这说明你已经进入了这个独立环境。之后安装的所有包都会被装进这个环境不会污染全局。2. 实操Win10上从零搭出PyTorch-GPU环境2.1 安装condaAnaconda还是Minicondaconda有两个常见发行版Anaconda和Miniconda。Anaconda自带300多个常用数据科学包安装包1GB左右Miniconda则只包含conda本体和Python外观像一个极简内核其他包按需安装。我的建议是装Miniconda原因有两个第一Anaconda自带的很多包你根本用不上却会占用磁盘空间第二包含太多包的base环境更容易出现依赖冲突。Miniconda官网下载Windows安装包一路下一步即可注意安装时勾选“Add Miniconda to my PATH environment variable”这个选项方便在任意终端里直接使用conda命令。如果没有勾选也可以装完后手动把它的Scripts目录加入环境变量但没必要给自己找这个麻烦。装好后打开命令提示符或者PowerShell输入conda --version看到版本号就说明conda本体已经就位了。2.2 用conda创建独立环境并挂上Python打开命令行先执行conda create -n pytorch python3.10 conda activate pytorch这里我特意选了Python 3.10而不是最新的3.12原因是PyTorch对最新Python版本的支持往往有滞后选一个经过充分测试的稳定版本能避开一堆兼容性问题。如果你的项目对Python版本有硬性要求那就按项目要求来没有要求的话3.9、3.10、3.11这三者都挺稳。创建过程中conda会提示安装一些基础包输入y确认即可。等到环境建好命令行前缀变成(pytorch)就说明你已经站在一个干净的Python环境里了。后续所有与PyTorch相关的操作都建议在这个环境内进行。2.3 conda换源避免下载慢到怀疑人生安装PyTorch时最大的障碍往往不是配置本身而是网络下载速度。PyTorch的安装包动辄几百MB甚至超过2GB如果从默认源下载等待时间长不说中途还容易断流。我的做法是在使用conda之前先配置国内镜像源。以清华源为例打开命令行执行conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes除了conda本身的源还需要给pip也配置镜像源因为后面用pip安装PyTorch时也会遇到同样的问题。在用户目录下找到pip.ini文件没有就新建写入[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn镜像源属于开源基础设施用来提升在国内网络环境下的下载成功率。配置之后后续安装各种Python包的速度会有明显提升等待时间从十几分钟缩短到一两分钟很常见。2.4 安装PyTorch GPU版本的完整命令PyTorch官网首页有个安装配置向导选择系统、包管理器、CUDA版本之后会生成对应的安装命令。以常见场景为例如果你打算用pip装CUDA 12.x对应版本的PyTorch可以执行pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124这里--index-url指定了PyTorch的官方下载源cu124表示CUDA 12.4对应的版本。如果你是NVIDIA 20系、30系、40系显卡驱动版本一般都能支持到12.x装上这个版本比较省心。如果你想用conda安装也可以conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia我用过多种方式之后更推荐pip安装原因后面详细说。这里需要提醒的是安装包的体积比较大运行命令后看到进度条卡住不要慌耐心等待。如果中途因为网络原因失败了重新运行一次安装命令它可以从断点处继续下载不用从头再来。2.5 验证GPU是否被PyTorch正确识别安装完成后最重要的一步是验证“GPU真的被用上了”。很多新手装上之后直接跑模型跑起来才发现用的是CPU性能慢得离谱。验证方法很简单在命令行里输入python -c import torch; print(torch.__version__); print(CUDA available:, torch.cuda.is_available()); print(Device count:, torch.cuda.device_count()); print(Device name:, torch.cuda.get_device_name(0))如果输出里CUDA available为True且Device name是你的NVIDIA显卡型号比如NVIDIA GeForce RTX 3060那说明GPU环境已经搞定。如果输出False说明某个环节出了问题下面第三部分会专门讲排查思路。除了torch.cuda.is_available()还可以运行一个简单的小计算来验证GPU确实在工作import torch x torch.rand(10000, 10000, devicecuda) print(torch.matmul(x, x).sum())程序能正常输出一个张量值说明PyTorch已经能在显卡上完成真实计算环境算是彻底打通了。3. 常见问题与排查技巧实录3.1 常见的坑速查表安装PyTorch GPU过程中有几个问题是我在不同机器上反复见到的先总结成一张表后面再逐个展开。症状可能原因解决思路torch.cuda.is_available()返回False安装成了CPU版PyTorch或驱动版本过低卸载后重装GPU版升级显卡驱动ImportError: DLL load failed缺少Visual C运行库或PyTorch依赖缺失安装VC Redistributable用conda修复依赖下载过程中网络报错、超时源访问不稳定配置国内镜像源重试续传CUDA error: no kernel image is available显卡太老或驱动不支持目标CUDA版本换用老版本PyTorch如cu111CUDA out of memory显存不足或没有释放显存调小batch_size检查是否残留僵尸进程conda激活环境后pip仍是全局版本环境变量混乱或pip未跟随conda环境用python -m pip install代替直接pip install这张表基本覆盖了新手最常见的错误。每一个我都踩过后面的章节拉几个重点详细说说排查过程。3.2 is_available()为False的深度排查torch.cuda.is_available()返回False是出现频率最高的问题。很多人一看False就慌了其实排查路径很清晰。先执行python -c import torch; print(torch.__version__)看版本号如果版本号里有cpu后缀证明装的是CPU版本。CPU版本是怎么误装的很多人从官网复制命令时没好好看选项特别是用conda安装时默认路径有时候解析不到GPU的构建版本就会给你装一个CPU版。解决办法是卸载重装pip uninstall torch torchvision torchaudio pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124如果版本号里没有cpu后缀但还是返回False那下一步检查驱动。命令行执行nvidia-smi确认显卡能被系统识别。如果这个命令本身报错说明NVIDIA驱动没装好或者显卡确实不兼容。如果显示正常再看驱动支持的CUDA版本按前面说的原则确保这个版本号不低于PyTorch对应的CUDA版本。还有一种情况是显卡比较老比如10系显卡。如果安装了为CUDA 12.x编译的PyTorch老卡的驱动即使能装上也可能在运行时报错no kernel image is available。解决办法是换成早期版本比如PyTorch 1.10或者1.12对应的cu113、cu111版本老卡反而更稳定。装的时候只要把安装命令里的cu124换成cu111即可其他不用动。3.3 装的时候网速慢、超时怎么办PyTorch这个包确实大而且随着版本更新越来越大几GB的安装包并不罕见。网络不稳定的情况下下载中断特别常见。我的实战经验是先配好pip的国内镜像源再用镜像源安装PyTorch。不过在配置了index-url为清华源之后直接执行pip install torch torchvision torchaudio大概率也能装上但这里有个隐患清华PyPI源上的PyTorch版本可能和官网PyTorch源的构建版本不完全一致特别是GPU版本有时候同步会有延迟。为了兼顾速度和版本准确性可以分两步走先使用PyTorch官方源把.whl文件下载到本地比如用pip download命令pip download torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 -d ./pytorch_pkgs下载完成后再执行pip install --no-index --find-links./pytorch_pkgs torch torchvision torchaudio这样既能保证用的是官方正确的GPU包又能避免安装过程中因网络波动而失败。其实pip本身有断点续传的能力失败了重跑命令已经下载完的部分不会重复下载所以压力没有想象中大。3.4 环境迁移与复制Win10系统重装或者换新电脑环境全部重装一遍是非常痛苦的。这里分享一个拷贝环境的小技巧。conda自带的conda-pack工具可以把整个环境打包成一个压缩文件。先在原机器环境内安装pip install conda-pack conda pack -n pytorch -o pytorch_env.tar.gz然后把打包文件拷贝到新电脑上解压到conda环境的envs目录下新机器上就不需要再从零安装了。这个方法适合同架构的系统迁移Windows到Windows没问题Windows迁移到Linux不行架构不同。另外如果你只是希望复制环境里的包列表可以用conda env export environment.yml在新机器上执行conda env create -f environment.ymlconda会自动按清单安装。这个方法有一个坑就是导出的environment.yml里会记录包的精确版本号如果这些版本在源上找不到安装就会失败。所以我在导出时一般只在同一个大版本内使用。4. 实操过程中的几个经验补充4.1 版本号别乱追新在安装PyTorch这件事上最新的不一定是最好的。我见过有人执着于安装最新版PyTorch和最新版CUDA结果项目里用到的某个库还没有适配只能焦头烂额地降级。我的建议是先看项目要求再定版本。一个常见组合是Python 3.10 PyTorch 2.x CUDA 12.x这套组合对大多数深度学习项目都足够。如果项目比较旧需要PyTorch 1.x那就把CUDA版本也相应降到11.x同时注意Python版本别太高否则也会出现不兼容。版本对齐的一个快速办法在PyTorch官网找到对应版本的whl列表看里面文件名后缀支持的编译平台和Python版本。比如torch-2.1.0cu121-cp310-cp310-win_amd64.whl就表示这是给Python 3.10、Windows x64、CUDA 12.1用的照着选就不会错。4.2 pip安装和conda安装之间的选择说点我自己的体会。PyTorch官方给出的两种安装方式里我强烈建议使用pip。原因在于pytorch的conda包和pip包在构建时有一些细微差别conda的pytorch是通过conda-forge或者pytorch频道构建的有时候版本更新不如pip源及时。更重要的是conda在解决依赖时经常会把一些包悄悄升级或者降级影响项目里其他依赖的稳定性。pip虽然在依赖解决上没那么激进但对PyTorch这种大包来说反而更可控。实际执行时我用pip装PyTorch的次数明显多于conda。只有需要搭配特定CUDA版本且pip源里找不到匹配版本时我才会考虑用conda。另外有一个方法可以顺便装好配套的运行时库在命令行执行conda install cuda -c nvidia它会安装与驱动匹配的CUDA运行库提高兼容性。但这一步不是必须的大多数情况下PyTorch自己带的运行库已经够用。4.3 一些让我印象深刻的细节有几个细节如果不写出来可能很多人装了无数次都找不到原因。第一个是PowerShell和conda的兼容性问题。Win10的PowerShell默认执行策略比较严格有时候conda activate命令会报错。如果你在PowerShell里激活不了conda环境可以先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser然后重开终端再试。第二个是杀毒软件和Windows Defender的干扰。PyTorch安装时会写大量文件到磁盘安全软件实时扫描可能导致安装过程异常缓慢甚至文件被误删除。装环境那会儿我建议暂时把实时保护关掉或者把conda目录加入白名单装好后再打开。注意装完顺手重新打开保护安全第一。第三个是PATH环境变量的优先级。如果电脑上同时装了多个Python比如Windows应用商店版本、Anaconda、Miniconda命令行里执行python时可能调用的是你不想用的那个。验证方法很简单进conda环境后执行where python看返回路径是否指向你的conda环境目录。如果不是需要调整环境变量顺序或者在conda环境内用python -m pip install代替pip install确保装到当前环境。4.4 日常使用中保持环境干净的一些习惯最后分享几个让我在后面少踩坑的习惯也算是这套环境搭建完成之后的一个收尾。第一别再在base环境里装任何项目用的包。base环境相当于初始系统保持它干净能确保conda本身健壮。我现在的习惯是每个项目创建独立环境base环境只用来管理conda本身。第二定期清理不用的环境。时间一长conda env list里会堆积不少闲置环境每个环境占几个GB空间。在磁盘不够时这些环境很占地方。清掉不用的环境用conda remove -n 环境名 --all即可。第三安装包时优先用python -m pip install而不是裸pip install避免因为PATH混乱导致包装错环境。这个细节我在上面提过但确实值得单列一条。第四遇到难题时用conda list --revisions回滚环境。conda会在安装包时自动记录版本快照如果你操作出错导致环境坏了执行conda install --revision N可以恢复环境到安装前状态。这对不想重装整个环境的人来说是一条救命的命令。我个人在实际操作中最大的感受是安装环境这件事最大的成本和产出都在“耐心”两个字上。很多时候无所谓神通只要按部就班地确认驱动、确认版本、确认下载完整性绝大多数坑都能避过去。这套流程跑顺之后后面跑模型、做实验都会觉得非常踏实。希望大家都能一次装通早点把时间花在自己真正关心的模型和项目上。
RELATED READING

延伸阅读

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