首页 > 解决方案 > 将模型指标输出到 Cloudwatch

问题描述

我正在遵循 aws github 文档中的 mnist-2 指南来实施我自己的培训工作https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/tensorflow_script_mode_training_and_serving。我使用类似的结构编写了我的代码,但我想在作业运行时可视化来自 Cloudwatch 的训练和验证指标。我是否需要手动指定要观察的指标?AWS 指南指出“ SageMaker 自动解析日志以获取内置算法发出的指标并将这些指标发送到 CloudWatch。 ”我只使用 Tensorflow 的训练和验证准确性以及损失指标,我不确定它们是否是内置的,或者如果我需要手动调用它们。

标签: amazon-ec2amazon-cloudwatchamazon-sagemaker

解决方案


如果您没有使用内置算法(如您链接的示例中),则必须在创建训练作业时定义指标。您必须定义正则表达式以从日志中获取指标值,然后 cloudwatch 将为您绘制。x 轴将是时间戳,您无法更改它。基本上只需运行您的培训工作并观察指标是如何输出的,然后您就可以构建适当的正则表达式。例如,由于我在 tensorflow 中使用 coco 指标,它会定期生成:

INFO:tensorflow:Saving dict for global step 1109: DetectionBoxes_Precision/mAP = 0.111895345, DetectionBoxes_Precision/mAP (large) = 0.12102994, DetectionBoxes_Precision/mAP (medium) = 0.050807837, DetectionBoxes_Precision/mAP (small) = -1.0, DetectionBoxes_Precision/mAP@.50IOU = 0.33130914, DetectionBoxes_Precision/mAP@.75IOU = 0.03787096, DetectionBoxes_Recall/AR@1 = 0.18493989, DetectionBoxes_Recall/AR@10 = 0.36792925, DetectionBoxes_Recall/AR@100 = 0.48543888, DetectionBoxes_Recall/AR@100 (large) = 0.5131599, DetectionBoxes_Recall/AR@100 (medium) = 0.21598063, DetectionBoxes_Recall/AR@100 (small) = -1.0, Loss/classification_loss = 0.8041124, Loss/localization_loss = 0.35313264, Loss/regularization_loss = 0.15211834, Loss/total_loss = 1.30936, global_step = 1109, learning_rate = 0.28119853, loss = 1.30936

我用来获取总损失,例如:

INFO.*Loss\/total_loss = ([0-9\.]+) 

就是这样,cloudwatch 会自动及时绘制 total_loss。

您可以在控制台或笔记本中定义指标,如下所示(只是我代码中的一个示例):

metrics = [{'Name': 'Loss', 'Regex': 'loss: ([0-9\.]+)'},
           {'Name': 'Accuracy', 'Regex': 'acc: ([0-9\.]+)'},
           {'Name': 'Epoch', 'Regex': 'Epoch ([0-9\.]+)'},
           {'Name': 'Validation_Acc', 'Regex': 'val_acc: ([0-9\.]+)'},
           {'Name': 'Validation_Loss', 'Regex': 'val_loss: ([0-9\.]+)'}]

tf_estimator = TensorFlow(entry_point='training.py', 
                          role=get_execution_role(),
                          train_instance_count=1, 
                          train_instance_type='ml.p2.xlarge',
                          train_max_run=172800,
                          output_path=s3_output_location,
                          framework_version='1.12',
                          py_version='py3',
                          metric_definitions = metrics,
                          hyperparameters = hyperparameters)

为了测试您的正则表达式,您可以使用这样的工具


推荐阅读