cuda与pytorch版本兼容问题

发布于:2025-03-10 ⋅ 阅读:(10) ⋅ 点赞:(0)

在查看cuda版本的时候,发现不同命令返回的cuda版本不同,比较困惑。故本文在这里梳理一下~


cuda版本

使用shell查看

# 显卡驱动信息,主要看cuda支持的最高版本
nvidia-smi

# 当前使用的cuda版本
nvcc -V 或 nvcc --version

# 查看安装了几个cuda
ll /usr/local/

(1)用 nvidia-smi 查看的是驱动API版本,这是下载英伟达驱动程序时捆绑带来的,限制了运行API可安装的最高版本。我这里是12.0

  • 驱动API版本需要高于运行API版本,否则运行会出错

(2)用 nvcc -V 查看的是运行API版本,是程序实际使用的,需要另外安装。我这里是11.8

  • 通过 which nvcc 可以查看程序实际使用的cuda指向的环境变量的位置

  • 通过 ls -l /usr/local/cuda 查看环境变量的软连接(通常为实现cuda的切换,使用建立软连接的方式,而不是直接修改环境变量)。/usr/local/cuda 是cuda直接连接的环境变量,通过软连接到指定的cuda版本即可实现切换
  • 可以在 ~/.bashrc 中修改,比如将 which nvcc 的输出改为 /usr/local/cuda/bin/nvcc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

(3)ll /usr/local/ 查看安装了几个cuda。我这里有cuda-11和cuda-11.8

 

使用python查看

import torch
import torch.utils.cpp_extension

# 查看torch版本
print(torch.__version__)
# 看安装好的torch和cuda能不能用,也就是看GPU能不能用
print(torch.cuda.is_available())

# 输出一个cuda版本。注意,该版本不一定是pytorch在实际系统上运行时使用的cuda版本,而是编译该pytorch release版本时使用的cuda版本。详见 https://blog.csdn.net/xiqi4145/article/details/110254093
print(torch.version.cuda)
# 输出pytorch运行时使用的cuda路径
print(torch.utils.cpp_extension.CUDA_HOME)

(1)torch.version.cuda 输出的cuda版本不一定是pytorch在实际运行时使用的cuda版本,而是编译该pytorch release版本时使用的cuda版本。我这里是12.1,比 nvidia-smi 显示的最高cuda版本12.0高,这不会影响程序运行;

(2)torch.utils.cpp_extension.CUDA_HOME 输出pytorch实际运行时的cuda路径,我这里为/usr/local/cuda,前面已经看过,对应的cuda版本是11.8(查版本直接 ll 就能查)。这个版本必须要低于 nvidia-smi 显示的最高cuda版本12.0,否则会报错


如何配置版本兼容的cuda和pytorch

核心步骤:

1、根据GPU型号,去 CUDA GPUs - Compute Capability | NVIDIA Developer 查询版本号

  • 如下图显示,RTX 3090的计算能力架构版本号是8.6,对应sm_86。其中8是主版本号,6是次版本号

2、仍然是上面的网页,点链接进去,可查看该GPU的架构

  • 如下图显示,RTX 3090的架构为Ampere 

 

3、根据架构,查cuda版本范围

  • 最左边一列为cuda版本,最上面一行为架构。绿色部分代表兼容
  • 如下图显示,Ampere架构的cuda版本范围为11.0 ~ 12.2

4、项目一般会指定pytorch版本(假设为2.3.0),然后去  Start Locally | PyTorch  找到pytorch和cuda的交集,选择cuda版本最高的(一般来说,cuda版本越高,支持的最高计算能力就越高,运算越快)

  • 默认该标签页为当前最新版本的Pytorch  

 

  • 点Previous PyTorch Versions切换到以前的版本 

 

  • 如下图显示,PyTorch 2.3.0 对应的cuda版本有11.8和12.1

5、将3和4两步中的cuda版本取交集,得到合适的cuda版本

  • 第3步:Ampere架构的cuda版本范围为11.0 ~ 12.2
  • 第4步:PyTorch 2.3.0 对应的cuda版本有11.8和12.1
  • 取交集中最高的版本,即合适的cuda版本为12.1

6、官方提供的一般是 pip / conda 方式安装,如果慢,可尝试换源、代理等方式;也可以用whl方式下载离线安装包

(1)Conda方式的安装命令中都为pytorch==xxx,而Wheel方式为torch==xxx。如2.3.0+CUDA12.1情况下的两种安装方式命令分别如下:

# Conda
conda install pytorch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 pytorch-cuda=12.1 -c pytorch -c nvidia
# Wheel
pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121

(2)对于Conda方式的安装命令,在Pytorch 1.12.1之后,1.13.0开始,安装命令中没有cudatoolkit了,变为了pytorch-cuda,如

  •  1.12.1:
    conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
  •   1.13.0:
    conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia

(3)以Windows下为例,如何获取whl离线安装包并安装?

假设在pytorch获得的pip安装命令为
pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121

如何获取whl离线安装包并安装?
下载地址:https://download.pytorch.org/whl/torch_stable.html
下载以下安装包:
cu121/torch-2.3.0%2Bcu121-cp38-cp38-win_amd64.whl
cu121/torchvision-0.18.0%2Bcu121-cp38-cp38-win_amd64.whl
cu121/torchaudio-2.3.0%2Bcu121-cp38-cp38-win_amd64.whl

注意:cu121表示CUDA是12.1版本的,cp38表示Python3.8,win表示Windows版本

安装方法:进入离线安装包所在位置,shift+鼠标右键,选择“在此处打开powershell窗口”,输入pip install xxx.whl

注意:有可能会出现[winError]拒绝访问的错误提示,并要求你添加--user。此时可以输入:pip install xxx.whl --user

参考

一文理顺:pytorch、cuda版本,从此不再为兼容问题头疼!_哔哩哔哩_bilibili

Rick:如何解决PyTorch版本和CUDA版本不匹配的关系

cuda和cudatoolkit-CSDN博客