GPUを使った深層学習を自分の環境で実行する(tensorflowの場合)
はじめに
GPUを使うと、ディープラーニングの処理が速くなります。しかしながら、GPUを使うには、1手間かかります。その方法を自分用のメモとして残しておきます。
前提として、Windows PCであること(私の場合はWin 10)、NVIDIAのGPUを搭載していること(同じくGeForce GTX 1080)、ですので、ご注意ください。
なお、これらの設定を行わずにtensorflow-GPUを使おうとすると、use_multiprocessing=use_multiprocessingというエラーがでます。
Anacondaのインストール
環境設定にAnacondaを使います。使わなくてもできますが、便利なので。まず、environmentsからCreateで、tensorflowが対応しているpythonのバージョンを入れた環境を構築します(私はPython3.6)。
その後、ターミナルを開いてtensorflow-GPUをインストールします。
conda install tensorflow-gpuをターミナルで実行
しばらくすると、インストールが完了します。tensorflow-gpuのバージョンを確認しておきます。2.1.0とありますので、
2.1.0とありますので、次のページでCUDAの対応バージョンを確認しておきます(10.1とありました)。
https://www.tensorflow.org/install/source?hl=ja#linux
GPU周りを整える
最新のドライバのインストールと、ツールキットをインストールします(以下を参照)。
ドライバの確認・更新
ドライバは418.xよりも新しいものである必要があるので、まずはドライバのバージョンを確認します。
デスクトップで右クリック→NVIDIAのコントロールパネル→ヘルプ→システム情報
もし古いようであれば、NVIDIA GeForce Experienceからアップデートしましょう。Windowsキーを押して「Ge」と入れればプログラムが出てくるはずなので、それを選択します。アップデートにはアカウントが必要なので作成します。ドライバの更新というボタンがあるはずなので、それで更新して、PCを再起動します。
CUDAツールキット
ツールキットをインストールします。バージョンに注意(私は10.1で構築)。
https://developer.nvidia.com/cuda-toolkit-archive
ここまで成功していれば、コマンドプロンプトからnvcc -Vと打てば下のようなバージョン情報などが表示されます。
【参考】Installation Guide Windows :: CUDA Toolkit Documentation
cuDNN SDK
NVIDIAのページから、SDKを入手します。これはスクリプト集のようなものなのでインストールは不要です。ただし、このフォルダまでのパスを通す必要があるので、適切なフォルダ(Cドライブのトップなど)を選びましょう。ここではC:\cudaに解凍したファイル群を置きます。
パスを通す
次の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を起動します。
以下のコードを打ち込んで実行します。
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)
成功すれば以下のような画面になります!
※なお、ブラウザのタブを閉じてプログラムを終了すると、GPUのメモリ上にデータが残ってしまいます。カーネルをシャットダウンして終わるか、そうなった場合はPCをを再起動します。
CUDA runtime implicit initialization on GPU:0 failed. Status: out of memory
これがそれが起きたときのエラーメッセージです(一番下に出ます)。