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

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

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

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

训练指标示例笔记本

以下示例笔记本说明如何查看和绘制训练指标:

有关如何创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅示例笔记本. 要查看所有SageMaker示例的列表,请在创建并打开笔记本实例后,选择 SageMaker Examples 选项卡。要访问演示如何使用训练指标 object2vec_sentence_similarity.ipynb 和 的示例笔记本 xgboost_abalone.ipynb,请从 Amazon 算法简介部分。要打开笔记本,请选择其 Use (使用) 选项卡,然后选择 Create copy (创建副本).

定义训练指标

SageMaker 自动解析内置算法发出的指标的日志,并将这些指标发送到 CloudWatch。如果您希望 SageMaker 从自定义算法解析日志,并将算法发出的指标发送到 CloudWatch,则必须指定您希望 SageMaker 在您配置训练作业时发送到 CloudWatch 的指标。您指定要发送的指标的名称以及要使用的正则表达式,SageMaker 会使用这些正则表达式来分析您的算法发出的日志来查找这些指标。

您可以使用 SageMaker 控制台SageMaker、Python 开发工具包 (https://github.com/aws/sagemaker-python-sdk) 或低级别 SageMaker API 指定要跟踪的指标。

定义指标的正则表达式

要查找某个指标,SageMaker 搜索您的算法发出的日志,并查找与您为该指标指定的正则表达式相匹配的日志。如果您使用的是自己的算法,请执行以下操作:

  • 确保算法写入您要捕获到日志的指标

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

例如,假设您的算法通过将类似如下的日志写入 stdout stderr: 来发出训练错误和验证错误指标:

Train_error=0.138318; Valid_error = 0.324557;

如果您想在 CloudWatch 中监视这两个指标,则您的 AlgorithmSpecification 将类似如下:

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

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

定义训练指标(低级 SageMaker API)

CloudWatch 通过在传递给 MetricDefinitionsAlgorithmSpecification 操作的 CreateTrainingJob 输入参数的 字段中指定指标名称和正则表达式的列表,定义要发送到 的指标。如果您想在 train:error 中监视 validation:error 和 CloudWatch 指标,则您的 AlgorithmSpecification 将类似如下:

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

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

定义训练指标(SageMaker Python 开发工具包)

通过在初始化 CloudWatch 对象时将指标名称和正则表达式的列表指定为 metric_definitions 参数,定义您要发送到 Estimator 的指标。如果您想在 train:error 中监视 validation:error 和 CloudWatch 指标,则您的 Estimator 初始化将类似如下:

estimator = Estimator(image_name=ImageName, role='SageMakerRole', train_instance_count=1, train_instance_type='ml.c4.xlarge', train_instance_type='ml.c4.xlarge', k=10, sagemaker_session=sagemaker_session, metric_definitions=[ {'Name': 'train:error', 'Regex': 'Train_error=(.*?);'}, {'Name': 'validation:error', 'Regex': 'Valid_error=(.*?);'} ] )

有关使用 Amazon SageMaker Python SDK评估程序的更多信息,请参阅 https://github.com/aws/sagemaker-python-sdk#sagemaker-python-sdk-overview.

定义训练指标(控制台)

当您通过提供 Metrics (指标). 的名称和正则表达式来创建训练作业时,可以在控制台中为自定义算法定义指标。

如果您想在 train:error 中监视 validation:error 和 CloudWatch 指标,则您的指标定义将类似如下:

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

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

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

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

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

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

  3. 选择 TrainingJobName

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

  5. Graphed metrics (绘成图表的指标) 选项卡上,配置图表选项。有关使用CloudWatch图表的更多信息,请参阅 https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/graph_metrics.html 用户指南 中的Amazon CloudWatch图表指标

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

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

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

  1. 在 SageMakerhttps://console.aws.amazon.com/sagemaker/ 打开 . 控制台。

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

  3. 选择 TrainingJobName

  4. Monitor (监控) 部分中,您可以查看实例利用率和算法指标的图表。

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

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

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

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

查看训练和验证错误曲线

  1. 在 SageMakerhttps://console.aws.amazon.com/sagemaker/ 打开 . 控制台。

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

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

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

  5. 展开 Introduction to Amazon Algorithms (Amazon 算法简介) 部分,然后选择 Image-classification-fulltraining.ipynb 旁边的 Use (使用)。

  6. 选择 Create copy (创建副本)。 在笔记本实例中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. 在图表中,选择一个区域来放大指标值。您应看到类似于以下内容的信息: