问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CUDA与PyTorch版本兼容问题详解

创作时间:
作者:
@小白创作中心

CUDA与PyTorch版本兼容问题详解

引用
CSDN
1.
https://m.blog.csdn.net/qq_43629945/article/details/145546562

在深度学习开发中,CUDA和PyTorch的版本兼容性是一个常见的问题。本文将详细介绍如何查看系统中的CUDA版本信息,以及如何配置与PyTorch兼容的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是次版本号
  1. 仍然是上面的网页,点链接进去,可查看该GPU的架构
  • 例如,RTX 3090的架构为Ampere
  1. 根据架构,查CUDA版本范围
  • 最左边一列为CUDA版本,最上面一行为架构。绿色部分代表兼容
  • 例如,Ampere架构的CUDA版本范围为11.0 ~ 12.2
  1. 项目一般会指定PyTorch版本(假设为2.3.0),然后去 Start Locally | PyTorch 找到PyTorch和CUDA的交集,选择CUDA版本最高的(一般来说,CUDA版本越高,支持的最高计算能力就越高,运算越快)
  • 默认该标签页为当前最新版本的Pytorch
  • 点Previous PyTorch Versions切换到以前的版本
  • 例如,PyTorch 2.3.0对应的CUDA版本有11.8和12.1
  1. 将第3步和第4步中的CUDA版本取交集,得到合适的CUDA版本
  • 第3步:Ampere架构的CUDA版本范围为11.0 ~ 12.2
  • 第4步:PyTorch 2.3.0对应的CUDA版本有11.8和12.1
  • 取交集中最高的版本,即合适的CUDA版本为12.1
  1. 官方提供的一般是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博客
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号