

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

# SageMaker용 사용자 지정 Docker 컨테이너 이미지를 생성하고 이를 AWS Step Functions의 모델 교육에 사용합니다.
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions"></a>

*Julia Bluszcz, Aubrey Oosthuizen, Mohan Gowda Purushothama, Neha Sharma, Mateusz Zaremba, Amazon Web Services*

## 요약
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-summary"></a>

이 패턴은 Amazon SageMaker용 Docker 컨테이너 이미지를 생성하고 이를 AWS Step Functions의 교육 모델로 사용하는 방법을 보여줍니다. 컨테이너에 사용자 정의 알고리즘을 패키징하면 프로그래밍 언어, 환경, 프레임워크, 종속성에 상관없이 SageMaker에서 거의 모든 코드를 사용할 수 있습니다.

제공된 SageMaker 노트북 예제에서는 Amazon Elastic Container Registry(Amazon ECR)에 사용자 지정 Docker 컨테이너 이미지를 저장합니다. 그러면 Step Functions는 Amazon ECR에 저장된 컨테이너를 사용하여 Python SageMaker 처리 스크립트를 실행합니다. 그리고 나서, 컨테이너는 Amazon Simple Storage Service(S3)로 모델을 내보냅니다.

## 사전 조건 및 제한 사항
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정.
+ [Amazon S3 권한을 가진 SageMaker AWS Identity and Access Management (IAM) 역할](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)
+ [Step Functions용 IAM 실행 역할](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)
+ Python에 대한 지식
+ Amazon SageMaker Python SDK에 대한 지식
+ AWS Command Line Interface(AWS CLI)에 대한 지식
+ AWS SDK for Phyton(Boto3)에 대한 지식
+ Amazon ECR에 대한 지식
+ Docker에 대한 지식

**제품 버전**
+ AWS Step Functions Data Science SDK v2.3.0
+ Amazon SageMaker Python SDK 버전 2.78.0

## 아키텍처
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-architecture"></a>

다음 다이어그램은 SageMaker용 Docker 컨테이너 이미지를 만든 다음 Step Functions에서 교육 모델에 사용하는 예제 워크플로우를 보여줍니다.

![SageMaker용 Docker 컨테이너 이미지를 만들고 Step Functions의 학습 모델에 사용하기 위한 워크플로우](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 데이터 사이언티스트 또는 DevOps 엔지니어는 SageMaker 노트북을 사용하여 사용자 지정 Docker 컨테이너 이미지를 생성합니다.

1. 데이터 사이언티스트 또는 DevOps 엔지니어는 Docker 컨테이너 이미지를 프라이빗 레지스트리에 있는 Amazon ECR 프라이빗 리포지토리에 저장합니다.

1. 데이터 사이언티스트나 DevOps 엔지니어는 Docker 컨테이너를 사용하여 Step Functions 워크플로우에서 Python SageMaker 처리 작업을 실행합니다.

**자동화 및 규모 조정**

이 패턴의 예제 SageMaker 노트북은 `ml.m5.xlarge` 노트북 인스턴스 유형을 사용합니다. 사용 사례에 맞게 인스턴스 유형을 변경할 수 있습니다. SageMaker 노트북 인스턴스 유형에 대한 자세한 내용은 [Amazon SageMaker 요금](https://aws.amazon.com/sagemaker/pricing/)을 참조하세요.

## 도구
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ [Amazon Elastic Container Registry(Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)는 안전하고 확장 가능하고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)는 ML 모델을 구축하고 훈련시킨 후 모델을 프로덕션 지원 호스팅 환경에 배포할 수 있는 관리형 기계 학습(ML) 서비스입니다.
+ [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk)는 SageMaker에서 기계 학습 모델을 교육하고 배포하기 위한 오픈 소스 라이브러리입니다.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)은 Lambda 함수와 기타 AWS 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다.
+ [AWS Step Functions Data Science Python SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html)는 기계 학습 모델을 처리하고 게시하는 Step Functions 워크플로우를 쉽게 생성할 수 있는 오픈 소스 라이브러리입니다.

## 에픽
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-epics"></a>

### 사용자 지정 Docker 컨테이너 이미지를 생성하여 Amazon ECR에 저장합니다.
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon ECR을 설정하고 새 프라이빗 레지스트리를 생성합니다. | 아직 설정하지 않았다면 *Amazon ECR 사용 설명서*의 [Amazon ECR로 설정](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)에 나와 있는 지침에 따라 Amazon ECR을 설정합니다. 각 AWS 계정은 기본 프라이빗 Amazon ECR 레지스트리와 함께 제공됩니다. | DevOps 엔지니어 | 
| Amazon ECR 프라이빗 리포지토리를 생성합니다. | *Amazon ECR 사용 설명서*의 [프라이빗 리포지토리 생성](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)의 지침을 따릅니다.참고: 생성한 리포지토리는 사용자 지정 Docker 컨테이너 이미지를 저장하는 곳입니다. | DevOps 엔지니어 | 
| SageMaker 처리 작업을 실행하는 데 필요한 사양이 포함된 Dockerfile을 생성합니다. | Dockerfile을 구성하여 SageMaker 처리 작업을 실행하는 데 필요한 사양이 포함된 Dockerfile을 생성합니다. 지침은 *Amazon SageMaker 개발자 가이드*의 [자체 교육 컨테이너에 맞게 조정](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)을 참조하세요.<br />Dockerfile에 대한 자세한 내용은 Docker 설명서의 [Dockerfile 참조](https://docs.docker.com/engine/reference/builder/)를 참조하세요.<br />**Dockerfile을 생성하기 위한 Jupyter Notebook 코드 셀의 예**<br />*셀 1*<pre># Make docker folder<br />!mkdir -p docker</pre><br />*셀 2*<pre>%%writefile docker/Dockerfile<br /><br />FROM python:3.7-slim-buster<br /><br />RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3<br />ENV PYTHONUNBUFFERED=TRUE<br /><br />ENTRYPOINT ["python3"]</pre> | DevOps 엔지니어 | 
| Docker 컨테이너 이미지를 구축하고 Amazon ECR에 푸시합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)자세한 내용은 GitHub에 있는 *자체 알고리즘 컨테이너 빌드*의 [컨테이너 빌드 및 등록](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container)을 참조하세요.<br />**Docker 이미지를 빌드하고 등록하기 위한 Jupyter Notebook 코드 셀의 예**중요: 다음 셀을 실행하기 전에 Dockerfile을 생성하여 라는 디렉터리에 저장했는지 확인합니다. 또한 Amazon ECR 리포지토리를 생성했는지 확인하고 첫 번째 셀의 `ecr_repository` 값을 리포지토리 이름으로 바꿔야 합니다.<br />*셀 1*<pre>import boto3<br />tag = ':latest'<br />account_id = boto3.client('sts').get_caller_identity().get('Account')<br />region = boto3.Session().region_name<br />ecr_repository = 'byoc'<br /><br />image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)</pre><br />*셀 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre><br />*셀 3*<pre># Authenticate to ECR<br />!aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com</pre><br />*셀 4*<pre># Push docker image<br />!docker push $image_uri</pre>참고: 및 명령을 사용할 수 있도록 Docker 클라이언트를 프라이빗 레지스트리에 인증해야 합니다. 이러한 명령은 레지스트리의 리포지토리로 이미지를 푸시하거나 가져옵니다. | DevOps 엔지니어 | 

### 사용자 지정 Docker 컨테이너 이미지를 사용하는 Step Functions 워크플로우를 생성합니다.
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 지정 처리 및 모델 학습 로직이 포함된 Python 스크립트를 생성합니다. | 데이터 처리 스크립트에서 실행할 사용자 지정 처리 로직을 작성합니다. 그런 다음 이라는 이름이 `training.py`인 Python 스크립트로 저장합니다.<br />자세한 내용은 GitHub의 [SageMaker 스크립트 모드를 사용하여 자체 모델 가져오기](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html)를 참조하세요.<br />**사용자 지정 처리 및 모델 학습 로직이 포함된 예제 Python 스크립트**<pre>%%writefile training.py<br />from numpy import empty<br />import pandas as pd<br />import os<br />from sklearn import datasets, svm<br />from joblib import dump, load<br /><br /><br />if __name__ == '__main__':<br />    digits = datasets.load_digits()<br />    #create classifier object<br />    clf = svm.SVC(gamma=0.001, C=100.)<br />    <br />    #fit the model<br />    clf.fit(digits.data[:-1], digits.target[:-1])<br />    <br />    #model output in binary format<br />    output_path = os.path.join('/opt/ml/processing/model', "model.joblib")<br />    dump(clf, output_path)</pre> | 데이터 과학자 | 
| SageMaker 프로세싱 작업을 단계 중 하나로 포함하는 Step Functions 워크플로우를 생성합니다. | [AWS Step Functions 데이터 과학 SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html)를 설치 및 가져오고 **training.py** 파일을 Amazon S3에 업로드합니다. 그런 다음 [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk)를 사용하여 Step Functions에서 처리 단계를 정의합니다.중요: AWS 계정에서 Step Functions에 대한 IAM 실행 역할을 생성했는지 확인합니다.<br />**Amazon S3에 업로드하기 위한 예제 환경 설정 및 사용자 지정 교육 스크립트**<pre>!pip install stepfunctions<br /><br />import boto3<br />import stepfunctions<br />import sagemaker<br />import datetime<br /><br />from stepfunctions import steps<br />from stepfunctions.inputs import ExecutionInput<br />from stepfunctions.steps import (<br />    Chain<br />)<br />from stepfunctions.workflow import Workflow<br />from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput<br /><br />sagemaker_session = sagemaker.Session()<br />bucket = sagemaker_session.default_bucket() <br />role = sagemaker.get_execution_role()<br />prefix = 'byoc-training-model'<br /><br /># See prerequisites section to create this role<br />workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole"<br /><br />execution_input = ExecutionInput(<br />    schema={<br />        "PreprocessingJobName": str})<br /><br /><br />input_code = sagemaker_session.upload_data(<br />    "training.py",<br />    bucket=bucket,<br />    key_prefix="preprocessing.py",<br />)</pre><br />**사용자 지정 Amazon ECR 이미지와 Python 스크립트를 사용하는 SageMaker 처리 단계 정의 예시**참고: 파라미터를 사용하여 작업 이름을 지정해야 합니다. 파라미터 값은 작업이 실행될 때마다 고유해야 합니다. 또한 **training.py** 파일의 코드는 `input` 파라미터로 `ProcessingStep`에 전달되므로 컨테이너 내에 복사됩니다. `ProcessingInput` 코드의 대상은 `container_entrypoint`의 두 번째 인수와 동일합니다.<pre>script_processor = ScriptProcessor(command=['python3'],<br />                image_uri=image_uri,<br />                role=role,<br />                instance_count=1,<br />                instance_type='ml.m5.xlarge')<br /><br /><br />processing_step = steps.ProcessingStep(<br />    "training-step",<br />    processor=script_processor,<br />    job_name=execution_input["PreprocessingJobName"],<br />    inputs=[<br />        ProcessingInput(<br />            source=input_code,<br />            destination="/opt/ml/processing/input/code",<br />            input_name="code",<br />        ),<br />    ],<br />    outputs=[<br />        ProcessingOutput(<br />            source='/opt/ml/processing/model', <br />            destination="s3://{}/{}".format(bucket, prefix), <br />            output_name='byoc-example')<br />    ],<br />    container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"],<br />)</pre><br />**SageMaker 처리 작업을 실행하는 Step Functions 워크플로우 예시**참고: 이 예제 워크플로우에는 SageMaker 처리 작업 단계만 포함되며 전체 Step Functions 워크플로우는 포함되지 않습니다. 전체 예제 워크플로우는 AWS Step Functions Data Science SDK 설명서의 [SageMaker의 예제 노트북](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker)을 참조하세요.<pre>workflow_graph = Chain([processing_step])<br /><br />workflow = Workflow(<br />    name="ProcessingWorkflow",<br />    definition=workflow_graph,<br />    role=workflow_execution_role<br />)<br /><br />workflow.create()<br /># Execute workflow<br />execution = workflow.execute(<br />    inputs={<br />        "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")),  # Each pre processing job (SageMaker processing job) requires a unique name,<br />    }<br />)<br />execution_output = execution.get_output(wait=True)</pre> | 데이터 과학자 | 

## 관련 리소스
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [데이터 처리](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)(*Amazon SageMaker 개발자 가이드*)
+ [자체 교육 컨테이너에 맞게 조정](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)(*Amazon SageMaker 개발자 가이드*)