はじめに
Kerasは何らかの形でGPUリソースを使えるようであれば優先して使うようですが,
デフォルト設定ではGPUのメモリを最初にすべて占有してしまうようです.
また,(少なくともCUDA環境では)GPUメモリ使用率が100%を超えると
プログラムをアボートします(メモリを占有してるプログラムはそのまま).
これではGPUを利用したプログラムを2つ以上動かせません.
ということで,Keras使用時のGPUメモリ使用率に制限をかけてみます.
チートシート
できあがったものがこちらになります.
limitGPU_cheat.py
# import
import tensorflow as tf
from keras import backend
import numpy as np
# Kerasを使う前に
config = tf.ConfigProto()
# 次のコンフィグはどちらかお好きなほうをお使いください
# GPUメモリ占有をメモリ全体の30%に制限する
config.gpu_options.per_process_gpu_memory_fraction = 0.3
# GPUメモリを必要な分だけ確保する(自動開放するわけではないので注意)
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
backend.set_session(sess)
# この後にKerasを使う
おわりに
複数の人物,もしくはプログラムで単一のGPUリソースにアクセスする場合は必須に近いんじゃないかなと思います.