使用 Amazon CloudWatch 指标监控和分析训练作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon CloudWatch 指标监控和分析训练作业

Amazon SageMaker 训练作业是一个迭代过程,此过程通过提供训练数据集中的示例来指导模型进行预测。通常情况下,训练算法计算几个指标,例如训练错误和预测准确度。这些指标有助于诊断模型的学习效果是否良好,以及针对未看到的数据进行预测是否将实现很好的泛化。训练算法将这些指标的值写入到日志中,而 SageMaker 将这些值实时监控这些值并将它们发送到 Amazon CloudWatch。要分析训练作业的绩效,您可以在 CloudWatch 中查看这些指标的图表。当训练作业已完成时,您还可以获得它通过调用 DescribeTrainingJob 操作在其最终迭代中计算的度量值的列表。

注意

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

提示

如果您想以更精细的分辨率分析训练工作,最小至 100 毫秒(0.1 秒)的粒度,并随时将训练指标无限期存储在 Amazon S3 中以进行自定义分析,请考虑使用Amazon SageMaker 调试程序. SageMaker Debug 提供了自动检测常见训练问题的内置规则;它可以检测硬件资源利用率问题(例如 CPU、GPU 和 I/O 瓶颈)和非融合模型问题(例如过度拟合、消失渐变和爆炸张量)。SageMaker 调试器还通过 Studio 及其性能分析报告提供可视化效果。要探索调试器的可视化效果,请参阅SageMaker 调试器见解仪表板演练调试器性能分析报告演练, 和使用 smDebug 客户端库分析数据.

定义训练指标

SageMaker 会自动解析训练作业日志并将训练指标发送到 CloudWatch。默认情况下,SageMaker 会发送中列出的系统资源利用率SageMaker 作业和端点指标. 如果您希望 SageMaker 解析日志并将自己算法的训练作业中的自定义指标发送到 CloudWatch,则需要在配置 SageMaker 培训任务请求时传递指标名称和正则表达式来指定指标定义。

您可以使用 SageMaker 控制台指定要跟踪的指标:Python 开发工具包或低级别 SageMaker API。

如果您使用的是自己的算法,请执行以下操作:

  • 确保算法将要捕获的指标写入日志中。

  • 定义一个正则表达式,以准确地搜索日志来捕获要发送到 CloudWatch 的指标值。

例如,假设您的算法发出以下指标来发出训练错误和验证错误指标:

Train_error=0.138318; Valid_error=0.324557;

如果您想在 CloudWatch 中监视这两个指标,则指标定义的字典应类似如下:

[ { "Name": "train:error", "Regex": "Train_error=(.*?);" }, { "Name": "validation:error", "Regex": "Valid_error=(.*?);" } ]

在正则表达式中train:error在上面示例中定义的指标,正则表达式的第一部分找到确切的文本 “Train_error=”,表达式找到确切的文本 “Train_error=”(.*?);捕获任何字符,直到出现第一个分号字符。在此表达式中,括号告诉正则表达式捕获括号内的内容,. 表示任何字符,* 表示零或更多个字符,? 表示仅捕获到遇到 ; 字符的第一个实例为止。

使用 SageMaker Python 开发工具包定义指标

通过将指标名称和正则 CloudWatch 达式的列表指定为metric_definitions初始化时的参数Estimator对象。例如,如果您要监视train:errorvalidation:errorCloudWatch 中的指标,Estimator初始化将类似于以下示例:

import sagemaker from sagemaker.estimator import Estimator estimator = Estimator( image_uri="your-own-image-uri", role=sagemaker.get_execution_role(), sagemaker_session=sagemaker.Session(), instance_count=1, instance_type='ml.c4.xlarge', metric_definitions=[ {'Name': 'train:error', 'Regex': 'Train_error=(.*?);'}, {'Name': 'validation:error', 'Regex': 'Valid_error=(.*?);'} ] )

有关使用训练的更多信息Amazon SageMaker Python 开发工具包估计器,请参阅Sageaker Python 开发工具包(位于 GitHub 上)。

使用 SageMaker 控制台定义指标

如果选择ECR 中你自己的算法容器选项作为 SageMaker 控制台中的算法源,当您创建训练作业时,将量度定义添加到指标部分。下面的屏幕截图显示了添加示例指标名称和相应的正则表达式后应该如何看待。

使用低级别 SageMaker API 定义指标

通过在MetricDefinitions字段中的AlgorithmSpecification你传递给的输入参数CreateTrainingJoboperation. 例如,如果您要监视train:errorvalidation:errorCloudWatch 中的指标,AlgorithmSpecification将类似于以下示例:

"AlgorithmSpecification": { "TrainingImage": your-own-image-uri, "TrainingInputMode": "File", "MetricDefinitions" : [ { "Name": "train:error", "Regex": "Train_error=(.*?);" }, { "Name": "validation:error", "Regex": "Valid_error=(.*?);" } ] }

有关使用低级别 SageMaker API 定义和运行训练作业的更多信息,请参阅CreateTrainingJob.

监视训练 Job 指标(CloudWatch 控制台)

您可以在 CloudWatch 控制台中实时监视训练作业发出的指标。

监视训练作业指标(CloudWatch 控制台)

  1. 从打开 CloudWatch 控制台https://console.aws.amazon.com/cloudwatch.

  2. 选择 Metrics (指标),然后选择 /aws/sagemaker/TrainingJobs

  3. 选择 TrainingJobName

  4. All metrics (所有指标) 选项卡上,选择您要监控的训练指标的名称。

  5. 绘成图表的指标选项卡上,配置图表选项。有关使用 CloudWatch 图形的更多信息,请参阅绘制指标图形中的Amazon CloudWatch 用户指南.

监视训练 Job 指标(SageMaker 控制台)

您可以使用 SageMaker 控制台实时监视训练作业发出的指标。

监视训练作业指标(SageMaker 控制台)

  1. 从打开 SageMaker 控制台https://console.aws.amazon.com/sagemaker.

  2. 选择 Training jobs (训练作业),然后选择您要查看其指标的训练作业。

  3. 选择 TrainingJobName

  4. Monitor (监视) 部分,您可以查看实例使用率和算法指标图。

例如:查看训练和验证曲线

通常情况下,您将将训练模型所依据的数据拆分为训练和验证数据集。您使用训练集来训练用于对训练数据集进行预测的模型参数。然后,通过计算验证集的预测结果来测试模型预测的效果。一种常见的分析训练作业性能的方法是对照验证曲线绘制训练曲线。

查看训练集和验证集的准确性随时间变化的图形可帮助您改进模型性能。例如,如果训练准确性随时间持续提高,但在某个时间点验证准确性开始下降,则您可能过拟合您的模型。要解决此问题,可以对模型进行调整,例如提高正则化水平。

在此示例中,您可以使用图片分类-全面培训示例中的示例笔记本您的 SageMaker 笔记本实例的部分。如果您没有 SageMaker 笔记本实例,请通过执行以下操作:第 1 步:创建 Amazon SageMaker 笔记本实例. 如果您愿意,可以遵循 GitHub 上示例笔记本中的端到端多类图像分类示例。您还需要 Amazon S3 存储桶来存储训练数据和输出模型。

查看训练和验证错误曲线

  1. 从打开 SageMaker 控制台https://console.aws.amazon.com/sagemaker.

  2. 选择 Notebooks (笔记本),然后选择 Notebook instances (笔记本实例)

  3. 选择要使用的笔记本实例,然后选择 Open (打开)

  4. 在笔记本实例的控制面板上,选择 SageMaker Examples (SageMaker 示例)

  5. 展开Amazon 算法简介部分,然后选择使用旁边图像分类-全训练 .iPynb.

  6. 选择创建副本. SageMaker 创建一个可编辑的副本图像分类-全训练 .iPynb笔记本实例中的笔记本。

  7. 将笔记本中的所有单元格运行到推理部分。您不需要部署终端节点或获取此示例的推论。

  8. 在训练作业开始后,从打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch.

  9. 选择 Metrics (指标),然后选择 /aws/sagemaker/TrainingJobs

  10. 选择 TrainingJobName

  11. All metrics (所有指标) 选项卡上,为您在笔记本中创建的训练作业选择 train:accuracyvalidation:accuracy 指标。

  12. 在图表中,选择一个区域来放大指标值。您应看到类似于以下示例的信息。