よっしーの私的空間

機械学習を中心に興味のあることについて更新します

Tensorflowによる再現性の確保について(GPUを使用する場合)

Tensorflowによる再現性の確保について以前の記事でもまとめたが、前回のはどうやら不十分らしく、GPUを使用して大量の計算(画像分析等)を実施する場合に、計算順の違い等により微小な誤差が積み重なって計算結果がずれてしまうことがあるようです。今回はその解決策も含めてまとめます。

<主に参考にしたサイト>
本記事は以下を参考にしています。Tensorflowにかかわる再現性確保手法について、最新の内容がまとめられています。
github.com

1. 結論

最終的に私は以下のコードに落ち着きました。

import os
os.environ['PYTHONHASHSEED'] = '0'
import tensorflow as tf
os.environ['TF_DETERMINISTIC_OPS'] = 'true'
os.environ['TF_CUDNN_DETERMINISTIC'] = 'true'

import numpy as np
import random as rn

SEED = 123
def reset_random_seeds():
    tf.random.set_seed(SEED)
    np.random.seed(SEED)
    rn.seed(SEED)

reset_random_seeds()    

session_conf = tf.compat.v1.ConfigProto(intra_op_parallelism_threads=32, inter_op_parallelism_threads=32)
tf.compat.v1.set_random_seed(SEED)
sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)

2. Tensorflowバージョン2.1.0以前の場合

どうやらTensorFlowのバージョンによって、必要な対応は異なるようです。私の場合はTensorflowの2.3.0なので、上記の通りとしましたが、2.1.0以前の場合は以下を追加する必要があるようです。

import tensorflow as tf
from tfdeterminism import patch
patch()

3. 終わりに

TensorFlowはバージョンによっても実施する内容によっても、再現性の確保の方法が色々と変わるようです。困ったときは上記のサイトに何かしら掲載されていると思いますので、良ければ参考にしてください。