はじめに
今回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
set number
inoremap<silent> jj <ESC>
(1) Nouveauの無効化
まずは、Nouveauの無効化をします。
Nvidiaのグラフィックカードの時だと、Nouveauというドライバがデフォで設定されているのでNouveauをブラックリストに登録します。
ブラックリストの作成
$ sudo vim /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
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を通す
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設定はめんどくさいですね、、、。
今後やる人の参考になればと思います。