Tensorflowや、バックエンドにTensorflowを使うKerasは、プロセスが実行された時にGPUのメモリを上限一杯まで確保してしまう。
以下のプログラムをpythonファイルに書き込めばGPUを制限できるが、GPUメモリを全部使って実行したい時もあるし、したくない時もある。
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
# Currently, memory growth needs to be the same across GPUs
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Memory growth must be set before GPUs have been initialized
print(e)
とはいえ毎回全部のpythonファイルに書くのも面倒くさいし、コメントアウトで対応するのも手間がかかる。
調べてみるとTF_FORCE_GPU_ALLOW_GROWTHという環境変数で制御できることがわかり、楽にGPUメモリの制限を扱えるようになった。
$ TF_FORCE_GPU_ALLOW_GROWTH=true python main.py
全ての場合でGPUメモリを制限したいなら、.bash_profileに書き込んでしまってもOK。
export TF_FORCE_GPU_ALLOW_GROWTH=true
参考
Use a GPU | TensorFlow Core
コメント