

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 定義訓練指標
<a name="define-train-metrics"></a>

SageMaker AI 會自動剖析訓練任務日誌，並將訓練指標傳送至 CloudWatch。根據預設，SageMaker AI 會傳送 [SageMaker AI 任務和端點指標](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs)中列出的系統資源使用率指標。如果您希望 SageMaker AI 從自己的演算法剖析日誌，並將訓練任務的自訂指標傳送到 CloudWatch，設定 SageMaker AI 訓練任務請求時，必須透過傳遞指標名稱和規則表達式來指定指標定義。

您可以使用 SageMaker AI 主控台、[SageMaker AI Python SDK](https://github.com/aws/sagemaker-python-sdk) 或低階 SageMaker AI 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` 指標 regex 中，regex 的第一部分會尋找確切文字 "Train\_error="，而表達式 `(.*?);` 會擷取第一個分號字元前顯示的任何字元。在這個表達式中，括號告知 regex 擷取其內部內容、`.` 代表任何字元、`*` 代表零個或多個，而 `?` 代表僅擷取第一個 `;` 字元執行個體之前的內容。

## 使用 SageMaker AI Python SDK 定義指標
<a name="define-train-metrics-sdk"></a>

當您初始化 `Estimator` 物件時，可透過 `metric_definitions` 引數形式指定指標名稱和規則表達式的清單，以定義您想要傳送至 CloudWatch 的指標。例如，如果您想要在 CloudWatch 中監控 `train:error` 和 `validation: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](https://sagemaker.readthedocs.io/en/stable)估算器進行訓練的更多相關資訊，請參閱 GitHub 上的 [SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk#sagemaker-python-sdk-overview)。

## 使用 SageMaker AI 主控台定義指標
<a name="define-train-metrics-console"></a>

建立訓練任務時，如果您選擇**ECR 中的自有演算法容器**選項作為 SageMaker AI 主控台的演算法來源，請在**指標**區段中新增指標定義。下列螢幕擷取畫面顯示新增範例指標名稱和對應的規則表達式後應呈現的樣子。

![主控台的演算法選項範例表單。](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/training-metrics-using-smconsole.png)


## 使用低階 SageMaker AI API 定義指標
<a name="define-train-metrics-api"></a>

在您傳遞至 [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` 欄位中，指定指標名稱清單和規則表達式，以定義您想要傳送到 CloudWatch 的指標。例如，如果您想要在 CloudWatch 中監控 `train:error` 和 `validation:error` 這兩個指標，您的 `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)。