我想将_model_fn
Estimator
转换为多GPU解决方案。
有没有办法在Esitmator API中执行此操作,或者是否必须显式编码设备放置和同步。
我知道我可以使用tf.device('gpu:X')
将我的模型放在GPU X
上。我也知道我可以循环使用可用的GPU名称来跨多个GPU复制我的模型。我也知道我可以为多个GPU使用单个输入队列。
我不知道的是哪些部分(优化器,损耗计算),我实际上可以移动到GPU以及我必须同步计算的位置。
从Cifar10
示例我认为我必须只同步渐变。
特别是在使用
时train_op = tf.contrib.layers.optimize_loss(
loss=loss,
global_step=tf.contrib.framework.get_global_step(),
learning_rate=learning_rate,
learning_rate_decay_fn=_learning_rate_decay_fn,
optimizer=optimizer)
我无法再手动拨打optimizer.compute_gradients()
或optimizer.apply_gradients()
,因为这是由.optimize_loss(..)
我想知道如何在 cifar10 示例Cifar10-MultiGPU中对渐变进行平均,或者这对Estimator
来说是否正确。