如果你刚拿到一台带独显的机器,想同时把 PyTorch 和 Paddle 跑起来,又不想在 CUDA、cuDNN 的版本地狱里耗掉一整个周末,那这套 Anaconda 加 PyCharm 的组合大概是最省事的一条路。我在 Windows 和 Linux 上前后装过不下二十遍这类环境,从早期手动配 cudatoolkit 环境变量,到现在 conda 一条命令把 CUDA 运行时和 cuDNN 一起拖进虚拟环境,中间踩的坑足够写一本小册子。这篇就把完整流程、版本选择的判断逻辑,以及那些官方文档里不会写的细节一次性讲清楚。目标很明确:从零开始,到能跑通 GPU 版的 PyTorch 和 Paddle,全程不需要你单独去装 CUDA 和 cuDNN,也不用去折腾驱动之外的东西。整套流程对刚入门的人足够友好,对已经装过几次但总在版本上翻车的朋友,也能当作一份速查清单。
1. 为什么我不建议你一上来就装CUDA和cuDNN
1.1 先把驱动、CUDA、cuDNN、框架这四层关系掰扯清楚
很多人第一次搭环境失败,根本原因不是命令敲错了,而是没搞明白这四样东西谁管谁。你可以把显卡驱动理解成硬件和操作系统之间的"通行证",没有它,系统根本不知道该怎么跟显卡说话。CUDA 是建立在驱动之上的一整套通用计算接口,它提供了运行时库和一堆基础算子,比如矩阵乘法、内存拷贝这些。cuDNN 则是在 CUDA 之上专门为深度学习做的加速库,卷积、池化、归一化这些层的高效实现都在里面。PyTorch 和 Paddle 是最上面那一层,它们调用 cuDNN 和 CUDA 提供的接口来完成张量运算。
层级关系是这样的:驱动在最底下,往上是 CUDA 运行时,再往上是 cuDNN,最上面才是框架。上层依赖下层,但下层并不感知上层的存在。这就解释了一个常见现象:你换了 PyTorch 的版本,驱动不用动;你升级了驱动,框架也不用重装。真正需要严格对齐的,是框架编译时链接的那个 CUDA 版本,和你实际能提供的 CUDA 运行时版本。
说到这里必须澄清一个流传极广的误解。你在命令行敲nvidia-smi,右上角会出现一行CUDA Version: 12.4,很多人以为这是"我已经装了 CUDA 12.4"。不是。那行字的意思是"当前这块驱动最高能支持到 CUDA 12.4 的运行时"。它是个上限,不是已安装列表。你在系统里可能一个 CUDA 都没装,这行数字照样会显示。理解这一点非常关键,因为后面判断该装哪个版本,全靠它。
1.2 "免装CUDA和cuDNN"免的到底是哪一层
现在来回答标题里那个最核心的问题:免装,免的是哪一层?答案是免去系统级的 CUDA 运行时安装和 cuDNN 手动部署,驱动那一层免不掉,也不需要免。
具体机制是这样的。当你用 conda 安装pytorch-cuda=11.8这个包时,conda 会把cuda-runtime、cudnn、cublas、cusolver这些组件作为独立的 conda 包下载下来,放在你这个虚拟环境自己的目录里,比如envs/dl/Library/bin下面。框架运行时通过相对路径或者环境内注入的方式找到它们,完全不依赖系统 PATH 里的 CUDA 安装。这就意味着,你机器上可以同时存在三个不同 CUDA 版本的环境,互不干扰,删掉环境就等于把这一整套 CUDA 干干净净地移除了,注册表、系统变量里不留任何残留。
pip 路线也是同样的道理。PyTorch 官方在 PyPI 上下发的 wheel 包,本身就是把 CUDA 运行时和 cuDNN 的动态库打包进去的自包含版本,安装时会顺带拉取nvidia-cuda-runtime-cu12、nvidia-cudnn-cu12这类配套包。Paddle 的 GPU 版本也类似,它把cudnn64_8.dll、cublas64_11.dll这些文件直接放在site-packages/paddle/libs/里,Python 导入时通过os.add_dll_directory把路径挂上去。所以你装完就能直接用,不需要去官网注册账号下载 cuDNN 压缩包,也不需要往 System32 里拷 DLL。
有一点必须提前说清楚:驱动版本仍然是硬门槛。如果你的驱动只支持到 CUDA 11.4,而你要装的是需要 11.8 运行时的框架,那装上去也跑不起来,会直接在加载动态库时报错。所以第一步永远是看驱动,而不是先挑框架版本。
1.3 这套方案适合谁,什么情况下别硬套
坦率讲,这套"conda 一把梭"的方案不是万能的,它有自己的舒适区。适合的人群是:刚开始学深度学习的学生、需要在一台机器上快速验证多个框架的开发者、不想污染系统环境的人、只想跑通演示和课程作业的人。它最大的优势是隔离性好、回滚成本几乎为零,环境坏了直接conda env remove重建就行,十分钟的事。
不太适合的场景也有几个,说清楚免得你后面绕远路。第一种是你要复现一篇指定了 CUDA 10.1 的老论文代码,而你的新卡驱动已经不支持那么低的运行时,这时候免装方案反而帮不上忙,得考虑容器或者另找适配版本。第二种是你要自己编译带自定义算子的扩展,编译期需要完整的 CUDA Toolkit,而不只是运行时,这时候还是老老实实装一套系统级 Toolkit 更稳。第三种是多机多卡的生产训练,对 NCCL 版本有严格要求,环境需要精细控制。
还有一个坑要提醒:这套方案装出来的环境体积不小。conda 版带 CUDA 运行时的环境,动辄五到八个 G;pip 版稍微好一点,但三个 G 也是起步。所以别把环境建在系统盘剩几十兆的地方,也别往base环境里装。base环境是你整个 conda 的根基,一旦被各种包冲突搞坏,修复成本远高于重建一个环境。
2. Anaconda下载安装与镜像源配置
2.1 下载渠道、安装包选择和那几个要命的勾选项
下载渠道有两个选择:官方站和国内高校镜像站。官方站下载速度在国内经常是个位数 KB,装到一半断掉是常事。我更推荐从高校开源镜像站下历史版本归档,速度能跑满带宽,而且归档里的版本号齐全,想装哪个版本都能找到。文件名一般是Anaconda3-2024.xx-Windows-x86_64.exe这种格式。
这里有个选择要做:装 Anaconda 还是 Miniconda。Anaconda 完整版安装包接近一个 G,装完之后预置了 numpy、pandas、scikit-learn、jupyter 一大堆东西,开箱即用,代价是占地三到五个 G。Miniconda 只有几百兆,装完就是一个 conda 加一个 Python,干净利落。我的建议是:如果你只是想搭个深度学习环境,装 Miniconda 就够了,后面用conda install或者pip install按需装,环境更清爽。如果你还打算顺带做数据分析、跑 notebook,那 Anaconda 省事。
安装过程中有两个勾选框值得单独说。第一个是安装路径,千万别用中文路径,也别用带空格和特殊字符的路径。C:\Program Files\Anaconda3这种看着正规,实际上很多科学计算包在编译期写死了路径处理逻辑,遇到空格会炸。我一般直接放在D:\anaconda3或者D:\miniconda3,短、纯英文、无空格,省掉后面百分之八十的诡异报错。
第二个是"是否把 Anaconda 加入 PATH 环境变量"。安装器会用红字警告你不要勾,理由是可能和其他 Python 冲突。我的实际经验是:如果你机器上只装这一个 Python 发行版,勾上,省得每次开命令行都要先点开 Anaconda Prompt。如果你机器上已经有别的 Python,或者装了多个版本,那就别勾,改用 Anaconda Prompt 来操作,避免python命令指向混乱。
提示:装完后先在命令行敲
conda --version和python --version,两个都能正常返回版本号,说明基础环境通了。如果提示"不是内部或外部命令",说明 PATH 没配好,回去用 Anaconda Prompt 或者手动加环境变量。
2.2 conda源和pip源要分开配,只配一个等于没配
这是新手最容易忽略的一步。很多人兴冲冲地配完了 conda 的镜像源,结果用 pip 装包的时候还是慢得像蜗牛爬。原因很简单:conda 和 pip 是两套完全独立的包管理和下载体系,它们读不同的配置文件,源要分别配。
conda 的配置写在用户目录下的.condarc文件里,Windows 上是C:\Users\你的用户名\.condarc。可以在命令行用conda config --set show_channel_urls yes先生成这个文件,然后直接用文本编辑器打开改。我常用的配置长这样:
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 nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpip 的配置更简单,两条命令搞定:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn配完之后可以用pip config list确认一下,输出里能看到global.index-url就说明生效了。这个配置是写在pip.ini里的,位置在C:\Users\你的用户名\pip\pip.ini,换机器的时候把这个文件拷过去就行。
还有一条特别实用的经验:如果你用的是 conda 23.x 之后的版本,强烈建议把依赖求解器换成 libmamba。默认的 classic solver 在解析复杂依赖时经常卡在 "Solving environment" 十几分钟不动,换成 libmamba 之后基本秒出结果:
conda config --set solver libmamba装完之后用conda config --show solver确认一下,输出libmamba就成了。这一步能省下大量等待时间,属于装一次爽很久的配置。
2.3 创建虚拟环境:为什么不能直接在base里装
先说结论:永远不要在base环境里装 PyTorch 或者 Paddle。原因是依赖冲突是必然会发生的,只是早晚问题。你今天在 base 里装了 PyTorch 2.4,下周想试一个需要numpy<1.24的老项目,conda 为了满足新依赖可能会把 numpy 降级,结果直接把你之前的 PyTorch 环境搞坏。而且 base 环境出问题之后,conda 自己都可能启动不了,那时候就只能重装了。
创建环境就一行命令:
conda create -n dl python=3.10 -y这里的-n dl是环境名,你可以随便起,我习惯叫dl,也有人喜欢按框架分开叫torch和paddle。python=3.10是我当前最推荐的版本,后面会解释原因。-y是自动确认,省得中途还要敲一次 y。
创建完用这两条命令来切换和管理:
conda env list # 列出所有环境 conda activate dl # 激活 dl 环境 conda deactivate # 退出当前环境 conda env remove -n dl # 删掉整个环境激活成功之后,命令行的提示符前面会多出一个(dl),这就是最直观的确认标志。这里有个常见困惑:很多人激活了环境,但敲pip install装到了系统 Python 里。原因通常是 PATH 顺序问题,或者用的是 PyCharm 里的终端但没配置好。你可以用where python(Windows)或which python(Linux)来确认当前生效的 Python 到底是哪一个,路径里必须包含envs\dl才对。
关于 Python 版本的选择,我简单说一下逻辑。深度学习框架的 wheel 包不是所有 Python 版本都提供,通常落后最新版 Python 一到两个小版本。目前在 Windows 上,3.10 是兼容性甜点区:PyTorch 2.x 全系支持,Paddle 2.5 以上也支持,各种数据处理库、可视化库的轮子都齐全。3.12 有些冷门包还没跟上,装的时候会触发源码编译,在 Windows 上编译简直是灾难。3.8 太老,一些新版本的框架已经开始放弃支持。所以除非你有明确的版本要求,无脑选 3.10 就行。
3. PyTorch环境搭建:从选版本到验证跑通
3.1 先看驱动再选CUDA版本,顺序不能反
打开命令行,敲:
nvidia-smi输出的表格右上角有个CUDA Version,右上角之外还有一行Driver Version。这两个数字是你做所有后续决策的依据。判断规则很简单:CUDA Version显示的是驱动支持的上限,你要装的框架所需要的 CUDA 运行时版本,只要不超过这个上限就行。
举几个实际例子。如果显示的是CUDA Version: 12.4,那 11.8、12.1、12.4 的运行时你都能装。如果显示的是CUDA Version: 11.7,那你只能装 11.8 以下的版本,也就是 11.7、11.6、11.3 这些。如果敲nvidia-smi直接报错说找不到命令,那要么是没装驱动,要么是笔记本双显卡切换的问题,先去设备管理器里看看显卡状态。
驱动的版本和 CUDA 支持的对应关系,大致可以这么记:驱动版本 450 以上的支持 CUDA 11.x,驱动 527 以上支持 CUDA 12.x,驱动 550 以上支持到 CUDA 12.4。这个对应表会随着新驱动发布不断更新,拿不准的时候最稳妥的办法是去查一下,或者干脆用nvidia-smi给出的那个数字直接做判断。
还有一个容易被忽略的点:如果你装的是 Windows 系统的笔记本,很多机型是核显加独显的双显卡结构,nvidia-smi能正常显示,但框架跑起来默认可能挂在核显上。这种情况在代码里用torch.cuda.is_available()能检测到独显就没问题,实际运算时由 CUDA 驱动负责调度,一般不需要额外干预。
3.2 conda路线和pip路线,我为什么更推荐pip
装 PyTorch 有两条路,各有各的脾气。
conda 路线的命令长这样:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia它的好处是依赖解析统一,pytorch-cuda这个虚拟包会自动把配套的cuda-runtime、cudnn拉进来,版本对齐由 conda 保证,你基本不用操心。缺点是慢,尤其在国内,即使配了镜像,遇到某些包只在官方 channel 上有时也会卡住。另外 conda 装的 PyTorch 版本更新会略滞后于 pip。
pip 路线的命令是:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这里有个关键细节:--index-url后面跟的那个地址,决定了你拿到的是哪个 CUDA 版本的构建。cu118就是 CUDA 11.8,cu121是 12.1,cu124是 12.4。一定要显式指定,不要图省事直接pip install torch。因为在某些平台和某些版本上,默认从 PyPI 拉到的构建并不一定是带 GPU 支持的,装完发现torch.cuda.is_available()返回 False,白忙一场。
pip 的优势是快、wheel 体积相对小、版本更新及时。而且它同样是自包含的,安装时会自动拉取nvidia-cuda-runtime-cu11、nvidia-cudnn-cu11这些依赖包,所以照样不用你手动装 CUDA 和 cuDNN。我个人现在的习惯是:优先用 pip 装 PyTorch,因为速度差异实在太大;只有在 pip 路线反复失败、或者需要和某个 conda 环境里的其他包严格对齐版本时,才退回 conda。
不管走哪条路,有一条铁律:同一个环境里不要 conda 装一半、pip 装一半。混装会导致依赖元数据割裂,conda 不知道 pip 装了什么,后面再装别的包时可能把你 pip 装的版本覆盖掉。如果实在必须混,顺序是先用 conda 装完所有能装的,最后再用 pip 补剩下的。
3.3 三步验证,确认GPU真的被用上了
装完之后不要急着写训练代码,先做验证。新建一个check_torch.py:
import torch print("PyTorch 版本:", torch.__version__) print("CUDA 是否可用:", torch.cuda.is_available()) print("CUDA 运行时版本:", torch.version.cuda) print("cuDNN 版本:", torch.backends.cudnn.version()) print("显卡数量:", torch.cuda.device_count()) if torch.cuda.is_available(): print("显卡型号:", torch.cuda.get_device_name(0))理想输出是这样的:
PyTorch 版本: 2.4.1+cu118 CUDA 是否可用: True CUDA 运行时版本: 11.8 cuDNN 版本: 90100 显卡数量: 1 显卡型号: NVIDIA GeForce RTX 4060版本号里带+cu118后缀,说明拿到的是 CUDA 11.8 构建。torch.version.cuda显示 11.8,说明运行时也挂上了。cuDNN 版本显示一串数字,说明 cuDNN 也正常加载了。这三个都对上,基本就没问题了。
再做一次真实运算的验证,确保不是"看起来能用":
import torch import time if torch.cuda.is_available(): a = torch.randn(4096, 4096, device="cuda") b = torch.randn(4096, 4096, device="cuda") torch.cuda.synchronize() start = time.time() for _ in range(10): c = a @ b torch.cuda.synchronize() print("GPU 矩阵乘法耗时: %.3f 秒" % (time.time() - start)) print("结果张量设备:", c.device)这段代码会实实在在占满显存跑十次大矩阵乘法,如果显卡在转、显存被吃掉,说明整条链路是通的。如果这步报CUDA out of memory,把 4096 调小到 1024 再试,那是显存不够,不是环境问题。
验证通过之后,建议顺手把环境信息导出一份,方便以后复现:
conda env export > environment.yml pip freeze > requirements.txt这两个文件在你换机器、或者环境被搞坏需要重建的时候,能救命。
4. PaddlePaddle环境搭建:版本对齐比PyTorch更讲究
4.1 Paddle的版本体系,为什么不能照抄教程里的命令
Paddle 的 GPU 安装包命名规则比 PyTorch 要复杂一些,它的版本号后面会带一个后缀来标识 CUDA 版本,比如paddlepaddle-gpu==2.6.1.post118里的post118就是 CUDA 11.8 的意思,post120就是 CUDA 12.0。除了 CUDA 版本,还有操作系统、是否启用 MKL、AVX 指令集等编译选项的区别,这些在下载地址里都要体现出来。
这就是为什么你在网上搜到的 Paddle 安装命令,很可能原封不动抄下来就报错。作者的机器是 CUDA 12.0,你的机器只有 11.8,命令里的post120对你就不适用。正确做法是去 Paddle 官网的安装页面,选择你的操作系统、Python 版本、CUDA 版本,页面会生成一条针对你环境的命令。
我列一个 Windows 加 CUDA 11.8 加 Python 3.10 的典型命令作为参考:
python -m pip install paddlepaddle-gpu==2.6.1.post118 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html如果你的显卡只能跑 CPU 版本(比如没有独显,或者驱动实在太老),命令就是最简单的:
python -m pip install paddlepaddle还有一点要注意:Paddle 官方推荐的安装方式就是 pip,不要用 conda。因为 conda channel 上的 Paddle 包更新不及时,版本往往落后很多,而且还可能因为依赖解析把 numpy 之类的包降级。
4.2 安装过程与GPU可用性验证
安装之前先确认当前环境是激活状态,命令行前面有(dl)标志。然后跑上面那条安装命令。下载包大概几百兆到一点几个 G,取决于你选的构建。装完之后,用 Paddle 自带的检查工具验证:
import paddle paddle.utils.run_check()如果一切正常,你会看到这样的输出:
Running verify PaddlePaddle program ... PaddlePaddle works well on 1 GPU. PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.run_check这个函数内部会依次做几件事:检查 CPU 基础运算、检查 CUDA 动态库能否加载、检查 GPU 上能否正常执行运算。所以它能一次性把大部分环境问题暴露出来,比自己写脚本测试省事得多。
如果想更细致地看设备信息:
import paddle print("Paddle 版本:", paddle.__version__) print("当前设备:", paddle.device.get_device()) print("显卡数量:", paddle.device.cuda.device_count()) if paddle.device.cuda.device_count() > 0: print("显卡型号:", paddle.device.cuda.get_device_name(0)) print("显存:", paddle.device.cuda.get_device_properties(0).total_memory / 1024**3, "GB")注意paddle.device.get_device()这个 API 在 2.5 之后的版本才有,如果你用的是更早的版本,要用paddle.get_device()。这个 API 变更也是看老教程时经常踩的坑之一。
顺便说一下,Paddle 在 Windows 上对 VC++ 运行库有依赖。如果你的系统比较干净,可能会遇到提示缺少某个 DLL 的情况。解决办法是去装一个 Microsoft Visual C++ Redistributable,把 2015 到 2022 的运行库一次性装齐。这个运行库很多软件都需要,装了不亏。有些教程会提到用旧版 IDE 工具链来编译 Paddle 的 C++ 推理库,那是另一个层面的需求,和 Python 环境搭建是两回事,这里不展开。
4.3 顺手把PaddleOCR跑通,顺便聊聊版本差异
装完 Paddle 之后,很多人下一步就是跑 OCR。这一步的坑在于:PaddleOCR 的 API 在 3.x 版本做了比较大的调整,2.x 的老代码直接抄过来会报错。
2.x 版本的典型写法是:
from paddleocr import PaddleOCR ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr("test.jpg", cls=True) for line in result[0]: print(line[1][0])3.x 版本改成了类似这样的结构:
from paddleocr import PaddleOCR ocr = PaddleOCR(use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=False) result = ocr.predict("test.jpg") for res in result: res.print()参数名、返回结构都变了。所以看到老博客里的代码跑不通时,先去确认一下自己装的 PaddleOCR 是哪个大版本。
还有一个实际使用中的经验:PaddleOCR 首次运行会自动下载检测、识别、方向分类三个模型,默认落在用户目录下的.paddleocr文件夹里。如果你的机器不能直连外网,或者想做一个便携版打包分发,就需要提前把模型文件放到指定目录,并且用det_model_dir、rec_model_dir、cls_model_dir这些参数显式指定路径。打包的时候记得把paddle目录下的libs文件夹一起带上,那里放的是 cuDNN、cuBLAS 这些动态库,缺了会直接报找不到模块。
5. PyCharm安装与解释器绑定:让代码跑在正确的环境里
5.1 版本选择和安装时的注意事项
PyCharm 有两个版本:社区版和专业版。社区版完全免费,支持纯 Python 开发、调试、虚拟环境管理、Git 集成,这些对深度学习开发来说够用了。专业版多了远程开发、Web 框架支持、数据库工具等,对学生和学术用途有申请免费的渠道。
我不建议去网上找各种非官方的激活手段,一是来源不明的工具本身有安全风险,二是折腾激活的时间成本远高于直接用社区版。对于跑深度学习代码这个场景,社区版的功能覆盖度是足够的。
安装过程没什么特别的,同样遵守"纯英文路径、无空格"的原则。安装选项里有几个可以留意:创建桌面快捷方式、添加到右键菜单"Open Folder as Project"、关联.py文件。这几个按需勾选就行。安装完之后第一次启动会问你主题、插件、键盘映射,随便选,后面都能改。
5.2 把conda虚拟环境绑定到项目上
这是新手最容易出问题的一步。很多人的情况是:命令行里一切正常,进了 PyCharm 一运行就报ModuleNotFoundError: No module named 'torch'。原因就是 PyCharm 用的是系统 Python,而不是你那个装了框架的 conda 环境。
绑定步骤是这样的。打开项目后按Ctrl+Alt+S进设置,找到Project: 你的项目名下面的Python Interpreter。右上角有个齿轮图标,点开选Add。在弹出的窗口左侧选Conda Environment,然后选Use existing environment,在下面的下拉框里找到你创建的那个环境。
如果下拉框里没有,就手动指定路径。Windows 上一般是:
D:\anaconda3\envs\dl\python.exeLinux 或者 Mac 上是:
/home/你的用户名/anaconda3/envs/dl/bin/python关键是这个python.exe要指向envs/环境名/下面那个,而不是anaconda3/python.exe。选好之后点确定,你会看到包列表里出现了 torch、paddlepaddle-gpu 这些包,说明绑定成功了。
绑定完之后有个必做的验证步骤。打开 PyCharm 底部的Terminal标签,注意看提示符前面有没有(dl)。如果有,说明终端也自动激活了环境,直接在里面跑python check_torch.py就能验证。如果没有那个前缀,说明终端没继承环境配置,你需要在设置里把 Terminal 的 shell path 配置好,或者手动conda activate dl一下再跑。
还有一个更隐蔽的坑:PyCharm 项目设置里的解释器绑对了,但运行配置(Run Configuration)里指定了另一个解释器。检查方法是点右上角的运行配置下拉框,选Edit Configurations,看Python interpreter那一栏是不是你绑定的那个环境。如果这里选的是Project Default,那它会跟着项目设置走,一般没问题;但如果被手动改过,就会出岔子。
5.3 几个提升效率的实用配置
装一个中文语言包。在Settings里找到Plugins,切到Marketplace标签,搜索Chinese,找到官方那个简体中文语言包装上,重启之后界面就是中文的了。对英文不太熟的朋友,这一步能明显降低上手门槛。
配置包管理的入口。Settings里找到Project下面的Python Interpreter,界面上有个加号,点开就是包安装界面,可以搜索包名直接装。但说实话,我更推荐直接用 PyCharm 内置的 Terminal 敲 pip 命令,因为可视化界面有时候会卡在刷新索引上,而且命令行能看到完整的安装日志,出错了知道错在哪。
设置文件编码。Settings里搜File Encodings,把Global Encoding、Project Encoding、Default encoding for properties files全部设成 UTF-8。不设的话,读中文文本文件经常出现乱码,尤其是处理数据集的时候。
配置运行的工作目录。Run菜单下的Edit Configurations里,有个Working directory选项。默认是项目根目录,但如果你代码里用了相对路径读文件,而文件在子目录里,就需要把工作目录改到对应的位置。这个设置不对,表现就是"命令行能跑,PyCharm 里报找不到文件"。
6. 常见报错速查与排查思路
6.1 安装阶段的报错
conda 卡在 Solving environment 不动。这是依赖求解太慢,解决办法是换 libmamba 求解器(前面提过),或者改用 pip 安装。如果非要坚持 conda,可以试试加--no-deps跳过依赖解析,但这样容易造成依赖不全,不推荐。
CondaHTTPError 或者 SSLError。一般是镜像源配置有问题,或者网络中间有拦截。先检查.condarc里的地址拼写,确认没有多余空格。还不行就临时换一个镜像源试试,比如换到其他高校的源。
pip 安装报 Read timed out。加大超时时间,或者换源。命令是pip install xxx --timeout 1000。如果下载大包(比如 PyTorch)总是断,可以用--default-timeout=1000配合-i指定国内源。
报 Microsoft Visual C++ 14.0 is required。这在 Windows 上装一些需要本地编译的包时会出现,解决方法就是装 Build Tools 或者完整装一个 Visual Studio 的 C++ 开发组件。不过对于 PyTorch 和 Paddle 这种有预编译 wheel 的包,正常不会遇到,遇到了说明 pip 找不到匹配的 wheel,退回去检查 Python 版本是不是太新了。
pip 报 hash 校验失败。可能是下载过程中文件损坏,或者源的内容不一致。清一下缓存pip cache purge,然后重装。
6.2 运行阶段的报错
torch.cuda.is_available() 返回 False。这个最常见,排查顺序是:先确认当前环境对不对(where python);再看torch.version.cava是不是 None,是 None 说明装的是 CPU 版,重装 GPU 版;再看驱动版本够不够;最后看有没有报动态库加载失败的具体错误信息,用python -c "import torch"单独跑一遍,看有没有 stderr 输出。
报 The detected CUDA version mismatches。这是编译期和运行期的 CUDA 版本对不上,通常是环境里混装了不同来源的包。解决办法是彻底卸载重装,pip uninstall torch torchvision torchaudio -y,然后重新装一次。
报 OSError: [WinError 126] 找不到指定的模块。这类错误在装 Paddle 时比较常见,根因往往是缺少 VC++ 运行库,或者 CUDA 相关的 DLL 路径没挂上。先去装齐 VC++ Redistributable,还不行就在代码最开头手动加一句:
import os os.add_dll_directory(r"D:\anaconda3\envs\dl\Lib\site-packages\paddle\libs")把路径换成你自己的实际路径。
Paddle 报 cudnn64_8.dll 无法加载。说明 Paddle 自带的 cuDNN 和你的驱动不兼容,或者这个 DLL 被杀毒软件隔离了。先去paddle\libs目录下确认这个文件存在,不存在就重装 Paddle。存在的话,检查驱动版本是否满足 Paddle 的要求。
为了让你排查起来更快,我把常见现象整理成一张表:
| 报错现象 | 最可能的原因 | 优先尝试的解决办法 |
|---|---|---|
| conda 卡在 Solving environment | 依赖解析慢 | 换 libmamba 求解器或改用 pip |
| torch.cuda.is_available() 为 False | 装了 CPU 版 | 检查 torch.version.cuda 是否为 None,重装 GPU 版 |
| ModuleNotFoundError | 解释器选错了 | 检查 PyCharm 项目解释器绑定 |
| WinError 126 | 缺 VC++ 运行库或 DLL 路径 | 装 VC++ Redistributable,手动 add_dll_directory |
| CUDA version mismatches | 混装了不同版本 | 全部卸载后重装 |
| pip 下载超时 | 网络问题 | 换国内源,加大 timeout |
| Paddle run_check 失败 | CUDA/cuDNN 版本不匹配 | 对照官网版本表重新选构建 |
| 中文乱码 | 编码未设 UTF-8 | 项目文件编码统一设成 UTF-8 |
6.3 几条我踩过坑之后总结的经验
第一条,任何环境问题都不要在原来的环境上反复折腾。你试了三次没解决,直接conda env remove -n dl重建,十分钟的事,比你在那儿查两小时错误日志划算得多。前提是你要有导出好的requirements.txt。
第二条,版本号能抄就抄,别自己发挥。找到一个能跑通的组合(Python 版本、框架版本、CUDA 版本),把这三个数字记下来,以后换机器直接照抄。我自己的固定组合是 Python 3.10 加 PyTorch 2.4 加 cu118,加 Paddle 2.6.1.post118,Windows 和 Linux 上都跑过,比较稳。
第三条,判断"环境到底有没有生效"最快的办法不是看代码,是看路径。where python和pip -V两条命令,输出的路径里必须包含你的环境名,否则就是在错误的环境里干活。这个方法能在三十秒内定位百分之七十的环境问题。
第四条,磁盘空间要留够。conda 的包缓存目录pkgs会越堆越大,跑过几个环境之后轻松几十个 G。定期用conda clean -a清理一下,能腾出不少地方。清理不会影响已建好的环境,放心执行。
第五条,如果有条件,把 Anaconda 装在固态盘上。深度学习环境本身体积大,创建环境、安装包的过程涉及大量小文件读写,机械盘上建一个环境可能要十几分钟,固态盘上两三分钟就完事,体验差距很明显。
最后分享一个我自己一直在用的小习惯:每建好一个能跑通的环境,就在项目根目录下写一个env_note.md,记下创建日期、Python 版本、三个框架的版本号、安装命令、以及这次遇到的所有异常和解决方式。下次再踩到类似的坑,翻一下这个文件,往往两分钟就能对上号。环境搭建这件事,本质上就是个经验积累的活,踩过的坑记下来,第二次就不是坑了。