Keras/TensorFlowでディープラーニングを行う際、計算時間を短縮するためにGPUを使いたいと思いました。しかし、なかなか設定がうまくいかなかったので調べてみると、原因はTensorFlowやCudaなどのヴァージョンがうまく噛み合っていなかったからだとわかりました。
そこで、今回はTensorFlowをバックエンドとしてKerasを動かすという前提でGPUを使用するまでの手順について解説していきます。
目次
今回使った環境
- OS:WIndows10(ビルトは2019-Marchの最新版18362.207)
- GPU:NVIDIA GeForce RTX 2080 Ti
- メモリー:16GB
- Anacondaを利用
必要なもの
- NVIDIA製のGPU
- TensorFlow(GPU版)
- Keras
- (Windows)の場合:Microsoft Visual Studio C++(MSVC)
- NVIDIA Driver
- Cuda
- cuDNN
確認必須:各ツールのバージョン
上記に挙げたtensorflow、MSVC、Cuda、cuDNNの各バージョンをすべて合わせる必要があります。基本的に、tensorflowのバーションを最初に決めた後(特に理由がなければ最新版で)、その他のバージョンを決めていきます。
対応表はこちらです。(Windowsの場合)(Mac、Linuxの場合)
これを必ず確認してから以下の手順を進めてください。
導入手順
NVIDIA製のGPU
2019年6月30日現在、TensorFlowに公式対応しているのはNVIDIA製のGPUだけです。「(TensorFlow公式)GPU support」ただし、NVIDIA製以外のGPUでも使う方法はあるようなので、下の方に補足を書いておきます。
- AMD製GPU(MacProなど)の対応:(AMD社製GPUを用いたTensorFlow環境構築(Tensorflow導入~サンプル動作編))
- Intel製GPU(MacBookProなど)の対応:TensorFlowの代わりにPlaidMLという機械学習フレームワークを使って動かせるようです。(PlaidMLを使ってMacでDeep Learning:導入編)
TensorFlow(GPU版)
TensorFlowは通常のCPU版と、GPU用の2つが用意されています。同時に二つを同じ環境にインストールしているとCPU版が自動で使われてしまうことがあるようです。もしすでにCPU版をインストールしているようであれば、一度すべてのTensorFlowをアンインストールするのが良いでしょう。
Anaconda Navigaterを起動し、インストール済みパッケージにtensorflowが含まれていれば削除します。一度環境からtensorflow関係をすべて取り除いた上で、tensorflow-gpuをインストールします。
※Macなどpipで行う場合はこちら
現在インストールされているTensorFlowの確認
pip list
tensorflowが入っていたら、アンインストールする
pip uninstall tensorflow
TensorFlowのGPU版をインストール
pip install tensorflow-gpu
再度pip listを行って、tensorflow-gpuが入っていればインストール成功です。
Keras
こちらもAnaconda Navigater>Envirommentsからkerasパッケージをインストールします。
※Macなどpipで行う場合はこちら
pip install keras
(Windows)の場合:Windows Visual Studio C++
後述のCudaをインストールして使うために、WindowsVisualStudioC++が必要になります。こちらからインストールしてください。2019以降の古いバージョンはこちらです。必ず使いたいtensorflowのバージョンに対応したものをインストールしてください。
インストール時に「C++ ワークロードを使用したデスクトップ開発」を必ず選択してください。
NVIDIA Driver
こちらのページからドライバーをインストールします。
cuDNN
こちらのページからCuDNNをダウンロードしてください。無料登録が必要になります。ダウンロードが終わったらフォルダを解凍してください。
次に、フォルダで「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v.○○」を開いてください。○○は、使おうとしているヴァージョンの数字が入ります。例えば、v.10.0などとなっています。
解凍したフォルダの中にbin,include,libと3つのフォルダがあります。binの中のファイルはbinのフォルダの中に、includeの中のファイルはincludeフォルダの中に、libの中のファイルはlibフォルダの中に上書き保存してください。
管理者権限を求められることがあります。インストールは終了です。
GPUの動作確認
TensorFlowがインストールされているか確認
upyter notebookを開いて、以下のコマンドを打ち込みます。
#tensorflowをインポート import tensorflow
正常にインストールされていれば、エラーが返ってくることなく何も起こりません。
TensorFlowがGPUを認識しているかを確認
次にGPUの動作確認です。まず、
#TensorFlowがGPUを認識しているか確認 from tensorflow.python.client import device_lib device_lib.list_local_devices()
を実行します。正常にGPUが認識されていれば、device_type: “GPU”という一文が結果の中に書かれています。
GPUが動作するかを確認
Windowsの場合、タスクマネージャーを開いてGPUの稼働状況を見ることも出来ますが、細かい情報が見れません。ELSA社が無償公開しているELSA System Graphというソフトウェアのインストールをおすすめします。
早速、MNISTを使ってTensorFlowを動かしてみます。
import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test)
こちらのソースコードをまるっとコピーしてjupyter notebookで実行してください。実行中にGPUの使用率が上がればGPUはうまく使われています。お疲れ様でした!