环境
ubuntu20.04 RTX3080
conda虚拟环境
问题描述
使用pytorch时遇到报错:
UserWarning: NVIDIA GeForce RTX 3080 with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.
If you want to use the NVIDIA GeForce RTX 3080 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
原因
显卡算力与CUDA toolkit版本不匹配
环境配置顺序
1.根据driver选择cuda
2.根据cuda选择pytorch
3.根据pytorch选择python
三者关系层层递进确定所需的python、cuda、pytorch版本。
深究:
在官网1查询所用显卡的算力
如下图,我的是3080(同样适合笔记本显卡、非游戏显卡),算力是8.6,即8.X
在官网2查询算力所对应的CUDA toolkit版本
此处没有明说,1.4.2节提到 CUDA Toolkit 11.0满足8.0算力(实际应该是8.X的意思,因为没有8.0算力的显卡)
在这篇博客有对应的表格,可以参考。从而选择需要的CUDA toolkit版本,我选择11.7.
在官网3查询CUDA toolkit对应的显卡驱动版本
可以发现11.7的CUDA需要515.43.04以上的显卡驱动,
安装
在 软件和更新 中的 附加驱动 处安装所需的驱动
这里的515具体版本是515.86.01满足要求,也可以选择更高版本。
可以在终端输入以下代码来检查,第一行就是驱动版本:
nvidia-smi
安装对应的CUDA toolkit
包括系统环境中的CUDA toolkit和conda虚拟环境中的CUDA toolkit,方法很多,我就不一一介绍了。我的安装方法:
系统环境中:
官网方法(第一个CUDA):
根据得到的命令在终端安装
conda环境中:
conda search cudatoolkit
conda install cudatoolkit==(所需版本)
conda install cudatoolkit==11.7# 举例,从官网可在后面加上 -c nvidia
系统环境中安装多个CUDA
第一个CUDA安装见上一条
后续还需要安装仍然通过官网:
根据得到的命令行安装。
可以通过ls /usr/local/ | grep cuda
命令行检查是否成功安装了CUDA
但是环境还需要配置:
命令行输入gedit ~/.bashrc
,在弹出窗口最下方注释掉#cuda下方的内容并添加:
# ${版本号}更改为CUDA版本 如11.7
export LD_LABRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-${版本号}/lib64
export PATH=$PATH:/usr/local/cuda-${版本号}/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-${版本号}
export PATH=/usr/local/cuda/bin:$PATH
source ~/.bashrc
使配置生效,然后用nvcc -V
检查环境是否配置成功
安装对应的pytorch
在pytorch官网中找到相应的命令进行安装,Pytorch和CUDA对应的版本及Pytorch和Python对应的版本及Python与Anaconda的对应关系中提到了pytorch版本与cuda版本、python版本的关系。
卸载注意:
使用conda list
查看pytorch版本并使用 conda uninstall pytorch
卸载,如果发现卸载后还能查询torch版本,可以使用pip list
查看是否存在torch并使用pip uninstall torch
卸载。
系统环境中安装CUDNN(与报错问题无关,记录下环境配置)
在文档中检查所需要的版本:
然后在CUDNN官网,需要注册和填写问卷,选择Local installer for Linux x86_64(Tar)下载。
# ${cudnn版本}更改为CUDNN版本 即下载文件名称 如8.9.7.29
# ${cuda版本}更改为CUDA版本 如cuda11
# 在下载的文件夹内打开终端
tar -xvf cudnn-linux-x86_64-${cudnn版本}_${cuda版本号}-archive.tar.xz
sudo cp cudnn-linux-x86_64-${cudnn版本}_${cuda版本号}-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -p cudnn-linux-x86_64-${cudnn版本}_${cuda版本号}-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
参考了这篇博客,个人认为最简单的方法。
这些命令的作用是将cuDNN的头文件和库文件复制到CUDA的安装目录下,并修改它们的权限。让CUDA能够调用cuDNN的函数和算法,从而加速深度神经网络的计算。
cuDNN的安装并不需要执行任何可执行文件或脚本,只需要将它的头文件和库文件放到合适的位置,让CUDA能够找到它们就可以了。
cuDNN是一个用于深度神经网络的GPU加速库,它提供了一些高效的算法,如卷积、矩阵乘法、池化等https://zhuanlan.zhihu.com/p/99880204?from_voters_page=true。cuDNN的安装并不需要执行任何可执行文件或脚本,只需要将它的头文件和库文件放到合适的位置,让CUDA能够找到它们就可以了
注意
1.在系统中和conda虚拟环境中都可以安装CUDA toolkit,但是系统中安装的版本必须比虚拟环境中更新,原因:虚拟环境中cuda最重要的内核驱动它并没有安装,无论虚拟环境安装哪个版本的cudatoolkit,都会调用系统的cuda内核。
2.CUDA toolkit可以向下兼容,所以可以用新版本替换旧版本。
3.pytorch和cuda也有对应关系,所以建议下载cuda对应的新版本,但是pytorch1.X版本间存在一些兼容问题,需要更改API接口等。
4.关于pytorch调用的cuda版本问题,可以参考这篇博客。
参考博客
显卡算力、驱动版本、CUDA、pytorch之间的关系
深入浅出pytorch笔记——第一章
cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version解决
Ubuntu cudnn安装
【深度学习】ubuntu18.04环境配置详细教程