5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tensorflowでGPUを使って学習させる設定

Last updated at Posted at 2022-07-07

はじめに

tensorflowで機械学習をする際、NVIDIAのGPUを学習に使用するためには設定をしなくてはならない。
この設定は、tensorflowのバージョンごとにCUDAやcuDNNで対応するバージョンを使用する必要がある。

※追記※

Anacondaを使い、conda installからCUDAやcuDNNを使えるようにtensorflowをインストールできることが分かった。これに関しては以下の記事を参照。

バージョン情報

tensorflow-2.6.0
python 3.7.13
コンパイラ:GCC 7.3.1
CUDA 11.2
cuDNN 8.1.1

参考

Python,tensorflow,CUDA,cuDNNのバージョン対応表はこちら

CUDA ダウンロード

Archive of Previous CUDA Releases から過去バージョンを選択

win10用でインストーラをダウンロードして実行。インストールする。

システム環境変数にCUDA_PATHCUDA_PATH_Vxxxが追加されていることを確認。

インストール完了しているかの確認で、以下コマンドを実行する。

where nvcc
出力
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin\nvcc.exe

cuDNN ダウンロード

アカウント等が必要、バージョンを選択してダウンロード。
バージョンはCUDAのバージョンに対応したものを使う。

ダウンロードして解凍した中身を、CUDAのインストールフォルダ内にコピペで移動する。
これは、ダウンロードしたzipを解凍し、cudaフォルダに入っているものを全選択してコピーする。
ペースト先は、上記のwhere nvccで出てくるディレクトリの、binの上位、バージョン表記のフォルダ内。

システム環境変数でCUDNN_PATHという名前で、値にはCUDA_PATHと同じものを追加。
(つまり、CUDA_PATH CUDA_PATH_Vxxx CUDNN_PATHの3つの変数として同じPATHの値が設定されている状態。)

インストールできているかを以下コマンドで確認。

where cudnn64_8.dll
(インストールのバージョンによって微妙にファイル名が異なる可能性あり)

tensorflowで確認

tensorflow-gpuを入れ、以下のコードを実行して、GPUが認識されているか確認。

cmd
pip install tensorflow-gpu==2.6.0
python
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

試しにmnistデータを学習してみる

仮想環境を新規作成し、Pythonを対応するバージョンにする(ここでは3.7.13)。

tensorflow-gpu==2.6.0でインストールし、以下のコードを実行してみる。

import time
import tensorflow
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.callbacks import EarlyStopping

(x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.mnist.load_data()

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

y_train = tensorflow.keras.utils.to_categorical(y_train, 10)
y_test = tensorflow.keras.utils.to_categorical(y_test, 10)

start_time = time.time()  # スタート時間計測

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])


history = model.fit(x_train, y_train,
                    # batch_size=128,
                    epochs=10,
                    verbose=1,
                    validation_data=(x_test, y_test),
                    callbacks=[EarlyStopping(patience=1, verbose=1)])

score = model.evaluate(x_test, y_test, verbose=0)
print('loss:', score[0])
print('accuracy:', score[1])

end_time = time.time() - start_time  # 終了時間を計測
print("学習時間:", str(round(end_time, 3)), "秒でした。")

GPUを正しく認識し、使用できていればEpoch開始前に表示され、学習が行われる。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?