[CUDA10.1] Could not load dynamic library ‘libcublas.so.10’の解決法

[CUDA10.1] Could not load dynamic library ‘libcublas.so.10’の解決法

この記事では研究室のPCにCUDA10.1+CuDNN7.6を入れて,tensorflow2.3を動かそうとしたときに発生したエラーの解決方法について解説します.

1. 今すぐにでも解決したい方向け

  1. find /usr -name libcublas*」を実行
  2. 「libcublas.so.10」と「libcublasLt.so.10」のパスを覚えておく(仮にパスを/A/libcublas.so.10と/B/libcublasLt.so.10とする)
  3. sudo ln -s /A/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10」を実行
  4. sudo ln -s /A/libcublasLt.so.10 /usr/local/cuda-10.1/lib64/libcublasLt.so.10」を実行

2. 今回の現象の原因

CUDA10.1では, libcublas.so.10がCUDA10.1用のディレクトリである「/usr/local/cuda-10.1」内に正常に生成されません.この現象はNVIDIAのフォーラムにも投稿されています.

3. 解決方法

「/usr」ディレクトリ内のどこかに libcublas.so.10 が生成されているので,まずは以下のを使用して生成位置を探します.

find /usr -name libcublas*

私の環境での実行結果を以下に示しておきます.私の環境では, libcublas.so.10は「 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10 」にありました.(ちなみに,CUDA10.2はインストールしていません!?)

$ find /usr -name libcublas*

/usr/share/doc/libcublas-dev
/usr/share/doc/libcublas10
/usr/local/cuda-10.1/doc/man/man7/libcublas.so.7
/usr/local/cuda-10.1/doc/man/man7/libcublas.7
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublas.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10.2.3.254
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt_static.a
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10.2.3.254
/usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so

上記の出力の内,「libcublas.so.10」と「libcublasLt.so.10」が存在するパスを覚えておいてください.

次に,先ほどの結果で 分かった「libcublas.so.10」と「libcublasLt.so.10」のパスを使用して,以下のコマンドで「/usr/local/cuda-10.1」にシンボリックリンクを張ります.

sudo ln -s 「libcublas.so.10」のパス /usr/local/cuda-10.1/lib64/libcublas.so.10
sudo ln -s 「libcublasLt.so.10」のパス /usr/local/cuda-10.1/lib64/libcublasLt.so.10

私の環境では以下のようになります.

$ sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10
$ sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10 /usr/local/cuda-10.1/lib64/libcublasLt.so.10

また,別の解決法として, 「libcublas.so.10」と「libcublasLt.so.10」 が生成されていたディレクトリに直接LD_LIBRARY_PATHを通してもよいですね.

4. 解決しない場合

tensorflow2.3では,LD_LIBRARY_PATHに「/usr/local/cuda/lib64」や 「/usr/local/cuda-10.1/lib64」 を追加していない場合,上記の手法を実行してもエラーは解決しません.~/.bash_profileなどに「export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:${LD_LIBRARY_PATH}」を記載してください.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です