首页 > 解决方案 > Amazon SageMaker:TrainingJobAnalytics 仅返回一个用于内置 xgboost 的时间戳

问题描述

我正在尝试使用TrainingJobAnalytics在 SageMaker 上使用 XGBoost 绘制训练作业的训练和验证损失曲线。训练作业成功完成,我可以在 CloudWatch 日志中看到训练和验证 rmse 值。

但是,当我尝试使用 将它们放入我的笔记本TrainingJobAnalytics时,我只能获得单个时间戳的指标,而不是全部。

我的代码如下:

metrics_dataframe = TrainingJobAnalytics(training_job_name=job_name).dataframe()

出了什么问题,我该如何解决?

标签: pythonamazon-cloudwatchxgboostamazon-sagemaker

解决方案


我用这个进入了兔子洞,但让我分享一下我在“开箱即用”的 SageMaker 上监控训练数据的经验。

TL;博士; 监控以 1 分钟的间隔分辨率运行,因此任何缩短到一分钟的日志都将被忽略。SageMaker 调试器也被探索为替代方案。SMD 标量简约示例要点

所以,首先,同样的问题已经被提到了几次:

然而,他们都没有得到很好的解释来解释为什么会发生这种情况。所以我决定通读亚马逊的官方文档。

https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-retrieve-data-point-metrics/

如果指标是高分辨率指标(以不到 1 分钟的间隔推送),请确认指标的数据点在 --storage resolution 参数设置为 1 的情况下被推送。如果没有此配置,CloudWatch 不会存储亚分​​钟数据点并将它们聚合成一分钟数据点。在这些情况下,一分钟内的数据点是不可检索的。

https://aws.amazon.com/cloudwatch/faqs/

问:我可以从自定义指标中获得什么分辨率?

https://docs.aws.amazon.com/sagemaker/latest/dg/training-metrics.html#define-train-metrics

Amazon CloudWatch 支持高分辨率自定义指标,其最高分辨率为 1 秒。但是,分辨率越精细,CloudWatch 指标的生命周期就越短。对于 1 秒的频率分辨率,CloudWatch 指标可使用 3 小时。有关 CloudWatch 指标的分辨率和生命周期的更多信息,请参阅 Amazon CloudWatch API 参考中的 GetMetricStatistics。

https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs

指标以 1 分钟的频率提供。

因此,基本上对于我的场景而言,Amazon CloudWatch 并不是适合我需要的工具。

我决定探索SageMaker Debugger,哦,天哪,真是太难了。从理论上讲,它也可以开箱即用。它可能确实如此,但不是以一种微不足道的“调用记录器”的方式。你需要:

  • 首先正确配置(您需要监控的内容)
  • 对最流行的库使用预先存在的约定
  • 将其连接到您的模型/管道
  • 很多“幕后”功能
  • 感觉就像是专门为那些总是出现在任何关于 SageMaker 调试器的教育视频中的两个场景而设计的。

不过我必须承认,如果你是一名亚马逊工程师并且知道如何使用它以及何时使用它,它会非常强大。

最后,我决定编写一个简单的本地调试器,它监视单个值然后显示它——我花了大约 8-10 个小时,因为我没有遵循他们的约定(并且文档从未涵盖“可能的最简单示例”) . 在这里提供它作为一个要点:

https://gist.github.com/yoandinkov/d431ffef708599cb7f24a653305d1b8f

这是基于以下参考:

要完成这种“爱丽丝在(不是)仙境”体验,请使用 W&BTensorboard。否则,您将需要大量时间和陡峭的学习曲线来了解“开箱即用”的情况。一段时间后可能会有好处,我不知道。(我个人暂时不会使用它)

让我们不要忘记最重要的部分——在这个巨大的怪异互联网地方探索无数可能性的同时享受乐趣。


推荐阅读