はじめに
本記事はtensorflow(tensorflow-keras)でGPUを使用した計算をする際に再現性を確保する方法のメモ。
※ ここに記載するGPUの計算順の固定方法はtensorflow-gpuが1.14, 1.15, 2.0の場合のみで使用可能
※ その他のバージョンの場合は参考のリンク先でやり方を見る
実行環境
- Ubuntu18.04LTS
- CUDA 10.0
- cudnn 7.6.5
- anaconda3-2019.10
- tensorflow-gpu 1.15.2 / 2.0.0
再現性の確保に必要なこと
- 乱数を使用する場合は、乱数の固定
- GPUを使用する場合は、計算順の固定
やったこと
- randomのseed値の固定
- np.random.seedのseed値を固定
- tf.random.set_seedのseed値を固定
- tensorflow-determinismを使用してGPUの計算順を固定(※)
※ 冒頭にも書いたがtensorflow-gpuが1.14, 1.15, 2.0の場合は次の手順で固定可能
手順
① tensorflow-determinismのインストール
terminal
pip install tensorflow-determinism
② ソースコード上でGPUの計算順序の固定を記述
main.py
import tensorflow as tf
from tfdeterminism import patch
patch()
③ 乱数のseed値の固定
main.py
import random
import numpy as np
random_seed = 0 #任意のseed値を設定
random.seed(random_seed)
np.random.seed(random_seed)
tf.random.set_seed(random_seed)
以上の手順で、GPU計算の再現性を確保ができる。
参考