RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasSgemm( handle, opa, opb

1 问题描述:

在GPU运行模型时出现:

RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling
cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)


2 原因分析:

具体有三种原因:

1) CUBLAS的问题

2) 环境变量问题

3) cuda版本问题

另外,如果代码有问题,张量不对齐的话也可能出现该报错。


3 解决方案:

针对每种原因,具体的解决方案如下:

3.1 CUBLAS的问题

报错里会提到CUBLAS_STATUS_INVALID_VALUE

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling
cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)

pip uninstall nvidia-cublas-cu11

尝试卸载虚拟环境中的CUBLAS相关包试试,具体参考这篇文章
CUBLAS参考文章

3.2 环境变量问题

在命令行中输入

unset LD_LIBRARY_PATH

unset LD_LIBRARY_PATH 是一个用于清空 Linux 或 Unix 操作系统环境变量 LD_LIBRARY_PATH 的命令。

在 Linux 或 Unix 系统中,LD_LIBRARY_PATH 是一个环境变量,用于指定共享库文件(也称为动态链接库)的搜索路径。当一个程序启动时,系统会在 LD_LIBRARY_PATH 指定的路径下搜索共享库文件。如果 LD_LIBRARY_PATH 没有被设置,系统会使用默认的共享库搜索路径。

使用 unset LD_LIBRARY_PATH 命令可以清空 LD_LIBRARY_PATH 环境变量,这意味着系统将只使用默认的共享库搜索路径。这个命令通常用于解决程序运行时由于错误的 LD_LIBRARY_PATH 设置导致的问题。

具体参考这篇文章
环境变量参考文章

3.3 cuda版本问题

作者是在上述两个方法都无效的情况下,多方查找后发现,可能是本机的cuda版本太高,和torch不兼容,需要下载匹配的cuda重新运行。

首先,咱来说说这三者的区别:

nvcc - V       #机器上的cuda版本
nvidia-smi       #当前driver可支持的最高版本(必须大于安装的cuda版本)
torch.version.cuda   #当前torch支持的最高cuda版本

确保安装时,选择的cuda和torch版本要满足1<3<2(也可以等于),如何不满足则可能会出现题目中的报错。如作者的三个版本分别是11.5,12.2,10.1,分析一下可得当前的cuda11.5比torch支持的cuda版本10.1高了,所以需要重新安装10.1的cuda。

其次,cuda版本在满足上述要求的同时,还需要和环境内的torch和torchvision版本匹配。作者的torch版本为1.4.0,torchvision版本为0.5.0,结合上述cuda10.1版本,在此链接里查询安装命令 查询链接

在这里插入图片描述
可以命令行用conda或pip安装,但作者的镜像似乎有些问题,直接安装没有成功,遂转而第二条曲折道路:

去nvidia官网,CUDA Toolkit Archive,找到符合条件的链接

在这里插入图片描述

选择适合系统的下载路径,在服务器上wget下载到目的路径即可

在这里插入图片描述

下载完成后cd到_linux.run文件所在目录中,进行安装。参考文章ubantu安装cuda

先执行一下命令,安装相关依赖:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev 

这里作者由于权限需要填写sudo密码。

接着可以开始安装:

sudo sh cuda_10.1.105_418.39_linux.run

请注意如此安装可能也会出现报错,gcc版本不兼容

Failed to verify gcc version.
See log at /var/log/cuda-installer.log for details.

这里需要修改一下安装命令,使用--override参数:

sudo sh cuda_10.1.105_418.39_linux.run --override

即可解决问题啦!重新安装cuda时cuda的driver是已经有的,记得在这一步把driver安装去掉

在这里插入图片描述

安装成功后会出现

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.1/
Samples:  Installed in /home/zhangyujie/

Please make sure that
 -   PATH includes /usr/local/cuda-10.1/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.1/lib64, or, add /usr/local/cuda-10.1/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.1/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.1/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 418.00 is required for CUDA 10.1 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相关环境变量。

vim ~/.bashrc    #修改配置文件

关于vim的操作不细说了,打开后,在文件结尾添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

保存后退出,使环境变量生效:

source ~/.bashrc

最后,倘若和我一样之前有安装过其他cuda版本,此时需要切换cuda版本,可以通过修改软链接路径来搞定。

/usr/local/目录下查看自己安装的cuda版本
在这里插入图片描述

cuda是个软链接,cuda-10.1是我们安装的cuda版本。使用stat命令查看当前cuda链接的版本:

在这里插入图片描述
如图所示,软链接的是10.1版本,若是要更改链接版本,删除该软链接重新建立对应版本的软链接即可。

sudo rm -rf cuda
sudo ln -s /usr/local/cuda-XXX /usr/local/cuda

好了基本就这样了,历时好几天终于解决了这个问题。痛苦的新手期,第一篇文章,写得一般般还望见谅,希望能够帮到同样问题的小伙伴~♥️

1 http://t.csdnimg.cn/A16bJ
2 http://t.csdnimg.cn/07EW7
3 RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when - lucky的文章 - 知乎 https://zhuanlan.zhihu.com/p/544273448
4 https://cloud.tencent.com/developer/article/1726518?shareByChannel=link
5 http://t.csdnimg.cn/SswhS
6 http://t.csdnimg.cn/Hd7Ae

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值