Ubuntu 18.04.5 LTSでNVIDIA-driver(GeForce RTX 2070 SUPER), cuda 10.0, cudnn 7.4.2の設定(tensorflow-gpu:2.0.0版)


はじめに

今回tensorflowでGPUを使えるようにセットアップしたのでメモとして残しておきます。まあまあ手こずりました。。。困っている方の参考になれば幸いです。

環境

  • ubuntu : 18.04.5 LTS
  • Graphics: GeForce RTX 2070 SUPER
  • nvidia-driver: 455.45.01
  • cuda: 10.0
  • cudnn: 7.4.2
  • tensorflow-gpu : 2.0.0

手順

最初は、ドライバのインストールをしてcuda, cudnnのインストールを進めていく方向でした。nvidiaのドライバをインストールしてからcuda(10.0 or 10.1)をインストールするとドライバが認識しなくなる問題に当たりました。今回cudaを10.0か10.1にした理由は、tensorflowでgpuを動かしたく、ビルド確認済みの最新が10.0か10.1あたりだったからです。

ですので、cudaをインストールしてnvidia-driverをインストールする順番です。しかし、またここで上手くいかず、、、。この順番でnvidia-driverをインストールしてから再起動するとマウスとキーボードが使えなくて。。

結局私が行ったことは、
➀ nvidia-driverインストール
➁ 一旦nvidia-driverを消す
➂ cudaのインストール
➃ nvidia-driverを再度インストール
➄ cudnnのインストール

となります。絶対簡単な方法がありそうですが今回はこれでとりあえずできました。

1. NVIDIA-driverをインストールする前に

vimのインストール(個人的にvimを使いたいので)

$ sudo apt upgrade
$ sudo apt update
$ sudo apt install vim

vimでjjを使いたいので、~/.vimrcの編集をします。

$ vim ~/.vimrc
~/.vimrc
set number
inoremap<silent> jj <ESC>

(1) Nouveauの無効化

まずは、Nouveauの無効化をします。
Nvidiaのグラフィックカードの時だと、Nouveauというドライバがデフォで設定されているのでNouveauをブラックリストに登録します。

ブラックリストの作成

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

以下のコマンドを実行し、nouveauが無効化になっていることを確認

ディスプレイの解像度が落ちていればOK

$ sudo update-initramfs -u
$ sudo reboot 

(2)カーネルの固定

nvidiaのドライバーをカーネルのバージョンを固定しないでいると、アップグレードとかしたときにドライバとの依存関係が崩れることがあるようです。なので、カーネルの固定をします。

aptitudeのインストール

$ sudo apt install aptitude

カーネルバージョンの確認

$ aptitude show linux-generic

上記で確認した内容を以下のファイルに書き込む(versionのところだけ書き換え)

$ cd /etc/apt/preferences.d
$ sudo vim linux-kernel.pref
linux-kernel.pref
Package: linux-generic
Pin: version 4.15.0.128.115
Pin-Priority: 1001

Package: linux-headers-generic
Pin: version 4.15.0.128.115
Pin-Priority: 1001

Package: linux-image-generic
Pin: version 4.15.0.128.115
Pin-Priority: 1001

カーネルの固定は以上です。

2. NDIVIAドライバのインストール

nouveauが無効化されているか確認

$ lsmod | grep -i nouveau

gccやmakeなど開発に必要なツールをまとめてインストール

$ sudo apt install build-essential

リポジトリの追加

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

インストール可能なデバイスが表示

$ ubuntu-drivers devices

インストールしたいドライバを選択し、インストール

$ sudo apt install nvidia-driver-455
$ sudo reboot

ドライバがインストールされたか確認

$ nvidia-smi

3. NVIDIAドライバの削除

インストールされているnvidiaドライバの確認。(全て消します)

$ dpkg -l | grep nvidia-*

削除

$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove libnvidia-*
$ sudo apt-get --purge remove libnvidia-compute-455:i386 
$ sudo apt-get --purge remove  libnvidia-fbc1-455:i386

以下のコマンドで何も表示されなければokayです

$ dpkg -l | grep nvidia

4. CUDAのインストール

こちらからCUDAをインストールしてください。tensorflowの場合はversionが厳しいのでしっかりと対応表で確認してください。

$ sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

~/.bashrcにPATHを通す

~/.bashrc

export PATH="/usr/local/cuda-10.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH"
$ source ~/.bashrc

*CUDAをインストールした際にNVIDIAドライバがインストールされてしまうので削除します。(この場合だと410がインストールされていました)

$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove libnvidia-*
$ sudo apt-get --purge remove libnvidia-compute--410:i386
$ sudo apt-get --purge remove libnvidia-fbc1-410:i386 

以下のコマンドで何も表示されなければ大丈夫です

$ dpkg -l | grep nvidia*

5.NVIDIAドライバのインストール

やっとここでnvidiaのドライバをインストールします

$ sudo apt install nvidia-driver-455
$ sudo reboot

ドライバとCUDAの確認

$ nvidia-smi
$ nvcc -V

nvidia-smiでCUDAのところが11.1のように表示されますが、nvcc -Vで表示されるバージョンが実際のバージョンなんで気をつけてください。(とてもややこしくてここでもつまずきました、、、)

6. cudnnのインストール

cudnnのインストールには、登録が必要です。
CUDAのバージョンに適したcudnnをダウンロードしてください。
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
$ tar xvf cudnn-10.0-linux-x64-v7.4.2.24.tgz
$ sudo cp -a cuda/include/cudnn.h /usr/local/cuda/include/
$ sudo cp -a cuda/lib64/libcudnn* /usr/local/cuda/lib64/
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
$ sudo reboot

確認

$ cp -r /usr/src/cudnn_samples_v7/ $HOME
$ cd $HOME/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

Test passed!と表示されればOK

Tensorflowのインストール

pipでインストールできます

$ pip install tensorflow-gpu==2.0.0

GPUが使用可能か確認

このコマンドでは、認識しているCPU,GPUが表示されます

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

以下のコマンドで、TRUEが表示されればokayです

import tensorflow as tf
tf.test.is_gpu_available()

DockerによるGPU設定

Dockerを用いてGPUを設定する方法があるようです。まだ試したことはありませんが、、こっちの方が楽にできそう。

終わりに

やっぱりtensorflowのGPU設定はめんどくさいですね、、、。
今後やる人の参考になればと思います。