Как запустить TensorFlow Estimator на нескольких графических процессорах с параллелизмом данных
У меня есть стандартная оценка тензорного потока с некоторой моделью и хочу запустить ее на нескольких графических процессорах вместо одного. Как это можно сделать с помощью параллелизма данных?
Я искал документы Tensorflow, но не нашел примера; только предложения, говорящие, что это было бы легко с оценкой.
У кого-нибудь есть хороший пример использования tf.учить.Оценщик? Или ссылку на учебник или что?
3 ответов
Я думаю tf.ВНО.оценка.replicate_model_fn более чистое решение. Следующее из tf.ВНО.оценка.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()
.
Я следовал описанию и сделал модель squeezenet TPU на машине с 4 графическими процессорами. Мои модификации здесь.
стандартный пример: https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/contrib/learn/python/learn/estimators/estimator.py
один из способов запустить его data-parallel - это перебрать доступные устройства 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