Amazon SageMaker 파이프라인 정의 - 아마존 SageMaker

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

Amazon SageMaker 파이프라인 정의

Amazon Pipelines로 워크플로를 조정하려면 SageMaker 파이프라인 정의의 형태로 방향성 비순환 그래프 (DAG) 를 생성하십시오. JSON 다음 이미지는 이 자습서에서 DAG 생성한 파이프라인을 나타냅니다.

Studio의 파이프라인용 시각적 drag-and-drop 인터페이스 스크린샷

SageMaker Python을 사용하여 JSON 파이프라인 정의를 생성할 수 SDK 있습니다. 다음 자습서에서는 파이프라인 정의를 생성하는 방법을 보여줍니다. 정의된 파이프라인은 회귀 문제를 해결하여 물리적 측정치를 기반으로 전복의 나이를 결정합니다. 이 자습서의 내용이 포함된 실행 가능한 Jupyter 노트북은 Amazon SageMaker 모델 구축 파이프라인을 사용한 작업 조정을 참조하십시오.

주제

    다음 안내는 파이프라인 디자이너를 사용하여 베어본 파이프라인을 생성하는 단계를 안내합니다 drag-and-drop . 비주얼 디자이너에서 파이프라인 편집 세션을 일시 중지하거나 종료해야 하는 경우 언제든지 내보내기 옵션을 클릭하십시오. 이렇게 하면 파이프라인의 현재 정의를 로컬 환경에 다운로드할 수 있습니다. 나중에 파이프라인 편집 프로세스를 재개하려는 경우 동일한 JSON 정의 파일을 비주얼 디자이너로 가져올 수 있습니다.

    처리 단계 생성

    데이터 처리 작업 단계를 생성하려면 다음과 같이 하십시오.

    1. 의 지침에 따라 Studio 콘솔을 엽니다아마존 SageMaker 스튜디오 시작.

    2. 왼쪽 탐색 창에서 파이프라인을 선택합니다.

    3. 생성(Create)을 선택합니다.

    4. 공백을 선택합니다.

    5. 왼쪽 사이드바에서 데이터 처리를 선택하고 캔버스로 드래그합니다.

    6. 캔버스에서 추가한 프로세스 데이터 단계를 선택합니다.

    7. 입력 데이터셋을 추가하려면 오른쪽 사이드바의 데이터 (입력) 에서 추가를 선택하고 데이터세트를 선택합니다.

    8. 결과 데이터세트를 저장할 위치를 추가하려면 오른쪽 사이드바의 데이터 (출력) 에서 추가를 선택하고 대상으로 이동합니다.

    9. 오른쪽 사이드바의 나머지 필드를 모두 입력합니다. 이 탭의 필드에 대한 자세한 내용은 sagemaker.workflow.steps를 참조하십시오. ProcessingStep.

    교육 단계 만들기

    모델 학습 단계를 설정하려면 다음을 수행하십시오.

    1. 왼쪽 사이드바에서 Train model을 선택하고 캔버스로 드래그합니다.

    2. 캔버스에서 추가한 Train 모델 단계를 선택합니다.

    3. 입력 데이터세트를 추가하려면 오른쪽 사이드바의 데이터 (입력) 에서 추가를 선택하고 데이터세트를 선택합니다.

    4. 모델 아티팩트를 저장할 위치를 선택하려면 위치 (S3URI) URI 필드에 Amazon S3를 입력하거나 Browse S3를 선택하여 대상 위치로 이동합니다.

    5. 오른쪽 사이드바의 나머지 필드를 모두 입력합니다. 이 탭의 필드에 대한 자세한 내용은 sagemaker.workflow.steps를 참조하십시오. TrainingStep.

    6. 이전 섹션에서 추가한 프로세스 데이터 단계에서 커서를 클릭하여 모델 학습 단계로 드래그하여 두 단계를 연결하는 가장자리를 만듭니다.

    모델 등록 단계를 사용하여 모델 패키지를 생성합니다.

    모델 등록 단계를 사용하여 모델 패키지를 생성하려면 다음과 같이 하십시오.

    1. 왼쪽 사이드바에서 모델 등록을 선택하고 캔버스로 드래그합니다.

    2. 캔버스에서 추가한 모델 등록 단계를 선택합니다.

    3. 등록할 모델을 선택하려면 모델 (입력) 에서 추가를 선택합니다.

    4. 모델 그룹 생성을 선택하여 새 모델 그룹에 모델을 추가합니다.

    5. 오른쪽 사이드바의 나머지 필드를 작성하세요. 이 탭의 필드에 대한 자세한 내용은 sagemaker.workflow.step_collections를 참조하십시오. RegisterModel.

    6. 이전 섹션에서 추가한 Train 모델 단계에서 커서를 클릭하고 모델 등록 단계로 드래그하여 두 단계를 연결하는 가장자리를 만듭니다.

    모델 배포 (엔드포인트) 단계를 사용하여 엔드포인트에 모델을 배포합니다.

    모델 배포 단계를 사용하여 모델을 배포하려면 다음을 수행하십시오.

    1. 왼쪽 사이드바에서 Deploy model (엔드포인트) 을 선택하고 캔버스로 드래그합니다.

    2. 캔버스에서 추가한 배포 모델 (엔드포인트) 단계를 선택합니다.

    3. 배포할 모델을 선택하려면 모델 (입력) 에서 추가를 선택합니다.

    4. 엔드포인트 생성 라디오 버튼을 선택하여 새 엔드포인트를 생성합니다.

    5. 엔드포인트의 이름과 설명을 입력합니다.

    6. 이전 섹션에서 추가한 모델 등록 단계에서 모델 배포 (엔드포인트) 단계로 커서를 클릭하고 드래그하여 두 단계를 연결하는 에지를 생성합니다.

    7. 오른쪽 사이드바의 나머지 필드를 작성합니다.

    파이프라인 파라미터를 정의합니다.

    모든 실행에 대해 값을 업데이트할 수 있는 파이프라인 매개변수 세트를 구성할 수 있습니다. 파이프라인 매개변수를 정의하고 기본값을 설정하려면 비주얼 디자이너 하단에 있는 기어 아이콘을 클릭합니다.

    파이프라인 저장

    파이프라인을 만드는 데 필요한 정보를 모두 입력한 후 비주얼 디자이너 하단에 있는 저장을 클릭합니다. 이렇게 하면 런타임 시 파이프라인에 잠재적 오류가 있는지 확인하고 알려줍니다. 자동 검증 검사로 플래그가 지정된 모든 오류를 해결할 때까지 저장 작업은 성공하지 못합니다. 나중에 편집을 재개하려면 진행 중인 파이프라인을 로컬 환경의 JSON 정의로 저장할 수 있습니다. 비주얼 디자이너 하단에 있는 내보내기 버튼을 클릭하여 파이프라인을 JSON 정의 파일로 내보낼 수 있습니다. 나중에 파이프라인 업데이트를 재개하려면 가져오기 버튼을 클릭하여 JSON 정의 파일을 업로드하세요.

    사전 조건

    다음 튜토리얼을 실행하려면 다음을 완료하세요.

    • 노트북 인스턴스 생성에 설명된 대로 노트북 인스턴스를 설정합니다. 그러면 역할에 Amazon S3에 대한 읽기 및 쓰기 권한이 부여되고, 에서 교육, 일괄 변환 및 처리 작업을 생성할 수 SageMaker 있습니다.

    • 역할 권한 정책 수정에 표시된 대로 노트북에 자체 역할을 가져오고 전달할 수 있는 권한을 부여합니다. 다음 JSON 스니펫을 추가하여 이 정책을 역할에 첨부하십시오. 노트북 인스턴스를 만드는 ARN 데 사용된 것으로 <your-role-arn> 바꾸십시오.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "<your-role-arn>" } ] }
    • 역할 신뢰 정책 수정의 단계에 따라 SageMaker 서비스 주체를 신뢰하십시오. 역할의 신뢰 관계에 다음 명령문 부분을 추가합니다.

      { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }

    환경을 설정합니다

    다음 코드 블록을 사용하여 새 SageMaker 세션을 생성합니다. 그러면 ARN 세션의 역할이 반환됩니다. 이 역할은 사전 요구 사항으로 설정한 실행 ARN ARN 역할이어야 합니다.

    import boto3 import sagemaker import sagemaker.session from sagemaker.workflow.pipeline_context import PipelineSession region = boto3.Session().region_name sagemaker_session = sagemaker.session.Session() role = sagemaker.get_execution_role() default_bucket = sagemaker_session.default_bucket() pipeline_session = PipelineSession() model_package_group_name = f"AbaloneModelPackageGroupName"

    파이프라인 생성

    중요

    Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 생성할 수 있도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 권한도 부여해야 합니다. Studio 및 Studio Classic은 생성한 모든 리소스에 자동으로 태그를 지정하기 때문에 리소스에 태그를 추가할 수 있는 권한이 필요합니다. IAM정책에 따라 Studio 및 Studio Classic에서는 리소스를 생성할 수 있지만 태깅은 허용하지 않는 경우 AccessDenied "“리소스를 만들려고 할 때 오류가 발생할 수 있습니다. 자세한 내용은 리소스에 태그를 지정할 SageMaker 수 있는 권한을 제공하십시오. 단원을 참조하십시오.

    AWS 아마존 관리형 정책 SageMaker SageMaker 리소스를 생성할 수 있는 권한을 부여하는 경우 해당 리소스를 생성하는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

    SageMaker 노트북 인스턴스에서 다음 단계를 실행하여 다음 단계를 포함하는 파이프라인을 생성합니다.

    • 사전 처리

    • 훈련

    • 평가

    • 조건부 평가

    • 모델 등록

    1단계: 데이터세트 다운로드

    이 노트북은 UCI Machine Learning Abalone 데이터세트를 사용합니다. 데이터 세트에는 다음과 같은 기능이 있습니다.

    • length - 전복의 가장 긴 껍데기 치수입니다.

    • diameter - 길이와 수직을 이루는 전복의 지름입니다.

    • height - 껍데기의 살이 들어 있는 전복의 높이입니다.

    • whole_weight - 전복 전체의 무게입니다.

    • shucked_weight - 전복에서 꺼낸 살의 무게입니다.

    • viscera_weight - 출혈 후 전복 내장의 무게입니다.

    • shell_weight - 살을 제거하고 건조시킨 후의 전복 껍데기의 무게입니다.

    • sex - 전복의 성별입니다. 'M', 'F', 'I' 중 하나이며, 여기서 'I'는 어린 전복입니다.

    • rings - 전복 껍데기에 있는 고리 개수입니다.

    다음 age=rings + 1.5공식을 사용하여 전복 껍데기에 있는 고리 개수로 전복 껍질의 나이에 대한 근사치를 구할 수 있습니다. 하지만 이 수치를 알아내는 것은 시간이 많이 걸리는 작업입니다. 껍데기를 원추형으로 잘라서 단면에 얼룩을 묻힌 다음 현미경으로 고리 개수를 세어야 합니다. 그러나 다른 물리적 측정은 더 쉽게 얻을 수 있습니다. 이 노트북은 데이터 세트로 다른 물리적 측정값을 사용하여 가변 고리의 예측 모델을 구축합니다.

    데이터 세트를 다운로드하려면
    1. 계정의 기본 Amazon S3 버킷에 데이터 세트를 다운로드합니다.

      !mkdir -p data local_path = "data/abalone-dataset.csv" s3 = boto3.resource("s3") s3.Bucket(f"sagemaker-servicecatalog-seedcode-{region}").download_file( "dataset/abalone-dataset.csv", local_path ) base_uri = f"s3://{default_bucket}/abalone" input_data_uri = sagemaker.s3.S3Uploader.upload( local_path=local_path, desired_s3_uri=base_uri, ) print(input_data_uri)
    2. 모델을 생성한 후 배치 변환을 위해 두 번째 데이터 세트를 다운로드합니다.

      local_path = "data/abalone-dataset-batch.csv" s3 = boto3.resource("s3") s3.Bucket(f"sagemaker-servicecatalog-seedcode-{region}").download_file( "dataset/abalone-dataset-batch", local_path ) base_uri = f"s3://{default_bucket}/abalone" batch_data_uri = sagemaker.s3.S3Uploader.upload( local_path=local_path, desired_s3_uri=base_uri, ) print(batch_data_uri)

    2단계: 파이프라인 파라미터 정의

    이 코드 블록은 파이프라인의 다음 파라미터를 정의합니다.

    • processing_instance_count - 처리 작업의 인스턴스 수입니다.

    • input_data – 입력 데이터의 Amazon S3 위치입니다.

    • batch_data - 배치 변환을 위한 입력 데이터의 Amazon S3 위치입니다.

    • model_approval_status - 훈련된 모델을 CI/CD용으로 등록하기 위한 승인 상태입니다. 자세한 내용은 SageMaker 프로젝트를 MLOps 통한 자동화섹션을 참조하세요.

    from sagemaker.workflow.parameters import ( ParameterInteger, ParameterString, ) processing_instance_count = ParameterInteger( name="ProcessingInstanceCount", default_value=1 ) model_approval_status = ParameterString( name="ModelApprovalStatus", default_value="PendingManualApproval" ) input_data = ParameterString( name="InputData", default_value=input_data_uri, ) batch_data = ParameterString( name="BatchData", default_value=batch_data_uri, )

    3단계: 기능 엔지니어링을 위한 처리 단계 정의

    이 섹션에서는 데이터 세트에서 훈련에 사용할 데이터를 준비하는 처리 단계를 만드는 방법을 보여줍니다.

    처리 단계를 만들려면
    1. 처리 스크립트를 위한 디렉토리를 생성합니다.

      !mkdir -p abalone
    2. /abalone 디렉터리에 다음 콘텐츠로 preprocessing.py라는 파일을 생성합니다. 이 전처리 스크립트는 입력 데이터에서 실행되도록 처리 단계로 전달됩니다. 그런 다음 훈련 단계에서는 전처리된 훈련 특징과 레이블을 사용하여 모델을 학습시킵니다. 평가 단계에서는 학습된 모델과 전처리된 테스트 특징 및 레이블을 사용하여 모델을 평가합니다. 이 스크립트는 scikit-learn를 사용하여 다음을 수행할 수 있습니다.

      • 누락된 sex범주형 데이터를 채우고 훈련에 적합하도록 인코딩합니다.

      • ringssex을 제외한 모든 수치 필드를 조정하고 정규화합니다.

      • 데이터를 훈련, 테스트, 검증 데이터 세트로 분할합니다.

      %%writefile abalone/preprocessing.py import argparse import os import requests import tempfile import numpy as np import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler, OneHotEncoder # Because this is a headerless CSV file, specify the column names here. feature_columns_names = [ "sex", "length", "diameter", "height", "whole_weight", "shucked_weight", "viscera_weight", "shell_weight", ] label_column = "rings" feature_columns_dtype = { "sex": str, "length": np.float64, "diameter": np.float64, "height": np.float64, "whole_weight": np.float64, "shucked_weight": np.float64, "viscera_weight": np.float64, "shell_weight": np.float64 } label_column_dtype = {"rings": np.float64} def merge_two_dicts(x, y): z = x.copy() z.update(y) return z if __name__ == "__main__": base_dir = "/opt/ml/processing" df = pd.read_csv( f"{base_dir}/input/abalone-dataset.csv", header=None, names=feature_columns_names + [label_column], dtype=merge_two_dicts(feature_columns_dtype, label_column_dtype) ) numeric_features = list(feature_columns_names) numeric_features.remove("sex") numeric_transformer = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ] ) categorical_features = ["sex"] categorical_transformer = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="constant", fill_value="missing")), ("onehot", OneHotEncoder(handle_unknown="ignore")) ] ) preprocess = ColumnTransformer( transformers=[ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features) ] ) y = df.pop("rings") X_pre = preprocess.fit_transform(df) y_pre = y.to_numpy().reshape(len(y), 1) X = np.concatenate((y_pre, X_pre), axis=1) np.random.shuffle(X) train, validation, test = np.split(X, [int(.7*len(X)), int(.85*len(X))]) pd.DataFrame(train).to_csv(f"{base_dir}/train/train.csv", header=False, index=False) pd.DataFrame(validation).to_csv(f"{base_dir}/validation/validation.csv", header=False, index=False) pd.DataFrame(test).to_csv(f"{base_dir}/test/test.csv", header=False, index=False)
    3. SKLearnProcessor의 인스턴스를 만들어 처리 단계로 전달합니다.

      from sagemaker.sklearn.processing import SKLearnProcessor framework_version = "0.23-1" sklearn_processor = SKLearnProcessor( framework_version=framework_version, instance_type="ml.m5.xlarge", instance_count=processing_instance_count, base_job_name="sklearn-abalone-process", sagemaker_session=pipeline_session, role=role, )
    4. 처리 단계를 만들려면 SKLearnProcessor에서 이 단계는 입력 및 출력 채널, 생성된 preprocessing.py스크립트를 가져옵니다. 이것은 SageMaker Python의 프로세서 인스턴스 run 메서드와 매우 유사합니다SDK. ProcessingStep에 전달되는 input_data파라미터는 단계 자체의 입력 데이터입니다. 이 입력 데이터는 프로세서 인스턴스가 실행될 때 사용됩니다.

      처리 작업의 출력 구성에 지정된 "train, "validation, "test"채널을 기록해 둡니다. Properties이러한 단계는 후속 단계에서 사용할 수 있으며 런타임 시 해당 런타임 값을 확인할 수 있습니다.

      from sagemaker.processing import ProcessingInput, ProcessingOutput from sagemaker.workflow.steps import ProcessingStep processor_args = sklearn_processor.run( inputs=[ ProcessingInput(source=input_data, destination="/opt/ml/processing/input"), ], outputs=[ ProcessingOutput(output_name="train", source="/opt/ml/processing/train"), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"), ProcessingOutput(output_name="test", source="/opt/ml/processing/test") ], code="abalone/preprocessing.py", ) step_process = ProcessingStep( name="AbaloneProcess", step_args=processor_args )

    4단계: 학습 단계 정의

    이 섹션에서는 SageMaker XGBoost알고리즘을 사용하여 처리 단계의 훈련 데이터 출력에 따라 모델을 훈련시키는 방법을 보여줍니다.

    훈련 단계를 정의하려면
    1. 훈련에서 가져온 모델을 저장할 모델 경로를 지정합니다.

      model_path = f"s3://{default_bucket}/AbaloneTrain"
    2. XGBoost알고리즘과 입력 데이터셋에 대한 추정기를 구성하십시오. 훈련 인스턴스 유형이 예측기에 전달됩니다. 일반적인 학습 스크립트:

      • 입력 채널에서 데이터를 로드합니다.

      • 하이퍼파라미터를 사용한 학습을 구성합니다.

      • 모델을 학습시킵니다.

      • 나중에 호스팅할 수 model_dir 있도록 모델을 저장합니다.

      SageMaker 교육 작업 종료 model.tar.gz 시 a 형식으로 모델을 Amazon S3에 업로드합니다.

      from sagemaker.estimator import Estimator image_uri = sagemaker.image_uris.retrieve( framework="xgboost", region=region, version="1.0-1", py_version="py3", instance_type="ml.m5.xlarge" ) xgb_train = Estimator( image_uri=image_uri, instance_type="ml.m5.xlarge", instance_count=1, output_path=model_path, sagemaker_session=pipeline_session, role=role, ) xgb_train.set_hyperparameters( objective="reg:linear", num_round=50, max_depth=5, eta=0.2, gamma=4, min_child_weight=6, subsample=0.7, silent=0 )
    3. 에스티메이터 인스턴스와 의 속성을 TrainingStep 사용하여 생성합니다. ProcessingStep S3Uriof "train""validation" 출력 채널을 에 전달합니다. TrainingStep  

      from sagemaker.inputs import TrainingInput from sagemaker.workflow.steps import TrainingStep train_args = xgb_train.fit( inputs={ "train": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), "validation": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) }, ) step_train = TrainingStep( name="AbaloneTrain", step_args = train_args )

    5단계: 모델 평가를 위한 처리 단계 정의

    이 섹션에서는 모델의 정확도를 평가하기 위한 처리 단계를 생성하는 방법을 소개합니다. 이 모델 평가 결과는 조건 단계에서 취해야 할 실행 경로를 결정하는 데 사용됩니다.

    모델 평가를 위한 처리 단계를 정의하려면
    1. evaluation.py라는 /abalone디렉터리에서 파일을 생성합니다. 이 스크립트는 모델 평가를 수행하는 처리 단계에서 사용됩니다. 학습된 모델과 테스트 데이터세트를 입력으로 받은 다음 분류 평가 지표가 포함된 JSON 파일을 생성합니다.

      %%writefile abalone/evaluation.py import json import pathlib import pickle import tarfile import joblib import numpy as np import pandas as pd import xgboost from sklearn.metrics import mean_squared_error if __name__ == "__main__": model_path = f"/opt/ml/processing/model/model.tar.gz" with tarfile.open(model_path) as tar: tar.extractall(path=".") model = pickle.load(open("xgboost-model", "rb")) test_path = "/opt/ml/processing/test/test.csv" df = pd.read_csv(test_path, header=None) y_test = df.iloc[:, 0].to_numpy() df.drop(df.columns[0], axis=1, inplace=True) X_test = xgboost.DMatrix(df.values) predictions = model.predict(X_test) mse = mean_squared_error(y_test, predictions) std = np.std(y_test - predictions) report_dict = { "regression_metrics": { "mse": { "value": mse, "standard_deviation": std }, }, } output_dir = "/opt/ml/processing/evaluation" pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) evaluation_path = f"{output_dir}/evaluation.json" with open(evaluation_path, "w") as f: f.write(json.dumps(report_dict))
    2. ProcessingStep을 생성하는 데 사용되는 ScriptProcessor의 인스턴스를 생성합니다.

      from sagemaker.processing import ScriptProcessor script_eval = ScriptProcessor( image_uri=image_uri, command=["python3"], instance_type="ml.m5.xlarge", instance_count=1, base_job_name="script-abalone-eval", sagemaker_session=pipeline_session, role=role, )
    3. 프로세서 인스턴스, 입력 및 출력 채널, evaluation.py 스크립트를 ProcessingStep 사용하여 생성합니다. 패스 인:

      • step_train교육 단계의 S3ModelArtifacts 속성

      • step_process처리 S3Uri 단계의 "test" 출력 채널의

      이것은 SageMaker Python의 프로세서 인스턴스 run 메서드와 매우 유사합니다SDK. 

      from sagemaker.workflow.properties import PropertyFile evaluation_report = PropertyFile( name="EvaluationReport", output_name="evaluation", path="evaluation.json" ) eval_args = script_eval.run( inputs=[ ProcessingInput( source=step_train.properties.ModelArtifacts.S3ModelArtifacts, destination="/opt/ml/processing/model" ), ProcessingInput( source=step_process.properties.ProcessingOutputConfig.Outputs[ "test" ].S3Output.S3Uri, destination="/opt/ml/processing/test" ) ], outputs=[ ProcessingOutput(output_name="evaluation", source="/opt/ml/processing/evaluation"), ], code="abalone/evaluation.py", ) step_eval = ProcessingStep( name="AbaloneEval", step_args=eval_args, property_files=[evaluation_report], )

    6단계: 일괄 변환을 CreateModelStep 위한 a 정의

    중요

    Python v2.90.0부터 모델을 만들 때 사용하는 모델 단계 것이 좋습니다. SageMaker SDK CreateModelStep이전 버전의 SageMaker Python에서 계속 SDK 작동하지만 더 이상 적극적으로 지원되지 않습니다.

    이 섹션에서는 학습 단계의 결과를 바탕으로 SageMaker 모델을 만드는 방법을 보여줍니다. 이 모델은 새 데이터 세트의 배치 변환에 사용됩니다. 이 단계는 조건 단계로 전달되며 조건 단계가 로 true 평가되는 경우에만 실행됩니다.

    일괄 변환을 CreateModelStep 위한 a를 정의하려면
    1. SageMaker 모델 만들기. step_train 훈련 단계에서 S3ModelArtifacts속성을 전달합니다.

      from sagemaker.model import Model model = Model( image_uri=image_uri, model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts, sagemaker_session=pipeline_session, role=role, )
    2. 모델의 SageMaker 모델 입력을 정의합니다.

      from sagemaker.inputs import CreateModelInput inputs = CreateModelInput( instance_type="ml.m5.large", accelerator_type="ml.eia1.medium", )
    3. 정의한 CreateModelInput 및 SageMaker 모델 인스턴스를 CreateModelStep 사용하여 생성합니다.

      from sagemaker.workflow.steps import CreateModelStep step_create_model = CreateModelStep( name="AbaloneCreateModel", model=model, inputs=inputs, )

    7단계: 일괄 변환을 수행할 TransformStep a를 정의합니다.

    이 섹션에서는 모델을 훈련한 후 데이터 세트에서 배치 변환을 수행하는 TransformStep을 만드는 방법을 보여줍니다. 이 단계는 조건 단계로 전달되며 조건 단계가 로 true 평가되는 경우에만 실행됩니다.

    a를 정의하여 일괄 TransformStep 변환을 수행하려면
    1. 적절한 컴퓨팅 인스턴스 유형, 인스턴스 수, 원하는 출력 Amazon S3 버킷을 사용하여 트랜스포머 인스턴스를 생성합니다URI. step_create_model CreateModel훈련 단계에서 ModelName속성을 전달합니다.

      from sagemaker.transformer import Transformer transformer = Transformer( model_name=step_create_model.properties.ModelName, instance_type="ml.m5.xlarge", instance_count=1, output_path=f"s3://{default_bucket}/AbaloneTransform" )
    2. 정의한 변환기 인스턴스와 batch_data파이프라인 파라미터를 사용하여 TransformStep을 생성합니다.

      from sagemaker.inputs import TransformInput from sagemaker.workflow.steps import TransformStep step_transform = TransformStep( name="AbaloneTransform", transformer=transformer, inputs=TransformInput(data=batch_data) )

    8단계: 모델 패키지를 생성하는 RegisterModel 단계를 정의합니다.

    중요

    Python v2.90.0부터 모델을 모델 단계 등록하는 데 사용하는 것이 좋습니다. SageMaker SDK RegisterModel이전 버전의 SageMaker Python에서 계속 SDK 작동하지만 더 이상 적극적으로 지원되지 않습니다.

    이 섹션에서는 의 인스턴스를 만드는 방법을 보여줍니다RegisterModel. RegisterModel파이프라인에서 실행한 결과는 모델 패키지입니다. 모델 패키지는 추론에 필요한 모든 요소를 패키징하는 재사용 가능한 모델 아티팩트 추상화입니다. 이는 선택적 모델 가중치 위치와 함께 사용할 추론 이미지를 정의하는 추론 사양으로 구성됩니다. 모델 패키지 그룹은 모델 패키지 컬렉션입니다. ModelPackageGroupfor Pipelines를 사용하여 모든 파이프라인 실행에 대해 그룹에 새 버전과 모델 패키지를 추가할 수 있습니다. 모델 레지스트리에 대한 자세한 내용은 모델 레지스트리에 모델 등록 및 배포섹션을 참조하세요.

    이 단계는 조건 단계로 전달되며 조건 단계가 로 평가되는 경우에만 실행됩니다. true

    모델 패키지를 생성하는 RegisterModel 단계를 정의하려면
    • 훈련 단계에서 사용한 예측기 인스턴스를 사용하여 RegisterModel단계를 생성합니다. step_train 훈련 단계에서 S3ModelArtifacts속성을 전달하고 ModelPackageGroup을 지정합니다. 파이프라인이 ModelPackageGroup 이를 자동으로 생성합니다.

      from sagemaker.model_metrics import MetricsSource, ModelMetrics from sagemaker.workflow.step_collections import RegisterModel model_metrics = ModelMetrics( model_statistics=MetricsSource( s3_uri="{}/evaluation.json".format( step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"] ), content_type="application/json" ) ) step_register = RegisterModel( name="AbaloneRegisterModel", estimator=xgb_train, model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts, content_types=["text/csv"], response_types=["text/csv"], inference_instances=["ml.t2.medium", "ml.m5.xlarge"], transform_instances=["ml.m5.xlarge"], model_package_group_name=model_package_group_name, approval_status=model_approval_status, model_metrics=model_metrics )

    9단계: 조건 단계를 정의하여 모델 정확도를 확인합니다.

    A를 ConditionStep 사용하면 파이프라인이 단계 속성의 조건에 DAG 따라 파이프라인에서 조건부 실행을 지원할 수 있습니다. 이 경우에는 모델의 정확도가 필수 값을 초과하는 경우에만 모델 패키지를 등록해야 합니다. 모델의 정확도는 모델 평가 단계에 의해 결정됩니다. 정확도가 필요한 값을 초과할 경우 파이프라인은 SageMaker 모델을 생성하고 데이터세트에서 일괄 변환을 실행합니다. 이 섹션에서는 조건 단계를 정의하는 방법을 보여줍니다.

    모델 정확도를 확인하기 위해 조건 단계를 정의하려면
    1. 모델 평가 처리 단계인 step_eval의 출력에 있는 정확도 값을 사용하여 ConditionLessThanOrEqualTo조건을 정의합니다. 처리 단계에서 인덱싱한 속성 파일과 각각의 JSONPath 평균 제곱 오차 값을 사용하여 이 출력을 가져옵니다. "mse"

      from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo from sagemaker.workflow.condition_step import ConditionStep from sagemaker.workflow.functions import JsonGet cond_lte = ConditionLessThanOrEqualTo( left=JsonGet( step_name=step_eval.name, property_file=evaluation_report, json_path="regression_metrics.mse.value" ), right=6.0 )
    2. ConditionStep을 생성합니다. ConditionEquals 조건을 전달한 다음, 조건이 충족되면 모델 패키지 등록 및 배치 변환 단계를 다음 단계로 설정합니다.

      step_cond = ConditionStep( name="AbaloneMSECond", conditions=[cond_lte], if_steps=[step_register, step_create_model, step_transform], else_steps=[], )

    10단계: 파이프라인 생성

    이제 모든 단계를 생성했으니 단계를 하나의 파이프라인으로 결합합니다.

    파이프라인을 생성하려면
    1. 파이프라인에 name, parameters, steps을 정의합니다. 이름은 (account, region)페어 내에서 고유해야 합니다.

      참고

      단계는 파이프라인의 단계 목록 또는 조건 단계의 if/else 단계 목록에 한 번만 나타날 수 있습니다. 둘 다에 모두 나타날 수는 없습니다.

      from sagemaker.workflow.pipeline import Pipeline pipeline_name = f"AbalonePipeline" pipeline = Pipeline( name=pipeline_name, parameters=[ processing_instance_count, model_approval_status, input_data, batch_data, ], steps=[step_process, step_train, step_eval, step_cond], )
    2. (선택 사항) JSON 파이프라인 정의를 검사하여 형식이 올바른지 확인합니다.

      import json json.loads(pipeline.definition())

    이 파이프라인 정의를 제출할 준비가 SageMaker 되었습니다. 다음 자습서에서는 이 파이프라인을 에 SageMaker 제출하고 실행을 시작합니다.

    다음 단계: 파이프라인 실행