기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
단계 추가
다음은 각 단계 유형의 요구 사항을 설명하고 해당 단계의 예시 구현을 제공하며 Pipelines에 단계를 추가하는 방법을 설명합니다. 이는 필요한 리소스와 입력을 제공하지 않으므로 작동하는 구현이 아닙니다. 이러한 단계를 구현하는 자습서는 Pipelines 작업섹션을 참조하세요.
참고
로컬 기계 학습 코드에서 @step
데코레이터를 사용하여 파이프라인 단계로 변환하여 단계를 만들 수도 있습니다. 자세한 내용은 @step 데코레이터 단원을 참조하십시오.
Amazon SageMaker Pipelines은 다음 단계 유형을 지원합니다.
@step 데코레이터
파이프라인 UI에서 drag-and-drop 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면를 사용합니다코드 실행 단계.
@step
데코레이터를 사용하여 로컬 기계 학습 코드에서 단계를 만들 수 있습니다. 코드를 테스트한 후 @step
데코레이터로 주석을 달아 함수를 SageMaker AI 파이프라인 단계로 변환할 수 있습니다. 파이프라인은 @step
으로 데코레이션된 함수의 출력을 파이프라인에 단계로 전달할 때 파이프라인을 만들고 실행합니다. 또한 하나 이상의 @step
장식 함수와 기존 SageMaker AI DAG 파이프라인 단계를 포함하는 다단계 파이프라인을 생성할 수 있습니다. @step
데코레이터로 단계를 만드는 방법에 대한 자세한 내용은 Lift-and-shift @step 데코레이터가 있는 Python 코드 섹션을 참조하세요.
파이프라인 drag-and-drop UI에서 코드 실행 단계를 사용하여 자체 코드를 파이프라인 단계로 실행할 수 있습니다. 파이프라인의 일부로 실행할 Python 함수, 스크립트 또는 노트북을 업로드할 수 있습니다. 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면이 단계를 사용해야 합니다.
코드 실행 단계는 Amazon SageMaker AI용 기본 Amazon S3 버킷에 파일을 업로드합니다. 이 버킷에는 필요한 교차 오리진 리소스 공유(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 실험과 연결됩니다. 자세한 내용은 실험 통합 단원을 참조하십시오.
튜닝 단계에는 HyperparameterTunerHyperparameterTuner
의 warm_start_config
파라미터를 지정하여 이전 튜닝 작업을 다시 훈련할 수 있습니다. 하이퍼파라미터 튜닝 및 부팅에 대한 자세한 내용은 웜 스타트 하이퍼파라미터 튜닝 작업 실행섹션을 참조하세요.
sagemakerTuningStep
중요
튜닝 단계는 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
미세 조정은 새 데이터 세트 SageMaker JumpStart 에서 Amazon의 사전 훈련된 파운데이션 모델을 훈련합니다. 전이 학습이라고도 하는 이 프로세스를 통해 더 작은 데이터세트를 사용하고 훈련 시간을 단축하여 정확한 모델을 생성할 수 있습니다. 모델을 미세 조정할 때 기본 데이터세트를 사용하거나 자체 데이터를 선택할 수 있습니다. 에서 파운데이션 모델을 미세 조정하는 방법에 대한 자세한 내용은 섹션을 JumpStart참조하세요모델 미세 조정.
미세 조정 단계에서는 Amazon SageMaker 훈련 작업을 사용하여 모델을 사용자 지정합니다. IAM 역할에 파이프라인에서 미세 조정 작업을 실행할 수 있는 sagemaker:DescribeTrainingJob
및 sagemaker:CreateTrainingJob
API 권한이 있는지 확인합니다. Amazon SageMaker AI에 필요한 권한과 설정 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조.
drag-and-drop 편집기를 사용하여 파이프라인에 미세 조정 모델 단계를 추가하려면 다음 단계를 수행합니다.
-
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 작업에서 최적의 목표 지표가 있는 모델을 가져옵니다. 또한를 사용하여 모델 아티팩트IAMrole
에 액세스해야 합니다.
best_model = step_automl.get_best_auto_ml_model(
role=<role>
)
자세한 내용은 SageMaker Python의 AutoML
ModelStep
를 사용하여 SageMaker AI 모델을 생성하거나 등록합니다. 요구 사항에 대한ModelStep
자세한 내용은 sagemaker.workflow.model_step.ModelStep
모델 생성
ModelStep
를 사용하여 SageMaker AI 모델을 생성할 수 있습니다. 에는 모델을 생성하는 데 사용해야 하는 SageMaker AI 인스턴스 유형에 대한 모델 아티팩트와 정보가 ModelStep
필요합니다. 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 모델 레지스트리에 등록합니다.
파이프라인 디자이너에서 모델 배포(엔드포인트) 단계를 사용하여 모델을 엔드포인트에 배포합니다. 새 엔드포인트를 만들거나 기존 엔드포인트를 사용할 수 있습니다. 실시간 추론은 실시간, 대화형, 짧은 지연 시간이 요구되는 추론 워크로드에 적합합니다. 모델을 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 권한: 작업, 권한 및 리소스 참조.
편집기에서 drag-and-drop 파이프라인에 모델 배포 단계를 추가하려면 다음 단계를 완료합니다.
-
Amazon SageMaker Studio 시작의 지침에 따라 Studio 콘솔을 엽니다.
-
왼쪽 탐색 창에서 파이프라인을 클릭합니다.
-
생성(Create)을 선택합니다.
-
비어 있음을 선택합니다.
-
왼쪽 사이드바에서 모델 배포(엔드포인트)를 선택하고 캔버스로 드래그합니다.
-
캔버스에서 추가한 모델 배포(엔드포인트) 단계를 선택합니다.
-
오른쪽 사이드바의 설정 및 세부 정보 탭에서 양식을 작성합니다.
-
캔버스에 추가한 모델 배포(엔드포인트) 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 모델 배포(엔드포인트) 단계로 드래그하여 엣지를 만듭니다.
-
캔버스에 추가한 모델 배포(엔드포인트) 단계 바로 뒤에 있는 단계가 포함된 경우 모델 배포(엔드포인트) 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.
배치 변환을 위한 변환 단계를 사용하여 전체 데이터세트에 대해 추론을 실행합니다. 배치 변환에 대한 자세한 정보는 추론 파이프라인을 사용하여 배치 변환섹션을 참조하세요.
변환 단계에는 배치 변환을 실행하는 데 사용할 변환기와 데이터가 필요합니다. 다음 예시는 변환 단계 정의를 만드는 방법을 보여줍니다. 변환 단계 요구 사항에 대한 자세한 내용은 sagemaker.workflow.steps.TransformStep
조건 단계를 사용하여 단계 속성의 조건을 평가하여 파이프라인에서 다음에 취해야 할 조치를 평가합니다.
조건 단계에는 다음이 필요합니다.
-
조건 목록
-
조건이
true
로 평가되는 경우 실행할 단계의 목록 -
조건이
false
로 평가되는 경우 실행할 단계의 목록
Callback
단계를 사용하여 Amazon SageMaker Pipelines에서 직접 제공하지 않는 추가 프로세스와 AWS 서비스를 워크플로에 추가합니다. Callback
단계가 실행되면 다음 절차가 수행됩니다.
-
파이프라인은 고객 지정 Amazon Simple Queue Service(AmazonSQS) 대기열로 메시지를 보냅니다. 메시지에는 Pipelines에서 생성한 토큰과 고객이 제공한 입력 파라미터 목록이 포함되어 있습니다. 메시지를 보낸 후 Pipelines은 고객의 응답을 기다립니다.
-
고객이 Amazon SQS 대기열에서 메시지를 검색하고 사용자 지정 프로세스를 시작합니다.
-
프로세스가 완료되면 고객은 다음 중 하나를 호출APIs하고 파이프라인 생성 토큰을 제출합니다.
-
SendPipelineExecutionStepSuccess출력 파라미터 목록과 함께
-
SendPipelineExecutionStepFailure실패 이유와 함께
-
-
API 호출로 인해 파이프라인은 파이프라인 프로세스를 계속하거나 프로세스에 실패합니다.
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 호출하면 파이프라인은 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" }
SQS 메시지를 수신하면 필요한 조치(예: 리소스 정리)를 취하려면 Amazon 메시지 소비자에게 로직을 추가해야 합니다. 그런 다음 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_func
인수 유형은 입니다Lambda
. 기존 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의 ClarifyCheck 및 QualityCheck 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기섹션을 참조하세요.
기준 작업
선택적으로 model_package_group_name
을 지정하여 기존 기준을 찾을 수 있습니다. 그런 다음 ClarifyCheck
단계는 모델 패키지 그룹의 승인된 최신 모델 패키지에서 DriftCheckBaselines
을 가져옵니다.
또는 supplied_baseline_constraints
파라미터를 통해 이전 기준을 제공할 수 있습니다. model_package_group_name
, supplied_baseline_constraints
를 모두 지정하는 경우 ClarifyCheck
단계에서는 supplied_baseline_constraints
파라미터로 지정된 기준을 사용합니다.
ClarifyCheck
단계 요구 사항 사용에 대한 자세한 내용은 Amazon SageMaker SageMaker AI SDK for Python의 sagemaker.workflow.stepsClarifyCheckStepClarifyCheck
단계를 사용하는 방법을 보여주는 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 Model Monitor 사전 구축 컨테이너를 활용합니다. 이 컨테이너에는 제약 조건 제안, 통계 생성, 주어진 기준에 대한 제약 조건 검증을 비롯한 다양한 모델 모니터링 기능이 있습니다. 자세한 내용은 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의 ClarifyCheck 및 QualityCheck 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기섹션을 참조하세요.
기준 작업
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
단계 요구 사항 사용에 대한 자세한 내용은 Amazon SageMaker SageMaker AI SDK for Python의 sagemaker.workflow.stepsQualityCheckStepQualityCheck
단계를 사용하는 방법을 보여주는 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 클러스터에서 Amazon EMR 단계를 처리합니다. EMR
-
파이프라인에서 Amazon EMR 클러스터를 생성하고 관리하도록 하세요.
Amazon에 대한 자세한 내용은 Amazon 시작하기를 EMR참조하세요. 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
상태에서 최대 256EMR개의 단계를 가질 수 있습니다.이 제한을 초과하여 제출된 EMR 단계는 파이프라인 실행 실패를 초래합니다. 파이프라인 단계에 대한 재시도 정책 사용을 고려해 볼 수 있습니다. -
클러스터 ID와 클러스터 구성 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.
-
이 EMR 단계는 Amazon을 사용하여 EMR 단계 또는 클러스터 상태의 변경 사항을 EventBridge 모니터링합니다. 실행 중인 클러스터에서 Amazon EMR 작업을 처리하는 경우이 EMR 단계에서는
SageMakerPipelineExecutionEMRStepStatusUpdateRule
규칙을 사용하여 EMR 단계 상태를 모니터링합니다. EMR 단계가 생성한 클러스터에서 작업을 처리하는 경우이 단계에서는SageMakerPipelineExecutionEMRClusterStatusRule
규칙을 사용하여 클러스터 상태의 변경 사항을 모니터링합니다. AWS 계정에 이러한 EventBridge 규칙 중 하나가 표시되면 삭제하지 마십시오. 그렇지 않으면 EMR 단계가 완료되지 않을 수 있습니다.
실행 중인 Amazon EMR 클러스터에서 새 작업 시작
실행 중인 Amazon EMR 클러스터에서 새 작업을 시작하려면 클러스터 ID를의 cluster_id
인수에 문자열로 전달합니다EMRStep
. 다음 예에서는 이 절차를 보여 줍니다.
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 노트북 작업을 대화형이 아닌 방식으로 실행합니다. 파이프라인 UI에서 파이프라인 drag-and-drop을 빌드하는 경우를 사용하여 노트북코드 실행 단계을 실행합니다. SageMaker 노트북 작업에 대한 자세한 내용은 섹션을 참조하세요SageMaker 노트북 작업.
에는 최소한 입력 노트북, 이미지 URI 및 커널 이름이 NotebookJobStep
필요합니다. 노트북 작업 단계 요구 사항 및 단계를 사용자 지정하도록 설정할 수 있는 기타 파라미터에 대한 자세한 내용은 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
목록에 실패 단계를 추가할 수 없습니다. 자세한 내용은 단계 간 사용자 지정 종속성 단원을 참조하십시오. -
다른 단계는 실패 단계를 참조할 수 없습니다. 이는 항상 파이프라인 실행의 마지막 단계입니다.
-
실패 단계로 끝나는 파이프라인 실행은 재시도할 수 없습니다.
정적 텍스트 문자열 형태로 실패 단계 오류 메시지를 만들 수 있습니다. 또는 파이프라인 파라미터, 조