如何为我们的GPU设备选择合适的CUDA版本和Torch版本?

文章目录

Torch版本和CUDA版本需要匹配对应(⚠️非常重要!)

可以查看官网(https://pytorch.org/get-started/previous-versions/),比如说

这里就是torch 2.9.0支持CUDA 12.6、12.8、13.0

同理Torch 2.8.0版本的支持关系:

总之我们可以直观地看出,Torch和CUDA版本支持是多对多的关系,PyTorch的每个版本都支持多个CUDA版本,而每个CUDA版本也可以被多个PyTorch版本支持。例如,PyTorch 2.9.0 支持 CUDA 12.6、12.8 和 13.0,而 CUDA 12.6 也被 PyTorch 2.8.0 和 2.7.1 等多个版本支持。

虽然存在多对多的关系,但并不是所有PyTorch版本都兼容所有CUDA版本。某些PyTorch版本可能只支持特定的CUDA版本。例如,PyTorch 1.0.1 不支持 CUDA 9.2。

如何为我们的GPU设备选择合适的CUDA版本和Torch版本?

1,先明确我们使用的是什么GPU?

这里默认我们使用的都是N卡,也就是NVIDIA GPU,并且已经安装了NVIDIA驱动程序,

那么我们可以直接使用

python 复制代码
nvidia-smi

细节可以参考我之前的博客:nvidia-smi输出界面

我们只关注GPU型号、CUDA最高兼容版本;

比如说前面这张Google Colab申请到的Tesla T4卡,

还有我笔记本的RTX 5060

自用服务器端的RTX 4080

2,根据使用的GPU,在Nvidia官网查找对应的计算能力架构

每个GPU及计算能力(CUDA GPU Compute Capability )之间的关系是一对多的,这个信息可以在Nvidia官网中查到:
https://developer.nvidia.com/cuda/gpus

CUDA GPU Compute Capability(简称"计算能力",常缩写为 CC)是 NVIDIA 为其 GPU 定义的核心技术指标,本质是衡量 GPU 硬件对 CUDA 平台(NVIDIA 用于 GPU 通用计算的开发框架)支持程度的标准,直接关联 GPU 能实现的计算功能、性能上限及软件兼容性。

1. 核心作用:连接硬件与软件

计算能力的核心价值是为开发者和用户提供"硬件能力参照":

  • 对开发者:决定能使用的 CUDA 指令集、硬件特性(如张量核心、光线追踪核心、共享内存大小等)。例如,仅计算能力 7.0+ 的 GPU 支持 Tensor Core(用于 AI 加速),8.0+ 支持更高效的 FP8 精度计算。
  • 对用户:判断 GPU 是否能运行特定软件(如 AI 训练框架、科学计算软件、3D 渲染工具)。多数专业软件会标注"最低支持 CC X.X",例如 PyTorch 部分高级功能需 CC 7.5+。
2. 数值含义:主版本+次版本

计算能力以"X.Y"形式呈现(如 8.9、12.0),数字对应硬件架构的代际与功能升级:

  • 主版本(X) :代表 GPU 核心架构的代际,每代主版本对应全新的硬件设计(如架构名称从 Kepler、Pascal 到 Ampere、Hopper、Blackwell),直接决定核心计算单元、内存带宽等基础能力。
    例:CC 8.X 对应 Hopper 架构(如 H100 GPU),CC 12.X 对应最新的 Blackwell 架构(如上面图中第一行提供的 RTX PRO 6000 Blackwell)。
  • 次版本(Y) :代表同架构下的功能增量升级,通常优化细节特性(如新增指令、提升内存效率),不改变核心架构。
    例:CC 8.0(Hopper 基础版)与 8.9(Hopper 优化版)同属 Hopper 架构,但 8.9 可能支持更多硬件加速特性。
3. 与上图中所列出的 GPU 列表的关联

上面截图中列出的那么多NVIDIA GPU 型号(如 GeForce RTX 5090、Jetson T5000、GB10 等),每款都对应唯一的计算能力:

  • 新架构 GPU 对应更高 CC:如 Blackwell 架构的 RTX PRO 6000 标注为 12.0,是目前最高代际;Hopper 架构的 H100 为 8.0,Ampere 架构的 RTX 3090 为 8.6。
  • 不同产品线(专业卡/消费卡/嵌入式卡)CC 规律:
    • 专业卡(如 RTX PRO 系列、A100、H100):CC 通常更高,侧重稳定支持专业计算(如 12.0、8.0);
    • 消费卡(如 GeForce RTX 40/50 系列):CC 略低于同代专业卡,但满足主流计算需求(如 RTX 4090 为 8.9,RTX 5090 预计对应更高 CC);
    • 嵌入式卡(如 Jetson T5000):CC 适配低功耗场景,数值与同代桌面卡接近但优化能效(如 Jetson T5000 可能对应 CC 10.X)。
4. "Legacy GPU"的补充说明

然后上面列出的GPU提到了一个"Legacy CUDA GPU Compute Capability"(legacy 旧代),指不再更新主流 CUDA 支持的老旧 GPU (如架构停留在 Kepler、Maxwell 的 GPU,CC 低于 5.0)。

这类 GPU 虽仍可运行基础 CUDA 程序,但无法支持新 CUDA 版本的高级功能,NVIDIA 也不再为其提供新驱动的计算功能更新,仅保留基础兼容性。

然后具体页面的话参考:https://developer.nvidia.com/cuda/gpus/legacy

现在回过头看:

计算能力架构版本号是12.0,对应sm_120

计算能力架构版本号是8.9,对应sm_89,8是主版本号,9是次版本号

3,依据计算能力及CUDA版本之间的关系,找到可用的CUDA版本

一般来说,CUDA版本越高,支持的最高计算能力就越高,

CUDA版本 / 架构-计算能力兼容图,这个我google了很多,一直没有找到一个全面的GPU算力与CUDA版本对应关系来源。

这是英伟达官方的:https://docs.nvidia.com/datacenter/tesla/drivers/cuda-toolkit-driver-and-architecture-matrix.html

下面这个是wiki中的(需要注意信息来源是否可靠!)

https://en.wikipedia.org/wiki/CUDA#GPUs_supported

其中,最左边的一列为CUDA版本,最上面一行为架构。绿色部分代表兼容。

总而言之,我们前面nvidia-smi可以获取CUDA最高兼容版本的信息,再配合这里的信息,我们总能够找到合适的候选CUDA版本

4,依据我们要安装的PyTorch版本查找对应的CUDA版本

参考:https://pytorch.org/get-started/previous-versions/

就是前面提到的版本多对多的问题

因为实际情况中,我们可能已经有torch版本的限制条件在先了,比如说要复现其他人的代码库等等,

这个时候我们是按照Torch版本为前提去寻找所对应的CUDA版本

5,将上面两个部分的CUDA(3和4)取交集,即为合适的CUDA版本
6,依据PyTorch和CUDA版本,查找合适的pip或conda安装命令
  • 如果指定了Torch版本,那么我们按照5获取合适CUDA版本
  • 如果我们先找到了合适的CUDA版本,再按4找可行的Torch版本

然后安装命令的话,同样参考:https://pytorch.org/get-started/previous-versions/

一般来说,如果使用最新的PyTorch版本,选择PyTorch官网上最新的CUDA版本即可,参考:https://pytorch.org/get-started/locally/

然后这里我之所以没有提怎么安装CUDA,是因为现在安装torch会自带cuda和cudnn,但是需要提前手动安装显卡的驱动(如果没有的话)。

PyTorch 提供了带有 CUDA 和 cuDNN 支持的预编译版本,用户可以在安装 PyTorch 时选择带有特定 CUDA 版本的安装包,就是前面安装命令那里一长串的index-url。

当然如果需要手动安装CUDA toolkit的话,参考https://developer.nvidia.com/cuda-toolkit-archive

如果两边都装了,细节上用的是哪一个还是需要注意一下的:



实操例子

我手头上的一个小主机例子,

RTX4080,CUDA最高兼容版本12.4

然后就是查看计算架构:

可以看官网,也可以参考一些其他网站,此处我参考:

https://www.techpowerup.com/gpu-specs/geforce-rtx-4080.c3888


然后和前面说的对应表格:

所以我这里初步CUDA:11.8------12.4,然后去看torch version和CUDA version官网的说明,

我这里稍微看了下,支持11.8------12.4范围的,CUDA11.8的最高Torch版本是V2.7.1,

然后命令的话其实下面的已经列出来了

CUDA 12.4的最高Torch版本是V2.6.0

剩下的CUDA 12.1的最高Torch版本为V2.5.1

其实看了一圈,CUDA 11.8------12.4范围内的,也就11.8、12.1、12.4这3个版本

因为我们这里暂时没有项目依赖关系,所以我们没有限制Torch版本。

所以这里我们会遇到到底是优先CUDA版本高还是优先Torch版本高的选择困难症。

简单来说,在选择优先级上:
PyTorch 功能需求(要不要最新版本)> 2. GPU 硬件支持的 CUDA 上限 > 3. CUDA 版本高低。
这个选择的核心原则是:优先满足项目对PyTorch功能的需求,再匹配兼容的CUDA版本,因为PyTorch是我们直接使用的框架,CUDA本质是为PyTorch提供GPU加速的底层工具,工具要适配框架,因为框架是核心,不能反过来说框架要适配工具。

然后Torch的话,一般新Torch、高版本的,肯定会有新的功能,新的API之类,这个比较关键。

两种极端情况就是:

  • 高 CUDA 版本,但无最新 PyTorch:放弃高 CUDA,选能装最新 PyTorch 的低 CUDA(前提是你需要最新 PyTorch 功能)
  • 低 CUDA 版本有高 PyTorch,但 GPU 支持高 CUDA:若不需要最新 PyTorch,选高 CUDA + 兼容的 PyTorch 版本;若需要,选低 CUDA + 高 PyTorch

那么对应我们这里的情况,就是不指定 PyTorch 版本,只匹配 CUDA 版本:比如说我们只知道CUDA在11.8、12.1、12.4这3个中选,但是11.8能够匹配上V2.7.1的Torch,所以我们优先Torch V2.7.1 + CUDA 11.8

当然,如果我们没有按照上面这种方式一步一步找清楚的话,比如说我就是只知道我CUDA要选11.8,那么能不能让pip优先找PyPI或者其他源中最新的Torch稳定版呢?

其实是能的。

  • 不指定 PyTorch 版本,只匹配 CUDA 版本,命令的核心逻辑是:让 pip 自动匹配当前 CUDA 版本支持的最新 PyTorch 版本

-U(--upgrade):强制升级到符合条件的最高版本。如果本地已经装了低版本的 PyTorch,会替换成最新的兼容版;如果没装,直接装最新兼容版

复制代码
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -U

那反过来,另外一种情况是,我只知道我要指定安装的Torch版本是多少多少,或者我要复现的某篇顶会上某个期刊上其他人是用了Torch version多少多少(前面我们说了Torch是框架,不同版本有不同API,所以我们其实更关注Torch,再CUDA能底层加速即可,所以我们一般复现的时候更在意Torch照猫画虎)。

那这种情况下,我们只知道Torch版本是多少,我们其实是没有办法自动匹配"指定PyTorch版本对应的最高且兼容CUDA版本",

因为说到底CUDA是需要我们手动安装在系统中的底层工具,不是通过pip随PyTorch等安装的。

那么我们就需要前面那种一步一步慢慢找适配的解决方案了,就是先查兼容表------》手动安装CUDA------》pip装对应PyTorch,

也就是查该 PyTorch 版本支持的 CUDA 版本范围(每个 PyTorch 版本都有官方明确支持的 CUDA 版本列表),检查我们的 GPU 是否支持这个最高 CUDA 版本(如果前面步骤查到的最高 CUDA 版本超过我们 GPU 的硬件上限,也就是nvidia-smi所显示的最高兼容版本,就选 GPU 支持的最高 CUDA 版本)------》然后再从NVIDIA官网下载并安装我们选定的CUDA版本,当然这里装的是系统CUDA,不是指PyTorch自带的运行库------》我们最后还是用--index-url 指定对应 CUDA 标签,安装 PyTorch

总之,回到我们的问题,我们这里就使用如下命令

复制代码
# CUDA 11.8
pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu118

然后每次安装成功之后可以稍微检查一下

python 复制代码
import torch

# ===================== 1. 检查 PyTorch 核心版本 =====================
print(f"PyTorch 版本: {torch.__version__}")

# ===================== 2. 检查 CUDA 相关信息 =====================
print("\n===== CUDA 配置检查 =====")
# 检查 CUDA 是否可用(驱动+GPU 支持)
print(f"CUDA 是否可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    # CUDA 版本(PyTorch 编译时对应的 CUDA 版本)
    print(f"PyTorch 编译的 CUDA 版本: {torch.version.cuda}")
    # GPU 数量与名称
    gpu_count = torch.cuda.device_count()
    print(f"可用 GPU 数量: {gpu_count}")
    for i in range(gpu_count):
        print(f"GPU {i} 名称: {torch.cuda.get_device_name(i)}")
        print(f"GPU {i} 计算能力: {torch.cuda.get_device_capability(i)}")
else:
    print("警告: 未检测到可用 CUDA,将使用 CPU 训练(速度较慢)")

然后一些其他的小细节:

做计算生物的人,可能习惯就是:conda 创建虚拟环境 → 激活环境 → 安装 PyTorch,总体上是没问题的,隔离不同项目的依赖冲突是下意识的习惯,

只是留意一下Python版本和PyTorch版本的兼容问题,就把它当成类似于numpy或者sklearn或hicexplorer一样,一个库需要特定版本的Python解释器,稍微注意一下。另外优先用 pip 装 PyTorch,别用 conda install torch

驱动问题?

参考:https://pytorch.org/get-started/locally/

获悉4080还可以装得更高更新的torch和CUDA,回去式了下,尝试装最新的:

注意:单单pip不一定是最新的,比如说下面pip其实是CUDA12.8而不是13.0

python 复制代码
!pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130 -U



装能装,但是驱动和GPU支持上有问题。

现在再回过头来看,CUDA version 这个nvidia-smi所展示的参数是driver驱动所支持的latest version,

而驱动其实是也可以更新的,

至少是硬件层、驱动层driver、CUDA层,分层抽象封装,

关于驱动,我们用下面这个命令看一下:

python 复制代码
ubuntu-drivers devices

我们看看推荐的这个驱动,这里是是580,其实和我们前面nvidia-smi的地方确实不同。

我们可以尝试手动更新这个驱动,

python 复制代码
ubuntu-drivers --help

在运行

python 复制代码
ubuntu-drivers install

之后,我们先重启一下

python 复制代码
 systemctl reboot

首先可以发现,确实ubuntu驱动默认安装的就是recommend,

另外我们可以发现驱动更新之后,驱动所支持的最新版本的CUDA 兼容版本上限也提高了,我们现在支持13.0了,

确实和前面的12.4不同,

所以确实,4080还是与时俱进的,所以我们前面的方案逻辑上讲是没问题的。

只不过我们得先查看一下驱动版本,驱动能升级的升级,然后合适的驱动下查看CUDA的上限,再回到我们前面的流程中,在上下限之间寻找合适的CUDA和Torch版本!

总结

我们还是从分层依赖逻辑上简单地总结前面的探索结果,

从硬件到软件的抽象封装链,也就是从硬件层------》驱动层------》CUDA层,

我们来看一下:


所以再回过头来说:

1,驱动版本是第一步要确认的核心,第一步就是检查当前驱动版本和支持的CUDA上限。

nvidia-smi重点查看驱动版本和当前驱动所支持的最高CUDA版本,这一步是所有后续操作的依据!

如果驱动支持的CUDA上限低于我们想安装的PyTorch CUDA版本,比如说驱动只支持12.4,但是我们前面简单试了一下想安装cu130的PyTorch,那么就会出现能安装但是GPU无法调用的问题,这些前面截图中能够直观看到。

2,第2步就是判断驱动是否需要升级,比如说我这里是ubuntu,

我就简单执行命令查看系统推荐的驱动版本

python 复制代码
ubuntu-drivers devices

总之就是简单比较一下当前驱动版本和系统推荐的recommended版本,如果推荐版本更高,

比如说我们前面550比推荐的580低,那么我们就优先升级驱动

python 复制代码
ubuntu-drivers install

然后升级后重启,再用nvidia-smi验证一下驱动版本和CUDA支持上限是否提升。

3,然后就到了我们前面同样的流程了,

也就是选择匹配的PyTorch版本,一般最新的CUDA版本支持维护的Torch版本也会更高一些,

所以我们完全可以直接安装最高的CUDA版本,然后-U强制升级匹配最新Torch版本

python 复制代码
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130 -U

很多人会混淆这一点:nvidia-smi 显示的是驱动支持的最高 CUDA 版本,不是系统里装了完整的 CUDA Toolkit;PyTorch 自带的是运行时,不需要手动装 Toolkit 也能跑。

我们前面的结论或者说流程只能说可以执行,但是言论上确实得斟酌,注意⚠️!
总之保守策略:显卡能支持的,先装最新,报错了后说;稳妥点按照前面流程执行;如果是本着能用就行的想法,那么保守策略就是按照我们前面的步骤

参考:

https://stackoverflow.com/questions/77068908/how-to-install-pytorch-with-cuda-support-on-windows-11-cuda-12-no-matching

https://pytorch.org/get-started/previous-versions/

https://zhuanlan.zhihu.com/p/633473214

相关推荐
小途软件15 小时前
ssm327校园二手交易平台的设计与实现+vue
java·人工智能·pytorch·python·深度学习·语言模型
人工智能培训16 小时前
什么是马尔可夫决策过程(MDP)?马尔可夫性的核心含义是什么?
人工智能·深度学习·机器学习·cnn·智能体·马尔可夫决策
百***243718 小时前
GPT-5.2国内调用+API中转+成本管控
大数据·人工智能·深度学习
Cigaretter719 小时前
Day 38 早停策略和模型权重的保存
python·深度学习·机器学习
迷你可可小生20 小时前
常见神经网络模块
人工智能·深度学习
bst@微胖子20 小时前
HuggingFace项目实战之分类任务实战
pytorch·深度学习·分类
YukiMori2320 小时前
基于Paddle微调ERNIE的中文情感分析实战教程
深度学习·机器学习
小途软件20 小时前
基于深度学习的人脸检测算法研究
java·人工智能·pytorch·python·深度学习·语言模型