拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PyCharm配置PyTorch环境全指南:Conda虚拟环境、CUDA版本匹配与排错

PyCharm配置PyTorch环境全指南:Conda虚拟环境、CUDA版本匹配与排错 很多人在 PyCharm 里折腾 PyTorch卡住的往往不是代码本身而是最前面那几步环境配置。今天就把这条链路完整走一遍把每一步背后的逻辑、容易踩的坑、以及装完之后的验证方法说清楚。无论你是刚开始用 PyCharm 的小白还是已经在 Conda 里栽过跟头的老手这篇文章都能帮你省下半天折腾时间。一个很常见的场景你按照 PyTorch 官网的命令在 PyCharm 的终端里敲了conda install结果要么是下载速度跑不满、等得让人抓狂要么是环境变量没配好直接提示 “conda 不是内部或外部命令”又或者装完之后在 PyCharm 里写import torch还是飘红。这些问题的根源绝大多数不是 PyTorch 有多难装而是你没有把 “Conda 环境” 和 “PyCharm 解释器” 这两套机制真正打通。这篇文章就是围绕打通这条链路来写的。1. 动手之前先想明白Conda 环境到底在解决什么问题1.1 为什么不能直接在默认环境里安装 PyTorch很多初学者最容易犯的错就是拿到一台电脑打开 PyCharm 默认的 Python 环境直接pip install torch然后项目一多就乱套了。今天装的这个库可能跟明天装的另一个库版本冲突尤其像 PyTorch 这种对底层依赖CUDA、NumPy、Magma 等有严格版本要求的框架一旦系统默认环境里混了多个项目的包你会在各种莫名其妙的报错里浪费大量时间。Conda 的核心价值就是做“环境隔离”。你可以把它理解成一个个独立的“工具盒”A 项目用 Python 3.9 PyTorch 2.0B 项目用 Python 3.11 PyTorch 2.4两个项目各自装各自的依赖互不干扰。这种隔离能力在深度学习场景下几乎就是刚需——你跑论文复现、不同框架对比实验的时候没有环境隔离简直就是灾难。PyCharm 本身只是一个编辑器它需要绑定一个“解释器”才知道该用哪个 Python 环境来跑代码。所以整个安装过程的核心逻辑是先用 Conda 把 PyTorch 环境创建好、把包装好然后回到 PyCharm 里告诉它“用这个环境”最后验证跑通。1.2 Python、CUDA、PyTorch 三者的版本耦合关系PyTorch 不同于普通 Python 库它对版本非常挑剔核心原因在于它内部编译了大量 C / CUDA 代码不同的 PyTorch 版本对应不同的 CUDA runtime也对应不同的 Python 版本支持范围。这里面有三个东西要分清楚显卡驱动由 NVIDIA 驱动管理负责最底层的硬件交互你可以把它理解为“硬件能力的天花板”。CUDA Toolkit完整的开发套件包含编译器nvcc、库等通常由开发者安装但 PyTorch 官网发布的预编译包中自带了一部分 CUDA runtime 依赖不一定需要你单独装完整的 CUDA Toolkit。PyTorch 内置的 CUDA 版本就是pip install torch --index-url https://download.pytorch.org/whl/cu118中那个cu11.8这是 PyTorch 自己编译时用的 CUDA 版本。它跟驱动版本之间的关系是只要驱动的支持版本 PyTorch 要求的 CUDA 版本这块就能跑。用一个直白的话说驱动版本是“最高允许”的版本代表PyTorch 里的 CUDA 版本是“实际使用”的版本。只要实际使用的版本不超过最高允许值就行两边不需要精确相等。常见的版本对应关系以近两年发布的版本为参考大概是这样的PyTorch 版本支持的 Python 版本可选 CUDA 版本对应安装命令中的后缀2.0.x3.8 - 3.11cu117/cu1182.1.x3.8 - 3.11cu118/cu1212.2.x3.8 - 3.11cu118/cu1212.3.x3.9 - 3.12cu118/cu121/cu1242.4.x3.9 - 3.12cu118/cu121/cu1242.5.x3.9 - 3.12部分版本支持3.13cu118/cu121/cu124/cu126因此如果不是特殊原因我建议你创建 Conda 环境时直接选 Python 3.10 或 3.11这是一个在兼容性和生态支持上都比较稳妥的选择。千万别直接选目前最新的大版本比如 3.13有些扩展库还没完全跟上容易踩“安装失败”或“编译报错”的坑。2. 第一道坎conda 命令找不到与 conda init 报错2.1 安装 Anaconda/Miniconda 后如何配置环境变量先说一个百度搜索热度极高的报错“conda 不是内部或外部命令也不是可运行的程序或批处理文件”。在 Windows 下出现这个提示几乎可以断定是环境变量的问题。安装完 Anaconda 后系统需要能找到三个目录里的可执行文件主目录例如C:\Users\你的用户名\anaconda3Scripts子目录conda.exe、pip.exe等都在这里Library\bin子目录一些关键的动态链接库例如libssl相关依赖在 Windows 上的配置方法是开始菜单搜索“编辑系统环境变量” - 环境变量 - 在“系统变量”里选中Path- 编辑 - 新建把下面三行加进去C:\Users\你的用户名\anaconda3 C:\Users\你的用户名\anaconda3\Scripts C:\Users\你的用户名\anaconda3\Library\bin我之前遇到过一种情况用户说“我明明加了环境变量还是报错”。后来远程排查发现他把路径写在了“用户变量”的 Path 里而当前登录的 Windows 用户名跟 Anaconda 安装目录里的用户名不一致。所以这里有一个细节安装时尽量用默认路径、默认用户名不要改安装位置。乱改安装路径到带中文或空格的目录下面后面引发的问题会让你怀疑人生。配置完成后必须重新打开一个终端窗口或者 PyCharm 的 Terminal 面板配置才会生效。运行conda --version能看到版本号就说明环境变量没问题。2.2 “conda init” 到底做了什么为什么 activate 报错另一种高频错误是CommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run $ conda init first这个报错很容易让人摸不着头脑conda 明明能运行否则不会给你打印这个提示但偏偏无法conda activate。原因是这样的conda activate是一个函数不是简单意义上的可执行程序。它需要在当前 shell 会话里注册一个函数而注册这个函数是需要在启动配置里写内容的在 bash 里是.bashrcPowerShell 里是profile.ps1。只是用 pip 装了一点东西没有执行过初始化的话这个函数就不存在。解决办法很简单conda init它会根据你的操作系统和默认 shell 自动修改启动配置文件。运行完后关掉当前终端重新打开再执行conda activate就正常了。在 PyCharm 里如果遇到同样的报错就在 PyCharm 底部的 Terminal 面板里执行一遍conda init然后重启一次 PyCharm。其实报这个错的人往往连conda init都没执行过原因是安装 Anaconda 时「Add Anaconda to my PATH environment variable」这个选项没勾选或者在较新的安装器里它被默认不选中。按照上面三步走——配置环境变量、设置好路径、运行conda init——这个坑基本就填平了。2.3 Windows 上 PowerShell 执行策略的问题Windows 下用 PowerShell 运行conda init之后如果报错提示脚本无法加载类似“无法加载文件因为在此系统上禁止运行脚本”还需要检查 PowerShell 的执行策略。Anaconda 会在 profile 脚本里调用一些.ps1文件如果系统默认是 Restricted 模式就会拒绝执行。解决办法是在管理员权限的 PowerShell 里运行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned输入Y确认即可。这个是 Windows 系统安全机制的限制跟 Conda 本身没有关系但极其常见特别是在公司统一管理、安全策略比较严格的电脑上。不用慌这是常规操作。3. 下载慢的解决办法换源与加速3.1 Conda 换源清华源配置全流程Conda 默认的官方源服务器在海外在国内网络环境下下载包经常只有几十 KB/s遇到 PyTorch 这种动辄上 GB 的包等上几个小时都不稀奇。解决方法是切换到国内镜像源比较常用且稳定的是清华源。打开命令行执行以下命令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文件里面记录的就是源配置。我建议你直接用文本编辑器打开这个文件改成下面这种完整的配置会更稳妥——尤其是当你只用命令行添加、而系统自动生成的配置不包含default_channels时有可能会在安装时莫名其妙地又去访问官方源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 pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这里面有个关键点在最后两行把pytorch和pytorch-lts这两个 channel 也指向清华的 cloud 镜像。否则你在执行conda install pytorch时虽然主包走了镜像但 PyTorch 这个 channel 的数据还是会尝试访问官方源照样慢。提示如果之前配置过其他源建议先把旧的.condarc文件备份或者清空再写避免残留冲突配置。3.2 Pip 换源清华、阿里源配置方式在 PyTorch 官方安装策略里现在推荐的方式是pip install torch torchvision torchaudio --index-url ...。所以除了配 Conda 源pip 的源同样需要配置否则下载照样卡死。执行下面任意一种即可# 使用清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 使用阿里源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/配置完可以用pip config list检查生效。这样设置后后续所有 pip 安装都会走国内镜像速度提升非常明显。这里有个实操技巧跟你分享一下去年我做深度学习实验时PyTorch 2.1 刚出当时pip install torch直接走清华源拉取速度大概在 10~15 MB/s比默认源稳定太多。但千万不要同时把默认 PyTorch 官网的--index-url和国内镜像混用那会导致依赖解析时出现版本错乱比如 torch 从官网拉、torchvision 从清华拉两边版本对不上装完一运行直接报找不到对应的动态库。3.3 下载 PyTorch 时的加速与带 CUDA 版本的下载如果你需要安装带 CUDA 的 GPU 版本就会面临一个现实问题pip install torch --index-url https://download.pytorch.org/whl/cu121这个命令虽然下载的是官网预编译包但 PyTorch 官方的下载服务器并不在国内在大文件下载时依然慢。而国内的镜像源清华、阿里默认只同步了 CPU 版本的 wheel 包GPU 版的包往往没有完整同步。为什么我要特意说这个事因为很多同学到这里就开始凌乱了用国内 pip 源装到的 torch 确实是 CPU 版自己还不知道代码一跑模型训练慢得离谱还以为是电脑配置问题。解决办法有三个方向如果网络条件允许直接走官网直连用下载工具或设置较长的超时时间耐心等。从 PyTorch 官方中文网或相关镜像站寻找已同步的 GPU 版 wheel 包。使用一些具备断点续传能力的下载方式单独把 whl 文件拉下来再本地安装。如果你只是做 CPU 推理实验那国内源直接装 CPU 版就够了反正先保证能把流程跑通。记住一个辨别技巧装完之后在 Python 里执行torch.__version__如果版本号后面跟着cpu那串后缀就说明默认装了 CPU 版。4. 创建专用环境按显卡选择 PyTorch 安装方案4.1 conda create 创建虚拟环境的准确步骤环境变量、源都配好了现在开始正式建环境。建议专门为 PyTorch 建一个独立的环境不要舍不得这次隔离。conda create -n pytorch python3.10中间的pytorch是环境名你可以自行命名但是建议用英文小写、不要带空格连字符之类。命令执行过程中会询问是否安装 base 环境里的可迁移包输入y等待安装完成。这个过程的时长取决于你当前的网速和源配置正常情况下几分钟之内就能完。不过这里我强烈建议你如果觉得conda create -n 慢大概率是因为在初始化 Python 时又在访问官方源回到第 3 节检查你的.condarc。另外conda create时可以直接指定 Python 版本这一步一定要做不要在装完环境后再手动乱装 Python——曾经我指导过一位同事他在环境里用conda install python3.11覆盖过一次结果 PyTorch 的 wheel 和 Python 编译版本不匹配跑import torch直接报DLL load failed只好把环境删掉重建。创建完成后激活进入环境conda activate pytorch如果你之前没有做第 2.2 节的conda init这里就会报错。激活成功后命令行前面会出现(pytorch)前缀说明已经进入这个独立环境了。4.2 CPU 版与 GPU 版的安装命令与选择逻辑安装前先判断自己需要 CPU 版还是 GPU 版。这个判断依据很简单你的电脑有没有 NVIDIA 独立显卡如果有且跑深度学习/模型训练选 GPU 版。如果没有 NVIDIA 显卡只有集成显卡或 AMD 显卡选 CPU 版性能受限但至少功能完整。CPU 版安装最稳的命令pip install torch torchvision torchaudioGPU 版安装就要根据你想要的 CUDA 版本选命令了以常见版本为例# CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # CUDA 12.1 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # CUDA 12.4 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124怎么说呢这里我不太建议新手直接无脑选数字最大的 CUDA 版本。选择 CUDA 版本要考虑两点显卡驱动版本是否支持。在命令行执行nvidia-smi右上角会有一行CUDA Version: xx.x这是驱动支持的最高版本。如果显示的是 12.1那你装 cu121 就好如果显示的是 11.8千万别硬装 cu124会报“CUDA driver version is insufficient”的错误。驱动版本 目标 CUDA 版本时才能用。项目依赖是否匹配。有些老项目比如基于 PyTorch 1.x 时代的代码库或者某些依赖特定编译版本的第三方库锁死了某个 CUDA 版本这时候别乱升级。4.3 第一次就装对的实操心得torch、torchvision、torchaudio 版本一致性这里必须多说一句版本匹配的问题。torch、torchvision、torchaudio三个包对版本是强耦合的。前阵子我帮一位读者排查环境问题他torch装的是 2.4.0但torchvision还是 0.15.1结果一调用torchvision.models就报版本不匹配的错误。PyTorch 官方在每一版发布时都同时推出这三个配套包版本号规则有对应关系例如torch 2.0.0 - torchvision 0.15.1 - torchaudio 2.0.1torch 2.1.0 - torchvision 0.16.0 - torchaudio 2.1.0torch 2.4.0 - torchvision 0.19.0 - torchaudio 2.4.0但最好别自己手写三个固定版本号去装万一月份差异导致不存在对应的组合就会陷入依赖地狱。最佳做法是执行上面那种一行命令同时安装pip 会自动解析出配套版本。4.4 AMD 显卡用户与 WSL2 的参考看到热搜里有人在搜 “7900xtx pytorch wsl”这里也顺便给 AMD 显卡用户一个参考路径。NVIDIA 之外的显卡跑 PyTorch 目前是这样Windows 下 AMD 显卡通常走 DirectML 版 PyTorch指令来自微软维护的torch-directml分支体验比较受限很多高级特性不支持Linux 下或 WSL2 里可以用 ROCm 版。ROCm 在部分 AMD 显卡驱动适配、能力支持方面目前还远不如 CUDA 生态成熟你要有一定的心理预期。如果你是 AMD 显卡我的建议是先老老实实装 CPU 版把代码流程调通跑一些可行性验证后续再考虑 ROCm 或云端 GPU。5. PyCharm 里绑定 Conda 环境的操作细节5.1 配置 Python Interpreter绑定已有环境的步骤PyTorch 环境建好了现在回到 PyCharm。很多人不知道的是PyCharm 里环境没选对代码照样飘红甚至 run 都 run 不了。打开 PyCharm进入File - Settings - Project - Python Interpreter点击右上角的齿轮或Add Interpreter选择Add Local Interpreter。在弹出的窗口里左侧选Conda Environment。关键点来了这里有两个子选项Existing environment绑定已有的 Conda 环境就是我们刚才创建的pytorch。Create new environment新建一个环境不建议在 PyCharm 里这样建因为版本控制不如命令行灵活。选Existing environment后Interpreter 路径下拉框里一般会自动列出所有已经存在的 Conda 环境选择pytorch就行。如果没有自动出现可以手动指定路径C:\Users\你的用户名\anaconda3\envs\pytorch\python.exe如果 PyCharm 提示找不到 conda 可执行文件需要在配置界面里指定Conda executable一般是C:\Users\你的用户名\anaconda3\Scripts\conda.exe确认后等待 PyCharm 完成索引。这一步完成后你在项目里写import torch就不再飘红了。提示在 PyCharm 绑定 Conda 环境之前确保你已经用命令行激活并安装好了 PyTorch否则 PyCharm 会在后续创建项目和 run 代码时走一遍它自己的依赖索引一旦缺包就报 ModuleNotFoundError到那时排查起来比现在麻烦十倍。5.2 设置 PyCharm Terminal 自动激活环境PyCharm 底部的 Terminal 面板有时候默认没有激活 Conda 环境你在里面敲python还是跑的系统默认环境。这个细节容易被忽略但它会让你的操作变得非常割裂在外部终端里装好了 torch回到 PyCharm 终端里怎么 import 都失败。解决方法是配置 PyCharm 在打开 Terminal 时自动激活 Conda 环境。PyCharm 从 2021.3 版本开始对 Conda 环境有更好的原生支持在Settings - Project - Python Interpreter里选好环境后Terminal 会自动带上(pytorch)前缀。如果没生效可以在Settings - Tools - Terminal里把 Shell path 设置为cmd.exe并勾选相关选项强制继承 PATH。最简单粗暴也最有效的方法是在 PyCharm 的 Terminal 里手动执行conda activate pytorch如果你的 PyCharm 版本较旧这个命令在每次打开新的 Terminal 时都要执行一次。这不算什么大问题但确实容易搞混。经历过一次“在终端里明明能跑 torch、在脚本运行里却报错”的情况之后你就理解这个细节有多重要了。5.3 在 PyCharm 中直接创建并运行测试脚本选好解释器并激活环境后新建一个 Python 文件写一段最简验证脚本import torch print(torch.__version__) print(torch.cuda.is_available())右键运行。如果输出正常说明整个链路已经彻底打通。如果torch.cuda.is_available()返回False说明你装的是 CPU 版或者 CUDA 驱动有问题——别慌无脑照第 6 节的排查链路去看就行。6. 装完必须做的三件事验证、排错、导出环境清单6.1 验证 CUDA 可用性的完整命令很多人以为torch.cuda.is_available()返回True就万事大吉其实这只是一块敲门砖。更完整的验证命令可以这样import torch print(PyTorch 版本, torch.__version__) print(CUDA 是否可用, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU 型号, torch.cuda.get_device_name(0)) print(显存总量, torch.cuda.get_device_properties(0).total_memory / 1024**3, GB)这四行代码能一次性确认版本号、CUDA 是否可用、型号、显存大小。如果到这里都是正常的恭喜你环境可以正式投入使用。顺便提一句实际跑模型前最好再跑一个简单的张量运算来检验计算是否正确x torch.randn(3, 3).cuda() y torch.mm(x, x) print(y)这一步能排除驱动层面“假正常”的情况——就是is_available()返回 True但一跑.cuda()运算就崩盘。6.2 高频报错的排查链路与解决办法我把安装和配置过程中高频出现的报错列在这里方便你对号入座报错现象可能原因解决方法安装时DLL load failed while importing torchPython 版本与 PyTorch 不匹配 / 缺少 VC 运行库使用官方推荐的 Python 版本安装 VC Redistributabletorch.cuda.is_available()返回 False装的是 CPU 版 torch / 驱动版本过低检查torch.__version__是否带cu后缀用nvidia-smi查询驱动版本提示CUDA error: no kernel image is available for execution on the device显卡较老如 GTX 750 Ti 等计算能力不被新版 CUDA 支持换用 CUDA 11.8 或更早版本的 PyTorchconda create -n 慢卡住默认源没替换或 src 解析过慢确认.condarc配置生效再用conda clean -i清理索引缓存报UnavailableInvalidChannel错误.condarc中 channel 地址写错清空 .condarc 重新配置官方源或清华源遇到过最奇特的情况是驱动正常、安装命令看起来也对但cuda.is_available()就是 False。最后排查下来发现用户安装时 PyCharm 里选的是系统默认环境命令是在 PyCharm 的 Terminal 里跑的但他通过pip安装时用的却又是 Anaconda 的pip两个pip各归各结果装了两次 torch全装到了一个环境里。这就是典型的环境错位——你在哪个环境装的包就必须在哪个环境运行不分清这一点问题基本无解。6.3 导出环境依赖清单方便后续复现装好环境后建议立刻导出一份依赖清单。尤其是在项目跨电脑迁移、或者你想把代码开源给别人复现的时候这个清单几乎是必需品conda activate pytorch pip list requirements.txt或者想完整保留 conda 源里的包信息包含通过 conda 安装的包conda env export environment.yml更推荐你同时保留这两份文件environment.yml是 Conda 的完整环境副本requirements.txt是 pip 的简洁版本。下次换新电脑只需要conda env create -f environment.yml就能一键重建一模一样的环境。这个习惯我从第一次正式跑深度学习项目就开始养成了每次实验出结论、论文出了版本环境都会顺手导出别等到半年后再复现实验时发现环境早就乱到根本理不清。最后分享一点实践经验整个流程走下来你会发现最耗时的往往不是 PyTorch 本身而是“环境没配对、源没配好”带来的反复等待和排查。如果让我总结一条最重要的经验那就是PyCharm、Conda、PyTorch 这三者是三条独立链路先各管各最后再打通。不要一边装环境一边去 PyCharm 里写代码更不要夭折换源的过程。还有一条比较实用的小技巧如果装完后运行速度低于预期先用nvidia-smi确认 GPU 有没有被真正调用起来。很多时候安装了 GPU 版但由于 PyCharm 绑定了解释器路径错误程序还是在用 CPU 跑菊花转不停、训练速度让人崩溃。只有确认torch.cuda.is_available()为 True、且torch.cuda.get_device_name()输出了正确型号才能放心地说环境搭建完成。
返回列表