python - Amazon SageMaker:TrainingJobAnalytics 仅返回一个用于内置 xgboost 的时间戳
问题描述
我正在尝试使用TrainingJobAnalytics
在 SageMaker 上使用 XGBoost 绘制训练作业的训练和验证损失曲线。训练作业成功完成,我可以在 CloudWatch 日志中看到训练和验证 rmse 值。
但是,当我尝试使用 将它们放入我的笔记本TrainingJobAnalytics
时,我只能获得单个时间戳的指标,而不是全部。
我的代码如下:
metrics_dataframe = TrainingJobAnalytics(training_job_name=job_name).dataframe()
出了什么问题,我该如何解决?
解决方案
我用这个进入了兔子洞,但让我分享一下我在“开箱即用”的 SageMaker 上监控训练数据的经验。
TL;博士; 监控以 1 分钟的间隔分辨率运行,因此任何缩短到一分钟的日志都将被忽略。SageMaker 调试器也被探索为替代方案。SMD 标量简约示例要点。
所以,首先,同样的问题已经被提到了几次:
- Amazon SageMaker:TrainingJobAnalytics 仅返回一个用于内置 xgboost 的时间戳
- https://github.com/aws/amazon-sagemaker-examples/issues/945
- https://github.com/aws/sagemaker-python-sdk/issues/1361
然而,他们都没有得到很好的解释来解释为什么会发生这种情况。所以我决定通读亚马逊的官方文档。
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
这是基于以下参考:
- https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_debugger.html
- https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger
- https://github.com/awslabs/sagemaker-debugger#run-debugger-in-custom-container
- https://github.com/awslabs/sagemaker-debugger/blob/master/docs/pytorch.md
- https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/build_your_own_container_with_debugger/debugger_byoc.html
要完成这种“爱丽丝在(不是)仙境”体验,请使用 W&B或Tensorboard。否则,您将需要大量时间和陡峭的学习曲线来了解“开箱即用”的情况。一段时间后可能会有好处,我不知道。(我个人暂时不会使用它)
让我们不要忘记最重要的部分——在这个巨大的怪异互联网地方探索无数可能性的同时享受乐趣。
推荐阅读
- intellij-idea - 隐藏 IntelliJ 2020 代码编辑器中浮动的“1 使用”指示器
- python - 从字符串更改 int 和 string
- puppeteer - 特定的 xpath 在 puppeteer js 中不起作用
- node.js - 错误:发送后无法设置标头 - Ajax、Node、Express
- vim - 更改设置后忽略突出显示
- javascript - 相邻的 JSX 元素必须包裹在封闭标记中,当它包裹在闭合标记中时
- javascript - 使用 httpClient 方法按城市名称调用 JSON 数据文件
- python-3.x - 来自路由器的配置显示为一条线路需要多线路用于 ciscoconfparse
- java - 将文件从 Web 应用程序(弹簧启动)提交到 git 远程存储库,而不首先将存储库克隆为本地?这可能吗
- javascript - 读取当前选项时,选择 HTML 选择结果为空