深層学習モデルをGPUで動かしたい!!!
ただ自分が無知でめちゃくちゃに時間がかかったので、そんな人がもう現れないために。
#前提
OS:CentOS Linux release 7.9.2009
GPU:TU106 [GeForce RTX 2060 SUPER]
Tensorflow:2.2.0
#バージョン確認
結局これが一番大事、、
TensorflowとCUDA,cuDNNのバージョン確認
→ https://www.tensorflow.org/install/source#tested_build_configurations
以下のURLにもいろいろと。
→ https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
#環境構築手順
###①NVIDIAドライバーをインストールする
まず、デフォルトのnouveau ドライバーを無効化するらしいです。
ただ、私は最初から何もなかったので飛ばしました。
$ lsmod | grep nouveau
$ vi /etc/modprobe.d/blacklist-nouveau.conf
# 最終行に追記 (ファイルがない場合は新規作成)
$ blacklist nouveau
$ options nouveau modeset=0
$ dracut --force
$ reboot
必要なパッケージをインストール。
$ yum -y install kernel-devel-$(uname -r) kernel-header-$(uname -r) gcc make
NVIDIAサイトより、コンピューターに搭載されているグラフィックカード用のドライバーをダウンロード。
→ https://www.nvidia.com/Download/index.aspx?lang=en
調べる際、OSとGPUがなんなのかは以下のコマンドでわかります。
#OS
$ grep -H "" /etc/*version ; grep -H "" /etc/*release
#GPU
$ lspci | grep -i nvidia
そしてインストール。
$ bash (ダウンロードしたドライバー)
いろいろ聞かれますが、上手いこといけたらcompleateって言われます。
グラフィックカードの状態は、以下で確認できます。
$ nvidia-smi
###②CUDAのインストール
CUDA (Compute Unified Device Architecture)
NVIDIA 社製グラフィックカードによる GPU コンピューティング GPGPU(General-Purpose computing on Graphics Processing Units) プラットフォーム
以下のURLから適切なリポジトリをダウンロードします。
→ https://developer.nvidia.com/cuda-downloads
Installer Typeはrpm(network)を選択しました。
コマンドを出してくれます。(ありがたい)
$ sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers
そしてインストール。
$ yum --enablerepo=epel -y install cuda-10-2
パスを通します。
$ vi /etc/profile.d/cuda102.sh
# 新規作成
export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ source /etc/profile.d/cuda102.sh
念の為、~/.bashrcにも通してたら良いかも。
確認!!
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
操作確認できるらしいですけど、めんどくさいので省略しました。
###③cuDNNのインストール
cuDNN は深層ニューラル ネットワークに対するプリミティブの GPU で高速化されたライブラリです。
インストールするのに会員登録的なのが必要です。
無料だしすぐ終わるので、パッと。
→ https://developer.nvidia.com/cudnn
必ずCUDAと対応したバージョンをダウンロード!!!!!
ダウンロードしたcuDNNを解凍したい場所にうつして、解凍したあとにいろいろとコピー。
$ tar zxvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
$ cp ./cuda/include/cudnn.h /usr/local/cuda-10.2/include/
$ cp -a ./cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64/
②で作ったファイルにパスを通します。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/extras/CUPTI/lib64
$source /etc/profile.d/cuda102.sh
これで確認。
$ ldconfig -p | grep cudnn
libcudnn.so.7 (libc6,x86-64) => /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.7
libcudnn.so (libc6,x86-64) => /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so
さて、、tensorflowが動くか確認しよう。
$ python
>>> import tensorflow as tf
>>> tf.test.is_gpu_available()
...#いろいろと出てます。
False
False!!!!失敗やんけ、、、
エラー文を見てみると、こんな文が。
Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
あ、CUDA-10.1もいるのか。ということで、10.2 と同様にインストール。
ただしバージョンは10.2のままにしておきました。
そしてまたtensorflowが動くか確認すると、
$ python
>>> import tensorflow as tf
>>> tf.test.is_gpu_available()
...#いろいろと出てます。
True
うまくいきました。
###他に出たエラー
CNNを動かしたくて、GPU入れたのに以下のエラーが出ました。
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
なんなの、、意味がわからないけど、調べたら解法ありました。
→ https://qiita.com/ysuzuki19/items/b727bbcb45f1cad37630
#参考
https://www.server-world.info/query?os=CentOS_7&p=tensorflow&f=2