

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

# 자체 처리 컨테이너 빌드(고급 시나리오)
<a name="build-your-own-processing-container"></a>

데이터 처리, 특성 추출 및 모델 평가 워크로드를 실행하기 위한 자체 코드 및 종속성이 있는 Docker 이미지를 Amazon SageMaker Processing에 제공할 수 있습니다. 다음은 자체 처리 컨테이너를 구축하는 방법에 대한 정보를 제공합니다.

Dockerfile의 다음 예제는 처리 작업으로 실행할 수 있는 Python 라이브러리 scikit-learn 및 pandas로 컨테이너를 빌드합니다.

```
FROM python:3.7-slim-buster

# Install scikit-learn and pandas
RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3

# Add a Python script and configure Docker to run it
ADD processing_script.py /
ENTRYPOINT ["python3", "/processing_script.py"]
```

처리 스크립트의 예제는 [SageMaker Processing 시작하기](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb)를 참조하세요.

이 Docker 이미지를 빌드하여 Amazon Elastic Container Registry(Amazon ECR) 리포지토리로 푸시하고, SageMaker AI IAM 역할이 Amazon ECR에서 이미지를 가져올 수 있는지 확인하세요. 그런 후에 Amazon SageMaker Processing으로 이 이미지를 실행할 수 있습니다.

## Amazon SageMaker Processing으로 처리 컨테이너를 구성하는 방법
<a name="byoc-config"></a>

Amazon SageMaker Processing은 환경 변수 및 2개의 JSON 파일(처리 컨테이너에서 사전 정의된 위치에 있는 `/opt/ml/config/processingjobconfig.json` 및 `/opt/ml/config/resourceconfig.json`)을 통해 해당 컨테이너에 대한 구성 정보를 제공합니다.

처리 작업이 시작되면 `CreateProcessingJob` 요청의 `Environment` 맵으로 지정한 환경 변수가 사용됩니다. 이 `/opt/ml/config/processingjobconfig.json` 파일에는 처리 컨테이너의 호스트 이름에 대한 정보가 포함되어 있으며 `CreateProcessingJob` 요청에도 지정됩니다.

다음 예제에서는 `/opt/ml/config/processingjobconfig.json` 파일의 형식을 보여줍니다.

```
{
    "ProcessingJobArn": "<processing_job_arn>",
    "ProcessingJobName": "<processing_job_name>",
    "AppSpecification": {
        "ImageUri": "<image_uri>",
        "ContainerEntrypoint": null,
        "ContainerArguments": null
    },
    "Environment": {
        "KEY": "VALUE"
    },
    "ProcessingInputs": [
        {
            "InputName": "input-1",
            "S3Input": {
                "LocalPath": "/opt/ml/processing/input/dataset",
                "S3Uri": "<s3_uri>",
                "S3DataDistributionType": "FullyReplicated",
                "S3DataType": "S3Prefix",
                "S3InputMode": "File",
                "S3CompressionType": "None",
                "S3DownloadMode": "StartOfJob"
            }
        }
    ],
    "ProcessingOutputConfig": {
        "Outputs": [
            {
                "OutputName": "output-1",
                "S3Output": {
                    "LocalPath": "/opt/ml/processing/output/dataset",
                    "S3Uri": "<s3_uri>",
                    "S3UploadMode": "EndOfJob"
                }
            }
        ],
        "KmsKeyId": null
    },
    "ProcessingResources": {
        "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "VolumeSizeInGB": 30,
            "VolumeKmsKeyId": null
        }
    },
    "RoleArn": "<IAM role>",
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 86400
    }
}
```

`/opt/ml/config/resourceconfig.json` 파일에는 처리 컨테이너의 호스트 이름에 대한 정보가 포함되어 있습니다. 분산 처리 코드를 생성하거나 실행할 때 다음 호스트 이름을 사용합니다.

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

`/etc/hostname` 또는 `/etc/hosts`에 포함된 호스트 이름에 대한 정보는 정확하지 않을 수 있으므로 사용하지 마세요.

호스트 이름은 처리 컨테이너에서 즉시 사용하지 못할 수 있습니다. 클러스터에서 호스트 이름 확인 작업에 대한 재시도 정책을 노드로 추가하도록 설정하는 것이 좋습니다.