기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자체 훈련 컨테이너 가져오기
자체 훈련 모델을 실행하려면 Amazon SageMaker 노트북 인스턴스를 통해 Amazon SageMaker 훈련 툴킷
1단계: SageMaker 노트북 인스턴스 생성
https://console.aws.amazon.com/sagemaker/
Amazon SageMaker AI 콘솔을 엽니다. -
왼쪽 탐색 창에서 노트북을 선택하고 노트북 인스턴스를 선택한 다음 노트북 인스턴스 생성을 선택하세요.
-
노트북 인스턴스 생성 페이지에서 다음 정보를 입력합니다.
-
노트북 인스턴스 이름에
RunScriptNotebookInstance
를 입력합니다. -
노트북 인스턴스 유형에서
ml.t2.medium
을 선택합니다. -
권한 및 암호화 섹션에서 다음 방법대로 하세요.
-
IAM 역할에서 새 역할 생성을 선택합니다. 그러면 새 창이 열립니다.
-
IAM 역할 생성 페이지에서 특정 S3 버킷을 선택하고,
sagemaker-run-script
라는 이름의 S3 버킷을 지정한 다음 역할 생성을 선택합니다.SageMaker AI는 라는 IAM 역할을 생성합니다
AmazonSageMaker-ExecutionRole-
. 예:YYYYMMDD
THHmmSS
AmazonSageMaker-ExecutionRole-20190429T110788
. 실행 역할 명명 규칙에서는 역할이 생성된 날짜와 시간을T
로 구분하여 사용합니다.
-
-
루트 액세스에서 활성화를 선택합니다.
-
노트북 인스턴스 생성을 선택합니다.
-
-
노트북 인스턴스 페이지에서 상태가 대기 중으로 표시됩니다. Amazon SageMaker AI가 기계 학습 컴퓨팅 인스턴스를 시작하는 데 몇 분 정도 걸릴 수 있습니다.이 경우 노트북 인스턴스를 시작하고 ML 스토리지 볼륨을 연결합니다. 노트북 인스턴스에는 사전 구성된 Jupyter notebook 서버와 Anaconda 라이브러리 세트가 있습니다. 추가 정보는 노트북 인스턴스 생성을 참조하세요.
-
방금 생성한 노트북의 이름을 클릭합니다. 그러면 새 페이지가 열립니다.
-
권한 및 암호화 섹션에서 IAM 역할 ARN 번호를 복사하고 메모장 파일에 붙여넣어 임시로 저장합니다. 나중에 이 IAM 역할 ARN 번호를 사용하여 노트북 인스턴스에서 로컬 훈련 예측기를 구성해야 합니다. IAM 역할 ARN 번호는
'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
과 같습니다. -
노트북 인스턴스의 상태가 서비스 중으로 변경되고 나면 JupyterLab 열기를 선택하세요.
2단계: Dockerfile 및 Python 훈련 스크립트 생성 및 업로드
-
JupyterLab이 열리고 나면 JupyterLab의 홈 디렉터리에 새 폴더를 생성하세요. 왼쪽 상단에서 새 폴더 아이콘을 선택한 다음 폴더 이름
docker_test_folder
를 입력하세요. -
docker_test_folder
디렉터리에서Dockerfile
텍스트 파일을 생성하세요.-
왼쪽 상단에서 새 런처 아이콘(+)을 선택하세요.
-
오른쪽 창의 기타 섹션에서 텍스트 파일을 선택하세요.
-
다음
Dockerfile
샘플 코드를 텍스트 파일에 붙여 넣으세요.#Download an open source TensorFlow Docker image FROM tensorflow/tensorflow:latest-gpu-jupyter # Install sagemaker-training toolkit that contains the common functionality necessary to create a container compatible with SageMaker AI and the Python SDK. RUN pip3 install sagemaker-training # Copies the training code inside the container COPY train.py /opt/ml/code/train.py # Defines train.py as script entrypoint ENV SAGEMAKER_PROGRAM train.py
이 Dockerfile 스크립트는 다음 작업을 수행합니다.
-
FROM tensorflow/tensorflow:latest-gpu-jupyter
- 최신 TensorFlow Docker 기본 이미지를 다운로드합니다. 컨테이너를 빌드할 때 가져오려는 Docker 기본 이미지와 AWS 사전 빌드된 컨테이너 기본 이미지로 바꿀 수 있습니다. -
RUN pip install sagemaker-training
- SageMaker AI와 호환되는 컨테이너를 생성하는 데 필요한 공통 기능이 포함된 SageMaker AI 훈련 툴킷을 설치합니다. SageMaker -
COPY train.py /opt/ml/code/train.py
- SageMaker AI에서 예상되는 컨테이너 내부의 위치에 스크립트를 복사합니다. 스크립트는 이 폴더에 있어야 합니다. -
ENV SAGEMAKER_PROGRAM train.py
- 훈련 스크립트train.py
를 컨테이너의/opt/ml/code
폴더에 복사한 진입점 스크립트로 사용합니다. 이것은 자신의 컨테이너를 빌드할 때 지정해야 하는 유일한 환경 변수입니다.
-
-
왼쪽 디렉터리 탐색 창에서 텍스트 파일 이름이
untitled.txt
로 자동 설정됩니다. 파일 이름을 바꾸려면 파일을 마우스 오른쪽 버튼으로 클릭하고 이름 변경하기를 선택한 다음 파일 이름을.txt
확장자가 없이Dockerfile
이라는 이름으로 바꾸고Ctrl+s
또는Command+s
키를 눌러 파일을 저장합니다.
-
-
docker_test_folder
에 훈련 스크립트train.py
를 업로드합니다. 다음 예제 스크립트를 사용하여 이 연습에서 MNIST 데이터 세트에서 훈련된 수기 숫자를 읽는 모델을 생성할 수 있습니다. import tensorflow as tf import os mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=1) model_save_dir = f"{os.environ.get('SM_MODEL_DIR')}/1" model.evaluate(x_test, y_test) tf.saved_model.save(model, model_save_dir)
3단계: 컨테이너 구성
-
JupyterLab 홈 디렉터리에서 Jupyter notebook을 엽니다. 새 노트북을 열려면 새 시작 아이콘을 선택한 다음 노트북 섹션에서 conda_tensorflow2의 최신 버전을 선택합니다.
-
docker_test_folder
디렉터리로 변경하려면 첫 번째 노트북 셀에서 다음 명령을 실행합니다.cd ~/SageMaker/docker_test_folder
그러면 현재 디렉터리가 다음과 같이 반환됩니다.
! pwd
output: /home/ec2-user/SageMaker/docker_test_folder
-
Docker 컨테이너를 빌드하려면 맨 끝에 공백과 마침표를 포함하여 다음 Docker 빌드 명령을 실행하세요.
! docker build -t tf-custom-container-test .
Docker 빌드 명령은 생성한 Docker 디렉터리(이 경우에는
docker_test_folder
)에서 실행해야 합니다.참고
Docker가 Dockerfile을 찾을 수 없다는 내용의 다음 오류 메시지가 나타날 경우, Dockerfile의 이름이 정확하고 해당 디렉터리에 저장되었는지 확인하세요.
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ec2-user/SageMaker/docker/Dockerfile: no such file or directory
docker
이(가) 현재 디렉터리 내에서 어떤 확장자도 없이 특별히 호출된Dockerfile
파일을 찾는다는 점을 기억해 두세요. 뭔가 다른 이름을 지정한 경우에는-f
플래그를 사용하여 파일 이름을 수동으로 전달할 수 있습니다. 예를 들어 Dockerfile의 이름을Dockerfile-text.txt
로 지정한 경우, 다음 명령을 실행합니다.! docker build -t tf-custom-container-test -f Dockerfile-text.txt .
4단계: 컨테이너 테스트
-
컨테이너를 노트북 인스턴스에 로컬로 테스트하려면 Jupyter notebook을 엽니다. 새 런처를 선택하고 노트북 섹션에서 최신 버전의 conda_tensorflow2를 선택합니다.
-
다음 예제 스크립트를 노트북 코드 셀에 붙여 넣어 SageMaker AI 예측기를 구성합니다.
import sagemaker from sagemaker.estimator import Estimator estimator = Estimator(image_uri='
tf-custom-container-test
', role=sagemaker.get_execution_role()
, instance_count=1
, instance_type='local'
) estimator.fit()앞의 코드 예제에서
sagemaker.get_execution_role()
는role
인수에 지정되어 SageMaker AI 세션에 대해 설정된 역할을 자동으로 검색합니다. 노트북 인스턴스를 구성할 때 사용한 IAM 역할 ARN 번호의 문자열 값으로 바꿀 수도 있습니다. ARN은 다음과 같아야 합니다:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
-
코드 셀을 실행합니다. 이 테스트는 훈련 환경 구성, 환경 변수에 사용된 값, 데이터 소스, 훈련 과정에서 얻은 손실 및 정확성을 출력합니다.
5단계: Amazon Elastic Container Registry(Amazon ECR)로 컨테이너 푸시
-
이 로컬 모드 테스트를 성공적으로 실행한 후 Docker 컨테이너를 Amazon ECR로 푸시하여 훈련 작업을 실행하는 데 사용할 수 있습니다. Amazon ECR 대신 프라이빗 Docker 레지스트리를 사용하려면 훈련 컨테이너를 프라이빗 레지스트리로 푸시를 참조하세요.
노트북 셀에서 다음과 같은 명령줄을 실행하세요.
%%sh # Specify an algorithm name algorithm_name=
tf-custom-container-test
account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${fullname} # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}참고
이 bash 쉘 스크립트는 다음 오류 메시지와 유사한 권한 문제를 일으킬 수 있습니다.
"denied: User: [ARN] is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:us-east-1:[id]:repository/tf-custom-container-test"
이 오류가 발생하는 경우 AmazonEC2ContainerRegistryFullAccess 정책을 IAM 역할에 연결해야 합니다. IAM 콘솔
로 이동하여 왼쪽 탐색 창에서 역할을 선택하고 노트북 인스턴스에 사용한 IAM 역할을 찾아보세요. 권한 탭 아래에서 정책 연결 버튼을 선택하고 AmazonEC2ContainerRegistryFullAccess 정책을 검색합니다. 정책의 확인란을 선택하고 권한 추가를 선택하여 완료합니다. -
Studio 노트북 셀에서 다음 코드를 실행하여 훈련 컨테이너의 Amazon ECR 이미지를 호출합니다.
import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/sagemaker-byoc-test:latest
-
이전 단계에서
ecr_image
검색한를 사용하여 SageMaker AI 예측기 객체를 구성합니다. 다음 코드 샘플은를 사용하여 SageMaker AI 예측기를 구성byoc_image_uri
하고 Amazon EC2 인스턴스에서 훈련 작업을 시작합니다. -
자체 컨테이너를 사용하여 모델을 배포하려는 경우 자체 추론 컨테이너 조정을 참조하세요. TensorFlow 모델을 배포할 수 있는 AWS프레임워크 컨테이너를 사용할 수도 있습니다. 수기 숫자를 읽도록 예제 모델을 배포하려면 이전 하위 단계에서 모델을 훈련하는 데 사용한 것과 동일한 노트북에 다음 예제 스크립트를 입력하여 배포에 필요한 이미지 URI(범용 리소스 식별자)를 얻고 모델을 배포합니다.
import boto3 import sagemaker #obtain image uris from sagemaker import image_uris container = image_uris.retrieve(framework='tensorflow',region='us-west-2',version='2.11.0', image_scope='inference',instance_type='ml.g4dn.xlarge') #create the model entity, endpoint configuration and endpoint predictor = estimator.deploy(1,instance_type='ml.g4dn.xlarge',image_uri=container)
다음 코드 예제를 사용하여 MNIST 데이터 세트에서 수기 숫자 샘플을 사용하여 모델을 테스트하세요.
#Retrieve an example test dataset to test import numpy as np import matplotlib.pyplot as plt from keras.datasets import mnist # Load the MNIST dataset and split it into training and testing sets (x_train, y_train), (x_test, y_test) = mnist.load_data() # Select a random example from the training set example_index = np.random.randint(0, x_train.shape[0]) example_image = x_train[example_index] example_label = y_train[example_index] # Print the label and show the image print(f"Label: {example_label}") plt.imshow(example_image, cmap='gray') plt.show()
수기 테스트 숫자를 TensorFlow가 수집하고 테스트 예측을 수행할 수 있는 형식으로 변환합니다.
from sagemaker.serializers import JSONSerializer data = {"instances": example_image.tolist()} predictor.serializer=JSONSerializer() #update the predictor to use the JSONSerializer predictor.predict(data) #make the prediction
사용자 지정 컨테이너를 로컬에서 테스트하고 Amazon ECR 이미지로 푸시하는 방법을 보여주는 전체 예제는 자체 TensorFlow 컨테이너 빌드
작은 정보
훈련 작업을 프로파일링 및 디버깅하여 시스템 사용률 문제(예: CPU 병목 현상 및 GPU 사용률 저하)를 모니터링하고 훈련 문제(예: 과적합, 오버트레이닝, 텐서 폭발, 그라데이션 소멸)를 식별하려면 Amazon SageMaker Debugger를 사용하세요. 자세한 내용은 사용자 지정 훈련 컨테이너로 Debugger 사용 섹션을 참조하세요.
6단계: 리소스 정리
시작 예제를 완료하고 리소스를 정리하려면
-
SageMaker AI 콘솔
을 열고 노트북 인스턴스 RunScriptNotebookInstance를 선택한 다음 작업을 선택하고 중지를 선택합니다. 인스턴스가 중지하는 데 몇 분 정도 걸릴 수 있습니다. -
인스턴스 상태가 중지됨으로 변경되고 나면 작업을 선택하고 삭제를 선택한 다음, 대화 상자에서 삭제를 선택하세요. 이 인스턴스가 삭제되기까지는 몇 분 정도 걸릴 수 있습니다. 이 노트북 인스턴스가 삭제되면 표에서도 사라집니다.
-
Amazon S3 콘솔
을 열고 모델 아티팩트 및 훈련 데이터 세트를 저장하기 위해 생성한 버킷을 삭제하세요. -
IAM 콘솔
을 열고 IAM 역할을 삭제하세요. 권한 정책을 생성한 경우 역시 삭제할 수 있습니다. 참고
Docker 컨테이너는 실행 후 자동으로 종료됩니다. 삭제할 필요는 없습니다.
블로그 및 사례 연구
다음 블로그에서는 Amazon SageMaker AI에서 사용자 지정 훈련 컨테이너 사용에 대한 사례 연구를 설명합니다.
-
자체 컨테이너를 Amazon SageMaker AI로 가져오는 이유와 올바른 방법
, Medium(2023년 1월 20일)