Geforce RTX2080 SUPER を搭載したUbuntu18.04のPCでCUDA・Nvida-Driver・cuDNNの環境を整える


必要なものはこちら

CUDA Version: 10.0
Nvidia Driver Version: 430.50
cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0

CUDA → Nvidia Driver → cuDNN
の順でやる必要があるようです。

前準備

ホームディレクトリで.bash_aliaseを開いて(無かったら作る)以下を記入する。

# .bash_aliase
export PATH=/usr/local/cuda/bin:$PATH
export CPATH=/usr/local/cuda/include:$CPATH
export LIBRARY_PATH=/usr/local/cuda/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

以下のコマンドで読み込ませる。

source ~/.bash_aliase

CUDA

# はじめにダウンロードしたパッケージをインストールする
sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
# リポジトリにcudaを追加して、リストを更新、インストールする。
sudo apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-toolkit-10-0

終わったら再起動する。

Nvidia Driver

sudo apt-get install nvidia-driver-430

終わったら再起動する。

cuDNN

sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb
echo -e "\n## CUDA and cuDNN paths"  >> ~/.bashrc
echo 'export PATH=/usr/local/cuda-10.0/bin:${PATH}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH}' >> ~/.bashrc

なぜか

sudo apt install nvidia-driver-430

と打ったら440が入った。

http://people.cs.uchicago.edu/~kauffman/nvidia/cudnn/

でcuda v10.2に対応したcuDNN

確認用

cat /proc/driver/nvidia/version
modinfo nvidia

nvidia-smiが動かない場合

もしnvidia-smiを実行して以下のような表示が出た場合,Ubuntuにデフォルトで搭載されているグラフィックドライバNouveauと競合している可能性がある.

$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf
blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

次に以下のコマンドを実行し,カーネルモジュールを再読込する.

$ sudo update-initramfs -u

PCを再起動し,nvidia-smiが実行できればCUDAのインストールに進む.

学習のデータが多かったりbatch_sizeが大きいと実行すると止まってしまうが、これはデフォルトの設定だと最初に学習に必要なGPUメモリをすべて確保しようとするため、すべてのGPUメモリを食いつぶしてエラーとなってしまうためである。
なので最初にメモリを確保せずに、学習毎に取得できる分だけのGPUメモリを確保するように変更する。

import tensorflow as tf
from keras import backend as K

import tensorflow as tf
from keras.backend import tensorflow_backend
config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
session = tf.Session(config=config)
tensorflow_backend.set_session(session)

参考
https://yurufuwadiary.com/tensorflow-rtx2080super-installation