

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 지표 및 환경 변수를 정의합니다.
<a name="automatic-model-tuning-define-metrics-variables"></a>

튜닝 작업은 지표를 사용하여 성능을 평가함으로써 시작하는 훈련 작업에 대한 하이퍼파라미터를 최적화합니다. 이 가이드에서는 지표를 정의하여 훈련 시 사용자 지정 알고리즘을 사용하거나 Amazon SageMaker AI 기본 제공 알고리즘을 사용하는 방법을 알아봅니다. 또한 이 안내서에서는 자동 모델 튜닝(AMT) 작업 중에 환경 변수를 지정하는 방법을 알아보겠습니다.

## 지표 정의
<a name="automatic-model-tuning-define-metrics"></a>

Amazon SageMaker AI 하이퍼파라미터 튜닝은 기계 학습 알고리즘 `stdout` 및 `stderr` 스트림을 구문 분석하여 손실, 검증 정확도 등의 지표를 찾습니다. 지표를 통해 모델이 데이터세트에서 얼마나 잘 수행되고 있는지 알 수 있습니다.

다음 섹션에는 훈련 시 기본 제공 알고리즘과 사용자 지정 알고리즘의 2가지 유형을 사용하는 방법에 대한 설명이 있습니다.

### 훈련 시 기본 제공 알고리즘 사용하기
<a name="automatic-model-tuning-define-metrics-builtin"></a>

[SageMaker AI 기본 제공 알고리즘](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) 중 하나를 사용하는 경우 지표는 이미 정의되어 있습니다. 게다가 기본 제공 알고리즘은 하이퍼파라미터 튜닝에 자동으로 지표를 전송하여 최적화합니다. 또한 이러한 지표는 Amazon CloudWatch Logs에 기록됩니다. 자세한 내용은 [Log Amazon SageMaker AI Events with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/logging-cloudwatch.html)를 참조하세요.

튜닝 작업에 대한 목표 지표인 경우 기본 제공 알고리즘에서 내보내는 지표 중 하나를 선택합니다. 사용 가능한 지표 목록은 [Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)에서 적절한 알고리즘에 대한 모델 튜닝 섹션을 참조하세요.

[튜닝 작업](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterAlgorithmSpecification.html)에서 모니터링할 지표는 최대 40개까지 선택할 수 있습니다. 이러한 지표 중 하나를 목표 지표로 선택합니다. 하이퍼파라미터 튜닝 작업은 목표 지표 대비 가장 성과가 좋았던 [훈련 작업](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html#sagemaker-DescribeHyperParameterTuningJob-response-BestTrainingJob)을 반환합니다.

**참고**  
하이퍼파라미터 튜닝은 훈련 중에 사용할 수 있도록 추가 하이퍼파라미터 `_tuning_objective_metric`을(를) 자동 전송하여 목표 지표를 튜닝 작업에 전달합니다.

### 훈련 시 사용자 지정 알고리즘 사용하기
<a name="automatic-model-tuning-define-metrics-custom"></a>

이 섹션에서는 훈련 시 자체 사용자 지정 알고리즘을 사용하도록 자체 지표를 정의하는 방법을 알아보겠습니다. 이때 알고리즘이 최소 하나의 지표를 `stderr` 또는 `stdout`에 기록해야 합니다. 하이퍼파라미터 튜닝은 이러한 스트림을 구문 분석하여 모델이 데이터세트에서 얼마나 잘 수행되고 있는지 보여주는 알고리즘 지표를 찾습니다.

튜닝 작업에서 모니터링하는 각 지표에 대해 이름 및 정규식을 지정하여 사용자 지정 지표를 정의할 수 있습니다. 그 다음에 이 지표 정의를 `AlgorithmSpecification`의 `MetricDefinitions` 필드에 있는 `TrainingJobDefinition` 파라미터 내 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) API에 전달합니다.

다음은 훈련 알고리즘에서 `stderr` 또는 `stdout`에 기록된 로그의 샘플 출력입니다.

```
GAN_loss=0.138318;  Scaled_reg=2.654134; disc:[-0.017371,0.102429] real 93.3% gen 0.0% disc-combined=0.000000; disc_train_loss=1.374587;  Loss = 16.020744;  Iteration 0 took 0.704s;  Elapsed=0s
```

다음 코드 예제에서는 Python에서 정규 표현식을 사용하는 방법을 알아보겠습니다. 이는 샘플 로그 출력을 검색하고 서로 다른 네 가지 지표의 숫자 값을 캡처하는 데 사용됩니다.

```
[
    {
        "Name": "ganloss",
        "Regex": "GAN_loss=(.*?);",
    },
    {
        "Name": "disc-combined",
        "Regex": "disc-combined=(.*?);",
    },
    {
        "Name": "discloss",
        "Regex": "disc_train_loss=(.*?);",
    },
    {
        "Name": "loss",
        "Regex": "Loss = (.*?);",
    },
]
```

정규 표현식에서 괄호 `()`은(는) 정규 표현식의 일부를 그룹화하는 데 사용됩니다.
+ 코드 예제에 정의된 `loss` 지표의 경우 표현식 `(.*?);`은(는) 정확한 텍스트 `"Loss="`와(과) 첫 번째 세미콜론(`;`) 문자 사이의 모든 문자를 캡처합니다.
+ `.` 문자는 정규 표현식이 모든 문자와 일치하도록 지시합니다.
+  `*` 문자는 0개 이상의 문자와 일치함을 의미합니다.
+ `?` 문자는 `;` 문자의 첫 인스턴스까지만 캡쳐함을 의미합니다.

코드 샘플에 정의된 손실 지표는 샘플 출력에서 `Loss = 16.020744`을(를) 캡쳐합니다.

지표 중에서 튜닝 작업에 대한 목표 지표로 정의할 지표를 하나 선택합니다. SageMaker API를 사용할 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 작업에 전송하는 `HyperParameterTuningJobConfig` 파라미터의 `HyperParameterTuningJobObjective` 필드에 있는 `name` 키의 값을 지정합니다.

## 환경 변수 지정
<a name="automatic-model-tuning-define-variables"></a>

SageMaker AI AMT는 튜닝 작업 내에서 하이퍼파라미터를 최적화하여 모델 성능에 가장 적합한 파라미터를 찾습니다. 환경 변수를 사용하여 튜닝 작업 동작을 변경하도록 구성할 수 있습니다. 또한 훈련 중에 사용한 환경 변수를 튜닝 작업에서 사용할 수도 있습니다.

튜닝 작업의 환경 변수를 사용하거나 새 환경 변수를 지정하려면 SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html) API에서 `Environment` 문자열 값을 입력합니다. 이 훈련 작업 정의를 [CreateHyperParameterTuningJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) API에 전달합니다.

예를 들어, `SM_LOG_LEVEL` 환경 변수를 다음 값으로 설정하여 Python 컨테이너의 출력을 조정할 수 있습니다.

```
NOTSET=0
DEBUG=10
INFO=20
WARN=30
ERROR=40
CRITICAL=50
```

일례로 로그 수준을 `10`(으)로 설정하여 컨테이너 로그를 디버깅하려면, 다음과 같이 [HyperParameterTrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html)에서 환경 변수를 설정합니다.

```
{
   "[HyperParameterTuningJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html#sagemaker-CreateHyperParameterTuningJob-request-HyperParameterTuningJobConfig)": { 
   ...,
   }
   "[TrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html#sagemaker-CreateHyperParameterTuningJob-request-TrainingJobDefinition)": { 
      ...,
      "Environment" : [
          {
            "SM_LOG_LEVEL": 10 
          }
      ],
      ...,
   },
   ...,        
}
```