CUDA与PyTorch版本兼容问题详解
CUDA与PyTorch版本兼容问题详解
在深度学习开发中,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
核心步骤:
- 根据GPU型号,去 CUDA GPUs - Compute Capability | NVIDIA Developer 查询版本号
- 例如,RTX 3090的计算能力架构版本号是8.6,对应sm_86。其中8是主版本号,6是次版本号
- 仍然是上面的网页,点链接进去,可查看该GPU的架构
- 例如,RTX 3090的架构为Ampere
- 根据架构,查CUDA版本范围
- 最左边一列为CUDA版本,最上面一行为架构。绿色部分代表兼容
- 例如,Ampere架构的CUDA版本范围为11.0 ~ 12.2
- 项目一般会指定PyTorch版本(假设为2.3.0),然后去 Start Locally | PyTorch 找到PyTorch和CUDA的交集,选择CUDA版本最高的(一般来说,CUDA版本越高,支持的最高计算能力就越高,运算越快)
- 默认该标签页为当前最新版本的Pytorch
- 点Previous PyTorch Versions切换到以前的版本
- 例如,PyTorch 2.3.0对应的CUDA版本有11.8和12.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
官方提供的一般是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博客