问题与排查
原报错信息如下:
OSError: /opt/conda/lib/python3.8/site-packages/nvidia/cublas/lib/libcublas.so.11: symbol cublasLtHSHMatmulAlgoInit, version libcublasLt.so.11 not defined in file libcublasLt.so.11 with link time reference
我之前的博客PaddleOCR报错也遇到过相似的问题,所以很明显就是一个找不到LD_LIBRARY_PATH
路径的问题。
在这次这个问题里面,找不到的文件是libcublasLt.so.11
,这个文件是被libcublas.so.11
引用的,后者所在的路径通过报错信息给出。于是我们来到这个路径下检查有没有我们需要的文件:
$ ls /opt/conda/lib/python3.8/site-packages/nvidia/cublas/lib/
libcublasLt.so.11 libcublas.so.11 libnvblas.so.11
至此问题的解决方案已经清晰,加一下LD_LIBRARY_PATH
路径即可。
解决
在启动终端后,运行程序前没,运行以下指令添加LD_LIBRARY_PATH
路径:
export LD_LIBRARY_PATH=/opt/conda/lib/python3.8/site-packages/nvidia/cublas/lib/:$LD_LIBRARY_PATH
讨论
类似这类问题的产生原因都是cudnn的环境变化,如重装cudnn相关工具包等。所以每次通过conda或pip重装过cudnn的包之后,要警惕上述这类问题的发生。针对本文所述的问题,值得警惕的一点是:由于系统本身装了cuda/cudnn,我们可能在自己的python环境又装了cudatoolkit/nvidia-cudnn,所以相同的一个.so库文件,可能在我们的机器上存了好几个版本;在添加LD_LIBRARY_PATH
路径的时候,我们一定要确定清楚具体要引用哪个路径。即使这几个版本是相同的,由于路径下其他库文件的不同,引用错误的路径可能会导致问题依然得不到解决。
关于通过conda或pip重装cudnn相关工具,可以参考我的这篇博客。