View a markdown version of this page

파이프라인 정의 - Amazon SageMaker AI

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

파이프라인 정의

Amazon SageMaker Pipelines을 사용하여 워크플로를 오케스트레이션하려면 JSON 파이프라인 정의 형태로 방향성 비순환 그래프(DAG)를 생성해야 합니다. DAG는 데이터 사전 처리, 모델 훈련, 모델 평가 및 모델 배포와 같은 ML 프로세스에 관련된 다양한 단계와 이러한 단계 간의 데이터 종속성 및 흐름을 지정합니다. 다음 주제에서는 파이프라인 정의를 생성하는 방법을 보여줍니다.

SageMaker Python SDK 또는 Amazon SageMaker Studio의 시각적 드래그 앤 드롭 파이프라인 디자이너 기능을 사용하여 JSON 파이프라인 정의를 생성할 수 있습니다. 다음 이미지는 이 자습서에서 만드는 파이프라인 DAG를 나타냅니다.

Studio의 Pipelines용 시각적 드래그 앤 드롭 인터페이스 스크린샷

다음 섹션에서 정의하는 파이프라인은 회귀 문제를 해결하여 물리적 측정치를 기반으로 전복의 수명을 판단합니다. 이 자습서의 콘텐츠가 포함된 Jupyter Notebook은 Orchestrating Jobs with Amazon SageMaker Model Building Pipelines을 참조하세요.

참고

Github의 엔드 투 엔드 예시 CustomerChurn 파이프라인에 나와 있는 것처럼 모델 위치를 훈련 단계의 속성으로 참조할 수 있습니다.

주제

    다음 연습에서는 드래그 앤 드롭 파이프라인 디자이너를 사용하여 베어본 파이프라인을 만드는 단계를 안내합니다. 언제든지 시각적 디자이너에서 파이프라인 편집 세션을 일시 중지하거나 종료해야 하는 경우 내보내기 옵션을 클릭합니다. 그러면 파이프라인의 현재 정의를 로컬 환경에 다운로드할 수 있습니다. 나중에 파이프라인 편집 프로세스를 재개하려는 경우 동일한 JSON 정의 파일을 시각적 디자이너로 가져올 수 있습니다.

    처리 단계를 만드는 방법

    데이터 처리 작업 단계를 만들려면 다음을 수행합니다.

    1. Amazon SageMaker Studio 출시의 지침에 따라 Studio 콘솔을 엽니다.

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

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

    4. 비어 있음을 선택합니다.

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

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

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

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

    9. 오른쪽 사이드바의 나머지 필드를 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 sagemaker.workflow.steps.ProcessingStep을 참조하세요.

    훈련 단계 만들기

    모델 훈련 단계를 설정하려면 다음을 수행합니다.

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

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

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

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

    5. 오른쪽 사이드바의 나머지 필드를 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 sagemaker.workflow.steps.TrainingStep을 참조하세요.

    6. 이전 섹션에서 추가한 프로세스 데이터 단계에서 커서를 클릭하고 모델 훈련 단계로 드래그하여 두 단계를 연결하는 엣지를 만듭니다.

    모델 등록 단계를 사용하여 모델 패키지 만들기

    모델 등록 단계를 사용하여 모델 패키지를 만들려면 다음을 수행합니다.

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

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

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

    4. 모델 그룹 만들기를 선택하여 모델을 새 모델 그룹에 추가합니다.

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

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

    모델 배포(엔드포인트) 단계를 사용하여 엔드포인트에 모델 배포

    모델 배포 단계를 사용하여 모델을 배포하려면 다음을 수행합니다.

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

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

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

    4. 엔드포인트 만들기 라디오 버튼을 선택하여 새 엔드포인트를 만듭니다.

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

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

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

    파이프라인 파라미터 정의

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

    파이프라인 저장

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

    사전 조건

    다음 자습서를 실행하려면 다음을 수행해야 합니다.

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

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

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/role-name" } ] }
    • Modifying a role trust policy의 단계에 따라 SageMaker AI 서비스 위탁자를 신뢰합니다. 역할의 신뢰 관계에 다음 명령문 부분을 추가합니다.

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

    환경 설정

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

    import boto3 import sagemaker from sagemaker.core.workflow.pipeline_context import PipelineSession from sagemaker.core.helper.session_helper import Session, get_execution_role region = boto3.Session().region_name sagemaker_session = Session() role = 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 AI 리소스 태그 지정을 위한 권한 제공 섹션을 참조하세요.

    SageMaker 리소스를 만들 수 있는 권한을 부여하는 AWS Amazon SageMaker AI에 대한 관리형 정책에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

    SageMaker AI 노트북 인스턴스에서 다음 단계를 실행하여 사전 처리, 훈련, 평가, 조건부 평가 및 모델 등록 단계가 포함된 파이프라인을 생성합니다.

    참고

    ExecutionVariables Join 함수를 사용하여 출력 위치를 지정할 수 있습니다.

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

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

    • 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단계: 파이프라인 파라미터 정의

    from sagemaker.core.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. 처리 단계에 전달할 프로세서의 인스턴스를 생성합니다.

      from sagemaker.core.processing import Processor from sagemaker.core import image_uris framework_version = "0.23-1" sklearn_image_uri = image_uris.retrieve( framework="sklearn", region=region, version=framework_version, instance_type="ml.m5.xlarge" ) sklearn_processor = Processor( image_uri=sklearn_image_uri, instance_type="ml.m5.xlarge", instance_count=processing_instance_count, base_job_name="sklearn-abalone-process", sagemaker_session=pipeline_session, role=role, )
    2. 처리 단계를 만들려면

      from sagemaker.core.processing import ProcessingInput, ProcessingOutput from sagemaker.mlops.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 AI XGBoost Algorithm을 사용하여 처리 단계의 훈련 데이터 출력에 대해 모델을 훈련하는 방법을 보여줍니다.

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

      model_path = f"s3://{default_bucket}/AbaloneTrain"
    2. XGBoost 알고리즘 및 입력 데이터 세트에 대한 훈련 예측기를 구성합니다.

      from sagemaker.train import ModelTrainer from sagemaker.train.configs import Compute, OutputDataConfig from sagemaker.core import image_uris image_uri = image_uris.retrieve( framework="xgboost", region=region, version="1.0-1", py_version="py3", instance_type="ml.m5.xlarge" ) xgb_train = ModelTrainer( training_image=image_uri, compute=Compute(instance_type="ml.m5.xlarge", instance_count=1), output_data_config=OutputDataConfig(s3_output_path=model_path), hyperparameters={ "objective": "reg:linear", "num_round": "50", "max_depth": "5", "eta": "0.2", "gamma": "4", "min_child_weight": "6", "subsample": "0.7", "silent": "0" }, sagemaker_session=pipeline_session, role=role, )
    3. 의 훈련 인스턴스 및 속성을 TrainingStep 사용하여를 생성합니다ProcessingStep.

      from sagemaker.train.configs import InputData from sagemaker.mlops.workflow.steps import TrainingStep train_args = xgb_train.train( input_data_config=[ InputData( channel_name="train", data_source=step_process.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), InputData( channel_name="validation", data_source=step_process.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) ], ) step_train = TrainingStep(name="AbaloneTrain", step_args=train_args)

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

    이 섹션에서는 모델의 정확도를 평가하기 위한 처리 단계를 생성하는 방법을 소개합니다.

    모델 평가를 위한 처리 단계를 정의하려면
    1. 평가를 Processor 위해의 인스턴스를 생성합니다.

      from sagemaker.core.processing import Processor script_eval = Processor( 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, )
    2. 프로세서 인스턴스, 입력 및 출력 채널, 스크립트를 ProcessingStep 사용하여 evaluation.py를 생성합니다.

      from sagemaker.core.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단계: 배치 변환을 위한 모델 만들기 단계 정의

    이 섹션에서는 훈련 단계의 출력에서 SageMaker AI 모델을 생성하는 방법을 소개합니다.

    배치 변환을 위한 모델 생성 단계를 정의하려면
    • SageMaker AI 모델 및 모델 단계를 생성합니다.

      from sagemaker.serve import ModelBuilder from sagemaker.mlops.workflow.model_step import ModelStep model_builder = ModelBuilder( image_uri=image_uri, s3_model_data_url=step_train.properties.ModelArtifacts.S3ModelArtifacts, role_arn=role, sagemaker_session=pipeline_session, ) step_create_model = ModelStep( name="AbaloneCreateModel", step_args=model_builder.build(), )

    7단계: 배치 변환을 수행할 변환 단계 정의

    이 섹션에서는 모델을 훈련한 후 데이터세트에서 배치 변환을 수행하는 TransformStep을 만드는 방법을 보여줍니다.

    배치 변환을 수행할 변환 단계를 정의하려면
    • 변환기 인스턴스와를 생성합니다TransformStep.

      from sagemaker.core.transformer import Transformer from sagemaker.mlops.workflow.steps import TransformStep transformer = Transformer( model_name=step_create_model.properties.ModelName, instance_type="ml.m5.xlarge", instance_count=1, output_path=f"s3://{default_bucket}/AbaloneTransform", sagemaker_session=pipeline_session, ) transform_args = transformer.transform(data=batch_data) step_transform = TransformStep( name="AbaloneTransform", step_args=transform_args, )

    8단계: 모델 패키지를 만들기 위한 모델 등록 단계 정의

    이 섹션에서는 모델을 등록하는 방법을 보여줍니다. 그 결과 추론을 위한 모델 패키지가 생성됩니다.

    모델 등록 단계를 정의하여 모델 패키지를 생성하려면
    • 모델 등록 단계를 구성합니다.

      from sagemaker.core.model_metrics import MetricsSource, ModelMetrics from sagemaker.mlops.workflow.model_step import ModelStep from sagemaker.serve import ModelBuilder model_metrics = ModelMetrics( model_statistics=MetricsSource( s3_uri="{}/evaluation.json".format( step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"] ), content_type="application/json" ) ) model_builder = ModelBuilder( image_uri=image_uri, s3_model_data_url=step_train.properties.ModelArtifacts.S3ModelArtifacts, role_arn=role, sagemaker_session=pipeline_session, ) register_args = model_builder.register( 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 ) step_register = ModelStep( name="AbaloneRegisterModel", step_args=register_args, )

    9단계: 모델 정확도를 확인하기 위한 조건 단계 정의

    ConditionStep을 사용하면 Pipelines이 단계 속성의 조건에 따라 파이프라인 DAG에서 조건부 실행을 지원할 수 있습니다.

    모델 정확도를 확인하기 위해 조건 단계를 정의하려면
    • 조건을 정의하고를 구성합니다ConditionStep.

      from sagemaker.core.workflow.conditions import ConditionLessThanOrEqualTo from sagemaker.mlops.workflow.condition_step import ConditionStep from sagemaker.core.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 ) step_cond = ConditionStep( name="AbaloneMSECond", conditions=[cond_lte], if_steps=[step_register, step_create_model, step_transform], else_steps=[], )

    10단계: 파이프라인 생성

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

    파이프라인을 만들려면
    1. 파이프라인에 name, parameters, steps을 정의합니다.

      from sagemaker.mlops.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 AI에 제출할 준비가 되었습니다. 다음 자습서에서는 이 파이프라인을 SageMaker AI에 제출하고 실행을 시작합니다.

    Boto3 또는 CloudFormation을 사용하여 파이프라인을 만들 수도 있습니다. 파이프라인을 생성하려면 파이프라인의 각 단계를 정의하는 JSON 객체인 파이프라인 정의가 필요합니다. SageMaker SDK는 파이프라인 정의를 구성하는 간단한 방법을 제공하며, 앞서 언급한 모든 API와 함께 사용하여 파이프라인 자체를 생성할 수 있습니다. SDK를 사용하지 않는 경우 사용자는 SageMaker Python SDK에서 제공하는 오류 검사 없이 원시 JSON 정의를 작성하여 파이프라인을 생성해야 합니다. 파이프라인 JSON 정의의 스키마를 보려면 SageMaker AI Pipeline Definition JSON Schema를 참조하세요. 다음 코드 샘플은 SageMaker AI Pipelines 정의 JSON 객체의 예시를 보여줍니다.

    {'Version': '2020-12-01', 'Metadata': {}, 'Parameters': [{'Name': 'ProcessingInstanceType', 'Type': 'String', 'DefaultValue': 'ml.m5.xlarge'}, {'Name': 'ProcessingInstanceCount', 'Type': 'Integer', 'DefaultValue': 1}, {'Name': 'TrainingInstanceType', 'Type': 'String', 'DefaultValue': 'ml.m5.xlarge'}, {'Name': 'ModelApprovalStatus', 'Type': 'String', 'DefaultValue': 'PendingManualApproval'}, {'Name': 'ProcessedData', 'Type': 'String', 'DefaultValue': 'S3_URL', {'Name': 'InputDataUrl', 'Type': 'String', 'DefaultValue': 'S3_URL', 'PipelineExperimentConfig': {'ExperimentName': {'Get': 'Execution.PipelineName'}, 'TrialName': {'Get': 'Execution.PipelineExecutionId'}}, 'Steps': [{'Name': 'ReadTrainDataFromFS', 'Type': 'Processing', 'Arguments': {'ProcessingResources': {'ClusterConfig': {'InstanceType': 'ml.m5.4xlarge', 'InstanceCount': 2, 'VolumeSizeInGB': 30}}, 'AppSpecification': {'ImageUri': 'IMAGE_URI', 'ContainerArguments': [....]}, 'RoleArn': 'ROLE', 'ProcessingInputs': [...], 'ProcessingOutputConfig': {'Outputs': [.....]}, 'StoppingCondition': {'MaxRuntimeInSeconds': 86400}}, 'CacheConfig': {'Enabled': True, 'ExpireAfter': '30d'}}, ... ... ... }

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