1. 为什么一个环境配置能让人折腾一整天如果你刚接触深度学习大概率会遇到这样一个场景兴冲冲地打开教程准备跑第一个神经网络结果卡在环境配置上一整天——torch.cuda.is_available()返回False或者import torch直接报 DLL 找不到又或者 pip 装到一半卡在下载 wheel 文件上不动了。这不是你笨而是 PyTorch 环境配置本身就是一件“看起来简单、踩起来要命”的事。我前后在 Windows 和 Linux 两套系统上配置过不下十次 PyTorch 环境从最早用 Anaconda 图形界面一路点下一步到后来纯命令行手动管理踩过的坑基本覆盖了新手能遇到的所有类型。这篇内容就是把这些经验整理出来围绕PyTorch 环境配置这个核心把 Windows 和 Linux 两条路线都讲透包括版本选型、CUDA 匹配、包管理器取舍、常见报错排查以及一些官方文档不会告诉你的实操细节。适合谁看如果你是完全没配过深度学习环境的新手可以按顺序跟着走如果你已经装过但总是出问题可以直接跳到排查章节找对应症状。整篇内容不依赖任何特定硬件品牌CPU 和 GPU 环境都会覆盖目标是让你在两套系统上都能一次配通、少走弯路。2. 动手之前先把版本关系理清楚2.1 PyTorch、Python、CUDA 三者的版本锁链很多人配置失败的根本原因不是操作错了而是一开始版本就没选对。PyTorch 对 Python 版本和 CUDA 版本都有明确的对应关系这三者之间是一条锁链任何一环不匹配都会导致安装失败或运行时报错。先看 Python 版本。PyTorch 每个发行版都会声明支持的 Python 范围比如较新的版本通常支持 Python 3.9 到 3.12而一些老版本可能只支持到 3.10。如果你系统自带的 Python 是 3.13而你要装的 PyTorch 版本还没适配那 pip 会直接告诉你找不到匹配的发行版。所以第一步不是急着敲安装命令而是先确认你要装的 PyTorch 版本支持哪些 Python 版本。再看 CUDA 版本。这里有一个常见误解很多人以为必须装和 PyTorch 编译时用的 CUDA 完全一致的版本。实际上PyTorch 的预编译包会自带所需的 CUDA 运行时库你只需要保证显卡驱动支持的 CUDA 版本不低于 PyTorch 要求的版本即可。举个例子如果 PyTorch 是用 CUDA 12.1 编译的而你的驱动支持 CUDA 12.4那没问题向下兼容。但如果你的驱动只支持 CUDA 11.8那就装不了 CUDA 12.1 版本的 PyTorch。组件作用版本选择原则PythonPyTorch 的运行宿主选 PyTorch 官方声明支持的版本区间内的稳定版CUDA ToolkitGPU 加速的计算平台预编译包自带运行时只需驱动版本满足要求显卡驱动硬件与 CUDA 之间的桥梁版本越新越好但需满足 PyTorch 的最低要求cuDNN深度神经网络加速库通常随 PyTorch 预编译包一起分发无需单独安装2.2 怎么查自己的显卡驱动支持到哪个 CUDA 版本在 Windows 上打开命令行输入nvidia-smi输出右上角会显示CUDA Version: XX.X。注意这个数字表示你的驱动最高支持的 CUDA 版本不是说你已经装了那个版本的 CUDA Toolkit。在 Linux 上同样用nvidia-smi查看输出格式基本一致。如果你运行nvidia-smi提示找不到命令说明显卡驱动没装好或者根本没装。Windows 下去显卡官网下载对应型号的驱动安装即可Linux 下可以用系统包管理器安装也可以从显卡官网下载 runfile 手动安装。驱动安装本身不复杂但 Linux 下涉及禁用开源驱动、进入文本模式等操作后面会单独讲。提示nvidia-smi显示的 CUDA Version 是驱动支持的上限实际安装 PyTorch 时可以选择低于这个上限的任意 CUDA 版本。比如显示 12.4你可以装 CUDA 11.8 或 12.1 版本的 PyTorch都没问题。2.3 CPU 版本和 GPU 版本到底选哪个这个问题看似简单但很多人纠结。我的建议很直接如果你有独立显卡且显卡支持 CUDA也就是 NVIDIA 的卡那就装 GPU 版本。如果没有独显或者用的是其他品牌的显卡那就装 CPU 版本。CPU 版本也能跑通所有代码只是训练速度慢很多适合学习和调试小模型。有人会问我先把 CPU 版本装好以后再加 GPU 行不行可以但不推荐。因为 CPU 版本和 GPU 版本的 PyTorch 包名不同混装容易出问题。更好的做法是一开始就确定好如果打算用 GPU直接装 GPU 版本即使当前没有显卡装 GPU 版本在无显卡机器上也能以 CPU 模式运行只是会提示 CUDA 不可用而已。3. Windows 下的配置路线与关键操作3.1 包管理器选 Anaconda 还是原生 pip这是 Windows 下第一个要做的选择。Anaconda 的好处是自带 Python、pip、conda 以及大量科学计算库装完之后环境基本开箱即用而且 conda 可以创建隔离的虚拟环境避免不同项目之间的依赖冲突。缺点是体积大安装包几个 G装完占十几个 G 很正常而且 conda 的包解析有时候会很慢。原生 pip 的好处是轻量你只需要装一个 Python 解释器然后用 pip 装 PyTorch 就行。缺点是环境隔离需要自己用venv或者virtualenv来做对新手来说多了一步学习成本。我的建议是如果你硬盘空间充足直接用 Anaconda 或者更轻量的 Miniconda。Miniconda 只包含 conda 和 Python没有预装那些科学计算库体积小很多需要什么再装什么。对于深度学习来说conda 的环境管理能力确实省心尤其是当你需要同时维护多个不同版本的 PyTorch 项目时。安装 Miniconda 的步骤很简单去官网下载 Windows 安装包双击运行安装时勾选“Add to PATH”或者不勾选都行不勾选的话需要用 Anaconda Prompt 来操作。安装完成后打开 Anaconda Prompt输入conda --version确认安装成功。3.2 创建独立虚拟环境的完整命令不要直接在 base 环境里装 PyTorch这是很多教程不会强调但非常重要的习惯。base 环境是 conda 自身运行的基础装太多东西容易搞乱。正确做法是为每个项目或者每类任务创建独立环境。# 创建一个名为 pytorch_env 的环境指定 Python 版本 conda create -n pytorch_env python3.10 # 激活环境 conda activate pytorch_env # 确认当前 Python 版本 python --version创建环境时指定 Python 版本很关键。如果你不指定conda 会装它默认的版本可能和你需要的 PyTorch 版本不匹配。一般选 3.9 或 3.10 比较稳妥这两个版本兼容性最好绝大多数 PyTorch 版本都支持。环境创建好之后后续所有操作都在这个激活的环境里进行。你会注意到命令行提示符前面多了(pytorch_env)字样说明当前处于该环境中。退出环境用conda deactivate删除环境用conda env remove -n pytorch_env。3.3 pip 安装 PyTorch 的正确姿势与镜像加速在激活的环境中用 pip 安装 PyTorch。这里有一个关键点不要直接pip install torch因为这样装的是 CPU 版本。要装 GPU 版本需要指定额外的索引地址。去 PyTorch 官网的安装页面选择你的配置系统、包管理器、Python 版本、CUDA 版本它会生成对应的安装命令。比如 CUDA 12.1 的版本大概是这样的pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这个命令会从 PyTorch 官方仓库下载对应 CUDA 版本的 wheel 包。但国内下载速度可能很慢这时候可以用镜像加速。常用的做法是加上国内镜像源pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 -i https://pypi.tuna.tsinghua.edu.cn/simple不过要注意PyTorch 的 wheel 包在普通 PyPI 镜像上可能没有所以--index-url指向官方仓库、-i指向镜像源这种组合不一定生效。更稳妥的方式是先用镜像源装普通依赖PyTorch 本体还是从官方源下载或者使用一些专门同步 PyTorch wheel 的镜像。注意下载 PyTorch 的 wheel 包动辄几个 G如果网络不稳定很容易断。建议在网络状况好的时候操作或者用下载工具先下好 wheel 文件再用pip install 本地文件路径安装。3.4 验证安装是否成功以及常见报错处理装完之后必须验证。打开 Python 交互环境依次输入import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()返回True并且能打印出显卡型号说明 GPU 版本安装成功。如果返回False但你是 GPU 版本那就要排查了。最常见的报错是OSError: [WinError 126] 找不到指定的模块这通常是 CUDA 运行时库缺失或者版本不匹配导致的。解决办法是确认你装的 PyTorch 版本对应的 CUDA 版本然后检查显卡驱动是否满足要求。另一个常见问题是ImportError: DLL load failed这往往是因为缺少 Visual C Redistributable去微软官网下载安装最新的 VC 运行库即可。还有一种情况是装完之后import torch特别慢要等十几秒甚至更久。这通常是因为 Python 在扫描路径或者杀毒软件在扫描 PyTorch 的大体积 DLL 文件。可以把 PyTorch 安装目录加入杀毒软件白名单能明显改善。4. Linux 下的配置路线与关键操作4.1 驱动安装从禁用开源驱动到.run 文件执行Linux 下配置 PyTorch 环境第一步往往是装显卡驱动。很多发行版默认使用开源驱动要装 NVIDIA 官方驱动需要先禁用开源驱动。以 Ubuntu 为例操作步骤如下首先确认你的显卡型号用lspci | grep -i nvidia查看。然后去 NVIDIA 官网下载对应型号的驱动 runfile。下载完成后需要先禁用 nouveau 开源驱动# 创建禁用 nouveau 的配置文件 sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nvidia-nouveau.conf # 更新 initramfs sudo update-initramfs -u # 重启 sudo reboot重启后进入文本模式CtrlAltF3停止图形界面服务然后运行驱动安装文件sudo service lightdm stop # 或者 gdm3 stop取决于你的显示管理器 sudo chmod x NVIDIA-Linux-x86_64-xxx.xx.run sudo ./NVIDIA-Linux-x86_64-xxx.xx.run安装过程中会问你是否注册 DKMS、是否安装 32 位兼容库等一般选是即可。安装完成后重启用nvidia-smi验证。提示不同发行版的显示管理器名称不同Ubuntu 桌面版通常是 gdm3KDE 桌面是 sddmXFCE 是 lightdm。如果不确定可以用systemctl status display-manager查看。4.2 用 conda 还是系统 Python 加 venvLinux 下同样面临包管理器的选择。conda 在 Linux 上表现很好安装和使用方式与 Windows 基本一致。但 Linux 下还有一个选择是用系统自带的 Python 加 venv 创建虚拟环境。系统 Python 加 venv 的好处是不需要额外安装 conda环境更轻量。缺点是系统 Python 版本可能比较老而且有些系统对系统 Python 有保护机制直接 pip 安装可能提示 externally-managed-environment 错误。遇到这种情况可以用python -m venv创建虚拟环境在虚拟环境里操作就不受限制。# 创建虚拟环境 python3 -m venv pytorch_env # 激活 source pytorch_env/bin/activate # 升级 pip pip install --upgrade pipconda 的优势在于它可以管理 Python 本身你可以用 conda 装一个特定版本的 Python而 venv 只能使用系统已有的 Python 版本。如果你需要 Python 3.10 但系统只有 3.8那 conda 更方便。4.3 安装命令与 Windows 的差异点Linux 下安装 PyTorch 的命令和 Windows 基本一致也是通过 pip 指定索引地址。但有一个差异点Linux 下通常不需要额外安装 CUDA Toolkit因为 PyTorch 的 wheel 包已经自带了 CUDA 运行时。你只需要保证显卡驱动装好即可。pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121如果你需要从源码编译 PyTorch那就需要完整安装 CUDA Toolkit 和 cuDNN这个过程比较复杂一般用户不需要。预编译的 wheel 包已经能满足绝大多数场景。Linux 下还有一个常见问题是权限。如果你用sudo pip install装包可能会装到系统目录导致后续权限混乱。正确做法是在虚拟环境里用普通用户权限安装不要加 sudo。4.4 验证与多卡环境的额外检查验证方式和 Windows 一样import torch然后检查cuda.is_available()。如果你有多张显卡还需要检查是否所有卡都能被识别import torch print(torch.cuda.device_count()) for i in range(torch.cuda.device_count()): print(torch.cuda.get_device_name(i))多卡环境下还需要注意CUDA_VISIBLE_DEVICES环境变量的设置。这个变量可以控制哪些显卡对当前进程可见。比如你只想用第 0 和第 1 张卡可以设置export CUDA_VISIBLE_DEVICES0,1。这在多人共用服务器时特别有用可以避免占用别人的卡。另外Linux 下如果遇到CUDA out of memory但nvidia-smi显示显存充足可能是其他进程占用了显存但没释放。可以用fuser -v /dev/nvidia*查看哪些进程在使用显卡必要时结束这些进程。5. 那些官方文档不会写的踩坑记录5.1 pip 和 conda 混装导致的依赖地狱这是我最想强调的一个坑。很多人在 conda 环境里先用 conda 装了一些包然后又用 pip 装 PyTorch结果 conda 和 pip 各自维护一套依赖记录互相不知道对方装了什么最后导致版本冲突。比如你用 conda 装了 numpy 1.24然后用 pip 装 PyTorch 时它自动装了 numpy 1.26这时候 conda 的依赖记录里还是 1.24但实际环境里是 1.26。下次你用 conda 装别的包时conda 可能会把 numpy 降回 1.24然后 PyTorch 就报错了。避免这个问题的原则是在一个环境里尽量只用一种包管理器。如果要用 conda就尽量用 conda 装所有包如果 conda 没有某个包再用 pip 装但装完之后不要再让 conda 去动这个环境。更好的做法是PyTorch 用 pip 装其他科学计算库也用 pip 装整个环境统一用 pip 管理。5.2 虚拟环境激活后 pip 仍然装到全局的排查有时候你明明激活了虚拟环境但 pip 装的包还是跑到全局去了。这通常是因为 pip 的路径不对。可以用which pipLinux或where pipWindows查看当前 pip 的实际路径确认它指向的是虚拟环境目录而不是系统目录。如果路径不对可能是因为虚拟环境创建时没有正确设置或者 PATH 环境变量被修改了。解决办法是用python -m pip install代替直接pip install这样能保证 pip 是当前 Python 解释器对应的那个。# 用这种方式确保 pip 属于当前环境 python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1215.3 显卡驱动版本够但 CUDA 仍不可用的原因这种情况通常发生在 Linux 上。nvidia-smi能正常显示驱动版本也够但 PyTorch 就是检测不到 CUDA。可能的原因有几个一是 PyTorch 装成了 CPU 版本。检查方法是print(torch.version.cuda)如果输出None说明装的是 CPU 版本。解决办法是卸载后重新装 GPU 版本。二是 CUDA 运行时库路径不对。PyTorch 自带的 CUDA 运行时通常在torch/lib目录下如果这个目录不在库搜索路径里就会找不到。可以手动添加export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$(python -c import torch; print(torch.__path__[0]))/lib三是显卡被其他进程占用或者被设置为不可见。检查CUDA_VISIBLE_DEVICES环境变量是否被设置成了空值或者不包含你的显卡。5.4 磁盘空间不足导致的安装中断与清理PyTorch 的 wheel 包加上依赖装完可能占几个 G 的空间。如果磁盘空间不足安装过程中会中断而且可能留下不完整的安装记录导致后续重装也失败。Windows 下 conda 的环境默认在用户目录下如果 C 盘空间紧张可以在创建环境时指定其他盘符conda create -p D:\envs\pytorch_env python3.10Linux 下 conda 环境默认在~/miniconda3/envs下同样可以通过-p参数指定其他路径。另外pip 的缓存目录也会占用空间可以用pip cache purge清理。如果安装中断后重装报错可以先彻底删除环境再重建conda env remove -n pytorch_env conda create -n pytorch_env python3.106. 配好之后怎么确认环境真的能用6.1 一个最小可运行示例的完整验证流程环境配好之后不要只停留在import torch成功这一步。跑一个最小的训练示例确认前向传播、反向传播、GPU 加速都正常。import torch import torch.nn as nn # 确认 CUDA 可用 device torch.device(cuda if torch.cuda.is_available() else cpu) print(fUsing device: {device}) # 定义一个简单的模型 model nn.Sequential( nn.Linear(10, 64), nn.ReLU(), nn.Linear(64, 1) ).to(device) # 生成随机数据 x torch.randn(32, 10).to(device) y torch.randn(32, 1).to(device) # 前向传播 output model(x) loss nn.MSELoss()(output, y) print(fLoss: {loss.item()}) # 反向传播 loss.backward() print(Backward pass completed successfully) # 检查梯度是否存在 for name, param in model.named_parameters(): if param.grad is not None: print(f{name} gradient exists)这段代码覆盖了模型定义、数据迁移到 GPU、前向传播、损失计算、反向传播、梯度检查等关键环节。如果全部跑通说明环境基本没问题。6.2 多环境共存时的切换与隔离检查如果你有多个 PyTorch 环境比如一个用于稳定项目、一个用于测试新版本切换时要注意确认当前环境是否正确。可以用以下命令快速检查# 查看当前 conda 环境 conda info --envs # 查看当前 Python 路径 which python # Linux where python # Windows # 查看当前 PyTorch 版本和 CUDA 版本 python -c import torch; print(torch.__version__, torch.version.cuda)多环境共存时最容易出的问题是环境变量污染。比如你在一个环境里设置了LD_LIBRARY_PATH切换到另一个环境后这个变量还在可能导致加载了错误的库。建议在激活环境后重新检查关键环境变量或者用脚本在激活时自动设置。6.3 环境导出与迁移到另一台机器的注意事项配好的环境如果要迁移到另一台机器可以用 conda 导出环境文件conda env export environment.yml然后在另一台机器上conda env create -f environment.yml但要注意conda env export会导出所有依赖的精确版本包括一些平台相关的包。如果两台机器的操作系统不同或者 CUDA 版本不同直接迁移可能会失败。更稳妥的方式是手动记录关键包的版本在新机器上重新安装。对于 pip 环境可以用pip freeze requirements.txt pip install -r requirements.txt同样的问题平台相关的包可能不兼容。建议在 requirements.txt 里只写核心依赖让 pip 自动解析兼容版本。7. 一些让环境更稳的长期习惯配置环境这件事一次配好不难难的是长期保持稳定。我自己的习惯是每个项目一个独立环境环境名带项目缩写和日期比如projA_202401。这样即使后来装了新版本老环境也不会被影响。另外装完环境后立刻导出一次依赖清单存到项目目录里。以后环境出问题了可以对照清单排查是哪个包变了。还有一个小技巧把常用的安装命令写成一个 shell 脚本或者 bat 文件下次配环境直接运行脚本省去翻教程的时间。最后说一个心态上的经验环境配置出问题很正常不要一上来就怀疑自己。绝大多数报错都有明确的解决方案关键是学会看报错信息、定位问题环节。把nvidia-smi、python --version、pip list这几个命令的输出保存下来排查问题时能省很多时间。