Моя рабочая нагрузка разделена на два графических процессора (иначе, разделение по моделям).По умолчанию TF / Keras распределяет все градиенты на GPU0, но я хочу использовать colocate_gradients_with_ops
, чтобы распределить распределение по двум GPU.
Я ищу простой способ сделать это в Керасе.Мой способ состоял в том, чтобы создать новый оптимизатор с подклассами tf.train.AdamOptimizer
, чтобы перевернуть значение по умолчанию colocate_gradients_with_ops
(от False
до True
).Также я должен перевернуть это двумя способами!
Я ищу более короткий, более прямой путь, чем тот, что ниже в Керасе.
class MyAdamOptimizer(tf.train.AdamOptimizer):
def compute_gradients(self,
loss,
var_list=None,
gate_gradients=tf.train.Optimizer.GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=True,
grad_loss=None):
return super(MyAdamOptimizer, self).compute_gradients(
loss,
var_list=None,
gate_gradients=tf.train.Optimizer.GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=True,
grad_loss=None)
def minimize(
loss,
global_step=None,
var_list=None,
gate_gradients=tf.train.Optimizer.GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=True,
name=None,
grad_loss=None):
return super(MyAdamOptimizer, self).minimize(
loss,
global_step=None,
var_list=None,
gate_gradients=tf.train.Optimizer.GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=True,
name=None,
grad_loss=None)
Тогда я звоню
model.compile(optimizer=MyAdamOptimizer(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])