
简介这份文档面向刚接触深度学习、需要在本地搭建 PyTorch 运行环境的开发者与学习者重点解决在 Anaconda 中新建独立虚拟环境、避免直接在 base 环境安装框架导致库冲突的问题。资源包共 1 个 docx 文件约 170KB以图文笔记形式记录环境配置的关键环节篇幅精简便于随查随用。内容围绕新建与激活虚拟环境、查看显卡驱动版本、选择匹配的 CUDA 与 cuDNN、按官方命令安装指定版本 PyTorch 等展开并给出国内镜像源替换思路还演示了导入 torch、查看版本号与检测 GPU 是否可用的验证方法可帮助读者理清版本对应关系、少走弯路。目前已有 1610 人学习下载适合作为深度学习环境搭建的入门参考与排错对照。1. 深度学习环境搭建为什么我坚持用 conda 虚拟环境隔离 PyTorch每次有人问我深度学习环境怎么搭我第一句话都是别在 base 环境里装 PyTorch。这不是洁癖是血泪经验。我见过太多人把 base 环境装成一锅粥——tensorflow 1.x 和 pytorch 抢 numpy 版本装完一个另一个就报ImportError最后只能重装 Anaconda。conda 虚拟环境的核心价值就一条环境之间相互独立每个环境有自己的 Python 解释器和库目录装崩了直接conda env remove删掉重来不影响其他项目。这篇笔记拆的是一套完整的 PyTorch 虚拟环境搭建流程从 conda 建环境、CUDA/cuDNN 版本对齐、PyTorch 安装到 GPU 可用性验证适合刚上手深度学习、或者被环境冲突折磨过的从业者照着复现。2. conda 建环境与 CUDA 版本对齐先算清楚版本账再动手环境搭建翻车八成不是命令敲错是版本没对齐。这一章先把「建环境」和「版本匹配」两件事讲透后面装 PyTorch 才不会反复卸载重装。2.1 新建独立环境命名、Python 版本与目录结构conda 建环境的命令本身很简单但参数选错后面全是坑。核心命令是conda create -n 环境名 python版本号环境名建议带项目语义比如pytorchPython 版本要跟目标 PyTorch 版本对得上——PyTorch 1.7 系列官方支持 Python 3.63.9你建个 3.10 的环境去装 1.7 的轮子pip 会告诉你找不到匹配的发行版。# 新建名为 pytorch 的环境指定 Python 3.8 conda create -n pytorch python3.8 # 查看所有环境确认创建成功 conda env list # 激活环境Windows 下用 activateLinux/macOS 用 source activate conda activate pytorch # 确认当前环境的 Python 路径指向 envs 目录而不是 base where python # Windows which python # Linux/macOS逻辑说明conda create会在 Anaconda 安装目录下的envs/子目录里生成一个独立文件夹里面自带一套 Python 解释器和 site-packages。激活后where python的输出应该指向.../envs/pytorch/python.exe如果还指向 base 目录说明激活没生效后面装的库全进了 base等于白建。参数上-n后面跟环境名python3.8是精确指定小版本不写的话 conda 会拉最新版容易和目标框架不兼容。我一般建完环境先跑一遍conda list确认里面只有基础包干净的环境是后面排错的前提。2.2 CUDA 与显卡驱动的版本账11.2 驱动能装 11.0 的 CUDA 吗这是整个流程里最容易懵的地方。结论先给显卡驱动版本决定的是「最高能支持到哪个 CUDA 版本」不是「必须装哪个版本」。驱动向下兼容驱动支持 CUDA 11.2你装 CUDA 11.0 完全没问题反过来驱动只到 10.2你硬装 CUDA 11.0 的 PyTorchtorch.cuda.is_available()就会返回 False。查驱动版本的方法打开 NVIDIA 控制面板 → 帮助 → 系统信息看「驱动程序版本」那一栏或者命令行直接跑nvidia-smi右上角CUDA Version: 11.2表示这个驱动最高支持到 CUDA 11.2 运行时。组件本项目选用版本选型依据显卡驱动支持上限CUDA 11.2nvidia-smi右上角显示值CUDA Toolkit11.0低于驱动上限留余量cuDNN8.0与 CUDA 11.0 配套PyTorch1.7.0官方提供 cu110 预编译轮子Torchvision0.8.1与 PyTorch 1.7.0 严格配套选 CUDA 11.0 而不是贴着 11.2 装是我个人的保守习惯驱动上限和实际安装版本之间留一个小版本余量避免某些驱动小版本更新后出现兼容性玄学。cuDNN 必须和 CUDA 大版本对应CUDA 11.0 配 cuDNN 8.0装错了 PyTorch 能 import 但一跑卷积就崩。CUDA 和 cuDNN 从 NVIDIA 官网下载安装装完把 cuDNN 的 bin、include、lib 目录内容拷进 CUDA 安装目录对应文件夹这是 Windows 下的常规做法。提示装 CUDA 前先确认没有旧版本残留多个 CUDA 版本共存虽然可行但环境变量CUDA_PATH只指向一个容易装完发现调用的还是旧版。2.3 用 conda 装 CUDA 运行时比手动装 Toolkit 更省心的替代方案手动装 CUDA Toolkit 拷 cuDNN 是传统路子但有个更省事的做法很多人不知道PyTorch 官方 conda 源里的cudatoolkit包自带 CUDA 运行时库不需要系统级安装完整 Toolkit。对于「只想跑 PyTorch、不写自定义 CUDA 算子」的场景这条路能省掉一大半配置工作。# 在激活的 pytorch 环境里用 conda 装 cudatoolkit 运行时 conda install cudatoolkit11.0 -c pytorch # 验证 cudatoolkit 是否装进当前环境 conda list | grep cudatoolkit逻辑说明cudatoolkit是 conda 打包的 CUDA 运行时子集包含 PyTorch 推理和训练需要的动态库但不含 nvcc 编译器。参数-c pytorch指定从 PyTorch 官方 channel 拉包保证版本和后续 PyTorch 轮子匹配。这条路的边界很明确如果你要编译自定义 CUDA 扩展比如某些检测库的 NMS 算子还是得装完整 Toolkit 和 nvcc。我一般先用 cudatoolkit 跑通真遇到要编译扩展再补装完整版避免一上来就折腾系统级安装。3. PyTorch 安装与 GPU 验证从官方命令到国内源加速环境建好、版本账算清这一章落到实际安装和验证。装 PyTorch 本身是一条命令的事但「装哪个版本、从哪装、装完怎么确认没白装」这三步各有讲究。3.1 锁定 PyTorch 1.7.0 cu110 的安装命令PyTorch 官网的 Previous Versions 页面按版本列出了历史安装命令找到对应 CUDA 11.0 的那一行直接复制。PyTorch 1.7.0 配 CUDA 11.0 的 conda 命令长这样# PyTorch 1.7.0 CUDA 11.0 torchvision 0.8.1 官方 conda 命令 conda install pytorch1.7.0 torchvision0.8.1 cudatoolkit11.0 -c pytorch # 如果 conda 源太慢改用 pip 安装对应轮子 pip install torch1.7.0cu110 torchvision0.8.1cu110 \ -f https://download.pytorch.org/whl/torch_stable.html逻辑说明conda 命令里三个包版本必须一起锁死pytorch、torchvision、cudatoolkit是配套关系单独升级其中一个大概率触发依赖冲突。pip 命令里的cu110后缀是关键它标识这是 CUDA 11.0 编译的轮子不带后缀的默认是 CPU 版装完torch.cuda.is_available()永远是 False——这是新手最高频的翻车点。-f参数指定轮子索引地址让 pip 去 PyTorch 官方仓库找对应版本而不是 PyPI 上的默认包。3.2 国内源加速换源装包与「太慢」的排查顺序官方源在国内拉几个 G 的轮子慢到怀疑人生是常态。换国内镜像源是标准操作但要注意PyTorch 的 cu110 轮子只在官方源有普通 PyPI 镜像不一定同步。所以换源策略要分场景。# 场景一装普通依赖包numpy、opencv 等换清华源 pip install numpy opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple # 场景二装 PyTorch 本体官方轮子索引 国内源组合 pip install torch1.7.0cu110 torchvision0.8.1cu110 \ -f https://download.pytorch.org/whl/torch_stable.html \ -i https://pypi.tuna.tsinghua.edu.cn/simple # 永久配置 pip 默认源写入配置文件之后不用每次带 -i pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple逻辑说明-i指定包索引地址-f指定额外查找链接两者可以共存——pip 会先在-i的索引里找找不到再去-f的链接里找。装 PyTorch 时保留-f官方链接是必须的因为国内镜像对cu110这种带本地版本标识的轮子同步不全。常见镜像地址清华https://pypi.tuna.tsinghua.edu.cn/simple、阿里云https://mirrors.aliyun.com/pypi/simple/、中科大https://pypi.mirrors.ustc.edu.cn/simple/。如果换了源还是慢排查顺序是先看是不是在装 cu110 轮子这种只能走官方链接慢是正常的挂机等、再看网络是不是走了公司内网限制、最后才怀疑源本身。3.3 GPU 可用性验证三行代码确认环境没白搭装完不验证等于没装。进 Python 交互环境跑三行代码能同时确认版本、CUDA 可用性和 GPU 设备信息。import torch # 1. 确认 PyTorch 版本是 1.7.0 print(torch.__version__) # 2. 确认 CUDA 是否可用返回 True 才算 GPU 环境搭成功 print(torch.cuda.is_available()) # 3. 确认 GPU 设备数量和名称进一步验证驱动识别正常 print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0))逻辑说明torch.__version__输出1.7.0cu110说明装的是 GPU 版如果只输出1.7.0没有后缀说明装成了 CPU 版得卸了重装。torch.cuda.is_available()返回 False 的排查链条是先确认装的是不是 cu110 轮子 → 再确认nvidia-smi能正常输出 → 最后确认 CUDA 版本没超过驱动上限。device_count()返回 0 但is_available()返回 True 的情况极少见一般是驱动装残了。这三行跑通环境就算立住了后面接 PyCharm 时把解释器指向envs/pytorch/python.exe即可。注意验证时一定要在激活的 pytorch 环境里跑在 base 环境跑出来的结果不代表你新建的环境。4. 环境搭建避坑五条踩出来的排查记录这一章全是真金白银换来的。每条按「现象 → 原因 → 解决」写遇到对应症状直接对号入座。4.1 现象torch.cuda.is_available()返回 False原因排查分三层。第一层装的是不是 CPU 版轮子——pip install torch不带cu110后缀装的就是 CPU 版这是最高频原因。第二层CUDA 版本超过驱动上限——驱动只支持到 10.2你装了 cu110 的轮子运行时直接找不到设备。第三层环境变量CUDA_PATH指向了错误的 CUDA 目录或者系统里装了多个 CUDA 版本互相干扰。解决先pip list | grep torch看版本号带不带cu110不带就卸了重装带的话跑nvidia-smi确认驱动上限超了就降 CUDA 版本重装都正常就检查环境变量把CUDA_PATH指向实际安装的 CUDA 11.0 目录。4.2 现象conda 装包卡在 Solving environment 十几分钟不动原因conda 的依赖求解器在包多、channel 多的时候会指数级变慢尤其是混用了 defaults 和 conda-forge 两个 channel 的环境。这不是网速问题是求解算法本身的问题。解决优先用 pip 装 PyTorch官方推荐 pip 和 conda 二选一别混用或者装libmamba求解器加速conda install -n base conda-libmamba-solver然后conda config --set solver libmamba。我现在的习惯是建环境用 conda装深度学习框架用 pip各司其职卡求解的情况少很多。4.3 现象装完 PyTorch 后 import torch 报DLL load failed原因Windows 下 cuDNN 的 DLL 没放对位置或者 CUDA 的 bin 目录不在系统 PATH 里。PyTorch 启动时要动态加载cudnn64_8.dll这类文件找不到就报 DLL 加载失败。解决确认 cuDNN 的bin目录下的 dll 已经拷进 CUDA 安装目录的bin下并且C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin在系统 PATH 里。改完 PATH 要重启终端甚至重启电脑才生效。用 conda 装cudatoolkit的方案能绕开这个问题因为运行时库直接在环境目录里不依赖系统 PATH。4.4 现象PyCharm 里跑代码提示找不到 torch但终端里正常原因PyCharm 的项目解释器还指向 base 环境或者系统 Python没切到你新建的 pytorch 环境。终端里conda activate只影响当前终端会话不影响 IDE 的配置。解决PyCharm → Settings → Project → Python Interpreter → Add Interpreter → Conda Environment → 选择已有环境路径指向Anaconda安装目录/envs/pytorch/python.exe。配完在 PyCharm 的终端里跑where python确认指向正确。这个坑我踩过不止一次代码没问题、环境没问题就是 IDE 没配对。4.5 现象pip install tensorflow1.5.0把 PyTorch 环境搞崩了原因tensorflow 1.5.0 依赖的 numpy、protobuf 版本和 PyTorch 1.7.0 冲突pip 装 tf 时会自动降级 numpy导致 PyTorch 跑起来报 numpy 相关的 ABI 错误。这就是为什么强调「环境隔离」——但同一个环境里装两个框架隔离也救不了。解决PyTorch 和 TensorFlow 分两个 conda 环境装别塞一起。如果确实要在同一环境共存先装 tf 再装 torch让 pip 的依赖解析以最后装的为准但即便如此也可能有运行时冲突不推荐。环境隔离的正确用法是「一个框架一个环境」不是「一个项目一个环境里塞所有框架」。5. 环境固化与迁移用 environment.yml 把踩过的坑锁死环境搭好只是开始真正省心的是把它固化下来。我现在的习惯是任何跑通的环境第一时间导出environment.yml换机器、重装系统、给同事复现一条命令还原不用再走一遍版本对齐的推理过程。# 导出当前环境的完整依赖清单含 pip 装的包 conda env export --no-builds environment.yml # 在新机器上还原环境 conda env create -f environment.yml # 只导出显式安装的包更干净但可能漏掉间接依赖的精确版本 conda env export --from-history environment.yml--no-builds去掉 build 标识让 yml 跨平台可用--from-history只记录你手动conda install过的包文件更小但还原时依赖求解器会重新算版本可能装出不一样的结果。我的做法是交付给别人用--no-builds的完整版自己留一份--from-history的轻量版做版本记录。还有一个验证技巧值得单独说环境搭完后用一个最小训练脚本跑通一次前向反向比只跑is_available()更能暴露问题。因为is_available()只验证 CUDA 运行时能加载不验证 cuDNN 卷积、显存分配这些真正会崩的环节。import torch import torch.nn as nn # 最小验证一个卷积层 一次前向 一次反向 model nn.Conv2d(3, 16, 3).cuda() x torch.randn(1, 3, 32, 32).cuda() y model(x) loss y.sum() loss.backward() print(前向输出形状:, y.shape) print(梯度是否非空:, model.weight.grad is not None) print(显存占用:, torch.cuda.memory_allocated() / 1024**2, MB)这段脚本能一次性验证 CUDA 张量创建、cuDNN 卷积核加载、反向传播和显存分配四条链路任何一环有问题都会在这里暴露而不是等到你跑正式训练半小时后才崩。memory_allocated()还能让你对显存占用有个基线认知后面调 batch size 时有参照。从那以后我每次搭完环境都强制走一遍「三行验证 最小训练脚本 导出 yml」这套流程宁可多花五分钟也不在训练跑到一半时回头查环境。希望帮到你。本文还有配套的精品资源点击获取