写在最前面
在多用户使用的服务器上,导致的环境变量的冲突和不匹配问题,
代码没有问题,但程序运行异常。
特别感谢这两位大神,找到了是环境变量的问题
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 远程连接时会报错。
可能的原因分析
-
CUBLAS 问题
- 部分解决方案建议卸载虚拟环境中的 CUBLAS 相关包后重新安装,但在
conda list
中未找到相关包,因此此方法未生效。
- 部分解决方案建议卸载虚拟环境中的 CUBLAS 相关包后重新安装,但在
-
环境变量问题
- 由于不同的虚拟环境设置,以及安装 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
相关错误时,可以尝试该方法排查环境变量问题。