web-dev-qa-db-ja.com

データ並列処理を使用して複数のGPUでTensorflow Estimatorを実行する方法

いくつかのモデルを備えた標準のtensorflow Estimatorがあり、1つではなく複数のGPUで実行したいと考えています。データの並列処理を使用してこれをどのように行うことができますか?

Tensorflowドキュメントを検索しましたが、例は見つかりませんでした。 Estimatorがあれば簡単だと言っている文章だけ。

Tf.learn.Estimatorを使用した良い例はありますか?またはチュートリアルへのリンクなどですか?

11
andy

私は tf.contrib.estimator.replicate_model_fn がよりクリーンなソリューションだと思います。以下は tf.contrib.estimator.replicate_model_fn のドキュメントからのもので、

_...
def model_fn(...):  # See `model_fn` in `Estimator`.
  loss = ...
  optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
  optimizer = tf.contrib.estimator.TowerOptimizer(optimizer)
  if mode == tf.estimator.ModeKeys.TRAIN:
    #  See the section below on `EstimatorSpec.train_op`.
    return EstimatorSpec(mode=mode, loss=loss,
                         train_op=optimizer.minimize(loss))

  #  No change for `ModeKeys.EVAL` or `ModeKeys.PREDICT`.
  return EstimatorSpec(...)
...
classifier = tf.estimator.Estimator(
  model_fn=tf.contrib.estimator.replicate_model_fn(model_fn))
_

必要なことは、オプティマイザを_tf.contrib.estimator.TowerOptimize_でラップし、model_fn()tf.contrib.estimator.replicate_model_fn()でラップすることです。説明に従って、4つのGPUが搭載されたマシンでTPUスクイーズネットモデルを動作させました。私の変更 ここ

7
freedom

これで十分です。

リンク: https://www.youtube.com/watch?v=bRMGoPqsn2

詳細: https://www.tensorflow.org/api_docs/python/tf/distribute/Strategy

説明: https://medium.com/tensorflow/multi-gpu-training-with-estimators-tf-keras-and-tf-data-ba584c3134db

NUM_GPUS = 8
dist_strategy = tf.contrib.distribute.MirroredStrategy(num_gpus=NUM_GPUS)
config = tf.estimator.RunConfig(train_distribute=dist_strategy)
estimator = tf.estimator.Estimator(model_fn,model_dir,config=config)
1
HARSH PATHAK

スコープとデバイスを使用できます。

 with tf.variable_scope(tf.get_variable_scope()):
  for i in xrange(FLAGS.num_gpus):
    with tf.device('/gpu:%d' % i):
      with tf.name_scope('%s_%d' % (cifar10.TOWER_NAME, i)) as scope:

完全な例: https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py

1

標準的な例は次のとおりです: https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/contrib/learn/python/learn/estimators/estimator.py

データ並列で実行する1つの方法は、利用可能なGPUデバイスをループして、バッチのチャンクをモデルのコピーされたバージョンに送信し(すべてmodel_fn内で実行)、結果をマージすることです。

1
jonas25007

tf.distribute.MirroredStrategyおよびtf.estimator.train_and_evaluatehere を使用して例を見つけることができます。

0
Ali