Memo plus Alpha

メモにプラスアルファを加えて価値ある情報に。

GPUを使った深層学習を自分の環境で実行する(tensorflowの場合)

はじめに

GPUを使うと、ディープラーニングの処理が速くなります。しかしながら、GPUを使うには、1手間かかります。その方法を自分用のメモとして残しておきます。

前提として、Windows PCであること(私の場合はWin 10)、NVIDIAGPUを搭載していること(同じくGeForce GTX 1080)、ですので、ご注意ください。

なお、これらの設定を行わずにtensorflow-GPUを使おうとすると、use_multiprocessing=use_multiprocessingというエラーがでます。

f:id:semanticist:20200418224846p:plain

Anacondaのインストール

環境設定にAnacondaを使います。使わなくてもできますが、便利なので。まず、environmentsからCreateで、tensorflowが対応しているpythonのバージョンを入れた環境を構築します(私はPython3.6)。

その後、ターミナルを開いてtensorflow-GPUをインストールします。

 

f:id:semanticist:20200418223459p:plain

 

conda install tensorflow-gpuをターミナルで実行

 

しばらくすると、インストールが完了します。tensorflow-gpuのバージョンを確認しておきます。2.1.0とありますので、

f:id:semanticist:20200418224435p:plain

 

2.1.0とありますので、次のページでCUDAの対応バージョンを確認しておきます(10.1とありました)。

https://www.tensorflow.org/install/source?hl=ja#linux

 

GPU周りを整える

最新のドライバのインストールと、ツールキットをインストールします(以下を参照)。

【参考】GPU support  |  TensorFlow

ドライバの確認・更新

ドライバは418.xよりも新しいものである必要があるので、まずはドライバのバージョンを確認します。

 

デスクトップで右クリック→NVIDIAのコントロールパネル→ヘルプ→システム情報

 

もし古いようであれば、NVIDIA GeForce Experienceからアップデートしましょう。Windowsキーを押して「Ge」と入れればプログラムが出てくるはずなので、それを選択します。アップデートにはアカウントが必要なので作成します。ドライバの更新というボタンがあるはずなので、それで更新して、PCを再起動します。

 

CUDAツールキット

ツールキットをインストールします。バージョンに注意(私は10.1で構築)。

 

https://developer.nvidia.com/cuda-toolkit-archive

 

ここまで成功していれば、コマンドプロンプトからnvcc -Vと打てば下のようなバージョン情報などが表示されます。

f:id:semanticist:20200418224819p:plain

 

【参考】Installation Guide Windows :: CUDA Toolkit Documentation

 

cuDNN SDK

NVIDIAのページから、SDKを入手します。これはスクリプト集のようなものなのでインストールは不要です。ただし、このフォルダまでのパスを通す必要があるので、適切なフォルダ(Cドライブのトップなど)を選びましょう。ここではC:\cudaに解凍したファイル群を置きます。

f:id:semanticist:20200418225053p:plain

 

パスを通す

次の3つのパスを通します。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
#これはツールキットのインストールで自動的に追加されています。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64

#手動で通します(システムの環境変数から)。

C:\cuda\bin
#cuDNN SDKを置いたフォルダのbinまでパスを通します。

【参考】https://www.tensorflow.org/install/source_windows?hl=ja

 

その後、PCを再起動します。

 

プログラムで動くか確認

Anaconda navigatorから、tensorflow-GPUをインストールした環境で、Jupyter notebookを起動します。

f:id:semanticist:20200418225410p:plain

以下のコードを打ち込んで実行します。

 

import tensorflow
from tensorflow import keras
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
model = keras.models.Sequential([
keras.layers.Flatten(),
keras.layers.Dense(600, activation='relu'),
keras.layers.Dropout(0.1),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3)

 

成功すれば以下のような画面になります!

f:id:semanticist:20200418225453p:plain



※なお、ブラウザのタブを閉じてプログラムを終了すると、GPUのメモリ上にデータが残ってしまいます。カーネルをシャットダウンして終わるか、そうなった場合はPCをを再起動します。


CUDA runtime implicit initialization on GPU:0 failed. Status: out of memory

 

これがそれが起きたときのエラーメッセージです(一番下に出ます)。