python系列&deep_study系列:报错解决:RuntimeError:The detected CUDA version mismatches the version that was us
报错解决:RuntimeError:The detected CUDA version mismatches the version that was used to compile PyTorch.
报错解决:RuntimeError:The detected CUDA version mismatches the version that was used to compile PyTorch.
摘要
当CUDA版本
与PyTorch版本
不匹配时,会引发RuntimeError
。解决方法包括在conda环境中安装对应版本的CUDA和cudnn
,或者通过本地安装CUDA
。安装过程中可能遇到GCC版本不兼容和安装路径问题
,可通过指定参数或修改环境变量来解决。多版本CUDA切换可以通过修改软链接或bashrc中的路径实现
。
报错
博主在编译安装软件时,遇到报错如下:
File "/home/XXX/miniconda3/envs/lin/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 404, in build_extensions
self._check_cuda_version()
File "/home/XXX/miniconda3/envs/lin/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 781, in _check_cuda_version
raise RuntimeError(CUDA_MISMATCH_MESSAGE.format(cuda_str_version, torch.version.cuda))
RuntimeError:
The detected CUDA version (11.3) mismatches the version that was used to compile PyTorch (10.2). Please make sure to use the same CUDA versions.
报错原因:CUDA版本和Pytorch版本不匹配。
解决方法:安装对应版本的CUDA
在Linux系统中安装cuda和cudnn一般有两种方法:
-
在conda虚拟环境中安装。此方法不需要sudo管理员权限,比较适合在公有的电脑或服务器上开发使用。默认安装地址在/anaconda3/envs/[$EnvName]/路径下。
-
在官网下载deb或runfile文件进行本地安装。此方法有无sudo管理员权限均可,比较适合在自己的电脑或服务器上开发使用。默认安装地址在/usr/local/路径下。
注意:在大多数情况下,在conda虚拟环境中安装 cudatoolkit (第一种安装方法)是可以满足 Pytorch 等框架的使用需求的。但对于一些特殊需求,如需要为 Pytorch 框架添加 CUDA 相关的拓展时(Custom C++ and CUDA Extensions),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit. (第二种安装方法)。
conda虚拟环境中安装
创建conda环境并激活,在该环境中安装cuda和cudnn(在此以10.2版本为例):
# 安装cudatoolkit
conda install cudatoolkit=10.2
# 安装cudnn,自动选版本与cuda版本相匹配
conda install cudnn
在bashrc中指定CUDA环境(需要替换anaconda3的路径以及环境名称):
vim ~/.bashrc
# add head file search directories
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/[$YourUserName]/anaconda3/envs/[$YourEnvName]/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/[$YourUserName]/anaconda3/envs/[$YourEnvName]/include
# add shared library searching directories
export LIBRARY_PATH=$LIBRARY_PATH:/[$YourUserName]/anaconda3/envs/[$YourEnvName]/lib
# add runtime library searching directories
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/[$YourUserName]/anaconda3/envs/[$YourEnvName]/lib
本地安装
前往官网,下载低版本的cuda并安装,例如我选择安装cuda10.2
,网页如下图所示:
运行如下指令进行安装:
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo chmod +x cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
输入accept:
取消安装cuda驱动(因为在这之前已经安装好更高版本的显卡驱动就不需要再重复安装)
-
若有root权限,则默认安装路径为/usr/local/目录下,点击Install即可。
-
若没有root权限,则需要在Options选项中修改Toolkit Options 、Library install path这两项的路径,例如修改安装路径为/home/usrname/cuda-10.2/,详细操作可以参考https://blog.csdn.net/weixin_54626591/article/details/142797434,然后再点击Install。
Do you want to install a symbolic link at /usr/local/cuda? # 是否将安装目录通过软连接的方式 link 到 /usr/local/cuda
选择yes
安装完成后,终端会有如下输出:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.2/
Samples: Installed in /root/, but missing recommended libraries
Please make sure that
- PATH includes /usr/local/cuda-10.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
Logfile is /var/log/cuda-installer.log
检查cuda版本:
nvcc --version
多版本切换
如果安装了多个cuda版本,需要进行其他cuda版本的切换可以按照如下两个方法:
方法一:通过修改软链接的方式
1. 将~/.bashrc 下与cuda相关的路径都改为/usr/local/cuda/,而不使用具体某一cuda版本,例如cuda-10.2、cuda-11.3等。
2. 修改软连接
# 删除之前创建的软链接
rm -rf /usr/local/cuda
# 建立新的软连接
sudo ln -s /usr/local/cuda-11.3/ /usr/local/cuda/
# 查看当前cuda版本
nvcc --version
方法二:修改bashrc中cuda的路径
打开bashrc文件,在最后添加如下:(根据需要使用cuda版本修改版本号):
# 根据自身情况修改cuda版本
export PATH=/usr/local/cuda-10.2/bin:$PATH
export CUDA_PATH=/usr/local/cuda-10.2
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
之后source更新一下source ~/.bashrc
。
附录:可能遇到的报错
报错一:GCC版本不兼容
Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.
使用以下指令进行安装:
sudo sh cuda_10.2.89_440.33.01_linux.run --override
报错二:安装路径报错
Installation failed. See log at /var/log/cuda-installer.log for details.
查看log的报错原因
cat /var/log/cuda-installer.log | grep [ERROR]
发现报错原因是:
[ERROR]: boost::filesystem::remove: Directory not empty: "/var/log/nvidia/.uninstallManifests/"
使用以下命令进行安装:
sudo sh cuda_10.2.89_440.33.01_linux.run --librarypath=/usr/local/cuda-10.2
底下评论
问题一:
我版本明明是一致的,也报了这个错
作者回答
可能是你装了多版本cuda,但系统调的是另外一个版本,而不是与你pytorch版本一致的那个
其他人提问
那请问这个问题怎么解决呢,用那个软链接的方法吗
作者回答
修改软链接或bashrc均可
问题二:
不行啊,改完环境变量还是在调用系统目录里那个cuda,始终检测不到conda里的cuda
作者回答
博客里有写,conda安装的cuda相当于是系统cuda的子集,虚拟环境中有些功能是不支持的,需要用到系统的cuda,此时就会调用系统的cuda
提问者答复
好的,谢谢你!
问题三:
又出现新问题了,出现license agreement之后没有输入框,我按什么都没反应,没法进行下一步
提问者答复
好了,需要把窗口拉宽。。
问题四:
博主,我下载新的cuda11.1之后,我运行其他代码的时候出现问题了,请问怎么将我下载的这个cuda11.1删除掉啊
问题五:
你好博主,看了你的贴子。我也在虚拟环境编译时出现了The detected CUDA version (9.1) mismatches the version that was used to compile
PyTorch (11.3). Please make sure to use the same CUDA versions.的问题,当我在虚拟环境下执行print(torch.version.cuda)时得出的结果是11.3.我应改是使用软链接的方式还是在在官网下载cudatoolkit来解决问题
报错解决:RuntimeError:The detected CUDA version mismatches the version that was used to compile PyTorch.