Kerasは複数のGPUを指定し、複数のGPUを使ってトレーニングする.

1694 ワード

Keras指定複数GPU
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,4,5,8,9"
複数のGPUを使って訓練します.
データパラレル https://keras-zh.readthedocs.io/utils/ )
データ並列は、各デバイスにおいてターゲットモデルを複製し、各モデルのコピーを用いて異なる部分の入力データを処理することを含む.
Kerasは、任意のモデルのデータ並列バージョンを生成することができます.8つまでのGPUで準線形加速を実現します.
詳細については、multi ugupumodelのドキュメントを参照してください.ここでは、高速な例です.
from keras.utils import multi_gpu_model

model = Sequential()
model.add(...)
......
......

#   `model`     8   GPU  。
#         8      GPU。
parallel_model = multi_gpu_model(model, gpus=8)
parallel_model.compile(loss='categorical_crossentropy',
                       optimizer='rmsprop')

#    `fit`        8   GPU  。
#    batch size   256,   GPU     32    。
parallel_model.fit(x, y, epochs=20, batch_size=256)
モデルを保存
モデル保存について
マルチGPUモデルを保存するには、テンプレートモデル(転送先)を使ってください.  multi_gpu_model のパラメータを呼び出します  .save(fname) または  .save_weights(fname) を選択します.  multi_gpu_model モデルを返します
model.save(…)  ではなく  parallel_modell.save(…)
GPUのダイナミック成長は、すべて満遍なく現存し、必要に応じて分配されます.
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os
 
 
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
 
config = tf.ConfigProto()
config.gpu_options.allow_growth=True   #       ,     
sess = tf.Session(config=config)
 
KTF.set_session(sess)
 
誤報があるかもしれません.TypeError:can’t pickle thread.lock object
解決方法:ユーザー定義(Model Checkpointチェックポイント)コールバック関数
Reference:https://blog.csdn.net/z5217632/article/details/80952372