【发布时间】:2020-08-12 06:11:08
【问题描述】:
(注:我也问过这个问题here)
问题
我一直在尝试让 Google Cloud 的 AI 平台显示在 AI 平台上训练的 Keras 模型的准确性。我用hptuning_config.yaml 配置了超参数调整,它可以工作。但是我无法让 AI 平台在训练期间接听tf.summary.scalar 电话。
文档
我一直在关注以下文档页面:
1. Overview of hyperparameter tuning
2。 Using hyperparameter tuning
根据[1]:
AI Platform Training 如何获取您的指标 您可能会注意到,本文档中没有关于将您的超参数指标传递给 AI Platform Training 训练服务的说明。这是因为该服务会监控您的训练应用程序生成的 TensorFlow 摘要事件并检索指标。”
根据[2],生成此类Tensorflow摘要事件的一种方法是创建回调类,如下所示:
class MyMetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
我的代码
所以在我的代码中我包括:
# hptuning_config.yaml
trainingInput:
hyperparameters:
goal: MAXIMIZE
maxTrials: 4
maxParallelTrials: 2
hyperparameterMetricTag: val_accuracy
params:
- parameterName: learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.01
scaleType: UNIT_LOG_SCALE
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
tf.summary.scalar('val_accuracy', logs['val_accuracy'], epoch)
我什至尝试过
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def __init__(self, logdir):
self.writer = tf.summary.create_file_writer(logdir)
def on_epoch_end(self, epoch, logs):
with writer.as_default():
tf.summary.scalar('val_accuracy', logs['val_accuracy'], epoch)
成功地将“val_accuracy”指标保存到 Google 存储(我也可以通过 TensorBoard 看到这一点)。但是,尽管在 [1] 中提出了声明,但 AI 平台并未注意到这一点。
部分解决方案:
使用Cloud ML Hypertune 包,我创建了以下类:
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def __init__(self):
self.hpt = hypertune.HyperTune()
def on_epoch_end(self, epoch, logs):
self.hpt.report_hyperparameter_tuning_metric(
hyperparameter_metric_tag='val_accuracy',
metric_value=logs['val_accuracy'],
global_step=epoch
)
这行得通!但我不知道怎么做,因为它似乎只是在/tmp/hypertune/* 的 AI 平台 worker 上写入文件。 Google Cloud 文档中没有任何内容可以解释 AI 平台是如何发现这一点的……
为了显示 tf.summary.scalar 事件,我是否遗漏了什么?
【问题讨论】:
-
对于
cloudml-hypertune的情况,服务会读取该文件以报告您的作业的超参数调整指标。如果未获取摘要事件,这是报告超参数调整指标的推荐方法。对于tf.summary.scalar案例,您使用的是哪个运行时版本?此调用仅针对运行时版本 2.1 或更高版本进行监控。 -
我遇到了同样的问题,不知何故 tf.summary.scalar 似乎没有传播到 hp 调整引擎。我正在使用 runtine 2.1 和 python 3.7。是的,还有其他方法可以将指标直接提供给 HyperTune()。我还意识到 yaml 文件中的“区域”不会传播到例如训练中
-
我可以在 tensorboard 中看到新指标,其正确名称与 yaml 文件中的名称相同。
-
@rpasricha 谢谢。我正在使用运行时版本 2.1。对于
cloudml-hypertune的情况,您的意思是说AI 平台已预先配置为从副本中的/tmp/hypertune文件夹中读取? -
是的,没错。
标签: tensorflow keras google-cloud-platform google-cloud-ml gcp-ai-platform-training