☰
PyTorch环境配置全攻略:Windows与Linux下CUDA版本匹配与避坑指南
2026/10/15 1:15:58 网站建设 项目流程

1. 为什么环境配置这件事值得单独拿出来讲

搞深度学习的人都有一个共识:模型跑不跑得起来,一半看代码,另一半看环境。我见过太多人,论文代码下载下来,pip install -r requirements.txt 一跑,满屏红字,然后就开始怀疑人生。其实大部分时候不是代码的问题,是环境没配对。

PyTorch 作为目前学术界和工业界用得最多的深度学习框架之一,它的环境配置看似简单——官网给你一行命令,复制粘贴就完事了。但实际操作中,Windows 和 Linux 两个平台各有各的坑,CUDA 版本、显卡驱动、Python 版本、包管理器选择,任何一个环节出问题都能让你卡上半天。

这篇内容适合谁看?如果你刚入手深度学习,准备在自己的机器或者实验室服务器上配一套 PyTorch 环境,那这篇就是写给你的。如果你已经配过几次但总是遇到各种报错,也可以看看我在踩坑过程中总结的那些经验,说不定能帮你省下几个小时。我会把 Windows 和 Linux 两套流程都讲清楚,包括 GPU 版本和 CPU 版本的选型逻辑、conda 和 pip 的取舍、版本匹配的计算方法,以及那些官方文档不会告诉你的实操细节。

先说一个核心原则:环境配置的第一目标是可复现,第二目标才是性能。很多人一上来就追求最新版本、最快速度,结果环境乱七八糟,换台机器就跑不起来。我个人的习惯是,先把一个稳定可用的环境跑通,再考虑优化。

2. 配置之前必须想清楚的几件事

2.1 硬件和驱动的前置检查

在动手装任何东西之前,先确认你的硬件条件。这一步很多人会跳过,直接去 PyTorch 官网复制安装命令,结果装完发现 GPU 用不了,又回头查驱动,浪费大量时间。

如果你要用 GPU 跑深度学习,你需要一块 NVIDIA 显卡(AMD 显卡在 PyTorch 上的支持目前还不够成熟,不建议新手折腾)。确认显卡型号之后,去 NVIDIA 官网下载对应的驱动。Windows 下直接下载安装包双击安装就行,Linux 下可以用包管理器安装或者手动安装。

驱动装好之后,用nvidia-smi命令检查。这个命令会输出显卡型号、驱动版本、CUDA 版本等信息。注意,这里显示的 CUDA 版本是驱动支持的最高 CUDA 版本,不是你实际安装的 CUDA 版本。很多人在这里搞混,以为显示 CUDA 12.4 就是已经装了 CUDA 12.4,其实不是。

nvidia-smi

输出大概长这样:

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A | | 30% 45C P2 70W / 250W | 512MiB / 12288MiB | 5% Default | +-------------------------------+----------------------+----------------------+

关键看两个地方:Driver Version 和 CUDA Version。Driver Version 决定了你能装哪个版本的 CUDA Toolkit,CUDA Version 告诉你驱动最高支持到哪个 CUDA 版本。后面选 PyTorch 版本的时候,要确保 PyTorch 编译时用的 CUDA 版本不超过这个上限。

注意:如果你用的是笔记本的双显卡(集显+独显),Windows 下需要确保深度学习任务调用的是独显。可以在 NVIDIA 控制面板里设置默认使用高性能 NVIDIA 处理器,或者在代码里显式指定设备。

2.2 Python 版本和包管理器的选择

Python 版本的选择有一个基本原则:不要用最新版,用次新版。比如现在 Python 3.12 刚出不久,那你就用 3.11 或者 3.10。原因很简单,PyTorch 和相关的生态库(NumPy、SciPy 等)对新版 Python 的支持往往滞后几个月,你用最新版 Python 很可能遇到某个包还没有对应的 wheel 包,只能从源码编译,那过程能让你崩溃。

目前比较稳妥的选择是 Python 3.9 到 3.11 之间。具体选哪个,去看 PyTorch 官网的安装页面,它会列出支持的 Python 版本范围。

包管理器方面,conda 和 pip 是两个主流选择。我的建议是:用 conda 创建虚拟环境,用 pip 安装 PyTorch。为什么这么搭配?

conda 的优势在于环境隔离做得好,能管理 Python 本身以及非 Python 的依赖(比如 CUDA Toolkit、cuDNN 这些)。但 conda 安装 PyTorch 有时候会有版本滞后的问题,而且 conda 的源在国内访问速度不稳定。pip 的优势是包更新快、源多(国内有清华源、阿里源等),但 pip 不能管理 Python 版本本身。

所以最佳实践是:conda create 一个指定 Python 版本的环境,激活之后用 pip 装 PyTorch。这样既有了环境隔离,又能享受到 pip 的灵活性和速度。

2.3 GPU 版本还是 CPU 版本

这个问题取决于你的硬件和使用场景。有 NVIDIA 显卡并且需要训练模型,那肯定装 GPU 版本。没有显卡或者只是做推理、学习语法,CPU 版本就够了。

GPU 版本和 CPU 版本的 PyTorch 在 API 上几乎完全一样,区别在于张量的默认设备。GPU 版本可以调用.cuda()或者.to('cuda')把张量搬到显卡上,CPU 版本调用这些方法会报错。所以如果你只是学习 PyTorch 的基本用法,CPU 版本完全够用,而且安装简单很多,不用折腾 CUDA。

但如果你要做实际的模型训练,GPU 版本是必须的。用 CPU 训练一个稍微像样的模型,时间可能是 GPU 的几十倍甚至上百倍。这个差距在实验迭代的时候是致命的。

3. Windows 下的完整配置流程

3.1 安装 Miniconda 和创建虚拟环境

Windows 下我推荐用 Miniconda 而不是 Anaconda。Anaconda 自带上百个包,安装包好几个 G,大部分你都用不到。Miniconda 只包含 conda 和 Python,干净轻量。

去 Miniconda 官网下载 Windows 安装包,双击安装。安装过程中有两个选项需要注意:一是"Add Miniconda3 to my PATH environment variable",这个建议勾选,虽然安装程序会提示不推荐,但勾选之后在命令行里直接用 conda 命令会方便很多;二是"Register Miniconda3 as my default Python",这个也建议勾选。

安装完成后,打开 Anaconda Prompt(或者普通的 cmd/PowerShell,如果 PATH 配好了的话),验证安装:

conda --version

然后创建一个虚拟环境:

conda create -n pytorch_env python=3.10

这里的pytorch_env是环境名,你可以改成自己喜欢的。python=3.10指定 Python 版本。创建过程中会提示你确认安装一些包,输入 y 回车就行。

创建完成后激活环境:

conda activate pytorch_env

激活之后,命令行的提示符前面会出现(pytorch_env),表示你现在在这个环境里操作。

实操心得:环境名建议带上有意义的信息,比如pt2.1_cu121表示 PyTorch 2.1 + CUDA 12.1。这样以后环境多了,一眼就能看出哪个是哪个,不用一个个激活去查。

3.2 配置 pip 国内源

这一步不是必须的,但强烈建议做。默认的 pip 源在国内访问速度很慢,有时候还会超时。换成国内源之后,安装速度能快十倍以上。

在用户目录下创建 pip 配置文件。Windows 下的路径是C:\Users\你的用户名\pip\pip.ini,如果 pip 文件夹不存在就手动创建。文件内容:

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

清华源是我用得比较多的,稳定性和速度都不错。阿里源也可以,看个人网络情况。

配置好之后,可以用pip config list检查是否生效。

3.3 安装 PyTorch

现在到了最关键的一步。打开 PyTorch 官网的 Get Started 页面,你会看到一个选择器:PyTorch Build、Your OS、Package、Language、Compute Platform。按照你的实际情况选择,然后在 Run this Command 那里会生成对应的安装命令。

假设你选的是 Stable、Windows、pip、Python、CUDA 12.1,生成的命令大概是:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

注意这里的--index-url指向的是 PyTorch 官方的 wheel 包仓库,不是普通的 PyPI。因为 GPU 版本的 PyTorch 包比较大(几个 G),而且需要和 CUDA 版本对应,所以单独放在了这个仓库里。

如果你要装 CPU 版本,命令会简单一些:

pip3 install torch torchvision torchaudio

CPU 版本的包在普通 PyPI 上就有,而且体积小很多。

安装过程中你会看到进度条,下载速度取决于你的网络。如果觉得官方源太慢,可以把--index-url换成清华源的 PyTorch 镜像,但要注意清华源的 PyTorch 版本可能不是最新的。

注意:安装命令里的cu121表示 CUDA 12.1。如果你选的是 CUDA 11.8,对应的就是cu118。这个一定要和你驱动支持的 CUDA 版本匹配,否则装完了也用不了 GPU。

3.4 验证安装是否成功

安装完成后,别急着关终端,先验证一下。进入 Python 交互环境:

python

然后输入:

import torch print(torch.__version__) print(torch.cuda.is_available())

第一行输出 PyTorch 版本号,比如2.1.0+cu121。第二行输出True表示 GPU 可用,输出False表示 GPU 不可用。

如果torch.cuda.is_available()返回 False,先别慌,按下面的顺序排查:

  1. 确认你的显卡是 NVIDIA 的,并且驱动已经正确安装(nvidia-smi能正常输出)
  2. 确认安装的 PyTorch 是 GPU 版本(版本号里带+cu后缀)
  3. 确认 CUDA 版本匹配(PyTorch 编译时的 CUDA 版本不超过驱动支持的上限)
  4. 如果以上都没问题,尝试重启电脑

还有一个常见的坑:Windows 下如果同时装了多个 Python 环境,可能 pip 装到了别的环境里。确认你激活了正确的 conda 环境,并且which python(Windows 下是where python)指向的是 conda 环境里的 Python。

4. Linux 下的完整配置流程

4.1 驱动和 CUDA 的安装策略

Linux 下配置 PyTorch 环境,驱动和 CUDA 的处理方式和 Windows 有些不同。Windows 下你只需要装驱动,CUDA Toolkit 是 PyTorch 自带的(wheel 包里已经包含了运行时需要的 CUDA 库)。Linux 下也是一样,你不需要单独安装 CUDA Toolkit,只要驱动版本够新就行。

这一点很多人会搞错,以为要先把 CUDA Toolkit 装好才能装 PyTorch。其实 PyTorch 的 GPU 版本 wheel 包里已经打包了 CUDA 运行时库,你只需要保证驱动版本满足最低要求即可。

驱动安装方式取决于你的 Linux 发行版。Ubuntu 下可以用apt安装:

sudo apt update sudo apt install nvidia-driver-550

版本号根据你的显卡型号和需求选择。安装完成后重启,然后用nvidia-smi验证。

如果你用的是实验室的服务器,驱动可能已经由管理员装好了,你直接nvidia-smi看看有没有输出就行。没有输出的话再考虑自己装。

实操心得:在服务器上,不要随便动驱动和系统级的 CUDA。因为服务器上可能有多个人在用,你改了驱动版本可能影响别人的环境。这种情况下,用 conda 创建一个独立环境,在里面装 PyTorch 就行,conda 会帮你处理好 CUDA 运行时的问题。

4.2 用 conda 创建环境并安装

Linux 下的流程和 Windows 基本一致,只是命令行的操作习惯不同。

首先确认 conda 已经安装。如果没有,下载 Miniconda 的 Linux 安装脚本:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh

安装过程中会问你是否把 conda 加入 PATH,选 yes。安装完成后,重新打开终端或者source ~/.bashrc让配置生效。

创建环境:

conda create -n pytorch_env python=3.10 -y conda activate pytorch_env

配置 pip 源。Linux 下的 pip 配置文件路径是~/.pip/pip.conf或者~/.config/pip/pip.conf:

mkdir -p ~/.pip cat > ~/.pip/pip.conf << EOF [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn EOF

然后安装 PyTorch。命令和 Windows 下一样,去官网生成对应的命令。Linux 下 CUDA 12.1 的安装命令:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

安装完成后同样验证:

import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.device_count())

torch.cuda.device_count()会告诉你系统里有几张可用的 GPU。多卡服务器上这个数字可能大于 1。

4.3 多卡环境下的注意事项

如果你在有多张显卡的服务器上工作,有几个额外的点需要注意。

第一,默认情况下 PyTorch 会使用第 0 号显卡。如果第 0 号显卡已经被别人占用了,你可以通过设置环境变量来指定使用哪张卡:

CUDA_VISIBLE_DEVICES=1 python your_script.py

这样 PyTorch 只会看到第 1 号显卡,把它当作第 0 号来用。

第二,多卡训练需要用torch.nn.DataParallel或者torch.nn.parallel.DistributedDataParallel。前者简单但效率一般,后者效率高但配置复杂一些。新手建议先用单卡把流程跑通,再考虑多卡。

第三,服务器上通常用screen或者tmux来保持训练任务在断开 SSH 后继续运行。这个虽然不属于 PyTorch 环境配置的范畴,但实际用起来是必备技能。

tmux new -s train # 在 tmux 会话里运行训练脚本 # 按 Ctrl+B 然后按 D 脱离会话 # 下次用 tmux attach -t train 重新连接

5. 版本匹配的核心逻辑与常见组合

5.1 三个版本号之间的关系

PyTorch 环境配置中最容易出问题的就是版本匹配。涉及到的版本号主要有三个:显卡驱动版本、CUDA 版本、PyTorch 版本。它们之间的关系是:

  • 显卡驱动版本决定了支持的 CUDA 版本上限。驱动越新,支持的 CUDA 版本越高。
  • PyTorch 版本在发布时会针对特定的 CUDA 版本编译。比如 PyTorch 2.1 有 cu118 和 cu121 两个版本。
  • 你安装的 PyTorch 的 CUDA 版本必须不超过驱动支持的上限。

举个例子:你的驱动是 525 版本,nvidia-smi显示 CUDA Version 12.0。那么你可以安装 cu118 的 PyTorch,也可以安装 cu121 的吗?不行,因为 cu121 需要驱动支持 CUDA 12.1,而你的驱动只支持到 12.0。这种情况下你要么升级驱动,要么选择 cu118 的 PyTorch。

但反过来,如果你的驱动很新,支持 CUDA 12.4,你装 cu118 的 PyTorch 也完全没问题。高版本的驱动向下兼容低版本的 CUDA 运行时。

5.2 常见稳定组合推荐

根据我的使用经验,下面这几组搭配比较稳定,适合不同场景:

场景PythonPyTorchCUDA驱动最低要求
保守稳定型3.92.0.111.8450+
均衡推荐型3.102.1.212.1525+
较新特性型3.112.2.012.1525+
纯CPU学习3.102.1.2--

保守稳定型适合生产环境或者对稳定性要求高的场景,这些版本已经经过大量验证,bug 比较少。均衡推荐型是我个人最常用的,兼顾了新特性和稳定性。较新特性型适合想尝试最新功能的场景,但可能会遇到一些新引入的 bug。

5.3 版本不匹配的典型报错

当你看到类似这样的报错:

RuntimeError: CUDA error: no kernel image is available for execution on the device

或者:

The detected CUDA version (11.8) mismatches the version that was used to compile PyTorch (12.1).

基本可以确定是版本不匹配的问题。解决方法就是卸载当前的 PyTorch,重新安装匹配的版本。

卸载:

pip uninstall torch torchvision torchaudio

然后重新安装正确版本。

还有一种情况是torch.cuda.is_available()返回 False,但没有任何报错。这种通常是驱动没装好,或者 PyTorch 装成了 CPU 版本。检查torch.__version__是否包含+cu后缀,如果没有,说明装的是 CPU 版本。

6. 常见问题排查与避坑指南

6.1 安装速度慢或超时

这是最常见的问题,尤其是在国内网络环境下。解决方法就是换源。pip 源换成清华或者阿里,conda 源也可以换成清华的。

conda 换源的方法是在~/.condarc文件里写入:

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 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

但要注意,PyTorch 的 GPU 版本 wheel 包不在 conda 的默认源里,换 conda 源对安装 PyTorch 帮助不大。真正有效的是 pip 换源,以及使用 PyTorch 官方的下载地址。

如果官方地址也慢,可以试试用迅雷或者其他下载工具先把 wheel 包下载下来,然后本地安装:

pip install torch-2.1.0+cu121-cp310-cp310-win_amd64.whl

wheel 包的下载地址可以在 PyTorch 官网的安装命令里找到,把pip install换成浏览器访问就行。

6.2 虚拟环境激活失败

Windows 下有时候会遇到conda activate报错,提示 "CommandNotFoundError"。这通常是因为 conda 没有正确初始化 shell。解决方法是运行:

conda init

然后重新打开终端。如果用的是 PowerShell,可能需要先运行Set-ExecutionPolicy RemoteSigned来允许脚本执行。

Linux 下如果conda activate没反应,检查~/.bashrc里有没有 conda 的初始化代码。没有的话运行conda init bash然后source ~/.bashrc。

6.3 GPU 内存不足

这个严格来说不是环境配置的问题,但经常在刚配好环境跑第一个模型的时候遇到。报错信息是:

RuntimeError: CUDA out of memory.

解决方法有几种:减小 batch size、用torch.cuda.empty_cache()清理缓存、或者用梯度累积来模拟大 batch。如果是多个人共用一张卡,先确认没有别人的进程在占用显存:

nvidia-smi

看看 Memory-Usage 那一列,如果有其他进程占了很多显存,你可能需要等别人跑完或者换一张卡。

6.4 常见问题速查表

问题现象可能原因解决方法
torch.cuda.is_available() 返回 False装了 CPU 版本卸载重装 GPU 版本
同上驱动版本过低升级显卡驱动
同上CUDA 版本不匹配安装匹配的 PyTorch 版本
pip 安装超时网络问题换国内源或手动下载 wheel
conda activate 报错shell 未初始化运行 conda init
CUDA out of memory显存不足减小 batch size 或清理缓存
no kernel image available版本不匹配检查驱动和 CUDA 版本
安装后 import torch 报错依赖缺失检查是否在正确的虚拟环境中

6.5 几个容易被忽略的细节

第一个细节:虚拟环境要随用随建,不要所有项目共用一个环境。不同项目对 PyTorch 版本、Python 版本的要求可能不同,共用一个环境迟早会冲突。我自己的习惯是每个项目一个独立环境,项目结束后如果不再用了就删掉,保持环境列表干净。

第二个细节:记录环境配置。配好一个环境之后,用pip freeze > requirements.txt把包列表导出,下次换机器的时候直接pip install -r requirements.txt就能复现。但要注意,pip freeze会导出所有包,包括依赖包,有时候会有版本冲突。更精确的做法是只记录你直接安装的包,用pip install的时候指定版本号。

第三个细节:不要混用 conda install 和 pip install。同一个包里,如果用 conda 装了一部分,又用 pip 装了另一部分,可能会导致依赖关系混乱。选定一种方式就一直用那种。我个人的偏好是,能用 pip 就用 pip,conda 只用来创建和管理环境。

第四个细节:Jupyter Notebook 的内核要单独配置。如果你在虚拟环境里装了 PyTorch,但在 Jupyter 里 import 不到,是因为 Jupyter 默认使用的是 base 环境的内核。解决方法是在虚拟环境里安装 ipykernel,然后注册内核:

pip install ipykernel python -m ipykernel install --user --name=pytorch_env --display-name="Python (pytorch_env)"

之后在 Jupyter 里就能选择这个内核了。

7. 环境配好之后的第一步验证

环境配好之后,不要急着跑复杂的模型。先用一个简单的例子验证整个链路是通的。我通常用下面这段代码做冒烟测试:

import torch import torchvision # 检查版本 print(f"PyTorch version: {torch.__version__}") print(f"Torchvision version: {torchvision.__version__}") # 检查 GPU if torch.cuda.is_available(): print(f"CUDA available: True") print(f"CUDA version: {torch.version.cuda}") print(f"GPU count: {torch.cuda.device_count()}") print(f"GPU name: {torch.cuda.get_device_name(0)}") else: print("CUDA available: False, using CPU") # 创建一个张量并做简单运算 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") x = torch.randn(1000, 1000).to(device) y = torch.randn(1000, 1000).to(device) z = torch.matmul(x, y) print(f"Matrix multiplication result shape: {z.shape}") print(f"Computation device: {z.device}") # 测试自动求导 a = torch.tensor([1.0, 2.0, 3.0], requires_grad=True, device=device) b = (a ** 2).sum() b.backward() print(f"Gradient: {a.grad}")

这段代码覆盖了版本检查、GPU 可用性、张量创建、矩阵运算、自动求导这几个核心功能。如果都能正常输出,说明环境基本没问题。

如果矩阵运算那一步报 CUDA 相关的错误,说明 GPU 链路有问题,回到前面排查版本匹配。如果自动求导报错,可能是 PyTorch 安装不完整,尝试重装。

实操心得:这个冒烟测试脚本建议保存下来,每次配新环境都跑一遍。花两分钟确认环境没问题,比后面跑模型跑到一半报错要划算得多。

8. 一些个人体会

配环境这件事,说难不难,说简单也不简单。核心就两点:版本匹配和环境隔离。把这两个原则把握好,大部分问题都能避免。

我刚开始学深度学习的时候,最烦的就是配环境,觉得这是浪费时间。后来才明白,环境配置本身就是工程能力的一部分。一个能稳定复现的环境,是做好实验的前提。你总不希望花了三天跑出来的结果,因为环境问题没法复现吧。

另外,不要害怕重装。环境搞乱了,与其花几个小时修,不如删掉重建,十分钟就能搞定。conda 删除环境用conda env remove -n env_name,干净利落。

最后分享一个小技巧:如果你经常需要在多台机器上配环境,可以写一个 shell 脚本或者 Python 脚本,把创建环境、安装依赖、验证安装这些步骤自动化。我自己的脚本里还会加上检查驱动版本、自动选择 CUDA 版本的逻辑。这样换新机器的时候,一条命令就能搞定,省时省力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询