如何 运行 在具有数据并行性的多个 GPU 上使用 Tensorflow Estimator
How to run Tensorflow Estimator on multiple GPUs with data parallelism
我有一个带有某些模型的标准 tensorflow Estimator,我想 运行 在多个 GPU 而不是一个 GPU 上使用它。如何使用数据并行性来做到这一点?
我搜索了 Tensorflow Docs 但没有找到示例;只有句子说使用 Estimator 会很容易。
有没有人有使用 tf.learn.Estimator 的好例子?或者 link 教程之类的?
运行 数据并行的一种方法是循环可用的 GPU 设备,并将批处理的块发送到模型的复制版本(全部在您的 model_fn 中完成),然后合并结果。
您可以为此使用示波器和设备:
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
我认为 tf.contrib.estimator.replicate_model_fn is a cleaner solution. The following is from 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
包装优化器,用 tf.contrib.estimator.replicate_model_fn()
包装优化器 model_fn()
。
我按照描述使 TPU squeezenet 模型在具有 4 个 GPU 的机器上运行。我的修改here.
我想这就是您所需要的。
Link: https://www.youtube.com/watch?v=bRMGoPqsn20
更多详情: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)
已更新
对于 TF-2.0 和 Keras,您可以使用它 (https://www.tensorflow.org/tutorials/distribute/keras)
您可以找到使用 tf.distribute.MirroredStrategy
和 tf.estimator.train_and_evaluate
here 的示例。
我有一个带有某些模型的标准 tensorflow Estimator,我想 运行 在多个 GPU 而不是一个 GPU 上使用它。如何使用数据并行性来做到这一点?
我搜索了 Tensorflow Docs 但没有找到示例;只有句子说使用 Estimator 会很容易。
有没有人有使用 tf.learn.Estimator 的好例子?或者 link 教程之类的?
运行 数据并行的一种方法是循环可用的 GPU 设备,并将批处理的块发送到模型的复制版本(全部在您的 model_fn 中完成),然后合并结果。
您可以为此使用示波器和设备:
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
我认为 tf.contrib.estimator.replicate_model_fn is a cleaner solution. The following is from 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
包装优化器,用 tf.contrib.estimator.replicate_model_fn()
包装优化器 model_fn()
。
我按照描述使 TPU squeezenet 模型在具有 4 个 GPU 的机器上运行。我的修改here.
我想这就是您所需要的。
Link: https://www.youtube.com/watch?v=bRMGoPqsn20
更多详情: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)
已更新
对于 TF-2.0 和 Keras,您可以使用它 (https://www.tensorflow.org/tutorials/distribute/keras)
您可以找到使用 tf.distribute.MirroredStrategy
和 tf.estimator.train_and_evaluate
here 的示例。