cuda11.2とtensorflow2.4の相性の悪さにハマる (windowsでもハマった)
tensorflow 公式は、RTX3090に対応したcudaを落とせないので、適宜読み替える必要があるが、細かいverの違いにはまったので。tensorflow.device_lib.list_local_devices()
で認識できるまでにしたことをメモ。
そもそも、カスタムビルドで納品された環境がpython3.6系列だったので、クリーンインストールしなければいけなかったのが問題(その時の話は別記事で)。
実際にやったこと
- apt でインストールできるライブラリ周り
# nvidia driverの追加
sudo apt install nvidia-driver-470
# repo 追加
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update
# もろもろのインストール
sudo apt install cuda-toolkit-11-2
sudo apt install libcudnn8=8.1.1.33-1+cuda11.2
sudo apt install libcudnn8-dev=8.1.1.33-1+cuda11.2
sudo apt install libnvinfer8
sudo apt install libnvinfer-dev
sudo apt install libnvinfer-plugin8
# pathの追加
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
※注意: apt内にnvidia-cuda-toolkit
というライブラリがあり、思わずとびつくとver 9.1のcudaが入ってしまうので注意
※NOTE: 今回driversを470にしたことで、cuda11.4にすることもできるが、昨年設定した別端末との環境を揃える必要があったため、cudaは11.2をあえて指定しています。libnvinfer8はこの時点では、ver11.0-11.4に対応しているということで、特にバージョン指定はしていません。参考:libnvinfer8=8.2.3-1+cuda11.4
案の定認識されない libcudart.so.11.0
これは、windowsのときにも直面したが、やはりはっせいする。とりあえず、シンプルにシンボリックリンクを作成することで対応。
windowsのときは、ファイル名変えろというのを真面目に信じて実行して結局ドツボにはまった。
sudo ln -s /usr/local/cuda-11.2/lib64/libcusolver.so.11 /usr/local/cuda-11.2/lib64/libcusolver.so.10
※インストールパスを変更している場合は適宜よみかえてください。
以上でとりあえず認識はします。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
の実行結果一部
name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 22721529088
locality {
bus_id: 1
links {
}
}
incarnation: 12540486796505853533
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:65:00.0, compute capability: 8.6"
その他
bashなどの読み込み設定は、適宜調整してください。