

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

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

SageMaker AI 会自动解析训练作业日志并将训练指标发送到。 CloudWatch默认情况下， SageMaker AI 会发送 A [SageMaker I 作业和端点指标中列出的系统资源利用率指标](https://docs.amazonaws.cn/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.amazonaws.cn/sagemaker/latest/dg/images/training-metrics-using-smconsole.png)


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

 CloudWatch 通过在传递给[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html)操作的[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AlgorithmSpecification.html](https://docs.amazonaws.cn/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.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html)。