
又是给新电脑装环境的日子。Windows 10 conda PyTorch GPU这套组合说简单真的简单运气好跟着官网命令走五分钟就能装完说难也是真难我见过太多人卡在torch.cuda.is_available()返回 False 这一步显卡驱动装了、PyTorch 也装了程序跑起来却还是 CPU 在干活。这篇文章我会把从零开始到验证跑通的完整链路捋一遍包含动手前的环境检查、conda 的安装与换源、虚拟环境创建、安装命令的正确选择、CUDA 相关观念的纠偏以及最后的验证和排错。准备照着操作的人只要按顺序执行基本可以一次装到位。1. 动手前的三项检查GPU型号、系统版本与NVIDIA驱动很多人拿到教程就急着往下装结果装到一半发现显卡太老或者驱动版本跟 CUDA 不匹配来回折腾大半天。我自己的习惯是动手前先把三项硬指标查清楚花费不到两分钟却能把后面 90% 的坑提前规避掉。1.1 如何确认你的显卡值不值得走 GPU 路线PyTorch GPU 版只支持 NVIDIA 显卡AMD 显卡和 Intel 核显在这条路上走不通除非走 DirectML 或 ROCm但体验和生态远不如 CUDA。所以第一步是确认自己手上这块卡是不是 NVIDIA。打开任务管理器切到性能标签页点GPU右侧能看到显卡型号。也可以按下Win R输入dxdiag在显示选项卡里看到名称。如果显卡名字里带有 NVIDIA 字样比如 GTX 1650、RTX 3060、RTX 4090可以继续往下走如果是 AMD 的 RX 系列或者 Intel 核显建议直接走 CPU 版本或者考虑换设备。确认 NVIDIA 之后还要关注两点架构代次和显存大小。架构代次决定了它支持的最低 CUDA 版本而显存大小决定了你能跑多大的模型。以我自己的标准看显存低于 4GB 的显卡跑现代深度学习模型会比较痛苦做简单的分类任务或学习用还凑合。但这不是绝对的学习 PyTorch 语法、跑小规模的神经网络2GB 显存也能胜任只是别对性能抱太高期望。注意显卡的算力Compute Capability也很关键低于 5.0 的显卡即使能装上 PyTorch也可能在运行某些算子时报no kernel image is available错误。我实际遇到过 GTX 750 装高版本 PyTorch 就起不来的情况。老卡用户建议查一下官方算力对照表再决定装哪个版本。1.2 Windows 版本和驱动版本怎么查Windows 版本用Win R输入winver即可看到。PyTorch GPU 版官方支持 Windows 10 及以上Win10 的 21H2 之后的版本基本都满足要求。如果你的系统是 Win7 或更老的版本我建议先升级系统因为新版 CUDA 工具链和驱动都已经放弃 Win7 了硬装会非常痛苦。我自己已经遇到过两三次用户用 Win7 折腾一天最后不得不重装系统的案例。NVIDIA 驱动版本则在命令提示符Win R输入cmd里输入nvidia-smi这个命令会显示驱动版本和驱动支持的最高 CUDA 版本。注意这里显示的 CUDA Version 是驱动可以支持到的最高 CUDA 版本不代表你已经安装了 CUDA Toolkit。这个概念非常重要后面我会单独展开讲。驱动的选择原则很简单尽量去 NVIDIA 官网下载最新版 Game Ready 或 Studio 驱动不要用 Windows 自动更新的驱动。Windows 自动推送的驱动经常版本陈旧且不带完整的 CUDA 运行时组件出现过各种莫名其妙的兼容问题。更新完驱动后重新执行nvidia-smi确认显示正常。如果nvidia-smi不是有效命令说明驱动没装好先解决这个再往下走。到这里三项检查就做完了确认自己拿着 NVIDIA 显卡、Win10 新版本、最新驱动可以顺利进入下一步。2. conda 的安装与换源第一步就理顺环境管理有了硬件前提接下来就是软件环境的搭建。为什么用 conda 而不是直接在系统 Python 里 pip install因为 conda 不仅能管理 Python 包还能管理独立的 Python 版本和二进制依赖。深度学习搞到后面你会发现不同项目要的 Python 版本不一样包依赖之间还可能互相打架conda 的虚拟环境就是用来隔离这些冲突的。另外 PyTorch 的 CUDA 相关二进制库体积巨大conda 的依赖解析机制能帮你把配套的库一并处理好省去手工对齐的麻烦。2.1 选 Miniconda 还是 Anaconda这个选择其实不纠结。Anaconda 自带几百个数据科学常用包装上就能用但体积动辄几个 GB而且很多包是深度学习用不上的白白占空间。Miniconda 只是一个精简的 conda 运行时装完大概几十 MB需要用啥就装啥干净灵活。我给新手的建议是想省心选 Anaconda想清爽选 Miniconda如果只为了跑 PyTorchMiniconda 完全够用。我自己从 Anaconda 换到 Miniconda 之后环境清爽了很多再也没有被一堆用不上的预装包干扰过。安装时有两个细节容易被忽略是否勾选Add Anaconda3 to my PATH environment variable勾选后可以直接在命令行使用 conda但可能会和系统里其他 Python 工具产生路径冲突不勾选则每次需要从开始菜单打开 Anaconda Prompt。我建议勾选因为做开发终究离不开在终端里灵活操作路径冲突的问题可以通过调整环境变量顺序解决。安装路径不要有中文和空格这是老生常谈但仍然有人踩坑。默认路径一般是C:\Users\你的用户名\miniconda3如果你的用户名是中文建议自定义到C:\miniconda3这种纯英文路径。否则后面创建环境时会出现找不到指定路径等各种奇怪错误。2.2 配置国内镜像源影响安装成败的关键操作conda 默认的官方源在国外直接连接经常慢到离谱甚至卡在半路直接报CondaHTTPError。这一步不是可选项而是决定了后面所有安装体验的关键操作。在命令行执行以下命令配置清华源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也可以用阿里云源效果差不多。配置完成后检查一下用户目录下的.condarc文件确认里面的源地址是对的没有残留官方源即可。之后创建环境和安装包的速度会从几分钟转圈变成秒级下载。注意PyTorch 官方源https://download.pytorch.org/whl/cu121或 conda 的pytorch和nvidiachannel 下载慢的问题换清华源不能完全解决因为第三方镜像不一定同步所有 PyTorch 版本。我的解决习惯是核心的 conda 包走清华源PyTorch 本体直接走 pip 官方源通常也慢或者用-c https://mirrors.cloud.tencent.com/pytorch/这类腾讯源具体后面讲。2.3 创建虚拟环境别什么都往 base 里装很多人装环境图省事直接在 base 环境里pip install torch装完也跑了没问题。但等你第二次要搭别的项目就惨了——要么依赖冲突要么版本对不上最后只能重装 conda。我强烈建议每建立一个新项目就新建一个独立的 conda 环境。以 PyTorch 为例conda create -n torch python3.10 -y conda activate torch这里指定python3.10是有讲究的PyTorch 官方对各 Python 版本的支持窗口不一样太新的 Python比如 3.12/3.13某些依赖包还没跟上太老的3.7 以下又跑不动新版 PyTorch。当前阶段 3.10 和 3.11 是兼容性最好的选择。建议看 PyTorch 官网安装页的 Python 版本说明选择官方明确支持的那个大版本能省掉很多编译错误。激活环境后命令行前面会出现(torch)字样后面所有操作都在这个环境里进行和系统里的其他 Python 互不干扰。3. 安装命令也有讲究官网生成命令与 pip/conda 之争环境准备好了接下来是安装这个动作本身。看网上教程有人让你pip install torch有人让你conda install pytorch-cuda12.1到底听谁的我的回答是谁也不听先去 PyTorch 官网生成一条属于你自己的命令。3.1 你的显卡该选哪个 CUDA 版本打开 PyTorch 官网的 Get Started 页面选择你的系统Windows、安装方式conda 或 pip、CUDA 版本通常有 11.8、12.1、12.4 等。官网上给出的版本都是经过充分测试的选最新的稳定版本即可。有个简单原则新卡RTX 30/40 系列选 CUDA 12.x核显之外的旧卡GTX 10/16/20 系列选 CUDA 11.8。这不是什么硬性规定而是驱动兼容范围的现实情况。新驱动对老卡的 CUDA 支持虽然向后兼容但某些特定的 PyTorch 算子在新 CUDA 上跑旧卡时会出问题我就在一台 GTX 1660 上遇到过 CUDA 12.1 编译的算子报invalid device function。3.2 官网自动生成的安装命令长什么样以 CUDA 12.1 pip 为例官网给出的命令通常是pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121以 conda 则是conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia注意看差异pip 方式用--index-url指向 PyTorch 专属的 CUDA wheel 源而 conda 方式通过pytorch-cuda12.1这个包来拉取 CUDA 运行时库。两种方式本质上都在帮你把带 CUDA 版本号的 PyTorch安装进当前环境。3.3 conda install 和 pip install 怎么选这两个选择困扰过很多人我在这里直接把结论说出来在 Windows 上我推荐优先用 pip。原因是 conda 在 Windows 上的依赖解析速度慢而且pytorch和nvidia这两个 channel 体积巨大解析时间经常以十分钟计还时不时出现包版本冲突。pip 则是直接下载现成的 wheel 文件速度通常更快兼容性问题也少。只有在需要用到 conda 的特定二进制依赖比如某些库只能由 conda 安装时我才会考虑 conda 方式。如果你已经用 conda 命令装了一半又觉得慢可以中断后用 pip 命令补装两者可以混用但务必确保同一个环境只用一种主安装方式避免两套解析逻辑来回覆盖导致 meta 信息混乱。补充一个选清华 PyTorch 源的小技巧pip 方式如果官方源下载太慢可以在--index-url参数里换用腾讯云的 PyTorch 镜像https://mirrors.cloud.tencent.com/pytorch-wheels/cu121。实测速度明显比官方源快且版本更新也比较及时。注意这里不是所有镜像都有全部历史版本如果装特定版本失败换回官方源再试一次即可。4. 关于 CUDA 的常见误区驱动、Toolkit、PyTorch 内置库的三层关系每次写环境搭建教程我都要专门纠正一个误解很多人以为安装 CUDA Toolkit 是必须的前置步骤所以在装 PyTorch 之前先跑去 NVIDIA 官网下载了 2GB 的 CUDA Toolkit又下载了 cuDNN安安静静装完然后回来再装 PyTorch最后发现该报错还是报错。这套流程不是完全没用但绝大多数时候是在做无用功。4.1 三层概念拆解把 CUDA 生态理解成三层就好办了第一层NVIDIA 驱动。这是硬件和操作系统之间的桥梁由nvidia-smi对应的驱动组件构成。装好驱动后系统才认识这块显卡。第二层CUDA Toolkit。这是完整的开发环境包含编译器nvcc、各种开发库、调试工具。它主要面向 CUDA C/C 开发者。第三层PyTorch 自带的 CUDA 运行时。PyTorch 的 CUDA wheel 本身已经包括了一批 CUDA runtime 依赖库比如cudart64_*.dll等它在安装时就会把这些库放进你当前的 conda 环境。PyTorch 跑起来时用的主要是第一层驱动和第三层自带运行时第二层不是必须的。这也是为什么你哪怕完全没装 CUDA Toolkit只要驱动版本满足要求import torch照样能调用 GPU。conda 方式安装的pytorch-cuda包做的事其实也等同于把第三层的运行时库放进环境。4.2 到底要不要单独装 CUDA Toolkit我的回答是分场景只为了跑 PyTorch 训练/推理不需要。装好驱动装好torch带 CUDA 版本就行。需要编译自定义 CUDA 算子写 C/CUDA 扩展需要装 CUDA Toolkit且版本要与 PyTorch 使用的 CUDA 版本匹配。需要用nvcc查看 CUDA 版本这只是开发辅助需求不是运行需求。这个关于 CUDA 的理解解决了很多为什么我装完 CUDA 还不行的疑问。驱动是最底层的地基PyTorch 自带的小型运行时是在地基上临时搭的活动板房而笨重的 CUDA Toolkit 是旁边的一栋大楼——你要住的其实是活动板房大楼盖不盖都不影响入住。4.3 驱动版本真的必须严格大于CUDA 版本吗这也是很多人纠结的点。其实 NVIDIA 驱动的策略是向前兼容新驱动可以跑旧 CUDA 应用但老驱动跑不了新 CUDA 应用。例如nvidia-smi显示驱动支持 CUDA 12.0却装了 PyTorch 的 CUDA 11.8 版本完全没问题反过来驱动只支持 CUDA 11.8却装了 PyTorch 的 CUDA 12.1 版本大概率会在运行时崩溃。所以实际操作中确保驱动支持的最高 CUDA 版本 PyTorch 对应 CUDA 版本就可以放心跑。5. 三行代码验证 GPU 真正生效从打印信息到显存占用很多教程到安装完就结束了然后读者跑代码时发现 GPU 没占用又找不到原因。所以验证这一步必须单独拿出来讲。安装完成后先在当前 conda 环境里执行python -c import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))正常情况下输出类似2.3.1cu121 True NVIDIA GeForce RTX 3060第一行说明 PyTorch 版本和编译时用的 CUDA 版本第二行返回True说明 GPU 可被调用第三行是实际识别到的显卡型号。如果中间任何一步出问题看下面一节。5.1 如何确认程序真的在用 GPU 而不是 CPUtorch.cuda.is_available()返回True只代表 GPU 可用不代表你的模型在 GPU 上跑。这里有三种验证方式在任务管理器里看显存运行一个稍微吃显存的任务比如加载一个稍大的模型切到性能→GPU→专用 GPU 内存如果数值明显上升说明 GPU 在工作。用命令行监控在另一个终端持续执行nvidia-smi -l 2每两秒刷新一次能看到python.exe进程带着显存占用出现。写个简单测试import torch x torch.randn(10000, 10000, devicecuda) y torch.randn(10000, 10000, devicecuda) z x y torch.cuda.synchronize() print(z.sum().item())这段代码会在显卡上创建一个 1 亿个元素的大矩阵并做乘法如果任务管理器或nvidia-smi里显存和 GPU 利用率同时飙升说明一切正常。5.2 常见安装失败排错清单根据我给多台机器装环境的经验下面这份清单基本能覆盖 95% 的报错场景现象可能原因解决方法torch.cuda.is_available()返回 False装成了 CPU 版 PyTorch用pip list看 torch 版本号后缀带cpu就是装错了用正确 CUDA 源重装返回 False 且 driver 版本太老驱动版本低于 PyTorch 所需 CUDA 要求更新 NVIDIA 驱动到最新版nvidia-smi不是有效命令驱动没装好到 NVIDIA 官网重新安装驱动安装时CondaHTTPError网络访问 conda 源失败检查.condarc源配置或换阿里云源运行时CUDA error: no kernel image is available显卡算力过低或驱动太老换低版本 CUDA 的 PyTorch或更新驱动DLL load failed缺少 Visual C 运行库安装 VC Redistributable安装一半卡住网络问题导致包下载不完整中断后执行conda clean -a清理缓存重新安装这里我要特别强调一个我见过最多的问题很多人用pip install torch装的其实是 CPU 版本。因为 PyTorch 官方 PyPI 上的 torch 默认就是 CPU 版不带cu评估只有用官网的--index-url参数才能拿到 CUDA 版。装完一定要看版本号里有没有cu字样。另一个常见的坑是不同 conda 环境之间搞混了。有人激活了torch环境装好 PyTorch第二天打开终端忘了激活环境直接在 base 环境里跑代码然后发现 GPU 不可用。验证环境是否激活看命令行前面的(torch)标记或者执行where python看路径是否指向你的 conda 环境。5.3 安装验证后怎么卸载重装如果确实装错版本了不要慌张。在当前环境里执行pip uninstall torch torchvision torchaudio如果连环境本身都乱掉了最干脆的办法是删除整个环境重建conda deactivate conda remove -n torch --all conda create -n torch python3.10 -y conda activate torch重新开始安装流程即可。这个过程我经历过很多次不要觉得重来丢人环境干净了后面反而省时间。6. 把环境固化成模板后续新项目怎么复用环境装好后最后一个实用技巧是把环境导出成配置文件下次在新机器或新项目上复用时几分钟就能重建出完全一样的环境。在当前环境执行conda env export environment.yaml这个environment.yaml文件记录了当前环境的所有包名和版本号。换一台机器或重装系统后只要执行conda env create -f environment.yaml就能恢复出和之前一模一样的环境。但注意这个文件里包含大量 conda 的 hash 和版本号换平台比如从 Windows 换到 Linux可能无效此时可以改用pip freeze requirements.txt虽然pip freeze的还原度不如 conda 导出但它不包含平台相关的 hash跨平台通用性更好。我自己的做法是常规项目用 requirements.txt固定的正式项目用 environment.yaml。另外给你一个额外的建议不要频繁在同一个环境里反复安装卸载大包。PyTorch 这类二进制库体积大反复折腾容易留下各种莫名其妙的问题。建议一个环境只服务一类任务PyTorch 训练归 PyTorch 训练TensorFlow 归 TensorFlowPaddleOCR 归 PaddleOCR互不干扰换个项目直接新建环境用完就删。长期看这才是最省心的工作方式。我自己在实际操作中发现很多所谓安装不上的问题本质上不是技术门槛而是概念没理顺。比如前面讲的三层 CUDA 关系一旦理解清楚了安装命令就再也不会乱抄一气看到报错也能瞬间定位是驱动问题、版本问题还是环境问题。希望这篇东西能把你的安装之路铺平让你把时间花在真正有趣的模型上而不是和环境的搏斗中。