

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

# 사용자 지정 훈련 알고리즘이 있는 컨테이너
<a name="your-algorithms-training-algo"></a>

이 섹션은 Amazon SageMaker AI가 사용자 지정 훈련 알고리즘을 실행하는 Docker 컨테이너와 어떻게 상호 작용하는지 설명합니다. 이 정보를 사용하여 훈련 코드를 작성하고 훈련 알고리즘에 대한 도커 이미지를 생성합니다.

**Topics**
+ [Amazon SageMaker AI가 훈련 이미지를 실행하는 방법](your-algorithms-training-algo-dockerfile.md)
+ [Amazon SageMaker AI의 훈련 정보 제공 방법](your-algorithms-training-algo-running-container.md)
+ [EFA로 훈련 실행하기](your-algorithms-training-efa.md)
+ [Amazon SageMaker AI 신호 알고리즘 성공 및 실패를 알리는 방법](your-algorithms-training-signal-success-failure.md)
+ [Amazon SageMaker AI의 훈련 출력 처리 방식](your-algorithms-training-algo-output.md)

# Amazon SageMaker AI가 훈련 이미지를 실행하는 방법
<a name="your-algorithms-training-algo-dockerfile"></a>

사용자 지정 진입점 스크립트를 사용하여 인프라를 자동화하여 프로덕션 환경에서 훈련할 수 있습니다. 진입점 스크립트를 Docker 컨테이너로 전달하면 이미지를 다시 빌드하지 않고도 독립형 스크립트로 실행할 수도 있습니다. SageMaker AI는 Docker 컨테이너 진입점 스크립트를 사용하여 훈련 이미지를 처리합니다.

이 섹션에서는 훈련 툴킷을 사용하지 않고 사용자 지정 진입점을 사용하는 방법을 보여줍니다. 사용자 지정 진입점을 사용하고 싶지만 Docker 컨테이너를 수동으로 구성하는 방법에 익숙하지 않은 경우 [SageMaker 훈련 툴킷 라이브러리](https://github.com/aws/sagemaker-training-toolkit)를 대신 사용하는 것이 좋습니다. 훈련 툴킷을 사용하는 방법에 대한 자세한 내용은 [자체 훈련 컨테이너 가져오기](adapt-training-container.md) 섹션을 참조하세요.

기본적으로 SageMaker AI는 컨테이너 내에서 `train`이라고 하는 스크립트를 찾습니다. [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html) API의 `ContainerArguments` 및 `ContainerEntrypoint` 파라미터를 사용하여 사용자 지정 진입점을 수동으로 제공할 수도 있습니다.

다음 두 가지 옵션을 사용하여 이미지를 실행하도록 Docker 컨테이너를 수동으로 구성할 수 있습니다.
+ [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API와 진입점 명령이 포함된 Docker 컨테이너를 사용합니다.
+ `CreateTrainingJob` API를 사용하여 Docker 컨테이너 외부에서 훈련 스크립트를 전달합니다.

Docker 컨테이너 외부에서 훈련 스크립트를 전달하는 경우 스크립트를 업데이트할 때 Docker 컨테이너를 다시 빌드할 필요가 없습니다. 또한, 여러 스크립트를 사용하여 동일한 컨테이너에서 실행할 수도 있습니다.

진입점 스크립트에는 이미지에 대한 훈련 코드가 포함되어야 합니다. [추정기](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html) 내에서 선택적 `source_dir` 파라미터를 사용하는 경우, 추정기는 진입점 스크립트가 포함된 폴더로의 상대 Amazon S3 경로를 참조해야 합니다. `source_dir` 파라미터를 사용하여 여러 파일을 참조할 수 있습니다. `source_dir`을/를 사용하지 않는 경우 `entry_point` 파라미터를 사용하여 진입점을 지정할 수 있습니다. 추정기가 포함된 사용자 지정 진입점 스크립트의 예는 [SageMaker AI 스크립트 모드를 이용하여 자체 모델 가져오기](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html)를 참조하세요.

SageMaker AI 모델 훈련은 고성능 S3 Express One Zone 디렉터리 버킷을 파일 모드, 고속 파일 모드 및 파이프 모드의 데이터 입력 위치로 지원합니다. S3 Express One Zone 디렉터리 버킷을 사용하여 훈련 출력을 저장할 수도 있습니다. S3 Express One Zone을 사용하려면 Amazon S3 범용 버킷 대신 S3 Express One Zone 디렉터리 버킷의 URI를 제공합니다. Amazon S3 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 통해서만 디렉터리 버킷에서 SageMaker AI 출력 데이터를 암호화할 수 있습니다. 현재 SageMaker AI 출력 데이터를 디렉터리 버킷에 저장하는 데는 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)가 지원되지 않습니다. 자세한 내용은 [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html)을 참조하세요.

## Docker 컨테이너 내에 번들로 제공되는 진입점 스크립트를 사용하여 훈련 작업을 실행하세요
<a name="your-algorithms-training-algo-dockerfile-api-ep-in"></a>

SageMaker AI는 Docker 컨테이너 내에 번들로 제공되는 진입점 스크립트를 실행할 수 있습니다.
+ 기본적으로 Amazon SageMaker AI는 다음 컨테이너를 실행합니다.

  ```
  docker run image train
  ```
+ SageMaker AI는 이미지 이름 뒤의 `train` 인수를 지정함으로써 컨테이너에 있는 기본 [CMD](https://docs.docker.com/engine/reference/builder/#cmd) 문을 재정의합니다. Docker 컨테이너에서는 `exec` 형식의 `ENTRYPOINT` 명령을 사용하세요.

  ```
  ENTRYPOINT ["executable", "param1", "param2", ...]
  ```

  다음 예제에서는 `k-means-algorithm.py`라는 python 진입점 명령을 지정하는 방법을 보여줍니다.

  ```
  ENTRYPOINT ["python", "k-means-algorithm.py"]
  ```

  `exec` 형식의 `ENTRYPOINT` 명령은, `/bin/sh`의 하위로서가 아니라, 실행 파일을 직접 시작합니다. 이를 통해 SageMaker API로부터 `SIGTERM` 및 `SIGKILL`과/와 같은 신호를 수신할 수 있습니다. SageMaker API를 사용할 때는 다음 조건이 적용됩니다.
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API에는 중지 조건이 있어 SageMaker AI에 특정 시간 이후 모델 훈련 중지를 지시합니다.
  + 다음은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html) API를 보여줍니다. 이 API는 2분의 제한 시간 명령을 가진 `docker stop`와/과 동일한 명령을 실행하여 지정된 컨테이너를 정상적으로 중지합니다.

    ```
    docker stop -t 120
    ```

    명령은 `SIGTERM` 신호를 전송함으로써 실행 중인 컨테이너 중지를 시도합니다. 2분 제한 시간이 지나면 API가 `SIGKILL`를/을 전송하고 컨테이너를 강제로 중지합니다. 컨테이너가 `SIGTERM` 신호를 정상적으로 처리하여 신호 수신 후 120초 이내에 종료할 경우 `SIGKILL` 신호가 전송되지 않습니다.

  SageMaker AI가 훈련을 중지한 이후 중간 모델 아티팩트에 대한 액세스를 원하는 경우 코드를 추가하여 `SIGTERM` 핸들러에 아티팩트 저장을 처리합니다.
+ 모델 훈련에 대해 GPU 디바이스를 사용할 계획인 경우 컨테이너가 `nvidia-docker`와/과 호환되는지 확인해야 합니다. CUDA 도구 키트만이 컨테이너에 포함되어야 합니다. 이미지가 포함된 NVIDIA 드라이버를 번들화하지 마세요. `nvidia-docker`에 대한 자세한 정보는 [NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker)를 참조하세요.
+ SageMaker AI 컨테이너의 진입점 스크립트로서 `tini` 이니셜라이저를 사용할 수 없습니다. `train` 및 `serve` 인수로 인해 혼동되기 때문입니다.
+ `/opt/ml` 및 모든 하위 디렉터리는 SageMaker 훈련에서 예약합니다. 알고리즘의 도커 이미지를 빌드할 때는 알고리즘에 필요한 데이터를 이 디렉터리에 배치하지 않도록 합니다. 그렇게 하면 훈련 중에 데이터가 더 이상 보이지 않을 수 있기 때문입니다.

Docker 이미지 내에서 셸 또는 Python 스크립트를 번들링하거나 Amazon S3 버킷에 스크립트를 제공하거나 AWS Command Line Interface (CLI)를 사용하여 스크립트를 제공하려면 다음 섹션을 계속 진행합니다.

### 쉘 스크립트를 Docker 컨테이너에 번들로 묶습니다
<a name="your-algorithms-training-algo-dockerfile-script-sh"></a>

 도커 이미지 내에 사용자 지정 쉘 스크립트를 번들로 묶으려면 다음 단계를 사용합니다.

1. 쉘 스크립트를 작업 디렉터리에서 Docker 컨테이너 내부로 복사합니다. 다음 코드 스니펫은 현재 작업 디렉터리의 사용자 지정 진입점 스크립트 `custom_entrypoint.sh`를/을 `mydir`에 있는 Docker 컨테이너로 복사합니다. 다음 예제에서는 기본 도커 이미지에 Python이 설치되어 있다고 가정합니다.

   ```
   FROM <base-docker-image>:<tag>
   
   # Copy custom entrypoint from current dir to /mydir on container
   COPY ./custom_entrypoint.sh /mydir/
   ```

1. *Amazon ECR 사용 설명서*의 [도커 이미지 푸시](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)에 있는 지침에 따라 Docker 컨테이너를 빌드하고 Amazon Elastic Container Registry([Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html))로 푸시합니다.

1. 다음 AWS CLI 명령을 실행하여 훈련 작업을 시작합니다.

   ```
   aws --region <your-region> sagemaker create-training-job \
   --training-job-name <your-training-job-name> \
   --role-arn <your-execution-role-arn> \
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "<your-ecr-image>", \
       "ContainerEntrypoint": ["/bin/sh"], \
       "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \
   --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \
   --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \
   --stopping-condition '{"MaxRuntimeInSeconds": 180}'
   ```

### Python 스크립트를 Docker 컨테이너에 번들로 묶습니다
<a name="your-algorithms-training-algo-dockerfile-script-py"></a>

도커 이미지 내에 사용자 지정 Python 스크립트를 번들로 묶으려면 다음 단계를 사용합니다.

1. Python 스크립트를 작업 디렉터리에서 Docker 컨테이너 내부로 복사합니다. 다음 코드 스니펫은 현재 작업 디렉터리의 사용자 지정 진입점 스크립트 `custom_entrypoint.py`를/을 `mydir`에 있는 Docker 컨테이너로 복사합니다.

   ```
   FROM <base-docker-image>:<tag>
   # Copy custom entrypoint from current dir to /mydir on container
   COPY ./custom_entrypoint.py /mydir/
   ```

1. 다음 AWS CLI 명령을 실행하여 훈련 작업을 시작합니다.

   ```
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "<your-ecr-image>", \
       "ContainerEntrypoint": ["python"], \
       "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \
   ```

## Docker 컨테이너 외부에서 진입점 스크립트를 사용하여 훈련 작업을 실행합니다
<a name="your-algorithms-training-algo-dockerfile-api-pass-ep"></a>

자체 Docker 컨테이너를 훈련에 사용하고 Docker 컨테이너 외부에서 진입점 스크립트를 전달할 수 있습니다. 컨테이너 외부에 진입점 스크립트를 구조화하면 몇 가지 이점이 있습니다. 진입점 스크립트를 업데이트하면 Docker 컨테이너를 다시 빌드할 필요가 없습니다. 또한, 여러 스크립트를 사용하여 동일한 컨테이너에서 실행할 수도 있습니다.

[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html) API의 `ContainerEntrypoint` 및 `ContainerArguments` 파라미터를 사용하여 훈련 스크립트의 위치를 지정합니다. 이러한 진입점 및 인수는 Docker 진입점 및 인수와 동일한 방식으로 동작합니다. 이러한 파라미터의 값은 Docker 컨테이너의 일부로 제공된 관련 `ENTRYPOINT` 또는 `CMD` 값을 재정의합니다.

사용자 지정 진입점 스크립트를 Docker 훈련 컨테이너에 전달할 때 제공하는 입력에 따라 컨테이너의 행동이 결정됩니다.
+ 예를 들어, `ContainerEntrypoint`만 제공하는 경우 CreateTrainingJob API를 사용한 요청 구문은 다음과 같습니다.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["string"],   
          ...     
          }       
  }
  ```

  그런 다음 SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

  ```
  docker run --entrypoint <ContainerEntrypoint> image
  ```
**참고**  
`ContainerEntrypoint`가/이 제공되는 경우 SageMaker 훈련 백엔드는 지정된 진입점을 가진 이미지를 실행하고 이미지의 기본값 `ENTRYPOINT`을/를 재정의합니다.
+ `ContainerArguments`만 제공하는 경우 SageMaker AI는 Docker 컨테이너에 진입점 스크립트가 포함되어 있다고 가정합니다. `CreateTrainingJob` API를 사용하는 요청 구문은 다음과 같습니다.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerArguments": ["arg1", "arg2"],
          ...
      }
  }
  ```

  SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

  ```
  docker run image <ContainerArguments>
  ```
+ `ContainerEntrypoint` 및 `ContainerArguments`를 모두 제공하는 경우 `CreateTrainingJob` API를 사용하는 요청 구문은 다음과 같습니다.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["string"],
          "ContainerArguments": ["arg1", "arg2"],
          ...
      }
  }
  ```

   SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

  ```
  docker run --entrypoint <ContainerEntrypoint> image <ContainerArguments>
  ```

`CreateTrainingJob` API에서 지원되는 모든 `InputDataConfig` 소스를 사용하여 훈련 이미지를 실행하기 위한 진입점 스크립트를 제공할 수 있습니다.

### Amazon S3 버킷에 진입점 스크립트를 제공합니다
<a name="your-algorithms-training-algo-dockerfile-script-s3"></a>

 S3 버킷을 사용하여 사용자 지정 진입점 스크립트를 제공하려면 [DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource) API의 `S3DataSource` 파라미터를 사용하여 스크립트 위치를 지정합니다. `S3DataSource` 파라미터를 사용하는 경우 다음이 필요합니다.
+ [InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)는 `File` 유형이어야 합니다.
+ [S3DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)는 `FullyReplicated`여야 합니다.

다음 예제에는 S3 버킷 경로 `s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh`에 custom\$1entrypoint.sh 라는 스크립트가 있습니다.

```
#!/bin/bash
echo "Running custom_entrypoint.sh"
echo "Hello you have provided the following arguments: " "$@"
```

다음으로, 훈련 작업을 실행하기 위한 입력 데이터 채널의 구성을 설정해야 합니다. 를 AWS CLI 직접 사용하거나 JSON 파일과 함께 사용하여이 작업을 수행합니다.

#### JSON 파일과 AWS CLI 함께를 사용하여 입력 데이터 채널 구성
<a name="your-algorithms-training-algo-dockerfile-script-s3-json"></a>

JSON 파일로 입력 데이터 채널을 구성하려면 다음 코드 구조와 AWS CLI 같이를 사용합니다. 다음 모든 필드가 [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax) API에 정의된 요청 구문을 사용하는지 확인하세요.

```
// run-my-training-job.json
{
 "[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-AlgorithmSpecification)": { 
        "ContainerEntrypoint": ["/bin/sh"],
        "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"],
         ...
   },
  "[InputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-InputDataConfig)": [ 
    { 
        "[ChannelName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-ChannelName)": "<your_channel_name>",
        "[DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-DataSource)": { 
            "[S3DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)": { 
                "[S3DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataDistributionType)": "FullyReplicated",
                "[S3DataType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataType)": "S3Prefix",
                "[S3Uri](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3Uri)": "s3://<bucket-name>/<bucket_prefix>"
            }
        },
        "[InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)": "File",
    },
    ...]
}
```

그런 다음 AWS CLI 명령을 실행하여 다음과 같이 JSON 파일에서 훈련 작업을 시작합니다.

```
aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json
```

#### 를 AWS CLI 직접 사용하여 입력 데이터 채널 구성
<a name="your-algorithms-training-algo-dockerfile-script-s3-directly"></a>

JSON 파일 없이 입력 데이터 채널을 구성하려면 다음 AWS CLI 코드 구조를 사용합니다.

```
aws --region <your-region> sagemaker create-training-job \
--training-job-name <your-training-job-name> \
--role-arn <your-execution-role-arn> \
--algorithm-specification '{ \
    "TrainingInputMode": "File", \
    "TrainingImage": "<your-ecr-image>", \
    "ContainerEntrypoint": ["/bin/sh"], \
    "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \
--input-data-config '[{ \
    "ChannelName":"<your_channel_name>", \
    "DataSource":{ \
        "S3DataSource":{ \
            "S3DataType":"S3Prefix", \
            "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \
            "S3DataDistributionType":"FullyReplicated"}}}]' \
--output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \
--resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \
--stopping-condition '{"MaxRuntimeInSeconds": 180}'
```

# Amazon SageMaker AI의 훈련 정보 제공 방법
<a name="your-algorithms-training-algo-running-container"></a>

이 섹션은 SageMaker AI가 Docker 컨테이너에서 훈련 데이터, 하이퍼파라미터 및 기타 구성 정보와 같은 훈련 정보를 사용할 수 있도록 하는 방법을 설명합니다.

모델 훈련을 시작하도록 SageMaker AI에 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청을 전송할 때 훈련 알고리즘이 포함된 Docker 이미지의 Amazon Elastic Container Registry(Amazon ECR) 경로를 지정합니다. 또한 훈련 데이터가 저장된 Amazon Simple Storage Service(S3)의 위치와 알고리즘에 해당되는 파라미터도 지정합니다. SageMaker AI는 이 정보를 Docker 컨테이너에 제공하여 훈련 알고리즘에서 사용할 수 있도록 합니다. 이 섹션은 Docker 컨테이너에서 이 정보를 사용 가능하도록 하는 방법을 설명합니다. 훈련 작업 생성에 대한 자세한 정보는 `CreateTrainingJob` 섹션을 참조하세요. SageMaker AI 컨테이너가 정보를 구성하는 방법에 대한 자세한 내용은 [SageMaker 훈련 및 추론 툴킷](amazon-sagemaker-toolkits.md)의 내용을 참조하세요.

**Topics**
+ [하이퍼파라미터](#your-algorithms-training-algo-running-container-hyperparameters)
+ [환경 변수](#your-algorithms-training-algo-running-container-environment-variables)
+ [입력 데이터 구성](#your-algorithms-training-algo-running-container-inputdataconfig)
+ [훈련 데이터](#your-algorithms-training-algo-running-container-trainingdata)
+ [분산 훈련 구성](#your-algorithms-training-algo-running-container-dist-training)

## 하이퍼파라미터
<a name="your-algorithms-training-algo-running-container-hyperparameters"></a>

 SageMaker AI는 `CreateTrainingJob` 요청의 하이퍼파라미터를 `/opt/ml/input/config/hyperparameters.json` 파일에서 Docker 컨테이너 내에서 사용 가능하도록 합니다.

다음은 `hyperparameters.json`의 하이퍼파라미터 구성의 예로서 [XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html)를 위한 `CreateTrainingJob`작업에서 `num_round` 및 `eta` 하이퍼파라미터를 지정합니다.

```
{
    "num_round": "128",
    "eta": "0.001"
}
```

SageMaker AI의 내장 XGBoost 알고리즘에 사용할 수 있는 하이퍼파라미터의 전체 목록은 [XGBoost 하이퍼파라미터](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost_hyperparameters.html)를 참조하세요.

조정할 수 있는 하이퍼파라미터는 훈련 중인 알고리즘에 따라 달라집니다. SageMaker AI 내장 알고리즘에 사용할 수 있는 하이퍼파라미터 목록을 보려면 [Amazon SageMaker AI 내장 알고리즘 또는 사전 훈련된 모델 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)의 알고리즘 링크 아래에 있는 **하이퍼파라미터** 목록에서 해당 하이퍼파라미터를 찾습니다.

## 환경 변수
<a name="your-algorithms-training-algo-running-container-environment-variables"></a>

SageMaker AI는 컨테이너에 다음과 같은 환경 변수를 설정합니다.
+ TRAINING\$1JOB\$1NAME - `CreateTrainingJob` 요청의 `TrainingJobName` 파라미터에 지정됩니다.
+ TRAINING\$1JOB\$1ARN - `CreateTrainingJob` 응답에서 `TrainingJobArn`로서 반환되는 훈련 작업의 Amazon 리소스 이름(ARN).
+ `CreateTrainingJob` 요청의 [환경 파라미터](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-Environment)에 지정된 모든 환경 변수.

## 입력 데이터 구성
<a name="your-algorithms-training-algo-running-container-inputdataconfig"></a>

SageMaker AI는 `CreateTrainingJob` 요청의 `InputDataConfig` 파라미터에 있는 데이터 채널 정보를 Docker 컨테이너 내 `/opt/ml/input/config/inputdataconfig.json` 파일에서 사용 가능하도록 합니다.

예를 들어 요청에서 3개의 데이터 채널(`train`, `evaluation` 및 `validation`)을 지정한다고 가정합니다. SageMaker AI는 다음 JSON을 제공합니다.

```
{
  "train" : {"ContentType":  "trainingContentType",
             "TrainingInputMode": "File",
             "S3DistributionType": "FullyReplicated",
             "RecordWrapperType": "None"},
  "evaluation" : {"ContentType":  "evalContentType",
                  "TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"},
  "validation" : {"TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"}
}
```

**참고**  
SageMaker AI는 이전의 예에서 표시된 것과 같이 각 데이터 채널에 대한 관련 정보(예: 채널 이름 및 콘텐츠 유형)만을 컨테이너에 제공합니다. `S3DistributionType`은 입력 데이터 소스로 EFS 또는 FSxLustre를 지정하는 경우 `FullyReplicated`로 설정됩니다.

## 훈련 데이터
<a name="your-algorithms-training-algo-running-container-trainingdata"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `AlgorithmSpecification`에 있는 `TrainingInputMode` 파라미터는 컨테이너에서 훈련 데이터세트를 사용하는 방법을 지정합니다. 다음의 입력 모드를 이용할 수 있습니다.
+ **`File`Mode(모드)**

  `File` 모드를 `TrainingInputMode` 값으로 사용하는 경우 SageMaker AI는 컨테이너에서 다음 파라미터를 설정합니다.
  + `TrainingInputMode` 파라미터는 `inputdataconfig.json`에 “파일”로서 기록됩니다.
  + 데이터 채널 디렉터리는 `/opt/ml/input/data/channel_name`에 기록됩니다.

  `File` 모드를 사용하는 경우 SageMaker AI는 각 채널의 디렉터리를 생성합니다. 예를 들어 3개의 채널 `training`, `validation` 및 `testing`이 있는 경우 SageMaker AI는 Docker 컨테이너 내에 다음의 3개의 디렉터리를 만듭니다.
  + `/opt/ml/input/data/training`
  + `/opt/ml/input/data/validation`
  + `/opt/ml/input/data/testing`

  `File` 모드는 또한 다음의 데이터 소스를 지원합니다.
  + Amazon Simple Storage Service(Amazon S3)
  + Amazon Elastic File System(Amazon EFS)
  + Amazon FSx for Lustre
**참고**  
Amazon EFS 및 Amazon FSx와 같은 파일 시스템 데이터 소스를 사용하는 채널은 `File` 모드를 사용해야 합니다. 이 경우 채널에 제공된 디렉터리 경로가 `/opt/ml/input/data/channel_name`에 마운트됩니다.
+ **`FastFile`Mode(모드)**

  `FastFile` 모드를 `TrainingInputNodeParameter`로 사용하는 경우 SageMaker AI는 컨테이너에서 다음 파라미터를 설정합니다.
  + `File` 모드와 마찬가지로 `FastFile` 모드에서 `TrainingInputMode` 파라미터는 `inputdataconfig.json`에 “파일”로 기록됩니다.
  + 데이터 채널 디렉터리는 `/opt/ml/input/data/channel_name`에 기록됩니다.

  `FastFile` 모드는 다음의 데이터 소스를 지원합니다.
  + Amazon S3

  `FastFile` 모드를 사용하면 채널 디렉터리가 읽기 전용 권한으로 마운트됩니다.

  과거에는 `File` 모드가 `FastFile` 모드보다 우선했습니다. 이전 버전과의 호환성을 보장하기 위해 `File` 모드를 지원하는 알고리즘은 `TrainingInputMode` 파라미터가 `inputdataconfig.json.`에서 `File`로 설정되어 있는 한 `FastFile` 모드와 원활하게 작동할 수 있습니다.
**참고**  
`FastFile` 모드를 사용하는 채널은 “S3Prefix”의 `S3DataType`을 사용해야 합니다.  
`FastFile` 모드는 Amazon S3 객체를 폴더로 그룹화하기 위한 구분 기호로 슬래시(`/`) 를 사용하는 폴더 보기를 제공합니다. `S3Uri` 접두사는 폴더 이름의 일부와 일치하지 않아야 합니다. 예를 들어, Amazon S3 데이터세트에 `s3://amzn-s3-demo-bucket/train-01/data.csv`가/이 포함되어 있는 경우, `s3://amzn-s3-demo-bucket/train`나 `s3://amzn-s3-demo-bucket/train-01` 중 어느 것도 `S3Uri` 접두사로 사용할 수 없습니다.  
폴더에 해당하는 채널을 정의하려면 뒤에 슬래시를 사용하는 것이 좋습니다. `train-01` 폴더의 `s3://amzn-s3-demo-bucket/train-01/` 채널을 예로 들 수 있습니다. 뒤따르는 슬래시가 없으면 다른 `s3://amzn-s3-demo-bucket/train-011/` 폴더나 `s3://amzn-s3-demo-bucket/train-01.txt/` 파일이 있는 경우 채널이 모호해집니다.
+ **`Pipe`Mode(모드)**
  + `inputdataconfig.json`에 기록된 `TrainingInputMode` 파라미터: “Pipe”
  + Docker 컨테이너의 데이터 채널 디렉터리: `/opt/ml/input/data/channel_name_epoch_number`
  + 지원되는 데이터 소스: Amazon S3

  각 채널에 대해 별도의 파이프에서 읽어야 합니다. 예를 들어 3개의 채널 `training`, `validation` 및 `testing`이 있는 경우 다음 파이프로부터 읽어야 합니다.
  + `/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...`
  + `/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...`
  + `/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...`

  파이프를 순차적으로 읽습니다. 예를 들어 이름이 `training`인 채널이 있는 경우 이 순서에 따라 파이프를 읽습니다.

  1. `/opt/ml/input/data/training_0`을 읽기 모드로 열고 파일 끝(EOF)으로 읽거나 첫 번째 epoch을 완료한 경우 파이프 파일을 일찍 닫으세요.

  1. 첫 번째 파이프 파일을 닫은 후 `/opt/ml/input/data/training_1`을 찾고 두 번째 epoch 등을 완료할 때까지 읽습니다.

  해당 epoch에 대한 파일이 아직 존재하지 않는 경우 파이프가 생성되기 전까지 코드를 재시도할 수도 있습니다. 채널 유형 간 순서 제한은 없습니다. 예를 들어 `training` 채널에 대해 여러 개의 epoch을 읽을 수 있고, 준비된 경우 `validation` 채널 읽기만을 시작할 수 있습니다. 또는 알고리즘이 필요로 하는 경우 이를 동시에 읽을 수 있습니다.

  자체 컨테이너를 가져올 때 파이프 모드를 사용하는 방법을 보여주는 Jupyter Notebook의 예는 [Amazon SageMaker AI로 자체 파이프 모드 알고리즘 가져오기](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/pipe_bring_your_own/pipe_bring_your_own.ipynb)를 참조하세요.

  

SageMaker AI 모델 훈련은 고성능 S3 Express One Zone 디렉터리 버킷을 파일 모드, 고속 파일 모드 및 파이프 모드의 데이터 입력 위치로 지원합니다. S3 Express One Zone을 사용하려면 Amazon S3 범용 버킷 대신 S3 Express One Zone 디렉터리 버킷의 위치를 입력합니다. 필요한 액세스 제어 및 권한 정책을 IAM 역할에 대한 ARN에 제공합니다. 자세한 내용은 [AmazonSageMakerFullAccesspolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)를 참조하세요. Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 통해서만 디렉터리 버킷에서 SageMaker AI 출력 데이터를 암호화할 수 있습니다. AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)는 현재 SageMaker AI 출력 데이터를 디렉터리 버킷에 저장하는 데 지원되지 않습니다. 자세한 내용은 [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html)을 참조하세요.

## 분산 훈련 구성
<a name="your-algorithms-training-algo-running-container-dist-training"></a>

여러 컨테이너를 사용하여 분산 훈련을 수행하는 경우 SageMaker AI는 `/opt/ml/input/config/resourceconfig.json` 파일에 사용 가능한 모든 컨테이너에 대한 정보를 생성합니다.

컨테이너 간 통신을 활성화하기 위해 이 JSON 파일에는 모든 컨테이너에 대한 정보가 들어 있습니다. SageMaker AI는 이 파일을 `File` 모드 알고리즘과 `Pipe` 모드 알고리즘 모두에서 사용할 수 있도록 합니다. 파일은 다음 정보를 제공합니다.
+ `current_host` - 컨테이너 네트워크에 있는 현재 컨테이너의 이름. 예를 들어 `algo-1`입니다. 호스트 값은 언제든 변경할 수 있습니다. 이 변수에 대한 특정 값으로 코드를 작성하지 마세요.
+ `hosts` - 컨테이너 네트워크에 있는 모든 컨테이너 이름의 목록으로, 문자순으로 정렬됩니다. 예를 들어 `["algo-1", "algo-2", "algo-3"]`은 3개 노드 클러스터를 나타냅니다. 컨테이너는 이러한 이름을 사용하여 컨테이너 네트워크에 있는 다른 컨테이너를 부를 수 있습니다. 호스트 값은 언제든 변경할 수 있습니다. 이 변수에 대한 특정 값으로 코드를 작성하지 마세요.
+ `network_interface_name` - 컨테이너에 표시되는 네트워크 인터페이스의 이름입니다. 예를 들어 MPI(Message Passing Interface)를 실행하는 컨테이너는 이 정보를 사용하여 네트워크 인터페이스 이름을 설정할 수 있습니다.
+ `/etc/hostname` 또는 `/etc/hosts`에 있는 정보를 사용하지 마세요. 부정확할 수 있습니다.
+ 호스트 이름 정보는 알고리즘 컨테이너에서 바로 사용하지 못할 수 있습니다. 클러스터에서 호스트 이름 확인 작업에 대한 재시도 정책을 노드로 추가하도록 설정하는 것이 좋습니다.

다음은 3개 노드 클러스터에 있는 노드 1의 예제 파일입니다.

```
{
    "current_host": "algo-1",
    "hosts": ["algo-1","algo-2","algo-3"],
    "network_interface_name":"eth1"
}
```

# EFA로 훈련 실행하기
<a name="your-algorithms-training-efa"></a>

 SageMaker AI는 고성능 컴퓨팅(HPC) 및 기계 학습 애플리케이션 속도를 높이기 위해 [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)와의 통합을 제공합니다. 이러한 통합을 통해 분산형 훈련 작업을 실행할 때 EFA 장치를 활용할 수 있습니다. SageMaker AI로 가져온 기존 Docker 컨테이너에 EFA 통합을 추가할 수 있습니다. 다음 정보는 분산형 훈련 작업에 EFA 장치를 사용하도록 자체 컨테이너를 구성하는 방법을 설명합니다.

## 사전 조건
<a name="your-algorithms-training-efa-prereq"></a>

 컨테이너는 [SageMaker 훈련 컨테이너 사양](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html)을 충족해야 합니다.  

## EFA 및 필수 패키지를 설치합니다.
<a name="your-algorithms-training-efa-install"></a>

컨테이너는 [EFA 소프트웨어](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html)를 다운로드하고 설치해야 합니다. 이렇게 하면 컨테이너가 EFA 장치를 인식할 수 있고 Libfabric 및 Open MPI의 호환되는 버전이 제공됩니다.

MPI 및 NCCL과 같은 도구를 EFA 지원 훈련 작업의 일부로 사용하려면 컨테이너 내부에 설치하고 관리해야 합니다. 사용 가능한 모든 EFA 버전 목록은 [체크섬을 사용하여 EFA 설치 관리자 확인](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html)을 참조하세요. 다음 예제는 EFA, MPI, OFI, NCCL 및 NCCL-TEST를 설치하도록 EFA 지원 컨테이너의 Dockerfile을 수정하는 방법을 보여줍니다.

**참고**  
컨테이너에서 EFA와 함께 PyTorch를 사용하는 경우, 컨테이너의 NCCL 버전이 설치된 PyTorch의 NCCL 버전과 일치해야 합니다. PyTorch NCCL 버전을 확인하려면 다음 명령을 사용합니다.  

```
torch.cuda.nccl.version()
```

```
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/
ENV NCCL_VERSION=2.7.8
ENV EFA_VERSION=1.30.0
ENV BRANCH_OFI=1.1.1

#################################################
## EFA and MPI SETUP
RUN cd $HOME \
  && curl -O https://s3-us-west-2.amazonaws.com/aws-efa-installer/aws-efa-installer-${EFA_VERSION}.tar.gz \
  && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
  && cd aws-efa-installer \
  && ./efa_installer.sh -y --skip-kmod -g \

ENV PATH="$OPEN_MPI_PATH/bin:$PATH"
ENV LD_LIBRARY_PATH="$OPEN_MPI_PATH/lib/:$LD_LIBRARY_PATH"

#################################################
## NCCL, OFI, NCCL-TEST SETUP
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
  && cd nccl \
  && make -j64 src.build BUILDDIR=/usr/local

RUN apt-get update && apt-get install -y autoconf
RUN cd $HOME \
  && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
  && cd aws-ofi-nccl \
  && ./autogen.sh \
  && ./configure --with-libfabric=/opt/amazon/efa \
       --with-mpi=/opt/amazon/openmpi \
       --with-cuda=/usr/local/cuda \
       --with-nccl=/usr/local --prefix=/usr/local \
  && make && make install
  
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl-tests \
  && cd nccl-tests \
  && make MPI=1 MPI_HOME=/opt/amazon/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local
```

## 컨테이너 생성 시 고려 사항
<a name="your-algorithms-training-efa-considerations"></a>

EFA 장치는 컨테이너에 액세스할 수 있는 장치 목록 아래에서 `/dev/infiniband/uverbs0`로 컨테이너에 마운트됩니다. P4d 인스턴스에서 컨테이너는 4개의 EFA 장치에 액세스할 수 있습니다. EFA 장치는 컨테이너에 액세스할 수 있는 장치 목록에서 다음과 같이 찾을 수 있습니다.
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 각 컨테이너 인스턴스에 제공된 `resourceconfig.json` 파일에서 호스트 이름, 피어 호스트 이름 및 네트워크 인터페이스(MPI용)에 대한 정보를 가져오려면 [분산형 훈련 구성](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)을 참조하세요. 컨테이너는 기본 탄력적 네트워크 인터페이스(ENI)를 통해 피어 간에 정기적인 TCP 트래픽을 처리하는 동시에 EFA 장치를 통해 OFI(커널 바이패스) 트래픽을 처리합니다.

## EFA 장치가 인식되는지 확인합니다.
<a name="your-algorithms-training-efa-verify"></a>

  EFA 장치가 인식되는지 확인하려면 컨테이너 내에서 다음 명령을 실행하세요.

```
/opt/amazon/efa/bin/fi_info -p efa
```

출력은 다음과 비슷한 형태가 됩니다.

```
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-rdm
    version: 2.0
    type: FI_EP_RDM
    protocol: FI_PROTO_EFA
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 2.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_EFA
provider: efa;ofi_rxd
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
```

## EFA로 훈련 작업 실행하기
<a name="your-algorithms-training-efa-run"></a>

 EFA 지원 컨테이너를 만든 후에는 다른 Docker 이미지와 동일한 방식으로 SageMaker AI 예측기를 사용하여 EFA로 훈련 작업을 실행할 수 있습니다. 컨테이너를 등록하고 이를 훈련에 사용하는 방법에 대한 자세한 내용은 [나만의 훈련 컨테이너 조정하기](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5)를 참조하세요.

# Amazon SageMaker AI 신호 알고리즘 성공 및 실패를 알리는 방법
<a name="your-algorithms-training-signal-success-failure"></a>

훈련 알고리즘은 프로세스의 종료 코드를 사용하여 성공 또는 실패 여부를 나타냅니다.

성공적인 훈련 실행은 종료 코드 0을 사용하여 종료되고, 성공적이지 않은 훈련 실행은 0이 아닌 종료 코드를 사용하여 종료됩니다. 이는 `DescribeTrainingJob`에서 반환되는 `TrainingJobStatus`에서 `Completed` 및 `Failed`로 전환됩니다. 이 종료 코드 전환은 표준이고, 모든 언어에서 손쉽게 구현됩니다. 예를 들어 Python에서 `sys.exit(1)`를 사용하여 실패 종료 신호를 보낼 수 있고, 기본 루틴의 끝까지 실행하면 Python에 종료 코드 0이 발생합니다.

실패의 경우 알고리즘은 실패 파일에 실패에 대한 설명을 작성합니다. 자세한 정보는 다음 섹션을 참조하세요.

# Amazon SageMaker AI의 훈련 출력 처리 방식
<a name="your-algorithms-training-algo-output"></a>

알고리즘이 컨테이너 내에서 실행될 때 훈련 작업 및 모델의 상태와 출력 아티팩트를 포함하는 출력을 생성합니다. 알고리즘은 컨테이너의 `/output` 디렉터리에 있는 다음 파일에 이 정보를 작성합니다. Amazon SageMaker AI는 이 디렉터리에 포함된 정보를 다음과 같이 처리합니다.
+ `/opt/ml/model` - 알고리즘은 모든 최종 모델 아티팩트를 이 디렉터리에 작성해야 합니다. SageMaker AI는 이 데이터를 압축된 tar 형식의 단일 객체로 `CreateTrainingJob` 요청에서 지정한 S3 위치에 복사합니다. 단일 훈련 작업 내 여러 컨테이너가 이 디렉터리에 쓰는 경우 컨테이너 간에 `file/directory` 이름 충돌이 발생하면 안 됩니다. SageMaker AI는 훈련 작업 종료 시 결과를 TAR 파일로 집계하고 S3에 업로드합니다.
+ `/opt/ml/output/data` - 알고리즘은 최종 모델 이외의 저장하고자 하는 아티팩트를 이 디렉터리에 작성해야 합니다. SageMaker AI는 이 데이터를 압축된 tar 형식의 단일 객체로 `CreateTrainingJob` 요청에서 지정한 S3 위치에 복사합니다. 단일 훈련 작업 내 여러 컨테이너가 이 디렉터리에 쓰는 경우 컨테이너 간에 `file/directory` 이름 충돌이 발생하면 안 됩니다. SageMaker AI는 훈련 작업 종료 시 결과를 TAR 파일로 집계하고 S3에 업로드합니다.
+ `/opt/ml/output/failure` - 훈련에 실패하는 경우 모든 알고리즘 출력(예: 로깅)이 완료된 이후 알고리즘은 이 파일에 실패에 대한 설명을 기록합니다. `DescribeTrainingJob` 응답에서 SageMaker AI는 이 파일의 첫 1,024자를 `FailureReason`으로 반환합니다.

훈련 출력을 저장할 S3 범용 버킷 또는 S3 디렉터리 버킷을 지정할 수 있습니다. 디렉터리 버킷은 Amazon S3 Express One Zone 스토리지 클래스만 사용합니다. S3 Express One Zone 스토리지 클래스는 일관되게 10밀리초 미만의 지연 시간이 필요한 워크로드 또는 성능이 중요한 애플리케이션을 위해 설계되었습니다. 애플리케이션 및 성능 요구 사항에 가장 적합한 버킷 유형을 선택하세요. S3 디렉터리 버킷에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 가이드*의 [디렉터리 버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html)을 참조하세요.

**참고**  
Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 통해서만 SageMaker AI 출력 데이터를 Amazon S3 디렉터리 버킷에서 암호화할 수 있습니다. AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)는 현재 SageMaker AI 출력 데이터를 디렉터리 버킷에 저장하는 데 지원되지 않습니다.