はじめに
TensorFlowをGPUで使うためにUbuntu18で環境を構築しました。
環境
GPU版のTensorFlow対応表ではTensorFlow2.11.0に対してCUDA11.2とcuDNN8.1となっていますが、最新版でも動作しました。
Ubuntu 18.04.3 LTS Tesla P40 - NVIDIA Driver Version: 520.61.05 TensorFlow - tensorflow-gpu 2.11.0 CUDA 11.8.0-1 cuDNN 8.7.0.84-1+cuda10.2
NVIDIAドライバのインストール
対応するドライバを確認します。
ubuntu-drivers devices
recommendedのドライバをインストールします。
必要ならば再起動します。
sudo apt install --no-install-recommends nvidia-driver-520
GPUが認識できているか確認します。
以下のコマンドは、5秒ごとにリアルタイム監視します。
nvidia-smi -l 5
表示されているCUDAのバージョンは、NVIDIA Driverが対応するCUDAの最大バージョンです。
計算途中のScreenshotなので使用率が63%となっています。
NVIDIA DriverとCUDAの対応
以下でバージョンの対応を調べます。
今回はNVIDIA Driverの最新バージョンを使うので、CUDAも最新バージョンを使います。
CUDAなどのインストール
以下のURLには、様々なOSが掲載されているのでURLの参照先を変更すればUbuntu、Dbian、fedoraなどの各バージョンに対応できます。
下記のURLを見て、日付の新しいrepoファイルをダウンロードします。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
ダウンロードしたrepoファイルをインストールしてkeyを登録します。
sudo dpkg -i cuda-repo-ubuntu1804_10.2.89-1_amd64.deb sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
今回は「cuda-11-8」でも上手くいきました。
おそらくcuda-11-8に含まれるNVIDIAのドライバー(cuda-drivers-520)が、上でインストールした「nvidia-driver-520」と同じバージョン(520.61.05)だったからと思われます。
本来はcuda-11-8でなく、cuda-toolkit-11-8をインストールするべきだと思います。
sudo apt install --no-install-recommends cuda-11-8 以下の方が良いと思われます。 sudo apt install --no-install-recommends cuda-toolkit-11-8
cuDNNをインストールします。
sudo apt install --no-install-recommends libcudnn8 libcudnn8-dev
TensorRTをインストールします。
sudo apt install --no-install-recommends libnvinfer8 libnvinfer-dev sudo apt install --no-install-recommends libnvinfer-plugin8 libnvinfer-plugin-dev
環境変数の設定
vi .bashrc
以下の内容を記載します。
export PATH="/usr/local/cuda-11.8/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
反映させます。
. .bashrc または source .bashrc
追加の作業
ここまでの作業を行ってからGPUを確認するスクリプトを動かすとエラーになります。
2022-10-09 21:42:23.724135: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu 2022-10-09 21:42:23.724151: I tensorflow/compiler/xla/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine. 2022-10-09 21:42:24.380296: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu 2022-10-09 21:42:24.380357: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu 2022-10-09 21:42:24.380366: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
libnvinfer8をインストールしましたが、実際にはlibnvinfer7を参照するようなのでシンボリックリンクを作成します。
はじめにlibnvinfer8とlibnvinfer-plugin8に含まれるファイルがインストールされたディレクトリを探します。
dpkg -L libnvinfer8 dpkg -L libnvinfer-plugin8
libnvinferのシンボリックリンクを作成します。
cd /usr/lib/x86_64-linux-gnu sudo ln -s libnvinfer.so.8.5.1 libnvinfer.so.7 sudo ln -s libnvinfer_plugin.so.8.5.1 libnvinfer_plugin.so.7
libcublasLtとlibcublasのファイルもバージョン違いを参照するようなので、findで探してシンボリックリンクを作成します。
sudo find /usr/* -name libcublasLt* sudo find /usr/* -name libcublas* cd /usr/local/cuda-11.8/targets/x86_64-linux/lib/ sudo ln -s libcublasLt.so.11.11.3.6 libcublasLt.so.10 sudo ln -s libcublas.so.11.11.3.6 libcublas.so.10
CUDAのバージョン
インストールしたCUDAのバージョンをnvccで確認します。
nvcc -V
CUDA11.8がインストールされていることが確認できます。
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:33:58_PDT_2022 Cuda compilation tools, release 11.8, V11.8.89 Build cuda_11.8.r11.8/compiler.31833905_0
TensorFlowのインストール
pipenvなどで仮想環境を作成してからインストールした方が良いと思います。
pip install tensorflow-gpu
GPUの確認
pythonを起動します。
python
GPUを認識できているかを確認します。
from tensorflow.python.client import device_lib device_lib.list_local_devices()
または以下の方法でも良いです。
import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
Comments