1

使用 AzureML 服务,如何使用 Horovod 在多个节点上为 keras 深度学习转储不同时期的正确损失曲线或准确度曲线?

使用 Horovod 和 AzureML 的 Keras 深度学习的 Loss vs epochs plt 似乎存在问题。

使用 Keras/Horovod(2 个 GPU)和 AMLS SDK 训练 CNN 生成奇怪的图形 在此处输入图像描述 在此处输入图像描述

4

2 回答 2

1

看起来您可能正在训练 2 个模型,并且注意正在发生来自不同节点的梯度的平均。你能分享更多你的训练脚本吗——你是否DistributedOptimizer像这样包装你的优化器:

# Horovod: adjust learning rate based on number of GPUs.
opt = keras.optimizers.Adadelta(1.0 * hvd.size())

# Horovod: add Horovod Distributed Optimizer.
opt = hvd.DistributedOptimizer(opt)

此外,您真的只希望一台机器记录,因此通常只为 0 级附加一个 AzureML 记录器,如下所示:

class LogToAzureMLCallback(tf.keras.callbacks.Callback):
  def on_batch_end(self, batch, logs=None):
    Run.get_context().log('acc',logs['acc'])

  def on_epoch_end(self, epoch, logs=None):
    Run.get_context().log('epoch_acc',logs['acc'])

callbacks = [
    # Horovod: broadcast initial variable states from rank 0 to all other processes.
    # This is necessary to ensure consistent initialization of all workers when
    # training is started with random weights or restored from a checkpoint.
    hvd.callbacks.BroadcastGlobalVariablesCallback(0)
]

# Horovod: save checkpoints only on worker 0 and only log to AzureML from worker 0.
if hvd.rank() == 0:
    callbacks.append(keras.callbacks.ModelCheckpoint('./checkpoint-{epoch}.h5'))
    callbacks.append(LogToAzureMLCallback())

model.fit(x_train, y_train,
          batch_size=batch_size,
          callbacks=callbacks,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
于 2019-08-11T06:11:02.567 回答
0

您如何记录这些指标?从图中看起来有两组交错的数据点。

于 2019-08-09T17:58:42.717 回答