

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

# 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\_JOB\_NAME - `CreateTrainingJob` 요청의 `TrainingJobName` 파라미터에 지정됩니다.
+ TRAINING\_JOB\_ARN - `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"
}
```