

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

# 用于 CloudWatch 监控和分析训练作业的 Amazon 指标
<a name="training-metrics"></a>

Amazon SageMaker 训练作业是一个迭代过程，它通过展示训练数据集中的示例来教导模型做出预测。通常情况下，训练算法计算几个指标，例如训练错误和预测准确度。这些指标有助于诊断模型的学习效果是否良好，以及针对未看到的数据进行预测是否将实现很好的泛化。训练算法将这些指标的值写入日志， SageMaker AI 会实时监控这些日志并将其发送到 Amazon CloudWatch 。要分析训练作业的性能，您可以在 CloudWatch 中查看这些指标的图表。当训练作业已完成时，您还可以获得它通过调用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) 操作在其最终迭代中计算的度量值的列表。

**注意**  
Amazon CloudWatch 支持[高分辨率的自定义指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)，其最佳分辨率为 1 秒。但是，分辨率越高， CloudWatch 指标的寿命越短。对于 1 秒频率分辨率，这些 CloudWatch 指标的可用时间为 3 小时。有关分辨率和 CloudWatch 指标寿命的更多信息，请参阅 *Amazon CloudWatch API 参考[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*中的。

**提示**  
[如果您想以更精细的分辨率来描述您的训练作业，精度低至 100 毫秒（0.1 秒），并将训练指标无限期存储在 Amazon S3 中以便随时进行自定义分析，请考虑使用 Amazon Debugger。 SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html) SageMaker Debugger 提供内置规则来自动检测常见的训练问题；它可以检测硬件资源利用率问题（例如 CPU、GPU 和 I/O 瓶颈）和非收敛模型问题（例如过度拟合、梯度消失和张量爆炸等）。 SageMaker 调试器还通过 Studio Classic 及其分析报告提供可视化效果。要探索调试器可视化效果，请参阅 D [SageMaker ebugger Insights 仪表板演练](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio-insights-walkthrough.htm)、[调试器分析报告演练](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html#debugger-profiling-report-walkthrough)和[使用客户端库分析数据](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-analyze-data.html)。 SMDebug 

**Topics**
+ [定义训练指标](define-train-metrics.md)
+ [查看训练作业指标](view-train-metrics.md)
+ [示例：查看训练和验证曲线](train-valid-curve.md)

# 定义训练指标
<a name="define-train-metrics"></a>

SageMaker AI 会自动解析训练作业日志并将训练指标发送到。 CloudWatch默认情况下， SageMaker AI 会发送 A [SageMaker I 作业和端点指标中列出的系统资源利用率指标](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs)。如果您希望 SageMaker AI 解析日志并将自定义指标从您自己的算法的训练作业发送到 CloudWatch，则需要在配置 SageMaker AI 训练任务请求时通过传递指标名称和正则表达式来指定指标定义。

你可以使用 SageMaker AI 控制台、AI [Python SDK 或低级 SageMaker A](https://github.com/aws/sagemaker-python-sdk) I AP SageMaker I 来指定要跟踪的指标。

如果您使用的是自己的算法，请执行以下操作：
+ 确保算法将要捕获的指标写入日志。
+ 定义一个正则表达式，该表达式可以准确搜索日志以捕获要发送到的指标的值 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\$1error=”，表达式 `(.*?);` 捕获任意字符，直至第一个分号字符出现。在此表达式中，括号告诉正则表达式捕获括号内的内容，`.` 表示任何字符，`*` 表示零或更多个字符，`?` 表示仅捕获到遇到 `;` 字符的第一个实例为止。

## 使用 SageMaker AI Python 软件开发工具包定义指标
<a name="define-train-metrics-sdk"></a>

 CloudWatch 通过在初始化`Estimator`对象时指定指标名称和正则表达式列表作为`metric_definitions`参数，定义要发送到的指标。例如，如果您想同时监控中的`train:error`和`validation:error`指标 CloudWatch，则`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=(.*?);'}
    ]
)
```

有关使用[亚马逊 SageMaker Python 软件开发工具包估算器进行训练的更多信息，请参阅上的 S [agemaker Python](https://github.com/aws/sagemaker-python-sdk#sagemaker-python-sdk-overview) SDK](https://sagemaker.readthedocs.io/en/stable)。 GitHub

## 使用 SageMaker AI 控制台定义指标
<a name="define-train-metrics-console"></a>

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

![\[管理控制台中的算法选项表单示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/training-metrics-using-smconsole.png)


## 使用低级 SageMaker AI API 定义指标
<a name="define-train-metrics-api"></a>

 CloudWatch 通过在传递给[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)操作的[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)输入参数的`MetricDefinitions`字段中指定指标名称和正则表达式列表来定义要发送到的指标。例如，如果您想同时监控中的`train:error`和`validation:error`指标 CloudWatch，则`AlgorithmSpecification`应类似于以下示例：

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

有关使用低级 SageMaker AI API 定义和运行训练作业的更多信息，请参阅[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)。

# 查看训练作业指标
<a name="view-train-metrics"></a>

您可以在 Amazon CloudWatch 或 A SageMaker I 控制台中查看您的亚马逊 SageMaker 训练作业发出的指标。

## 监控训练作业指标（CloudWatch 控制台）
<a name="view-train-metrics-cw"></a>

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

**监控训练作业指标（CloudWatch 控制台）**

1. 在 [https://console.aws.amazon.com/cloudwatch](https://console.aws.amazon.com/cloudwatch) 上打开 CloudWatch 控制台。

1. 选择 “**指标**”，然后选择**/aws/sagemaker/TrainingJobs**。

1. 选择 **TrainingJobName**。

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

1. 在**绘成图表的指标**选项卡上，配置图表选项。有关使用 CloudWatch 图表的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[图表指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_metrics.html)。

## 监控训练作业指标（SageMaker AI 控制台）
<a name="view-train-metrics-sm"></a>

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

**监控训练作业指标（SageMaker AI 控制台）**

1. 在 [https://console.aws.amazon.com/s](https://console.aws.amazon.com/sagemaker) agem SageMaker aker 上打开人工智能控制台。

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

1. 选择 **TrainingJobName**。

1. 在 **Monitor (监视)** 部分，您可以查看实例使用率和算法指标图。  
![\[管理控制台中监控部分中的图表示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/console-metrics.png)

# 示例：查看训练和验证曲线
<a name="train-valid-curve"></a>

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

查看训练集和验证集的准确性随时间变化的图形可帮助您改进模型性能。例如，如果训练准确性随时间持续提高，但在某个时间点验证准确性开始下降，则您可能过拟合您的模型。要解决此问题，可以对模型进行调整，例如提高[正则化](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#regularization)水平。

在此示例中，您可以使用 A **I mage-classification-full-training** 笔记本实例的 “**示例笔记本**” 部分中的 SageMaker I 示例。如果您没有 SageMaker 笔记本实例，请按照中的说明创建一个[为本教程创建 Amazon SageMaker 笔记本实例](gs-setup-working-env.md)。如果您愿意，可以参考[示例笔记本中的End-to-End 多类图像分类](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-fulltraining.html)示例。 GitHub您还需要一个 Amazon S3 存储桶来存储训练数据和进行模型输出。

**查看训练和验证错误曲线**

1. 在 [https://console.aws.amazon.com/s](https://console.aws.amazon.com/sagemaker) agem SageMaker aker 上打开人工智能控制台。

1. 选择 **Notebooks (笔记本)**，然后选择 **Notebook instances (笔记本实例)**。

1. 选择要使用的笔记本实例，然后选择 **Open (打开)**。

1. 在笔记本实例的控制面板上，选择 **SageMaker AI 示例**。

1. 展开 “**亚马逊算法简介**” 部分，然后选择 **I mage-classification-fulltraining .ipyn** b 旁边的 “**使用**”。

1. 选择 “**创建副本**”。 SageMaker AI 在你的笔记本实例中创建 **I mage-classification-fulltraining .ipynb** 笔记本的可编辑副本。

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

1. 训练作业开始后，在 [https://console.aws.amazon.com/cloudwatch](https://console.aws.amazon.com/cloudwatch) 上打开 CloudWatch 控制台。

1. 选择 “**指标**”，然后选择**/aws/sagemaker/TrainingJobs**。

1. 选择 **TrainingJobName**。

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

1. 在图表中，选择一个区域来放大指标值。您应看到与以下示例类似的内容。  
![\[图表中的放大区域。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/train-valid-acc.png)