
深度学习环境搭建这件事说简单是真简单说麻烦也是真麻烦。我见过太多人在装CUDA这一步卡了整整两天——下载几个G的安装包、装完发现版本跟显卡驱动对不上、环境变量改来改去最后还是False。而实际上如果你用Anaconda来管理PyTorch和PaddlePaddleCUDA和cuDNN这两个最容易出问题的东西是可以完全不手动安装的conda会在装框架的时候顺手替你搞定。这篇内容就是把这套流程从头到尾捋一遍Anaconda怎么装、镜像源怎么配、PyTorch和Paddle各自的环境怎么建、PyCharm怎么挂上去以及那些真正会让人翻车的细节。适合刚接触深度学习、没装过环境、也不想在CUDA上浪费时间的人看照着做基本能一次跑通。1. 免装CUDA和cuDNN这件事底层逻辑到底是什么1.1 大家被手动装CUDA劝退的真实原因新手对CUDA的恐惧其实来自一套流传很广的旧流程去官网找对应版本、下载安装包、装完cuDNN、把bin和lib目录手动拷到CUDA安装目录、再改系统环境变量。这套流程在三四年前写TensorFlow教程的时候几乎是标配所以很多人形成了装深度学习装CUDA的条件反射。但这套流程有几个天然坑。第一是版本对应关系极其严格显卡驱动版本决定了你能支持的最高CUDA版本CUDA版本又决定了你能装哪个版本的框架而框架版本又和Python版本绑定任何一环对不上就是一堆报错。第二是cuDNN需要注册账号才能下载网络环境稍有波动就卡住。第三是装完之后环境变量有一点写错系统就找不到动态库报错信息还非常不友好。更关键的问题是手动装的CUDA是装在系统层面的它是全局的。如果你以后想同时跑两个对CUDA版本要求不同的框架就会陷入装了新的、旧的又坏了的循环。这跟Python里全局装包的毛病是一模一样的。1.2 conda渠道究竟帮你做掉了哪些事Anaconda的价值在这里就体现出来了。当你从官方conda渠道安装PyTorch时命令里的pytorch-cuda11.8这个参数本质上是在告诉conda帮我把CUDA运行时也一起装上。conda会把它当作一个普通依赖包下载下来放在当前虚拟环境的目录里比如envs/torch_env/Lib/site-packages/下面的相关文件夹以及Library/bin下的动态库。这套机制的核心在于它不是把CUDA装进系统而是装进虚拟环境。也就是说你的C盘系统目录干干净净没有任何全局CUDA而每个虚拟环境里各自带一份符合自己框架要求的CUDA运行时。不同环境之间互不干扰这正是我们想要的隔离效果。同理cuDNN在较新的PyTorch分发中也已经被合并到运行时依赖里不需要你再单独下载一个压缩包去解压拷贝。你只需要保证一件事——显卡驱动足够新。驱动是唯一必须装在系统层面的东西因为它管的是硬件本身而CUDA运行时只是驱动之上的软件层conda可以随时给你换。1.3 判断你到底属于哪一类玩家注意免装CUDA并不等于完全不需要显卡驱动。如果你用的是NVIDIA显卡请务必先安装或更新官方驱动否则后面torch.cuda.is_available()必然返回False。具体分三种情况对号入座即可你的情况是否需要手动装CUDA建议做法只有CPU或核显不需要直接装CPU版本框架命令更简单NVIDIA独显想跑GPU加速不需要但驱动要新conda装GPU版框架自动带CUDA运行时需要编译自定义算子、调nvcc需要单独装完整CUDA Toolkit属于进阶场景绝大多数做模型训练、跑开源项目、用PaddleOCR的人都属于第一或第二类。第三类通常是研究算子或者做底层部署的日常场景很少遇到。还有一点值得说清楚conda渠道装下来的CUDA运行时是不包含nvcc编译器的它只有运行时库。如果你某个第三方库在安装时要求现场编译CUDA代码就会报找不到nvcc。但这类库现在越来越少了大部分热门库都提供预编译的wheel包不需要你自己编译。2. Anaconda装完后的第一件事不是急着建环境2.1 安装路径和那个经典的环境变量问题Anaconda安装包本身没什么难度一路下一步就行但有两个地方值得停一下。第一个是安装路径。默认路径在用户目录下带空格、带中文用户名都可能有隐患。我的习惯是装到一个纯英文、无空格的路径比如D:\anaconda3。原因不是Anaconda本身不支持中文路径而是后续某些库在编译或读写缓存时会因为路径里的空格或非ASCII字符出问题这种报错排查起来特别费劲不如一开始就规避掉。第二个是安装向导最后一页那两个勾选项。现在新版Anaconda默认不勾Add Anaconda to my PATH environment variable理由是避免和系统里其他Python冲突。我的建议是如果你之前有装过别的Python并且配过环境变量确实别勾否则后面python命令指向哪个都说不清。但如果你刚重装完系统干干净净勾上会方便不少。不勾的话就得走开始菜单里的Anaconda Prompt。这是我最推荐的方式——它本质上是一个已经初始化好conda环境的命令行打开就能直接用conda命令不用管什么环境变量。很多新手遇到的conda不是内部或外部命令本质上就是用了普通的cmd或者PowerShell而conda的路径没在PATH里。2.2 镜像源配置把速度从龟速拉回正常官方源在国内的下载速度是真的难受一个PyTorch包几百兆慢的时候能下一下午。所以配置镜像源是必做步骤。这里用清华的Anaconda镜像。打开Anaconda Prompt依次执行下面这些命令把默认源替换掉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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes然后执行conda config --show channels确认一下输出的列表里应该能看到刚加的那几个地址。有个细节--add channels是把新源加到最前面优先级最高如果你之前已经配过别的源建议先conda config --remove-key channels清空一遍再重新加避免老源还在列表里捣乱。pip的源也顺手配一下因为有些包用conda装不到还是得靠pippip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple配完之后可以用pip config list确认。这两步做完后面装包的速度会有明显改善。提示镜像源不是越多越好。同时配四五个源conda会挨个去问反而变慢而且不同源的包版本可能不一致容易造成依赖解析混乱。两三个稳定的源就够了。2.3 为什么必须建虚拟环境而不是直接装在base里这是很多人图省事会踩的坑直接在base环境里装PyTorch。短期看没问题长期看一定会出事。base环境是Anaconda自己的运行环境conda本身、Python解释器、很多基础工具都跑在里面。一旦你在base里装了框架框架的依赖就可能和conda自身的依赖发生版本冲突轻则某个命令报错重则整个conda都起不来。而且PyTorch和Paddle对同一个底层库的版本要求往往不一样装在一个环境里必然有一个要妥协。正确的做法是一个项目一个环境。命令很直接conda create -n torch_env python3.10 conda create -n paddle_env python3.10这里Python版本选3.10是有考量的。3.10是目前兼容性最好的一个版本区间——太新的版本3.12以上有些库还没跟上会出现编译失败太旧的3.7以下又装不上新版框架。3.9到3.11之间都比较稳我个人习惯用3.10。创建完之后用conda env list看看会列出所有环境带星号的是当前激活的。切换环境用conda activate torch_env切过去之后命令行提示符前面会显示环境名这个提示很重要很多人装包装错地方就是因为没注意自己还在base里。3. PyTorch环境从看懂命令到真正跑通GPU3.1 先查驱动再决定装哪一版在敲安装命令之前有一件事必须先做确认显卡驱动的版本。方法是在命令行里输入nvidia-smi这个命令会输出一个表格右上角有CUDA Version: 12.x这样的字样。注意这个数字不代表你已经装了CUDA它只是告诉你你的驱动最高能支持到这个CUDA版本的运行时。只要你要装的CUDA运行时版本不超过这个数字就没问题。比如驱动显示支持到12.2那你可以装CUDA 11.8的运行时的框架也可以装12.1的向下兼容。但如果驱动很老只支持到11.0而你想装要求11.8的框架那就必须先更新驱动。如果nvidia-smi报不是内部或外部命令通常是驱动没装或者没装好去官网下载对应型号的驱动重装即可。这一步跟CUDA没关系纯粹是驱动的事。3.2 把安装命令拆开看每一段都有用激活到torch_env之后官方推荐的命令形式大概是这样conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia逐个说pytorch是核心库torchvision管视觉相关的数据集、模型和图像变换torchaudio管音频。如果你只做NLP或者纯张量运算后两个可以不装能省不少空间。pytorch-cuda11.8是关键的加速部分它会让conda去拉对应的CUDA运行时包。把版本号换成12.1也可以前提是驱动支持。-c pytorch -c nvidia是指定从官方渠道找包。注意这里有个细节因为前面配了清华镜像conda会优先从镜像找如果镜像里没有对应的CUDA包会自动回落到官方渠道。有时候官方渠道在国内下载会慢可以先用镜像装主包遇到缺失再单独处理。如果网络实在不稳也可以走pip路线PyTorch官网会给出pip命令同样带CUDA依赖效果一样。不过pip装的CUDA运行时和conda装的路径不同混用两个工具装同一个环境里的包容易出乱子建议一个环境里只用一种安装方式。3.3 验证GPU是否真被调用别只看一个返回值装完之后很多人只跑一句print(torch.cuda.is_available())看到True就完事了。其实应该多验证几步import torch print(版本:, torch.__version__) print(CUDA可用:, torch.cuda.is_available()) print(CUDA版本:, torch.version.cuda) print(设备数量:, torch.cuda.device_count()) print(设备名称:, torch.cuda.get_device_name(0)) x torch.randn(1000, 1000).cuda() y torch.randn(1000, 1000).cuda() z x y print(矩阵乘法在GPU上完成:, z.device)这套验证的价值在于is_available()返回True只说明检测到了设备但不代表真正做运算时不会出错。最后那个矩阵乘法是实打实的GPU计算如果这里能顺利跑完并输出cuda:0那环境基本就没问题了。我遇到过一种情况is_available()是True但一跑运算就报CUDA out of memory最后发现是集群上别人的进程占满了显存。所以多验证一步能帮你区分环境没配好和显存被占用这两类完全不同的问题。3.4 三种高频报错和对应的处理方式第一个是CondaHTTPError或下载中断。基本是网络问题换源、重试、或者先conda clean -i清一下索引缓存再试。第二个是Found conflicts依赖冲突。这通常是因为你混用了conda和pip或者基础环境里已经装了同名包。最干净的做法是删掉环境重建conda remove -n torch_env --all然后重新conda create全程只用一种安装方式。第三个是装了之后torch.version.cuda是None。这说明你装成了CPU版本通常是因为conda在解析依赖时找不到匹配的CUDA包就默默给你装了CPU版。解决方法是明确指定版本号并且确保-c nvidia渠道在列表里。提示报错信息里如果出现Killed八成是内存或显存被打爆了跟环境配置无关先检查资源占用情况。4. PaddlePaddle环境和PyTorch不一样的地方在哪4.1 Paddle的版本体系需要单独理解PaddlePaddle的安装逻辑和PyTorch有相似之处但也有自己的特点。它的命令一般长这样conda install paddlepaddle-gpu2.5.2 cudatoolkit11.8 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge注意这里有个明显区别Paddle用的是cudatoolkit11.8这个包名而不是PyTorch那种pytorch-cuda。它同样是从conda渠道拉一个CUDA运行时下来装进环境不需要你系统里已经有CUDA。还有一个区别是Paddle有自己的conda渠道地址就是上面那个清华镜像上的Paddle路径。这个渠道里的包是官方发布的预编译版本直接指定版本号最省事。版本选择上paddlepaddle-gpu后面的版本号要和cudatoolkit的版本搭配。一般来说2.5.x和2.6.x配11.8是比较稳的组合具体对应关系以官方文档为准。如果你不确定就先去官网的安装页面按你的系统、Python版本、CUDA版本选一下它会直接给你拼好的命令复制粘贴最保险。4.2 conda装还是pip装怎么判断Paddle同时提供conda和pip两种安装方式选择上我一般这样判断服务器或者多环境场景用conda装好处是环境隔离干净依赖管理统一卸载也彻底。本地Windows单机、或者需要装一些只支持pip的配套库用pip装会更灵活。有一点要注意不要在一个环境里先用conda装再用pip覆盖装。这两个工具的依赖记录是分开的pip不知道conda装了啥conda也不知道pip装了啥混着来会让环境状态变得很难预测。真需要重装先把环境删干净。pip装PaddleGPU的时候命令里通常带一个-i指定index-url因为部分版本只在特定源上有。如果装完发现是CPU版检查一下命令里是不是漏了-gpu后缀。4.3 验证Paddle环境有自己的工具Paddle提供了一个专门的检查命令比手动写代码方便import paddle paddle.utils.run_check()这个命令会自动检测环境、驱动、CUDA版本、是否能用GPU最后打印一段结果。如果最后一行是PaddlePaddle is installed successfully那就成了。如果中间有失败项它也会明确指出是哪一步没过。想手动看更细的信息import paddle print(版本:, paddle.__version__) print(编译时CUDA版本:, paddle.version.cuda()) print(是否可用GPU:, paddle.is_compiled_with_cuda()) print(设备数量:, paddle.device.cuda.device_count())注意is_compiled_with_cuda()和is_available类的接口不太一样它判断的是当前这个Paddle包本身是不是带CUDA编译的版本。如果它返回False说明你装的是CPU版得重装GPU版。4.4 PaddleOCR相关的运行库问题如果后面要跑PaddleOCR之类的项目在Windows上大概率会遇到一个经典报错Microsoft Visual C 14.0 is required。这不是Paddle的问题是某些依赖库在运行时需要VC运行库。解决方式是安装Microsoft Visual C Redistributable装最新版即可它向下兼容。装完之后重启命令行再跑。这个库在很多软件安装时都会顺带装上所以有时候你换台机器反而不会报这个错。另一个常见的是打包成exe时找不到模型文件或者动态库这属于打包工具的路径处理问题跟环境本身没关系。调试阶段建议先在虚拟环境里跑通确认功能没问题再考虑打包。5. PyCharm挂接conda环境的具体手法5.1 社区版够用别纠结激活的事PyCharm分社区版和专业版。社区版免费支持Python开发的核心功能包括解释器配置、调试、代码补全、版本控制做深度学习项目完全够用。专业版多了Web框架支持、数据库工具、远程开发等功能对纯训练脚本来说是多余的。网上有各种关于激活的说法我的建议是直接下社区版省掉所有麻烦。社区版在官网免费的下载页面就能拿到安装时一路默认即可没什么坑。选版本的时候注意选对操作系统Windows用户下载.exe。安装路径同样建议用纯英文无空格路径。安装向导里有几个选项创建桌面快捷方式建议勾Add launchers dir to the PATH不建议勾会污染系统PATH右键菜单那个看个人习惯。5.2 把虚拟环境挂上去的完整步骤PyCharm本身不带Python环境它只是一个编辑器真正跑代码的是Anaconda里建好的虚拟环境。所以要把两者连起来。新建项目时在Python Interpreter那一栏选择Previously configured interpreter然后点右边的Add Interpreter选Conda Environment。接下来有两种方式一种是New environment它会帮你新建一个conda环境。这种方式省事但我一般不用因为前面已经在命令行建好了环境这里再建一个容易搞混。另一种是Existing environment点右边的省略号浏览到Anaconda安装目录下的envs\torch_env\python.exe。这个路径是关键选对了才行。选完之后PyCharm会花几秒钟索引这个环境的包完成后就能在解释器列表里看到torch、paddle这些库。判断有没有挂对最直接的方法是看PyCharm底部的Python Console输入import torch不报错就说明挂上了。或者看右下角状态栏显示的解释器名称应该是torch_env而不是base。5.3 PyCharm终端和conda环境的那个隐形冲突这是我觉得最容易被忽略的一个点。PyCharm底部的Terminal默认可能不是激活conda环境的命令行而是直接调用了系统shell。这时候你在PyCharm的Terminal里敲conda activate可能报CommandNotFoundError。原因是PyCharm启动Terminal时没有加载conda的初始化脚本。解决办法是在PyCharm的设置里找到Tools Terminal把Shell path改成Anaconda Prompt对应的可执行文件路径或者手动在Terminal里先执行一次conda的初始化命令。更省事的办法是装包一律在PyCharm外面用Anaconda Prompt操作PyCharm只负责写代码和运行。这样职责清晰也不容易装错环境。5.4 中文界面和常用基础设置如果习惯中文界面可以通过安装官方中文语言包插件实现在设置里的Plugins搜索Chinese就能找到装完重启即可。这个纯属个人偏好不影响功能。几个我每次都会调的地方字体大小调到14以上长时间看代码眼睛舒服很多开启Show line numbers方便定位报错行在Settings里把Code Completion的匹配模式调成大小写不敏感写库名的时候省事。还有一个实用设置是Auto-import把常用的包加到自动导入列表里敲torch的时候它会提示导入语句。这些都属于提升效率的小配置跟环境本身无关但长期用下来感受很明显。6. 多环境共存下的管理习惯6.1 环境命名和用途分离前面建议了torch_env和paddle_env分开这里再补充一个原则环境名要能看出用途。别用env1、env2这种过两个月你自己都忘了哪个是哪个。可以按框架分比如torch2_gpu、paddle_gpu也可以按项目分比如ocr_proj、nlp_exp。如果两个框架要同时用在一个项目里比如用PyTorch训练、用PaddleOCR做后处理那就建一个包含两者的环境。这种情况下安装顺序建议先装PyTorch再装Paddle因为Paddle的依赖相对独立放在后面装冲突概率小一些。装完一定要跑两边的验证命令确认都能用。6.2 环境的备份和迁移环境配好之后最好导出一份清单换机器或者环境坏了可以快速重建conda env export torch_env.yaml这个文件记录了所有包和版本。在新机器上conda env create -f torch_env.yaml不过导出的文件里会包含一些平台相关的构建号跨系统迁移时可能需要手动删掉build那一列。更轻量的做法是用conda list --explicit生成精确URL列表重建速度更快但灵活性差一些换平台就不行了。如果只是想在本地复制一个环境做实验用克隆更快conda create -n torch_env_test --clone torch_env克隆出来的环境和原环境完全一致改坏了直接删掉不影响主环境。6.3 缓存清理与磁盘占用conda的包缓存会越积越大装过几轮框架之后缓存目录轻松上到十几个G。定期清理一下conda clean --all这个命令会清掉没用的包缓存、索引缓存和tar包。执行前它会列出要删除的内容和释放的空间确认一下再继续。还有一点值得提醒虚拟环境不要放在系统盘。如果你C盘空间紧张可以在创建环境时用--prefix指定到其他盘conda create --prefix D:\envs\torch_env python3.10用prefix方式建的环境激活的时候要写完整路径conda activate D:\envs\torch_env稍微麻烦一点但换来了磁盘空间的自由。6.4 一些实际踩出来的经验第一装框架之前先确认你的Python版本和框架版本是匹配的。官方文档几乎都有兼容性表格花两分钟看一眼比装完报错再回头查强得多。第二遇到装完能import但用不了GPU的情况先看torch.version.cuda和paddle.version.cuda()这两个值如果是None基本就是装成了CPU版直接重装比修更省时间。第三别轻易在base环境里做实验。哪怕只是临时装个包也养成建个新环境或者克隆一个的习惯。base坏了修起来很麻烦重装Anaconda是最快的路。第四命令行的输出不要一路回车往下冲。装PyTorch的时候conda会先解析依赖列出一堆将要安装和更新的包这时候看一眼有没有奇怪的东西被降级能避免不少后患。第五多环境切换的时候切完先python -c import sys; print(sys.executable)确认一下当前用的是哪个解释器。这个习惯能帮你避开装了一下午结果装错环境这种最让人崩溃的失误。