#はじめに
本投稿ではubuntu18.04環境でNVIDIAのGPUドライバ、CUDA10.1、cuDNN7.6.5、tensorflow2.3.0をインストールします。
環境は以下の通りです。
GPU : GTX1060
OS : Ubuntu18.04
Python : 3.6.9
以下の参考手順は一例でありますの参考程度かつ自己責任でお願いいたします。
またエンジニアではありませんので一部読みにくい表記などがございますが、ご容赦ください。
#機械学習のフレームワークについて
これまではtensorflow1.xx + kerasで学習を行っていましたが、tensorflow2についても興味があり、将来的なことも考えてtensorflow2に移行することにしました。
なお余談ですが使用中のGPUは将来的にはAmpere世代に交換予定です。Ampere世代ではCUDA11、cuDNN8が要求され、2020年11月時点ではtensorflow-nightly(2.4.0rc)で動作が確認されているとのことですが、正式版ではサポートはされていないようです。
#TensorflowのバージョンとCUDA, cuDNNの依存関係
GPUを利用して学習を高速化する場合には、tensorflow、CUDA、cuDNNのバージョンに気を付けなければなりません。Tensorflowの公式サイトを参照します。下図のようにtensorflow2.3.0をインストールする場合、cuDNNは7.6、CUDAは10.1である必要があります。とくにCUDAは10.1以上ではなく、10.1である必要があることに注意します。
#NVIDIAのドライバインストール
###参考文献
この項目は以下を参考にさせていただきました。
・UbuntuにNVIDIA driverをインストール/再インストールする方法
・NVIDIAのドライバ、CUDAがインストールされている場合には下記のコマンドで削除します。
sudo apt --purge remove nvidia-*
sudo apt --purge remove cuda-*
・NVIDIAのGPUドライバは下記コマンドでaptを使ってインストールできます。
なお私の環境ではnouveauというubuntuデフォルトのドライバを無効化せずにインストール成功しました。
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
ubuntu-drivers devices
ここでコンソール上にインストール可能なバージョンのリストが出てきます。
2020年11月時点の私の環境ではnvidia-driver-455がrecommendでした。
sudo apt install nvidia-driver-<version>
(注:<version>
の部分はコンソール上に表示されるバージョンを入力)
###ドライバのインストールを確認
nvidia-smi
と入力し下記のように指定したバージョンが表示されれば成功。
#CUDA10.1のインストール
NVIDIAのサイトよりCUDAのdebファイルをダウンロードします。
ダウンロードしたディレクトリに移動後下記のコマンドでインストールします。
最後のコマンドがポイントです!(理由は後述)
sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.105-418.39_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-toolkit-<version>
NVIDIA公式サイトでは sudo apt-get install cuda
と記載されていますが、これをしてしまうとGPUドライバのバージョンが変わってしまいまい、意図しない環境になることがあります。
###CUDAのPATHを通す
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
###CUDAのインストールを確認
コンソール上で nvcc -V
と入力し下記のように表示されればOKです。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Fri_Feb__8_19:08:17_PST_2019
Cuda compilation tools, release 10.1, V10.1.105
###nvidia-smiとnvcc -Vで表示されるCUDAが違うが問題なし
CUDAにはランタイムとドライバAPIの二つのAPIがあるらしく、nvidia-smi
とnvcc -V
で表示されるCUDAバージョンが違っても問題ないらしい。実際にこれらのバージョンを合わせようと思ってインストールを繰り返した経験もあるが、結局バージョンが違ってもtensorflowの使用などには問題ないとわかった。
(もし認識が違っていればご教示ください。)
#cuDNNのインストール
ここまでうまくいっていれば、ほぼ終わったも同然です。
cuDNNはフリーでダウンロードできますが、NVIDIAのサイトにメンバー登録してからダウンロードします。
以前のcuDNNは Archived cuDNN Releases をクリックして探します。
今回はUbuntu18.04に対応したcuDNN7.6.5のRuntime Library、Developer Library、Code SamplesのDebファイルをダウンロードします。
ダウンロードしたディレクトリで下記を実行します。
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
###cuDNNのテスト
コードサンプルの一つを実行し、エラーが出なければOKです。
cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN
#Tensorflowのインストール
もう一息です。Tensorflow2ではpip3のupgradeが必要が必要です。
python3 -m pip install --upgrade pip
Tensorflowをインストールします。バージョンを指定しないと意図しないバージョンがインストールされてしまいます。部分を2.3.0
などのバージョンに置き換えて入力してください。
python3 -m pip install tensorflow==<version>
###python環境でtensorflowをimportできるか確認
import tensorflow as tf
tf.__version__
意図しているバージョンが表示されれば成功です。
#おわりに
Ubuntu18.04でGtensorflowによるGPUを使用した学習ができる環境を構築しました。Ampere世代のRTX30シリーズに入れ替え後に本記事を再度アップデートしたいと思います。エンジニアが本業ではないので、至らない点が多い投稿ですが参考になれば幸いです。