使用 AzureML 服务,如何使用 Horovod 在多个节点上为 keras 深度学习转储不同时期的正确损失曲线或准确度曲线?
使用 Horovod 和 AzureML 的 Keras 深度学习的 Loss vs epochs plt 似乎存在问题。
使用 AzureML 服务,如何使用 Horovod 在多个节点上为 keras 深度学习转储不同时期的正确损失曲线或准确度曲线?
使用 Horovod 和 AzureML 的 Keras 深度学习的 Loss vs epochs plt 似乎存在问题。
看起来您可能正在训练 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))
您如何记录这些指标?从图中看起来有两组交错的数据点。