기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
단계 추가
다음은 각 단계 유형의 요구 사항을 설명하고 해당 단계의 예시 구현을 제공하며 Pipelines에 단계를 추가하는 방법을 설명합니다. 이는 필요한 리소스와 입력을 제공하지 않으므로 작동하는 구현이 아닙니다. 이러한 단계를 구현하는 자습서는 Pipelines 작업섹션을 참조하세요.
참고
로컬 기계 학습 코드에서 @step
데코레이터를 사용하여 파이프라인 단계로 변환하여 단계를 만들 수도 있습니다. 자세한 내용은 @step 데코레이터 단원을 참조하십시오.
Amazon SageMaker Pipelines은 다음과 같은 단계 유형을 지원합니다.
@step 데코레이터
drag-and-drop기 파이프라인 UI에서 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면를 사용합니다코드 실행 단계.
@step
데코레이터를 사용하여 로컬 기계 학습 코드에서 단계를 만들 수 있습니다. 코드를 테스트한 후 @step
데코레이터로 주석을 달아 함수를 SageMaker AI 파이프라인 단계로 변환할 수 있습니다. 파이프라인은 @step
으로 데코레이션된 함수의 출력을 파이프라인에 단계로 전달할 때 파이프라인을 만들고 실행합니다. 또한 하나 이상의 @step
데코레이션된 함수와 기존 SageMaker AI 파이프라인 단계를 포함하는 다단계 DAG 파이프라인을 생성할 수 있습니다. @step
데코레이터로 단계를 만드는 방법에 대한 자세한 내용은 @step 데코레이터를 사용한 Python 코드 리프트 앤 시프트 섹션을 참조하세요.
Pipelines 드래그 앤 드롭 UI에서 코드 실행 단계를 사용하여 자체 코드를 파이프라인 단계로 실행할 수 있습니다. 파이프라인의 일부로 실행할 Python 함수, 스크립트 또는 노트북을 업로드할 수 있습니다. 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면이 단계를 사용해야 합니다.
코드 실행 단계는 Amazon SageMaker AI용 기본 Amazon S3 버킷에 파일을 업로드합니다. Amazon SageMaker 이 버킷에는 필요한 교차 오리진 리소스 공유(CORS) 권한 세트가 없을 수 있습니다. CORS 권한 구성에 대한 자세한 내용은 입력 이미지 데이터에 대한 CORS 요구 사항 섹션을 참조하세요.
코드 실행 단계에서는 Amazon SageMaker 훈련 작업을 사용하여 코드를 실행합니다. IAM 역할에 sagemaker:DescribeTrainingJob
및 sagemaker:CreateTrainingJob
API 권한이 있어야 합니다. Amazon SageMaker AI에 필요한 모든 권한과 이를 설정하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조.
파이프라인 디자이너를 사용하여 파이프라인에 코드 실행 단계를 추가하려면 다음을 수행합니다.
-
Amazon SageMaker Studio 출시의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.
-
왼쪽 탐색 창에서 파이프라인을 클릭합니다.
-
생성(Create)을 선택합니다.
-
비어 있음을 선택합니다.
-
왼쪽 사이드바에서 코드 실행을 선택하고 캔버스로 드래그합니다.
-
캔버스에서 추가한 코드 실행 단계를 선택합니다.
-
오른쪽 사이드바의 설정 및 세부 정보 탭에서 양식을 작성합니다.
-
단일 파일을 업로드하여 여러 아티팩트가 포함된 압축 폴더를 실행하거나 업로드할 수 있습니다.
-
단일 파일 업로드의 경우 노트북, Python 함수 또는 스크립트에 대한 파라미터를 선택적으로 제공할 수 있습니다.
-
Python 함수를 제공할 때 핸들러를
file.py:
형식으로 제공해야 합니다.<function_name>
-
압축 폴더 업로드의 경우 코드에 대한 상대 경로를 제공해야 하며, 선택적으로 압축 폴더 내의
requirements.txt
파일 또는 초기화 스크립트에 대한 경로를 제공할 수 있습니다. -
캔버스에 추가한 코드 실행 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 코드 실행 단계로 드래그하여 엣지를 만듭니다.
-
캔버스에 추가한 코드 실행 단계 바로 뒤에 있는 단계가 포함된 경우 코드 실행 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다. 코드 실행 단계의 출력은 Python 함수를 위해 참조할 수 있습니다.
처리 단계를 사용하여 데이터 처리를 위한 처리 작업을 생성합니다. 작업 처리에 대한 자세한 내용은 데이터 처리 및 모델 평가를 참조하세요.
훈련 단계를 사용하여 모델을 훈련시키는 훈련 작업을 생성합니다. 훈련 작업에 대한 자세한 내용은 Amazon SageMaker AI로 모델 훈련을 참조하세요.
훈련 단계에는 훈련 및 검증 데이터 입력뿐만 아니라 예측기가 필요합니다.
튜닝 단계를 사용하여 하이퍼파라미터 최적화(HPO) 라고도 하는 하이퍼파라미터 튜닝 작업을 생성합니다. 하이퍼파라미터 조정 작업은 여러 개의 훈련 작업을 실행하며 각 작업은 모델 버전을 생성합니다. 하이퍼파라미터 튜닝에 대한 자세한 내용은 SageMaker AI를 사용한 자동 모델 튜닝섹션을 참조하세요.
튜닝 작업은 파이프라인에 대한 SageMaker AI 실험과 연결되어 있으며 훈련 작업은 시도로 생성됩니다. 자세한 내용은 실험 통합 단원을 참조하십시오.
튜닝 단계에는 하이퍼파라미터 튜너HyperparameterTuner
의 warm_start_config
파라미터를 지정하여 이전 튜닝 작업을 다시 훈련할 수 있습니다. 하이퍼파라미터 튜닝 및 부팅에 대한 자세한 내용은 웜 스타트 하이퍼파라미터 튜닝 작업 실행섹션을 참조하세요.
SageMaker.Workflow.steps.TuningStep
중요
조정 단계는 Amazon SageMaker Python SDK v2.48.0과 Amazon SageMaker Studio Classic v3.8.0에 도입되었습니다. 조정 단계를 사용하기 전에 Studio Classic을 업데이트해야 합니다. 업데이트하지 않으면 파이프라인 DAG가 표시되지 않습니다. Studio Classic을 업데이트하려면 SageMaker Studio Classic 종료 및 업데이트 섹션을 참조하세요.
다음 예제는 TuningStep
정의를 생성하는 방법을 보여줍니다.
from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.tuner import HyperparameterTuner from sagemaker.inputs import TrainingInput from sagemaker.workflow.steps import TuningStep tuner = HyperparameterTuner(..., sagemaker_session=PipelineSession()) step_tuning = TuningStep( name = "HPTuning", step_args = tuner.fit(inputs=TrainingInput(s3_data="s3://
amzn-s3-demo-bucket/my-data
")) )
최적 모델 버전 가져오기
다음 예제에서는 get_top_model_s3_uri
메서드를 사용하여 튜닝 작업에서 최적 모델 버전을 가져오는 방법을 보여줍니다. 최고 성능 상위 50개 버전은 HyperParameterTuningJobObjective에 따라 순위가 매겨집니다. top_k
인수는 버전에 대한 인덱스로, top_k=0
은 성능이 가장 좋은 버전이고 top_k=49
는 성능이 가장 낮은 버전입니다.
best_model = Model( image_uri=image_uri, model_data=step_tuning.get_top_model_s3_uri( top_k=0, s3_bucket=sagemaker_session.default_bucket() ), ... )
튜닝 단계 요구 사항에 대한 자세한 내용은 SageMaker.Workflow.steps.TuningStep
미세 조정은 새 데이터세트에 대해 Amazon SageMaker JumpStart의 사전 훈련된 파운데이션 모델을 훈련합니다. 전이 학습이라고도 하는 이 프로세스를 통해 더 작은 데이터세트를 사용하고 훈련 시간을 단축하여 정확한 모델을 생성할 수 있습니다. 모델을 미세 조정할 때 기본 데이터세트를 사용하거나 자체 데이터를 선택할 수 있습니다. JumpStart에서 파운데이션 모델을 미세 조정하는 방법에 대한 자세한 내용은 모델 미세 조정 섹션을 참조하세요.
미세 조정 단계에서는 Amazon SageMaker 훈련 작업을 사용하여 모델을 사용자 지정합니다. IAM 역할에 파이프라인에서 미세 조정 작업을 실행할 수 있는 sagemaker:DescribeTrainingJob
및 sagemaker:CreateTrainingJob
API 권한이 있어야 합니다. Amazon SageMaker AI에 필요한 권한과 이를 설정하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조.
드래그 앤 드롭 편집기를 사용하여 파이프라인에 미세 조정 모델 단계를 추가하려면 다음 단계를 따르세요.
-
Amazon SageMaker Studio 출시의 지침에 따라 Studio 콘솔을 엽니다.
-
왼쪽 탐색 창에서 파이프라인을 클릭합니다.
-
생성(Create)을 선택합니다.
-
비어 있음을 선택합니다.
-
왼쪽 사이드바에서 모델 미세 조정을 선택하고 캔버스로 드래그합니다.
-
캔버스에서 추가한 모델 미세 조정 단계를 선택합니다.
-
오른쪽 사이드바의 설정 및 세부 정보 탭에서 양식을 작성합니다.
-
캔버스에 추가한 모델 미세 조정 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 모델 미세 조정 단계로 드래그하여 엣지를 만듭니다.
-
캔버스에 추가한 모델 미세 조정 단계 바로 뒤에 있는 단계가 포함된 경우 모델 미세 조정 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.
AutoML
참고
현재 AutoML 단계는 앙상블 훈련 모드만 지원합니다.
다음 예제는 AutoMLStep
을 사용하여 정의를 생성하는 방법을 보여줍니다.
from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.workflow.automl_step import AutoMLStep pipeline_session = PipelineSession() auto_ml = AutoML(..., role="
<role>
", target_attribute_name="my_target_attribute_name
", mode="ENSEMBLING
", sagemaker_session=pipeline_session) input_training = AutoMLInput( inputs="s3://amzn-s3-demo-bucket/my-training-data
", target_attribute_name="my_target_attribute_name
", channel_type="training", ) input_validation = AutoMLInput( inputs="s3://amzn-s3-demo-bucket/my-validation-data
", target_attribute_name="my_target_attribute_name
", channel_type="validation", ) step_args = auto_ml.fit( inputs=[input_training, input_validation] ) step_automl = AutoMLStep( name="AutoMLStep", step_args=step_args, )
최적 모델 버전 가져오기
AutoML 단계에서는 여러 모델 후보를 자동으로 학습시킵니다. 다음과 같이 get_best_auto_ml_model
메서드를 사용하여 AutoML 작업에서 최적의 목표 지표가 있는 모델을 가져옵니다. 또한 IAM role
을 사용하여 모델 아티팩트에 액세스해야 합니다.
best_model = step_automl.get_best_auto_ml_model(
role=<role>
)
자세한 내용은 SageMaker Python SDK의 AutoML
ModelStep
를 사용하여 SageMaker AI 모델을 생성하거나 등록합니다. ModelStep
요구 사항에 대한 자세한 내용은 SageMaker.Workflow.Model_Step.ModelStep
모델 생성
ModelStep
를 사용하여 SageMaker AI 모델을 생성할 수 있습니다. ModelStep
에는 모델을 생성하는 데 사용해야 하는 SageMaker AI 인스턴스 유형에 대한 모델 아티팩트와 정보가 필요합니다. SageMaker AI 모델에 대한 자세한 내용은 Amazon SageMaker AI로 모델 훈련을 참조하세요.
다음 예제는 ModelStep
정의를 생성하는 방법을 보여줍니다.
from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.model import Model from sagemaker.workflow.model_step import ModelStep step_train = TrainingStep(...) model = Model( image_uri=pytorch_estimator.training_image_uri(), model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts, sagemaker_session=PipelineSession(), role=role, ) step_model_create = ModelStep( name="MyModelCreationStep", step_args=model.create(instance_type="ml.m5.xlarge"), )
모델 등록
를 사용하여 Amazon SageMaker 모델 레지스트리ModelStep
에 sagemaker.model.Model
또는 sagemaker.pipeline.PipelineModel
를 등록할 수 있습니다. PipelineModel
은 추론 파이프라인은 데이터에 대해 추론 요청을 처리하는 컨테이너로 이루어진 선형 시퀀스로 구성된 모델입니다. 모델을 등록하는 자세한 방법은 Model Registry를 사용한 모델 등록 배포섹션을 참조하세요.
다음 예제에서는 PipelineModel
을 등록하는 ModelStep
생성 방법을 보여 줍니다.
import time from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.sklearn import SKLearnModel from sagemaker.xgboost import XGBoostModel pipeline_session = PipelineSession() code_location = 's3://{0}/{1}/code'.format(
bucket_name
, prefix) sklearn_model = SKLearnModel( model_data=processing_step.properties.ProcessingOutputConfig.Outputs['model'].S3Output.S3Uri, entry_point='inference.py', source_dir='sklearn_source_dir/', code_location=code_location, framework_version='1.0-1', role=role, sagemaker_session=pipeline_session, py_version='py3' ) xgboost_model = XGBoostModel( model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts, entry_point='inference.py', source_dir='xgboost_source_dir/', code_location=code_location, framework_version='0.90-2', py_version='py3', sagemaker_session=pipeline_session, role=role ) from sagemaker.workflow.model_step import ModelStep from sagemaker import PipelineModel pipeline_model = PipelineModel( models=[sklearn_model, xgboost_model], role=role,sagemaker_session=pipeline_session, ) register_model_step_args = pipeline_model.register( content_types=["application/json"], response_types=["application/json"], inference_instances=["ml.t2.medium", "ml.m5.xlarge"], transform_instances=["ml.m5.xlarge"], model_package_group_name='sipgroup', ) step_model_registration = ModelStep( name="AbaloneRegisterModel", step_args=register_model_step_args, )
모델 생성 단계를 사용하여 SageMaker AI 모델을 생성합니다. SageMaker AI 모델에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker를 사용한 모델 훈련.
모델 생성 단계에는 모델을 생성하는 데 사용해야 하는 SageMaker AI 인스턴스 유형에 대한 모델 아티팩트와 정보가 필요합니다. 다음 예시는 모델 만들기 단계 정의를 만드는 방법을 보여줍니다. 모델 만들기 단계 요구 사항에 대한 자세한 내용은 sagemaker.workflow.steps.CreateModelStep
모델 등록 단계에서는 모델을 SageMaker Model Registry에 등록합니다.
파이프라인 디자이너에서 모델 배포(엔드포인트) 단계를 사용하여 모델을 엔드포인트에 배포합니다. 새 엔드포인트를 만들거나 기존 엔드포인트를 사용할 수 있습니다. 실시간 추론은 실시간, 대화형, 짧은 지연 시간이 요구되는 추론 워크로드에 적합합니다. 모델을 SageMaker AI 호스팅 서비스에 배포하고 추론에 사용할 수 있는 실시간 엔드포인트를 얻을 수 있습니다. 이러한 엔드포인트는 완전 관리형이며 오토 스케일링을 지원합니다. SageMaker AI의 실시간 추론에 대한 자세한 내용은 섹션을 참조하세요실시간 추론.
파이프라인에 모델 배포 단계를 추가하기 전에 IAM 역할에 다음 권한이 있는지 확인합니다.
-
sagemaker:CreateModel
-
sagemaker:CreateEndpointConfig
-
sagemaker:CreateEndpoint
-
sagemaker:UpdateEndpoint
-
sagemaker:DescribeModel
-
sagemaker:DescribeEndpointConfig
-
sagemaker:DescribeEndpoint
SageMaker AI에 필요한 모든 권한과 이를 설정하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조.
드래그 앤 드롭 편집기에서 파이프라인에 모델 배포 단계를 추가하려면 다음 단계를 완료하세요.
-
Amazon SageMaker Studio 출시의 지침에 따라 Studio 콘솔을 엽니다.
-
왼쪽 탐색 창에서 파이프라인을 클릭합니다.
-
생성(Create)을 선택합니다.
-
비어 있음을 선택합니다.
-
왼쪽 사이드바에서 모델 배포(엔드포인트)를 선택하고 캔버스로 드래그합니다.
-
캔버스에서 추가한 모델 배포(엔드포인트) 단계를 선택합니다.
-
오른쪽 사이드바의 설정 및 세부 정보 탭에서 양식을 작성합니다.
-
캔버스에 추가한 모델 배포(엔드포인트) 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 모델 배포(엔드포인트) 단계로 드래그하여 엣지를 만듭니다.
-
캔버스에 추가한 모델 배포(엔드포인트) 단계 바로 뒤에 있는 단계가 포함된 경우 모델 배포(엔드포인트) 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.
배치 변환을 위한 변환 단계를 사용하여 전체 데이터세트에 대해 추론을 실행합니다. 배치 변환에 대한 자세한 정보는 추론 파이프라인을 사용하여 배치 변환섹션을 참조하세요.
변환 단계에는 배치 변환을 실행하는 데 사용할 변환기와 데이터가 필요합니다. 다음 예시는 변환 단계 정의를 만드는 방법을 보여줍니다. 변환 단계 요구 사항에 대한 자세한 내용은 sagemaker.workflow.steps.TransformStep
조건 단계를 사용하여 단계 속성의 조건을 평가하여 파이프라인에서 다음에 취해야 할 조치를 평가합니다.
조건 단계에는 다음이 필요합니다.
-
조건 목록
-
조건이
true
로 평가되는 경우 실행할 단계의 목록 -
조건이
false
로 평가되는 경우 실행할 단계의 목록
Callback
단계를 사용하여 Amazon SageMaker Pipelines에서 직접 제공하지 않는 추가 프로세스와 AWS 서비스를 워크플로에 추가합니다. Callback
단계가 실행되면 다음 절차가 수행됩니다.
-
Pipelines이 고객 지정한 Amazon Simple Queue Service(Amazon SQS) 대기열에 메시지를 전송합니다. 메시지에는 Pipelines에서 생성한 토큰과 고객이 제공한 입력 파라미터 목록이 포함되어 있습니다. 메시지를 보낸 후 Pipelines은 고객의 응답을 기다립니다.
-
고객은 Amazon SQS 대기열에서 메시지를 검색하고 사용자 지정 프로세스를 시작합니다.
-
프로세스가 완료되면 고객은 다음 API 중 하나를 직접 호출하고 Pipelines에서 생성된 토큰을 제출합니다.
-
SendPipelineExecutionStepSuccess와 출력 파라미터 목록
-
-
API 직접 호출로 인해 Pipelines이 파이프라인 프로세스를 계속하거나 프로세스에 실패합니다.
Callback
단계 요구 사항에 대한 자세한 내용은 SageMaker.Workflow.Callback_step.CallbackStep
중요
Callback
단계는 Amazon SageMaker Python SDK v2.45.0과 Amazon SageMaker Studio Classic v3.6.2에 도입되었습니다. Callback
단계를 사용하기 전에 Studio Classic을 업데이트해야 합니다. 업데이트하지 않으면 파이프라인 DAG가 표시되지 않습니다. Studio Classic을 업데이트하려면 SageMaker Studio Classic 종료 및 업데이트 섹션을 참조하세요.
다음 샘플은 이전 절차의 구현을 보여줍니다.
from sagemaker.workflow.callback_step import CallbackStep step_callback = CallbackStep( name="MyCallbackStep", sqs_queue_url="https://sqs.us-east-2.amazonaws.com/012345678901/MyCallbackQueue", inputs={...}, outputs=[...] ) callback_handler_code = ' import boto3 import json def handler(event, context): sagemaker_client=boto3.client("sagemaker") for record in event["Records"]: payload=json.loads(record["body"]) token=payload["token"] # Custom processing # Call SageMaker AI to complete the step sagemaker_client.send_pipeline_execution_step_success( CallbackToken=token, OutputParameters={...} ) '
참고
CallbackStep
의 출력 파라미터는 중첩되지 않아야 합니다. 예를 들어, 중첩된 사전을 출력 파라미터로 사용하는 경우 사전은 단일 문자열로 취급됩니다 (예: {"output1": "{\"nested_output1\":\"my-output\"}"}
). 중첩된 값을 제공하는 경우 특정 출력 파라미터를 참조하려고 하면 SageMaker AI에서 재시도할 수 없는 클라이언트 오류가 발생합니다.
중지 동작
Callback
단계가 실행되는 동안에는 파이프라인 프로세스가 중지되지 않습니다.
실행 중인 Callback
단계가 있는 파이프라인 프로세스에서 StopPipelineExecution을 직접 호출하면 Pipelines은 SQS 대기열에 Amazon SQS 메시지를 보냅니다. SQS 메시지 본문에는 Stopping
으로 설정된 상태 필드가 포함되어 있습니다. 다음은 예제 SQS 메시지 본문을 보여줍니다.
{ "token": "26vcYbeWsZ", "pipelineExecutionArn": "arn:aws:sagemaker:us-east-2:012345678901:pipeline/callback-pipeline/execution/7pinimwddh3a", "arguments": { "number": 5, "stringArg": "some-arg", "inputData": "s3://sagemaker-us-west-2-012345678901/abalone/abalone-dataset.csv" }, "status": "Stopping" }
메시지를 수신한 후 필요한 조치(예: 리소스 정리)를 수행할 수 있는 로직을 Amazon SQS 메시지 소비자에게 추가해야 합니다. 그런 다음 SendPipelineExecutionStepSuccess
또는 SendPipelineExecutionStepFailure
에 직접 호출을 추가합니다.
Pipelines은 이러한 호출 중 하나를 수신한 경우에만 파이프라인 프로세스를 중지합니다.
Lambda 단계를 사용하여 AWS Lambda 함수를 실행합니다. 기존 Lambda 함수를 실행하거나 SageMaker AI가 새 Lambda 함수를 생성하고 실행할 수 있습니다. SageMaker AI 파이프라인에서 Lambda 단계를 사용하는 방법을 보여주는 노트북은 sagemaker-pipelines-lambda-step.ipynb
중요
Lambda 단계는 Amazon SageMaker Python SDK v2.51.0과 Amazon SageMaker Studio Classic v3.9.1에 도입되었습니다. Lambda 단계를 사용하기 전에 Studio Classic을 업데이트해야 합니다. 업데이트하지 않으면 파이프라인 DAG가 표시되지 않습니다. Studio Classic을 업데이트하려면 SageMaker Studio Classic 종료 및 업데이트 섹션을 참조하세요.
SageMaker AI는 Lambda 함수를 생성, 업데이트, 호출 및 삭제할 수 있는 sagemaker.lambda_helper.LambdaLambda
에는 다음 서명이 있습니다.
Lambda( function_arn, # Only required argument to invoke an existing Lambda function # The following arguments are required to create a Lambda function: function_name, execution_role_arn, zipped_code_dir, # Specify either zipped_code_dir and s3_bucket, OR script s3_bucket, # S3 bucket where zipped_code_dir is uploaded script, # Path of Lambda function script handler, # Lambda handler specified as "lambda_script.lambda_handler" timeout, # Maximum time the Lambda function can run before the lambda step fails ... )
Sagemaker.workflow.lambda_step.LambdaStepLambda
유형의 lambda_func
인수가 있습니다. 기존 Lambda 함수를 호출하려면 함수의 Amazon 리소스 이름(ARN)을 function_arn
에 제공하기만 하면 됩니다. function_arn
에 대한 값을 제공하지 않는 경우 handler
와 다음 중 하나를 지정해야 합니다.
-
zipped_code_dir
- 압축된 Lambda 함수의 경로s3_bucket
-zipped_code_dir
이 업로드될 Amazon S3 버킷 -
script
- Lambda 함수 스크립트 파일의 경로
다음 예제는 기존 Lambda 함수를 호출하는 Lambda
단계 정의를 생성하는 방법을 보여줍니다.
from sagemaker.workflow.lambda_step import LambdaStep from sagemaker.lambda_helper import Lambda step_lambda = LambdaStep( name="ProcessingLambda", lambda_func=Lambda( function_arn="arn:aws:lambda:us-west-2:012345678910:function:split-dataset-lambda" ), inputs={ s3_bucket = s3_bucket, data_file = data_file }, outputs=[ "train_file", "test_file" ] )
다음 예제는 Lambda 함수 스크립트를 사용하여 Lambda 함수를 생성하고 호출하는 Lambda
단계 정의를 생성하는 방법을 보여줍니다.
from sagemaker.workflow.lambda_step import LambdaStep from sagemaker.lambda_helper import Lambda step_lambda = LambdaStep( name="ProcessingLambda", lambda_func=Lambda( function_name="split-dataset-lambda", execution_role_arn=execution_role_arn, script="lambda_script.py", handler="lambda_script.lambda_handler", ... ), inputs={ s3_bucket = s3_bucket, data_file = data_file }, outputs=[ "train_file", "test_file" ] )
입력 및 출력
Lambda
함수에 입력 또는 출력이 있는 경우 해당 입력 또는 출력도 Lambda
단계에서 정의해야 합니다.
참고
입력 및 출력 파라미터는 중첩되지 않아야 합니다. 예를 들어, 중첩된 사전을 출력 파라미터로 사용하는 경우 사전은 단일 문자열로 취급됩니다 (예: {"output1": "{\"nested_output1\":\"my-output\"}"}
).중첩된 값을 제공하고 나중에 참조하려고 하면 재시도할 수 없는 클라이언트 오류가 발생합니다.
Lambda
단계 정의 시, inputs
은 키-값 쌍의 딕셔너리여야 합니다. inputs
사전의 각 값은 프리미티브 유형(문자열, 정수 또는 부동)이어야 합니다. 중첩된 개체는 지원되지 않습니다. 정의되지 않은 상태로 두면 inputs
기본값은 None
입니다.
outputs
값은 키 목록이어야 합니다. 이 키는 Lambda
함수 출력에 정의된 사전을 참조합니다. inputs
과 마찬가지로 이러한 키는 프리미티브 유형이어야 하며 중첩된 객체는 지원되지 않습니다.
타임아웃 및 중지 동작
Lambda
클래스에는 Lambda 함수를 실행할 수 있는 최대 시간을 지정하는 timeout
인수가 있습니다. 기본값은 120초이며 최대값은 10분입니다. 제한 시간에 도달했을 때 Lambda 함수가 실행 중이면 Lambda 단계는 실패하지만 Lambda 함수는 계속 실행됩니다.
Lambda 단계에서 호출한 Lambda 함수를 중지할 수 없기 때문에 Lambda 단계가 실행되는 동안에는 파이프라인 프로세스를 중지할 수 없습니다. Lambda 함수가 실행되는 동안 프로세스를 중지하면 파이프라인은 함수가 완료될 때까지 또는 제한 시간에 도달할 때까지 기다립니다. 둘 중 어느 상황이 먼저 발생하는지에 따라 달라집니다. 그런 다음 프로세스가 중지됩니다. Lambda 함수가 완료되면 파이프라인 프로세스 상태는 Stopped
입니다. 제한 시간에 도달하면 파이프라인 프로세스 상태는 Failed
입니다.
이 ClarifyCheck
단계를 사용하여 바이어스 분석 및 모델 설명 가능성에 대해 이전 기준 대비 기준 드리프트 검사를 수행할 수 있습니다. 그런 다음 model.register()
메서드로 기준을 생성 및 등록하고 해당 메서드의 결과를 step_args
을 사용하여 모델 단계에 전달할 수 있습니다. 이러한 드리프트 검사 기준은 Amazon SageMaker Model Monitor가 모델 엔드포인트에 사용할 수 있습니다. 따라서 기준 제안을 별도로 수행할 필요가 없습니다.
ClarifyCheck
단계에서는 모델 레지스트리에서 드리프트 검사의 기준을 가져올 수도 있습니다. ClarifyCheck
단계에서는 SageMaker Clarify 사전 빌드된 컨테이너를 사용합니다. 이 컨테이너는 제약 조건 제안 및 주어진 기준에 대한 제약 조건 검증을 비롯한 다양한 모델 모니터링 기능을 제공합니다. 자세한 내용은 사전 구축된 SageMaker Clarify 컨테이너 단원을 참조하십시오.
ClarifyCheck 단계 구성
파이프라인에서 사용할 때마다 사용 가능한 검사 유형 중 하나만을 수행하도록 ClarifyCheck
단계를 구성할 수 있습니다.
-
데이터 바이어스 검사
-
모델 바이어스 검사
-
모델 설명 가능성 검사
그러기 위해 clarify_check_config
파라미터를 다음 검사 유형 값 중 하나로 설정합니다.
-
DataBiasCheckConfig
-
ModelBiasCheckConfig
-
ModelExplainabilityCheckConfig
이 ClarifyCheck
단계에서는 SageMaker AI Clarify 사전 구축 컨테이너를 실행하는 처리 작업을 시작하고 검사 및 처리 작업을 위한 전용 구성이 필요합니다. ClarifyCheckConfig
및 CheckJobConfig
는 이러한 구성에 대한 헬퍼 함수입니다. 이러한 도우미 함수는 SageMaker Clarify 처리 작업이 모델 편향, 데이터 편향 또는 모델 설명 가능성을 검사하기 위해 계산하는 방식에 부합합니다. 자세한 내용은 편향 분석 및 설명 가능성을 위한 SageMaker Clarify 처리 작업 실행 단원을 참조하십시오.
드리프트 검사의 단계 동작 제어
ClarifyCheck
단계의 동작을 제어하려면 다음 두 개의 부울 플래그가 필요합니다.
-
skip_check
: 이 파라미터는 이전 기준에 대한 드리프트 검사를 건너뛰었는지 여부를 나타냅니다.False
로 설정된 경우 구성된 검사 유형의 이전 기준을 사용할 수 있어야 합니다. -
register_new_baseline
: 이 파라미터는BaselineUsedForDriftCheckConstraints
단계 속성을 통해 새로 계산된 기준에 액세스할 수 있는지 여부를 나타냅니다.False
로 설정된 경우 구성된 검사 유형의 이전 기준 역시 사용할 수 있어야 합니다.BaselineUsedForDriftCheckConstraints
속성을 통해 액세스할 수 있습니다.
자세한 내용은 Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기섹션을 참조하세요.
기준 작업
선택적으로 model_package_group_name
을 지정하여 기존 기준을 찾을 수 있습니다. 그런 다음 ClarifyCheck
단계는 모델 패키지 그룹의 승인된 최신 모델 패키지에서 DriftCheckBaselines
을 가져옵니다.
또는 supplied_baseline_constraints
파라미터를 통해 이전 기준을 제공할 수 있습니다. model_package_group_name
, supplied_baseline_constraints
를 모두 지정하는 경우 ClarifyCheck
단계에서는 supplied_baseline_constraints
파라미터로 지정된 기준을 사용합니다.
ClarifyCheck
단계 요구 사항 사용에 대한 자세한 내용은 Python용 Amazon SageMaker AI SageMaker AI SDK의 sagemaker.workflow.steps.ClarifyCheckStepClarifyCheck
단계를 사용하는 방법을 보여주는 Amazon SageMaker Studio Classic 노트북은 sagemaker-pipeline-model-monitor-clarify-steps.ipynb
예 데이터 바이어스 검사를 위한 ClarifyCheck
단계 생성
from sagemaker.workflow.check_job_config import CheckJobConfig from sagemaker.workflow.clarify_check_step import DataBiasCheckConfig, ClarifyCheckStep from sagemaker.workflow.execution_variables import ExecutionVariables check_job_config = CheckJobConfig( role=role, instance_count=1, instance_type="
ml.c5.xlarge
", volume_size_in_gb=120
, sagemaker_session=sagemaker_session, ) data_bias_data_config = DataConfig( s3_data_input_path=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri, s3_output_path=Join(on='/', values=['s3:/', your_bucket, base_job_prefix, ExecutionVariables.PIPELINE_EXECUTION_ID, 'databiascheckstep
']), label=0, dataset_type="text/csv
", s3_analysis_config_output_path=data_bias_analysis_cfg_output_path, ) data_bias_config = BiasConfig( label_values_or_threshold=[15.0
], facet_name=[8
], facet_values_or_threshold=[[0.5
]] ) data_bias_check_config = DataBiasCheckConfig( data_config=data_bias_data_config, data_bias_config=data_bias_config, )h data_bias_check_step = ClarifyCheckStep( name="DataBiasCheckStep
", clarify_check_config=data_bias_check_config, check_job_config=check_job_config, skip_check=False, register_new_baseline=False supplied_baseline_constraints="s3://sagemaker-us-west-2-111122223333/baseline/analysis.json
", model_package_group_name="MyModelPackageGroup
" )
QualityCheck
단계를 사용하여 파이프라인의 데이터 품질 또는 모델 품질에 대한 이전 기준과 비교하여 기준 제안 및 드리프트 검사를 수행합니다. 그런 다음 model.register()
메서드로 기준을 생성 및 등록하고 해당 메서드의 결과를 step_args
를 사용하여 모델 단계에 전달할 수 있습니다.
Model Monitor는 이러한 기준을 모델 엔드포인트의 드리프트 검사에 사용할 수 있으므로 기준 제안을 별도로 수행할 필요가 없습니다. QualityCheck
단계에서는 모델 레지스트리에서 드리프트 검사의 기준을 가져올 수도 있습니다. 이 QualityCheck
단계에서는 Amazon SageMaker AI 모델 모니터 사전 빌드된 컨테이너를 활용합니다. 이 컨테이너에는 제약 조건 제안, 통계 생성, 주어진 기준에 대한 제약 조건 검증을 비롯한 다양한 모델 모니터링 기능이 있습니다. 자세한 내용은 Amazon SageMaker Model Monitor 사전 구축 컨테이너 단원을 참조하십시오.
QualityCheck 단계 구성
파이프라인에서 사용할 때마다 사용 가능한 검사 유형 중 하나만을 실행하도록 QualityCheck
단계를 구성할 수 있습니다.
-
데이터 품질 검사
-
모델 품질 검사
다음 검사 유형 값 중 하나로 quality_check_config
파라미터를 설정하여 이 작업을 수행합니다.
-
DataQualityCheckConfig
-
ModelQualityCheckConfig
QualityCheck
단계에서는 Model Monitor 사전 빌드된 컨테이너를 실행하는 처리 작업을 시작하며 검사 및 처리 작업을 위한 전용 구성이 필요합니다. QualityCheckConfig
및 CheckJobConfig
는 이러한 구성에 대한 도우미 함수입니다. 이러한 도우미 함수는 Model Monitor가 모델 품질 또는 데이터 품질 모니터링을 위한 기준을 만드는 방식에 부합합니다. 모델 모니터 기준 제안에 대한 자세한 내용은 기준 생성, 모델 품질 기준 만들기섹션을 참조하세요.
드리프트 검사의 단계 동작 제어
QualityCheck
단계의 동작을 제어하려면 다음 두 개의 부울 플래그가 필요합니다.
-
skip_check
: 이 파라미터는 이전 기준에 대한 드리프트 검사를 건너뛰었는지 여부를 나타냅니다.False
로 설정된 경우 구성된 검사 유형의 이전 기준을 사용할 수 있어야 합니다. -
register_new_baseline
: 이 파라미터는 단계 속성BaselineUsedForDriftCheckConstraints
및BaselineUsedForDriftCheckStatistics
를 통해 새로 계산된 기준에 액세스할 수 있는지 여부를 나타냅니다.False
로 설정된 경우 구성된 검사 유형의 이전 기준 역시 사용할 수 있어야 합니다.BaselineUsedForDriftCheckConstraints
및BaselineUsedForDriftCheckStatistics
속성을 통해 이러한 속성에 액세스할 수 있습니다.
자세한 내용은 Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기섹션을 참조하세요.
기준 작업
supplied_baseline_statistics
및 supplied_baseline_constraints
파라미터를 통해 직접 이전 기준을 지정할 수 있습니다. 또한 model_package_group_name
을 지정할 수 있으며, QualityCheck
단계는 모델 패키지 그룹의 승인된 최신 모델 패키지에서 DriftCheckBaselines
을 가져옵니다.
다음을 지정하면 QualityCheck
단계는 QualityCheck
단계의 검사 유형에서 supplied_baseline_constraints
및 supplied_baseline_statistics
으로 지정된 기준을 사용합니다.
-
model_package_group_name
-
supplied_baseline_constraints
-
supplied_baseline_statistics
QualityCheck
단계 요구 사항 사용에 대한 자세한 내용은 Python용 Amazon SageMaker AI SageMaker AI SDK의 sagemaker.workflow.steps.QualityCheckStepQualityCheck
단계를 사용하는 방법을 보여주는 Amazon SageMaker Studio Classic 노트북은 sagemaker-pipeline-model-monitor-clarify-steps.ipynb
예 데이터 품질 검사를 위한 QualityCheck
단계 생성
from sagemaker.workflow.check_job_config import CheckJobConfig from sagemaker.workflow.quality_check_step import DataQualityCheckConfig, QualityCheckStep from sagemaker.workflow.execution_variables import ExecutionVariables check_job_config = CheckJobConfig( role=role, instance_count=1, instance_type="
ml.c5.xlarge
", volume_size_in_gb=120
, sagemaker_session=sagemaker_session, ) data_quality_check_config = DataQualityCheckConfig( baseline_dataset=step_process.properties.ProcessingOutputConfig.Outputs["train
"].S3Output.S3Uri, dataset_format=DatasetFormat.csv(header=False, output_columns_position="START"), output_s3_uri=Join(on='/', values=['s3:/', your_bucket, base_job_prefix, ExecutionVariables.PIPELINE_EXECUTION_ID, 'dataqualitycheckstep']) ) data_quality_check_step = QualityCheckStep( name="DataQualityCheckStep", skip_check=False, register_new_baseline=False, quality_check_config=data_quality_check_config, check_job_config=check_job_config, supplied_baseline_statistics="s3://sagemaker-us-west-2-555555555555/baseline/statistics.json
", supplied_baseline_constraints="s3://sagemaker-us-west-2-555555555555/baseline/constraints.json
", model_package_group_name="MyModelPackageGroup
" )
Amazon SageMaker Pipelines EMR 단계를 사용하여 다음을 수행합니다.
-
실행 중인 Amazon EMR 클러스터에서 Amazon EMR 단계를 처리합니다.
-
파이프라인에서 Amazon EMR 클러스터를 만들고 관리하도록 합니다.
Amazon EMR에 대한 자세한 내용은 Amazon EMR 시작하기를 참조하세요.
EMR 단계를 수행하려면 Amazon EMR 클러스터에서 사용하는 JAR 파일의 위치와 전달할 인수가 EMRStepConfig
에 포함되어야 합니다. 실행 중인 EMR 클러스터에서 단계를 실행하려는 경우 Amazon EMR 클러스터 ID도 제공합니다. 클러스터 구성을 전달하여 클러스터가 만들고 관리하고 종료하는 클러스터에서 EMR 단계를 실행할 수도 있습니다. 다음 섹션에는 두 가지 방법을 모두 보여주는 샘플 노트북으로 연결되는 링크와 예제가 포함되어 있습니다.
참고
-
EMR 단계를 수행하려면 파이프라인에 전달된 역할에 추가 권한이 있어야 합니다. AWS 관리형 정책인
AmazonSageMakerPipelinesIntegrations
을 파이프라인 역할에 연결하거나 역할에 해당 정책의 권한이 포함되어 있는지 확인합니다. -
EMR 서버리스에서는 EMR 단계가 지원되지 않습니다. Amazon EMR on EKS에서도 지원되지 않습니다.
-
실행 중인 클러스터에서 EMR 단계를 처리하는 경우 다음 상태 중 하나에 있는 클러스터만 사용할 수 있습니다.
-
STARTING
-
BOOTSTRAPPING
-
RUNNING
-
WAITING
-
-
실행 중인 클러스터에서 EMR 단계를 처리하는 경우 EMR 클러스터의
PENDING
상태에서 최대 256개의 EMR 단계를 가질 수 있습니다. 이 한도를 초과하여 제출된 EMR 단계는 파이프라인 실행에 실패합니다. 파이프라인 단계에 대한 재시도 정책 사용을 고려해 볼 수 있습니다. -
클러스터 ID와 클러스터 구성 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.
-
EMR 단계는 Amazon EventBridge를 사용하여 EMR 단계 또는 클러스터 상태의 변경 사항을 모니터링합니다. 실행 중인 클러스터에서 Amazon EMR 작업을 처리하는 경우 EMR 단계는
SageMakerPipelineExecutionEMRStepStatusUpdateRule
규칙을 사용하여 EMR 단계 상태를 모니터링합니다. EMR 단계에서 만드는 클러스터에서 작업을 처리하는 경우 단계는SageMakerPipelineExecutionEMRClusterStatusRule
규칙을 사용하여 클러스터 상태의 변경을 모니터링합니다. AWS 계정에 이러한 EventBridge 규칙 중 하나가 표시되면 삭제하지 마십시오. 그렇지 않으면 EMR 단계가 완료되지 않을 수 있습니다.
실행 중인 Amazon EMR 클러스터에서 새 작업 시작
실행 중인 Amazon EMR 클러스터에서 새 작업을 시작하려면 클러스터 ID를 EMRStep
의 cluster_id
인수에 문자열로 전달합니다. 다음 예에서는 이 절차를 보여 줍니다.
from sagemaker.workflow.emr_step import EMRStep, EMRStepConfig emr_config = EMRStepConfig( jar="
jar-location
", # required, path to jar file used args=["--verbose", "--force"], # optional list of arguments to pass to the jar main_class="com.my.Main1", # optional main class, this can be omitted if jar above has a manifest properties=[ # optional list of Java properties that are set when the step runs { "key": "mapred.tasktracker.map.tasks.maximum", "value": "2" }, { "key": "mapreduce.map.sort.spill.percent", "value": "0.90" }, { "key": "mapreduce.tasktracker.reduce.tasks.maximum", "value": "5" } ] ) step_emr = EMRStep ( name="EMRSampleStep", # required cluster_id="j-1ABCDEFG2HIJK", # include cluster_id to use a running cluster step_config=emr_config, # required display_name="My EMR Step", description="Pipeline step to execute EMR job" )
전체 예시를 안내하는 샘플 노트북은 Pipelines EMR Step With Running EMR Cluster
실행 중인 Amazon EMR 클러스터에서 새 작업 시작
EMRStep
이 사용자를 대신해 만드는 새 클러스터에서 새 작업을 시작하려면 클러스터 구성을 딕셔너리로 제공합니다. 딕셔너리는 RunJobFlow 요청과 구조가 동일해야 합니다. 하지만 클러스터 구성에 다음 필드를 포함시키지 마세요.
-
[
Name
] -
[
Steps
] -
[
AutoTerminationPolicy
] -
[
Instances
][KeepJobFlowAliveWhenNoSteps
] -
[
Instances
][TerminationProtected
]
다른 모든 RunJobFlow
인수는 클러스터 구성에서 사용할 수 있습니다. 요청 구문에 대한 자세한 내용은 RunJobflow를 참조하세요.
다음 예시에서는 클러스터 구성을 EMR 단계 정의에 전달합니다. 그러면 새 EMR 클러스터에서 새 작업을 시작하는 단계가 표시됩니다. 이 예제의 EMR 클러스터 구성에는 기본 및 코어 EMR 클러스터 노드의 사양이 포함되어 있습니다. Amazon EMR 노드 유형에 대한 자세한 내용은 노드 유형 이해: 기본, 코어 및 태스크 노드를 참조하세요.
from sagemaker.workflow.emr_step import EMRStep, EMRStepConfig emr_step_config = EMRStepConfig( jar="
jar-location
", # required, path to jar file used args=["--verbose", "--force"], # optional list of arguments to pass to the jar main_class="com.my.Main1", # optional main class, this can be omitted if jar above has a manifest properties=[ # optional list of Java properties that are set when the step runs { "key": "mapred.tasktracker.map.tasks.maximum", "value": "2" }, { "key": "mapreduce.map.sort.spill.percent", "value": "0.90" }, { "key": "mapreduce.tasktracker.reduce.tasks.maximum", "value": "5" } ] ) # include your cluster configuration as a dictionary emr_cluster_config = { "Applications": [ { "Name": "Spark", } ], "Instances":{ "InstanceGroups":[ { "InstanceRole": "MASTER", "InstanceCount": 1, "InstanceType": "m5.2xlarge" }, { "InstanceRole": "CORE", "InstanceCount": 2, "InstanceType": "m5.2xlarge" } ] }, "BootstrapActions":[], "ReleaseLabel": "emr-6.6.0", "JobFlowRole": "job-flow-role
", "ServiceRole": "service-role
" } emr_step = EMRStep( name="emr-step", cluster_id=None, display_name="emr_step", description="MyEMRStepDescription", step_config=emr_step_config, cluster_config=emr_cluster_config )
전체 예시를 안내하는 샘플 노트북은 Pipelines EMR Step With Cluster Lifecycle Management
NotebookJobStep
을 사용하여 SageMaker 노트북 작업을 파이프라인 단계로 비대화형으로 실행합니다. Pipelines 드래그 앤 드롭 UI에서 파이프라인을 빌드하는 경우 코드 실행 단계를 사용하여 노트북을 실행합니다. SageMaker 노트북 작업에 대한 자세한 정보는 SageMaker 노트북에서 확인하세요.
NotebookJobStep
에는 최소한 입력 노트북, 이미지 URI 및 커널 이름이 필요합니다. 노트북 작업 단계 요구 사항 및 단계를 사용자 지정하기 위해 설정할 수 있는 기타 파라미터에 대한 자세한 내용은 sagemaker.workflow.steps.NotebookJobStep
다음 예시에서는 최소 인수를 사용하여 NotebookJobStep
을 정의합니다.
from sagemaker.workflow.notebook_job_step import NotebookJobStep notebook_job_step = NotebookJobStep( input_notebook=
input_notebook
, image_uri=image_uri
, kernel_name=kernel_name
)
NotebookJobStep
파이프라인 단계는 SageMaker 노트북 작업으로 처리됩니다. 따라서 tags
인수에 특정 태그를 포함하여 Studio Classic UI 노트북 작업 대시보드에서 실행 상태를 추적합니다. 포함할 태그에 대한 자세한 내용은 Studio UI 대시보드에서 노트북 작업 보기 섹션을 참조하세요.
또한 SageMaker Python SDK를 사용하여 노트북 작업을 예약하는 경우 노트북 작업을 실행할 특정 이미지만 지정할 수 있습니다. 자세한 내용은 SageMaker AI Python SDK 노트북 작업에 대한 이미지 제약 조건 단원을 참조하십시오.
원하는 조건 또는 상태가 달성되지 않을 때 Amazon SageMaker Pipelines을 중지하는 데 실패 단계를 사용합니다. 또한 실패 단계를 사용하여 파이프라인 실행 실패의 원인을 나타내는 사용자 지정 오류 메시지를 입력할 수 있습니다.
참고
실패 단계 및 다른 파이프라인 단계를 동시에 실행하면 모든 동시 작업 단계가 완료될 때까지 파이프라인이 종료되지 않습니다.
실패 단계 사용에 대한 제한 사항
-
다른 단계의
DependsOn
목록에 실패 단계를 추가할 수 없습니다. 자세한 내용은 단계 간 사용자 지정 종속성 단원을 참조하십시오. -
다른 단계는 실패 단계를 참조할 수 없습니다. 이는 항상 파이프라인 실행의 마지막 단계입니다.
-
실패 단계로 끝나는 파이프라인 실행은 재시도할 수 없습니다.
정적 텍스트 문자열 형태로 실패 단계 오류 메시지를 만들 수 있습니다. 또는 SDK를 사용할 경우 파이프라인 파라미터, 조인