ディープラーニングを始めようと思ったら、処理時間の短縮のためにGPUの使用を考えるべきです。
GPUを使うためには、GPU(NVIDIA)付きのPCを手に入れて環境を構築する必要があります。
ここでは、フレームワークとしてTensorFlow、Kerasを使う予定で構築していきます。
システム環境
OS
:Ubuntu Desktop 18.04.4
GPU
:GeForce GTX 1660Ti
NVIDIAドライバーのインストール
セキュアブートの無効化
LinuxカーネルではUEFI(BIOS)でセキュアブートが有効になっていると、NVIDIAのドライバーをロードすることができません。
なので無効化します。
起動中のロゴ画面でF2ボタンを押し続けると、以下のようなUEFI画面になります。
ここでセキュアブートを無効化します。
nouveauの無効化
nouveauと呼ばれるフリーのドライバーがデフォルトでロードされているのですが、これがロードされているとNVIDIAのドライバーと競合する可能性があります。
なので無効化します。
nouveauがロードされているかは以下のコマンドで確認できます。
何かしら出力されていればロードされています。
$ lsmod | grep -i nouveau
以下のコマンドを入力し、/etc/modprobe.d/blacklist-nouveau.confを作成します。
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
このファイルには次のように書き込んで保存します。
blacklist nouveau
options nouveau modeset=0
以下のコマンドでカーネルモジュールを再読み込みし、再起動します。
$ sudo update-initramfs -u
再起動後、再び以下のコマンドを入力し、nouveauがロードされているか確認します。
何も出力されなければ、nouveauの無効化は完了です。
$ lsmod | grep -i nouveau
リポジトリの追加
通常のリポジトリには最新のドライバーが含まれていないので、以下のコマンドでリポジトリを追加します。
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
インストール
まず、以下のコマンドでNVIDIAドライバーのバージョンを確認します。
僕の環境では「nvidia-driver-440」でした。
$ ubuntu-drivers devices
以下のコマンドでNVIDIAのドライバーをインストールします。
$ sudo apt install nvidia-driver-440
インストールが完了したら再起動して、さらに以下のコマンドを入力します。
$ nvidia-smi
各種バージョン確認
TensorFlowは、CUDA、cuDNNのバージョンに依存しますので、事前にインストールするバージョンを確認しておきます。
まず以下のサイトからインストールするCUDA、cuDNNのバージョンを確認します。
「テスト済みのビルド構成」のセクションを確認します。
https://www.tensorflow.org/install/source
今回はTensorFlow2.1.0をインストールしていきたいと考えていますので、対応するバージョンはCUDA10.1、cuDNN7.6ということがわかります。
次に以下のサイトからNVIDIAドライバーとCUDAのバージョンに問題ないかどうか確認します。
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
僕の環境ではNVIDIAドライバーはバージョン440なので、問題ないことが確認できました。
CUDAのインストール
以下のサイトからバージョン10.1の中で一番新しいものを選び、端末にダウンロードします。
ここではcuda-repo-ubuntu1804_10.1.243-1_amd64.debを選びました。
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/
以下のコマンドを入力し、インストールを行います。
$ sudo dpkg -i cuda-repo-ubuntu1840_10.1.243-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/
$ ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt update
$ sudo apt install cuda-toolkit-10-1
インストール後、環境設定を行います。
$ sudo vim ~/.bashrc
export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
再起動後、以下のコマンドを入力してバージョン等が表示されれば、CUDAのインストールに成功しています。
$ nvcc -V
cuDNNのインストール
以下のサイトからdebファイルをダウンロードします。
種類は 以下の3つです。
- cuDNN Runtime Library for Ubuntu 18.04 (Deb)
- cuDNN Developer Library for Ubuntu 18.04 (Deb)
- cuDNN Code Samples and User Guide for Ubuntu 18.04 (Deb)
なお事前に無料のアカウント登録が必要です。
https://developer.nvidia.com/rdp/cudnn-download
以下のコマンドでインストールを行います。
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.1_amd64.deb
以下のコマンドでインストールテストを行い、「Test passed!」と表示されることを確認します。
$ cp -r /usr/src/cudnn_samples_v7/ $HOME
$ cd $HOME/cudnn_samples_v7/mnistCUDNNN
$ make clean && make
$ ./mnistCUDNAA
TensorFlowのインストール
TensorFlowをインストールしていきます。
なおPythonのバージョンは3.6.9です。
python3-dev、python3-pip、python3-venvをインストールします。
python3-dev、python3-pipは以下のサイトに指定があったので、インストールします。
https://www.tensorflow.org/install/pip?hl=ja
python3-venvは仮想環境の構築のために、インストールします。
$ sudo apt install python3-venv python3-pip python3-venv
仮想環境を有効化します。
$ python3 -m venv venv36dl
$ . venv36dl/bin/activate
pipをアップグレードしておきます。
$ pip install --upgrade pip
バージョンを指定し、インストールします。
$ pip install tensorflow==2.1.0
以下のコマンドでインストールテストを行います。
$ python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
またTensorFlowがGPUを認識しているかをPythonインタプリタで確認します。
GPUの表記があれば認識しています。
$ python
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
補足
TensorFlowについてですが、バージョン1.1.5以前は、tensorflow(CPU用)とtensorflow-gpu(GPU用)に分かれていましたが、バージョン1.1.5より新しいものはtensorflowパッケージでGPUサポートも含まれています。
https://www.tensorflow.org/install/gpu?hl=ja
KerasはTensorFlowとは独立したパッケージとTensorFlowに統合されたパッケージの2種類あります。
ですが、最近開発者がTwitter上で「Keras=tf.keras」で発言していることもあり、今後はTensorFlowに統合されたパッケージが主流になっていくだろうとのことです。
https://www.atmarkit.co.jp/ait/articles/2005/13/news017.html
僕もTensorFlowに統合されたパッケージを使っていく予定です。
参考サイト
- https://qiita.com/konzo_/items/3e2d1d7480f7ef632603
- https://thr3a.hatenablog.com/entry/20180113/1515820265
参考文献
TensorFlowではじめるDeepLearning実装入門
PythonとKerasによるディープラーニング