フローチャートで進む, NVIDIA GPU ドライバ, CUDA, cuDNN, tensorflow のインストール方法
公式リファレンスを参考しつつ, Ubuntu 上にNVIDIA GPU ドライバ, CUDA, cuDNNを入れて, tensorflow をGPUで動かす方法を, フローチャートで進めます.
はじめに
tensorflow で, NVIDIA GPU での計算を有効にするためには, 各種ドライバやライブラリが必要です[1]. その際に, tensorflowのバージョンにあった, ライブラリをインストール必要があります[2].
すでに, インターネット上では「Ubuntu にGPUドライバを入れ, tensorflowをGPUで動かす方法」に関する情報がたくさんあります[3][4][5][6][7]が, 載せられているコードが古いもの(tensorflowの更新頻度が高いのも一因)であったり, 覚書やメモのようであったり, 失敗して入れ直すときの手順がまとまっていなかったりと, 整理されていません.
本稿では, ライブラリの更新があっても, 公式のリファレンスをさかのぼって, 手順がわかるように, Ubuntu 上にNVIDIA GPU ドライバや各種ライブラリをインストールし, tensorflowでGPUを使用できる手順をフローチャートのように説明します. また, もし失敗したときの手順も説明します.
環境
筆者の環境は次のとおりです.
- Ubuntu
- Ubuntu 20.04.1 LTS 
- GPU
- NVIDIA GTX950M 
- Python環境
- pyenv + pipenv 
GPUドライバの確認
NVIDIA Driver を入れる前に, すでに入っているか確認します.
Terminal を開いて, 次のコマンドを入力します.
$ nvidia-smi
→ コマンドが見つからない
ドライバが入っていません.
次の項目ドライバのインストールを行います.
→ NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running."と表示される.
正しく入っていないので, 入れ直します.
GPUドライバ&CUDAのアンインストールを行います.
→ 表が出た
正しく認識しています.
次に, Tensorflowのバーション確認を行います.
GPUドライバ&CUDAのアンインストール
もう一度入れ直すために, 一度消します.
Terminal を開いて, 次のコマンドを入力します.
        $ sudo apt-get purge 'nvidia-*'
        $ sudo apt-get purge 'cuda-*'
apt-get remove と apt-get purge の違いapt-get --helpを実行してみると, 
- apt-get remove
- パッケージを削除する 
- apt-get purge
- 設定ファイルまで含めてパッケージを削除する 
必要なくなったパッケージを削除します.
$ sudo apt autoremove
- CUDAをインストールしている場合
- CUDAをインストールしたときの逆の手順で, ファイルを削除していきます. - CUDAダウンロードページ. NVIDIA. accessedd at 2020-08-19.
 - 例えば, もしあなたが, このようにインストールしたとすると(Installer Type: deb(local) を選択), - $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin $ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.3-450.51.06-1_amd64.deb $ sudo dpkg -i cuda-repo-ubuntu2004-11-0-local_11.0.3-450.51.06-1_amd64.deb $ sudo apt-key add /var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda1~2行目の- $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin $ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600に注目して,- /etc/apt/preferences.d/cuda-repository-pin-600を消しに行きます.- それ以降の処理は, 先の - apt-get purgeで消えているはずです[注 1].
一応, パッケージを update & upgrade しておきます.
        $ sudo apt update
        $ sudo apt upgrade
次に, GPUドライバのインストール を行います. GPUドライバのインストール
GPUドライバのインストール方法は, やりやすいものとして2つあります.
- Ubuntuの「ソフトウェアとアップデート」→「追加のドライバ」からインストール
- 「アクティビティ」から「ソフトウェアとアップデート」を検索します. - 「ソフトウェアとアップデート」のタブから「追加のドライバ」を選択します.  - 「ソフトウェアとアップデート」→「追加のドライバ」 - ドライバを選択して, インストールします. 
- aptでインストール
- aptリポジトリにNVIDIA GPU Driverリポジトリを追加する. - $ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt update- インストール推奨Driverを確認 - $ ubuntu-drivers devices - 推奨Driverをインストール - sudo apt install nvidia-driver-450 - 参考ページ
- "Nvidia GPU driverの再インストール方法". Qitta. accessed at 2020-08-19. 
 
→ パスワードの設定を求められた
セキュアブートが有効になっているときに, 表示されます. パスワードを設定し覚えておきます.
なぜ設定するのかも, そこに書いてあると思うので読んでおきましょう[注 2].
再起動します.
→ 青い画面(Perform MOK management)が出た.
セキュアブートが有効なときに表示されます.
おそらく, 選択されている「Continue boot」ではなく, その下にある, 「Enroll MOK」を選択し, 先で設定したパスワードを入力します.
- 参考ページ
- "Ubuntu に NVIDIA のドライバをインストール (Enroll MOK に注意)". Qitta. accessed at 2020-08-19. 
→ 正しいパスワードを入れているはずなのに, はじかれる
パスワードに記号が含まれていませんか? 例えば, アンダースコア_. 
日本語配列キーボードが英字配列と認識されているかもしれません. アンダースコア_のところを, shift + =(0のとなり)で入力してみてください. 
次に, GPUドライバの確認を行います.
Tensorflow のバージョン確認
後の手順で, CUDAのインストールを行いますが, tensorflowのバージョンにあった, CUDA及びcuDNNバージョンを選択する必要があります.
- "テスト済みのビルド構成". Tensorflow. accessed at 2020-08-19.
→ Tensorflow が入っていない.
インストールしてください.
- "TensorFlow 2 をインストールする". Tensorflow. accessed at 2020-08-19.
pipenvを使っている方は, このようになるでしょう(pipenvの詳しい説明は, 各自調べてください). 
$ pipenv install tensorflow
Tensorflowのバージョンを確認します. 各自のPythonパッケージ管理方法に合わせて確認してください. pipenvの場合, このようになるでしょう. 
$ pipenv graph
バージョン確認後, CUDAのインストールを行います.
CUDAのインストール
CUDAダウンロードページに従って, CUDAをインストールします.
- CUDAダウンロードページ. NVIDIA. accessedd at 2020-08-19.
CUDAのバージョンは, テスト済みのビルド構成 に従います.
- "テスト済みのビルド構成". Tensorflow. accessed at 2020-08-19.
インストール完了後, cudaのバージョンを確認します.
cat /usr/local/cuda/version.txt
→ インストールされたバージョンが, 入れようとしたものと異なる.
詳しい原因はわかりませんが,
一度, GPUドライバ&CUDAのアンインストールからもう一度フローチャートを進み, CUDAインストールの最後の手順にあると思われる(今後の更新で無いかもしれない)次のコマンド
sudo apt-get -y install cuda
の代わりに, 次のコマンドを試します. cuda-10-1のところは, 適宜変えてください(cuda-10-2等). 
sudo apt-get -y install cuda-10-1
- 参考ページ
- "Installing CUDA 10.1 on Ubuntu 20.04". Stephen Gregory. accessed at 2020-08-19. 
次に, cuDNNのインストールを行います.
cuDNNのインストール
cuDNNダウンロードページに行きます.
- "cuDNN Download". NVIDIA. accessedd at 2020-08-19.
→ ログインを求められた.
cuDNNのダウンロードには, NVIDIAアカウントが必要です. 登録して, ログインしましょう.
CUDA同様に, tensorflowのバージョンに合わせて, cuDNNのバージョンを選択します. (CUDAのバージョンに合わせて, cuDNNを選択してもいいと思います.)
下記の公式リファレンスに従って, cuDNNをダウンロード&インストールします.
- "Installing From A Debian File". NVIDIA. accessed at 2020-08-19.
\(^o^)/
次に, TensorflowがGPUを認識しているか確認します.
TensorflowがGPUを認識しているか確認
各自, パッケージ管理方法に合わせてpythonインタプリタを起動します.
$ python
次の二行を入力します.
        >>> from tensorflow.python.client import device_lib
        >>> device_lib.list_local_devices()
出力されたメッセージ内に, device_type:GPU があると, 認識しています! 
お疲れ様でした.
→ 無い…
- nvidia driver を認識していますか?→ GPUドライバの確認 を行う. 
- tensorflowのバージョンとCUDA, cuDNNのバージョンが合っていますか?→ Tensorflow のバージョン確認 を行う. 
注釈
参考文献
- ^ "GPU support". TensorFlow. accessed at 2020-08-19.
- ^ "Build from source". TensorFlow. accessed at 2020-08-19.
- ^ "GPU付きのTensorflowをUbuntu18.04に入れる". Qitta. accessed at 2020-08-19.
- ^ "ubuntu18.04でTensorFlow-gpuを動かす". Qitta. accessed at 2020-08-19.
- ^ "Ubuntu18.04にCUDA・cuDNN・tensorflow-gpuをインストールする". Qitta. accessed at 2020-08-19.
- ^ "Ubuntu18.04にNVIDIAとCUDAを入れ直すことに". Qitta. accessed at 2020-08-19.
- ^ "Ubuntu 18.04 でCUDA, Cudnn, Tensorflow GPU のインストール". CodeLab. accessed at 2020-08-19.