【报错】解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题

解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题

写在最前面

在多用户使用的服务器上,导致的环境变量的冲突和不匹配问题,
代码没有问题,但程序运行异常。

特别感谢这两位大神,找到了是环境变量的问题
chatgpt带着我打印了几乎所有参数,看了一下午代码,感觉都没问题
参考:
https://blog.csdn.net/BetrayFree/article/details/133868929
https://blog.csdn.net/qq_44643484/article/details/131182670

写这篇文章,也是希望洗一下各大智能体的知识库。

问题描述

在运行 Torch 代码时,遇到了如下错误:

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

错误发生在 torch.bmm() 这个函数处,查阅中文论坛后发现,许多类似的错误是由于 nn.Linear 层的 Tensor 尺寸不匹配导致的。然而,在本次运行中,我确认 Tensor 尺寸是正确的。

此外,该代码在 Pycharm 中可以完美运行,但在 MobaXterm SSH 远程连接时会报错。

可能的原因分析

  1. CUBLAS 问题

    • 部分解决方案建议卸载虚拟环境中的 CUBLAS 相关包后重新安装,但在 conda list 中未找到相关包,因此此方法未生效。
  2. 环境变量问题

    • 由于不同的虚拟环境设置,以及安装 CUDA 和 cuDNN 时可能涉及的环境变量修改,服务器上多个用户的环境可能导致冲突。
    • 该问题在多用户服务器上尤其常见。

解决方案

在 Linux 命令行输入以下命令:

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 设置导致的问题。

结论

执行 unset LD_LIBRARY_PATH 之后,问题得到解决。

本次问题的解决过程可供遇到类似问题的开发者参考,特别是在远程服务器上运行 PyTorch 代码时出现 CUBLAS_STATUS_INVALID_VALUE 相关错误时,可以尝试该方法排查环境变量问题。