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

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

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

注意

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

提示

如果您想以更精细的分辨率来描述您的训练作业,精度低至 100 毫秒(0.1 秒),并将训练指标无限期存储在 Amazon S3 中以便随时进行自定义分析,请考虑使用 Amazon SageMaker Debugger。SageMaker Debugger 内置了一些规则,可自动检测常见的训练问题;它可以检测硬件资源利用率问题(例如 CPU、GPU 和 I/O 瓶颈)以及非收敛模型问题(例如过度拟合、梯度消失和张量爆炸等)。SageMaker Debugger 还通过 Studio 及其分析报告提供可视化效果。要探索 Debugger 可视化效果,请参阅 SageMaker Debugger 见解控制面板演练Debugger 分析报告演练以及使用 SMDebug 客户端库分析数据

定义训练指标

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

您可以使用 SageMaker 控制台、SageMaker Python SDK 或低级 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=”,表达式 (.*?); 捕获任意字符,直至第一个分号字符出现。在此表达式中,括号告诉正则表达式捕获括号内的内容,. 表示任何字符,* 表示零或更多个字符,? 表示仅捕获到遇到 ; 字符的第一个实例为止。

使用 SageMaker Python SDK 定义指标

通过在初始化 Estimator 对象时将一系列指标名称和正则表达式指定为 metric_definitions 参数,来定义要发送到 CloudWatch 的指标。例如,如果您想在 CloudWatch 中监控 train:errorvalidation:error 指标,则您的 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 SDK 估算器进行训练的更多信息,请参阅 GitHub 上的 Sagemaker Python SDK

使用 SageMaker 控制台定义指标

如果您在创建训练作业时选择您在 ECR 中的算法容器选项作为 SageMaker 控制台中的算法源,请在指标部分中添加指标定义。以下屏幕截图显示了其在添加示例指标名称和相应的正则表达式后的外观。

使用低级 SageMaker API 定义指标

通过在您传递到 CreateTrainingJob 操作的 AlgorithmSpecification 输入参数的 MetricDefinitions 字段中指定指标名称和正则表达式的列表,定义要发送到 CloudWatch 的指标。例如,如果您想在 CloudWatch 中监控 train:errorvalidation:error 指标,则您的 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

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

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

监控训练作业指标(CloudWatch 控制台)
  1. 通过 https://console.aws.amazon.com/cloudwatch 打开 CloudWatch 控制台。

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

  3. 选择 TrainingJobName

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

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

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

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

监控训练作业指标(SageMaker 控制台)
  1. 通过 https://console.aws.amazon.com/sagemaker 打开 SageMaker 控制台。

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

  3. 选择 TrainingJobName

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

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

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

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

在此示例中,您可以使用 SageMaker 笔记本实例的示例笔记本部分中的 Image-classification-full-training 示例。如果您还没有 SageMaker 笔记本实例,请按照 步骤 1:创建 Amazon SageMaker 笔记本实例 中的说明进行操作来创建一个。如果您愿意,可以遵循 GitHub 上示例笔记本中的端到端多类图像分类示例。您还需要一个 Amazon S3 存储桶来存储训练数据和进行模型输出。

查看训练和验证错误曲线
  1. 通过 https://console.aws.amazon.com/sagemaker 打开 SageMaker 控制台。

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

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

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

  5. 展开 Amazon 算法简介部分,然后选择 Image-classification-fulltraining.ipynb 旁边的使用

  6. 选择创建副本。SageMaker 在笔记本实例中创建 Image-classification-fulltraining.ipynb 笔记本的可编辑副本。

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

  8. 在训练作业启动后,通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch

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

  10. 选择 TrainingJobName

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

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