解决TensorFlow出现的Could not load dynamic library ‘libcurand.so.10‘等类似的问题

!!!这个问题的本质还是在环境路径中没有libcurand.so.10,但可能其他路径中有,因此需要做的就是:(1) 要么更改环境路径,也就是接下来说的方法;(2) 要么将其他路径中的该文件复制到环境路径中去。

  • 第一步:找到libcudart.so.11.0
sudo find / -name 'libcudart.so.11.0'

我得到的输出如下:

/opt/conda/envs/leesg_gpu/lib/libcudart.so.11.0
/opt/conda/envs/leesg_gpu/lib/python3.8/site-packages/nvidia/cuda_runtime/lib/libcudart.so.11.0
/opt/conda/pkgs/cudatoolkit-11.3.1-h2bc3f7f_2/lib/libcudart.so.11.0
/opt/conda/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/libcudart.so.11.0

这里面随便选一个差不多,反正可以多试试,总有一个可以的。但是要注意,我们指定到达libcudart.so.11.0前的目录,即:/opt/conda/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/(可以参照补充里面的,先去下载tensorrt,然后将目录指定为tensorrt所在的目录)。

  • 第二步:将第一步中找到的路径放到环境文件中:
    先编辑/etc/profile
sudo vim /etc/profile

接着在/etc/profile文件中加入:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/conda/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/

退出并保存。

  • 第三步:运行source /etc/profile使设置后的环境文件生效,问题解决。
  • 补充,有时候还会出现Could not load dynamic library 'libcudnn.so.8'等问题,这是类似的,但是我们可以换一个思路去解决,实测有效:
# 查找libcudnn.so.8所在位置
sudo find / -name 'libcudnn.so.8'

输出:
/opt/conda/envs/leesg_gpu/lib/python3.8/site-packages/nvidia/cudnn/lib/libcudnn.so.8
/opt/conda/pkgs/cudnn-8.2.1-cuda11.3_0/lib/libcudnn.so.8

# 将任意一个`libcudnn.so.8`复制到环境路径LD_LIBRARY_PATH中去
cp /opt/conda/pkgs/cudnn-8.2.1-cuda11.3_0/lib/libcudnn.so.8 /opt/conda/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/

# 可以去环境路径中检查是否移过去了
cd /opt/conda/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/

输出:
cudatoolkit_config.yaml   libcuinj64.so.11.8          libnppicc.so.11          libnppitc.so.11.8.0.86
libaccinj64.so            libcuinj64.so.11.8.87       libnppicc.so.11.8.0.86   libnpps.so
libaccinj64.so.11.8       libcurand.so                libnppidei.so            libnpps.so.11
libaccinj64.so.11.8.87    libcurand.so.10             libnppidei.so.11         libnpps.so.11.8.0.86
libcublas.so              libcurand.so.10.3.0.86      libnppidei.so.11.8.0.86  libnvToolsExt.so
libcublas.so.11           libcusolver.so              libnppif.so              libnvToolsExt.so.1
libcublas.so.11.11.3.6    libcusolver.so.11           libnppif.so.11           libnvToolsExt.so.1.0.0
libcublasLt.so            libcusolver.so.11.4.1.48    libnppif.so.11.8.0.86    libnvblas.so
libcublasLt.so.11         libcusolverMg.so            libnppig.so              libnvblas.so.11
libcublasLt.so.11.11.3.6  libcusolverMg.so.11         libnppig.so.11           libnvblas.so.11.11.3.6
libcudadevrt.a            libcusolverMg.so.11.4.1.48  libnppig.so.11.8.0.86    libnvjpeg.so
libcudart.so              libcusparse.so              libnppim.so              libnvjpeg.so.11
libcudart.so.11.0         libcusparse.so.11           libnppim.so.11           libnvjpeg.so.11.9.0.86
libcudart.so.11.8.89      libcusparse.so.11.7.5.86    libnppim.so.11.8.0.86    libnvrtc-builtins.so
libcudnn.so.8             libdevice.10.bc             libnppist.so             libnvrtc-builtins.so.11.8
libcufft.so               libnppc.so                  libnppist.so.11          libnvrtc-builtins.so.11.8.89
libcufft.so.10            libnppc.so.11               libnppist.so.11.8.0.86   libnvrtc.so
libcufft.so.10.9.0.58     libnppc.so.11.8.0.86        libnppisu.so             libnvrtc.so.11.2
libcufftw.so              libnppial.so                libnppisu.so.11          libnvrtc.so.11.8.89
libcufftw.so.10           libnppial.so.11             libnppisu.so.11.8.0.86   libnvvm.so
libcufftw.so.10.9.0.58    libnppial.so.11.8.0.86      libnppitc.so             libnvvm.so.4
libcuinj64.so             libnppicc.so                libnppitc.so.11          libnvvm.so.4.0.0

测试用到的代码

import tensorflow as tf
tf.config.list_physical_devices('GPU')

# 或者:
python -c "import tensorflow as tf;print(tf.config.list_physical_devices('GPU'))"
python -c "import torch;print(torch.cuda.is_available())"

输出为True说明已经可以识别GPU咯。

补充

Could not load dynamic library 'libnvinfer.so.7'以及Could not load dynamic library 'libnvinfer_plugin.so.7'的解决方案:建立一个symbolic link from libnvinfer version 7 to 8:

cd /opt/conda/envs/leesg/lib/python3.8/site-packages/tensorrt/

# create symbolic links
ln -s libnvinfer_plugin.so.8 libnvinfer_plugin.so.7
ln -s libnvinfer.so.8 libnvinfer.so.7

# add tensorrt to library path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/conda/envs/leesg/lib/python3.8/site-packages/tensorrt/

你可能感兴趣的:(tensorflow,人工智能,python,libcurand.so.11)