

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

# Pipelines 개요
<a name="pipelines-overview"></a>

Amazon SageMaker AI 파이프라인은 방향성 비순환 그래프(DAG)의 상호 연결된 일련의 단계로, 이 단계는 드래그 앤 드롭 UI 또는 [Pipelines SDK](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html)를 사용하여 정의됩니다. [파이프라인 정의 JSON 스키마](https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/)를 사용하여 파이프라인을 구축할 수도 있습니다. 이 DAG JSON 정의는 파이프라인의 각 단계에 대한 요구 사항 및 각 단계 간의 관계에 대한 정보를 제공합니다. 파이프라인 DAG의 구조는 단계 간 데이터 종속성에 따라 결정됩니다. 이러한 데이터 종속성은 단계 출력의 속성이 다른 단계의 입력으로 전달될 때 생성됩니다. 다음 이미지에서는 파이프라인 DAG의 예제를 확인할 수 있습니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipeline-full.png)


**이 예시 DAG에는 다음 단계가 포함됩니다.**

1. [처리](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-processing) 단계의 인스턴스인 `AbaloneProcess`는 훈련에 사용되는 데이터에 대해 사전 처리 스크립트를 실행합니다. 예를 들어 스크립트는 누락된 값을 채우거나, 숫자 데이터를 정규화하거나, 데이터를 훈련, 검증 및 테스트 데이터세트로 분할할 수 있습니다.

1. [훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-training) 단계의 인스턴스인 `AbaloneTrain`은 하이퍼파라미터를 구성하고 사전 처리된 입력 데이터에서 모델을 훈련합니다.

1. [처리](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-processing) 단계의 또 다른 인스턴스인 `AbaloneEval`은 모델의 정확도를 평가합니다. 이 단계에서는 데이터 종속성의 예를 보여줍니다. 이 단계에서는 `AbaloneProcess`의 테스트 데이터세트 출력을 사용합니다.

1. `AbaloneMSECond`는 [조건](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-condition) 단계의 인스턴스로, 이 예시에서는 모델 평가의 평균 제곱오차 결과가 특정 한도 미만인지 확인합니다. 모델이 기준을 충족하지 않으면 파이프라인 실행이 중지됩니다.

1. 파이프라인 실행은 다음 단계로 진행됩니다.

   1. `AbaloneRegisterModel`. 여기서 SageMaker AI는 [RegisterModel](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-register-model) 단계를 직접적으로 호출하여 모델을 Amazon SageMaker Model Registry에 버전 모델 패키지 그룹으로 등록합니다.

   1. `AbaloneCreateModel`. 여기서 SageMaker AI는 [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-create-model) 단계를 직접적으로 호출하여 배치 변환을 준비하기 위해 모델을 생성합니다. `AbaloneTransform`에서 SageMaker AI는 [변환](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-transform) 단계를 직접적으로 호출하여 사용자가 지정한 데이터세트에 대한 모델 예측을 생성합니다.

다음 주제는 Pipelines의 기본 개념을 설명합니다. 이러한 개념의 구현을 설명하는 자습서는 [Pipelines 작업](pipelines-build.md)섹션을 참조하세요.

**Topics**
+ [파이프라인 구조 및 실행](build-and-manage-pipeline.md)
+ [IAM 액세스 관리](build-and-manage-access.md)
+ [Pipelines에 대한 교차 계정 지원 설정](build-and-manage-xaccount.md)
+ [파이프라인 파라미터](build-and-manage-parameters.md)
+ [Pipelines 단계](build-and-manage-steps.md)
+ [@step 데코레이터를 사용한 Python 코드 리프트 앤 시프트](pipelines-step-decorator.md)
+ [단계 간 데이터 전달](build-and-manage-propertyfile.md)
+ [파이프라인 캐싱 단계](pipelines-caching.md)
+ [파이프라인 단계에 대한 재시도 정책](pipelines-retry-policy.md)
+ [파이프라인 단계의 선택적 실행](pipelines-selective-ex.md)
+ [Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기](pipelines-quality-clarify-baseline-lifecycle.md)
+ [파이프라인 실행 예약](pipeline-eventbridge.md)
+ [Amazon SageMaker Experiments 통합](pipelines-experiments.md)
+ [로컬 모드를 사용하여 파이프라인 실행](pipelines-local-mode.md)
+ [Amazon SageMaker Pipelines 문제 해결](pipelines-troubleshooting.md)

# 파이프라인 구조 및 실행
<a name="build-and-manage-pipeline"></a>

**Topics**
+ [파이프라인 구조](#build-and-manage-pipeline-structure)
+ [병렬 구성을 사용한 파이프라인 실행](#build-and-manage-pipeline-execution)

## 파이프라인 구조
<a name="build-and-manage-pipeline-structure"></a>

Amazon SageMaker Pipelines 인스턴스는 `name`, `parameters`, `steps`으로 구성되어 있습니다. `(account, region)` 페어 내 파이프라인 이름은 고유해야 합니다. 단계 정의에 사용되는 모든 파라미터는 파이프라인에서 정의되어야 합니다. 나열된 파이프라인 단계는 서로에 대한 데이터 종속성에 따라 실행 순서를 자동으로 결정합니다. Pipelines 서비스는 데이터 종속성 DAG의 단계 간의 관계를 분석하여 실행이 완료되는 일련의 단계를 만듭니다. 다음은 파이프라인 구조의 예제입니다.

**주의**  
시각적 편집기 또는 SageMaker AI Python SDK를 통해 파이프라인을 구축할 때 파이프라인 파라미터 또는 단계 정의 필드(예: 환경 변수)에 민감한 정보를 포함하지 마세요. 이러한 필드는 나중에 `DescribePipeline` 요청에 반환될 때 표시됩니다.

```
from sagemaker.workflow.pipeline import Pipeline
  
  pipeline_name = f"AbalonePipeline"
  pipeline = Pipeline(
      name=pipeline_name,
      parameters=[
          processing_instance_type, 
          processing_instance_count,
          training_instance_type,
          model_approval_status,
          input_data,
          batch_data,
      ],
      steps=[step_process, step_train, step_eval, step_cond],
  )
```

## 병렬 구성을 사용한 파이프라인 실행
<a name="build-and-manage-pipeline-execution"></a>

기본적으로 파이프라인은 병렬로 실행할 수 있는 모든 단계를 수행합니다. 파이프라인을 생성 또는 업데이트할 때뿐만 아니라 파이프라인 실행을 시작하거나 재시도할 때도 `ParallelismConfiguration`속성을 사용하여 이 동작을 제어할 수 있습니다.

병렬 구성은 실행별로 적용됩니다. 예를 들어 두 개의 실행이 시작되면 각각 최대 50개의 단계를 동시에 실행할 수 있으므로 총 100개의 동시 실행 단계가 가능합니다. 또한 실행을 시작, 재시도 또는 업데이트할 때 지정한 `ParallelismConfiguration`은 파이프라인에 정의된 병렬 처리 구성보다 우선합니다.

**Example `ParallelismConfiguration`을 사용하여 파이프라인 실행 생성**  

```
pipeline = Pipeline(
        name="myPipeline",
        steps=[step_process, step_train]
    )

  pipeline.create(role, parallelism_config={"MaxParallelExecutionSteps": 50})
```

# IAM 액세스 관리
<a name="build-and-manage-access"></a>

다음 섹션에서는 Amazon SageMaker Pipelines에 대한 AWS Identity and Access Management (IAM) 요구 사항을 설명합니다. 이러한 권한을 구현하는 방법에 대한 예제는 [사전 조건](define-pipeline.md#define-pipeline-prereq)섹션을 참조하세요.

**Topics**
+ [파이프라인 역할 권한](#build-and-manage-role-permissions)
+ [파이프라인 단계 권한](#build-and-manage-step-permissions)
+ [Amazon S3 버킷을 사용한 CORS 구성](#build-and-manage-cors-s3)
+ [Pipelines 작업에 대한 액세스 관리 사용자 지정](#build-and-manage-step-permissions-prefix)
+ [파이프라인 버전에 대한 액세스 사용자 지정](#build-and-manage-step-permissions-version)
+ [파이프라인을 사용한 서비스 제어 정책](#build-and-manage-scp)

## 파이프라인 역할 권한
<a name="build-and-manage-role-permissions"></a>

파이프라인을 생성할 때 파이프라인에 전달되는 IAM 파이프라인 실행 역할이 필요합니다. 파이프라인을 생성하는 데 사용하는 SageMaker AI 인스턴스의 역할에는 파이프라인 실행 역할을 지정하는 `iam:PassRole` 권한이 있는 정책이 있어야 합니다. 이는 파이프라인 생성 및 실행에 사용할 파이프라인 서비스에 파이프라인 실행 역할을 전달할 권한이 인스턴스에 필요하기 때문입니다. IAM 역할에 대한 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.

파이프라인 실행 역할에는 다음 권한이 필요합니다.
+ 파이프라인의 모든 SageMaker AI 작업 단계에 대해 고유하거나 사용자 지정된 역할을 사용할 수 있습니다(기본적으로 사용되는 파이프라인 실행 역할이 아님). 파이프라인 실행 역할이 이러한 각 역할을 지정하는 `iam:PassRole` 권한이 있는 정책을 추가했는지 확인합니다.
+  파이프라인의 각 작업 유형에 대한 `Create`및 `Describe`권한.
+  `JsonGet` 함수 사용에 대한 Amazon S3의 허용. 리소스 기반 정책 또는 자격 증명 기반 정책을 사용하여 Amazon S3 리소스에 대한 액세스를 제어할 수 있습니다. 리소스 기반 정책은 Amazon S3 버킷에 적용되며 Pipelines에 버킷에 대한 액세스 권한을 부여합니다. 자격 증명 기반 정책은 파이프라인에 계정에서 Amazon S3를 호출할 수 있는 기능을 제공합니다. 리소스 기반 정책 및 자격 증명 기반 정책에 대한 더 자세한 내용은 [자격 증명 기반 정책 및 리소스 기반 정책 및 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)을 참조하세요.

  ```
  {
      "Action": [
          "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::<your-bucket-name>/*",
      "Effect": "Allow"
  }
  ```

## 파이프라인 단계 권한
<a name="build-and-manage-step-permissions"></a>

Pipelines에는 SageMaker AI 작업을 실행하는 단계가 포함됩니다. 파이프라인 단계에서 이러한 작업을 실행하려면 필요한 리소스에 대한 액세스를 제공하는 계정의 IAM 역할이 필요합니다. 이 역할은 파이프라인에 의해 SageMaker AI 서비스 위탁자에게 전달됩니다. IAM 역할에 대한 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.

기본적으로 각 단계는 파이프라인 실행 역할을 맡습니다. 선택적으로 파이프라인의 모든 단계에 다른 역할을 전달할 수 있습니다. 이렇게 하면 파이프라인 정의에 지정된 두 단계 간에 직접적인 관계가 없는 한, 각 단계의 코드가 다른 단계에서 사용되는 리소스에 영향을 주지 않습니다. 단계의 프로세서 또는 추정기를 정의할 때 이러한 역할을 전달합니다. 이러한 정의에 이러한 역할을 포함하는 방법의 예시는 [SageMaker AI Python SDK 설명서](https://sagemaker.readthedocs.io/en/stable/overview.html#using-estimators)를 참조하세요.

## Amazon S3 버킷을 사용한 CORS 구성
<a name="build-and-manage-cors-s3"></a>

이미지를 예측 가능한 방식으로 Amazon S3 버킷에서 파이프라인으로 가져오려면 이미지를 가져오는 Amazon S3 버킷에 CORS 구성을 추가해야 합니다. 이 섹션에서는 필요한 CORS 구성을 Amazon S3 버킷으로 설정하는 방법에 대한 지침을 제공합니다. Pipelines에 필요한 XML `CORSConfiguration`은 [입력 이미지 데이터에 대한 CORS 요구 사항](sms-cors-update.md)에 있는 것과 다릅니다. 다르지 않으면 해당 정보를 사용하여 Amazon S3 버킷의 CORS 요구 사항에 대해 자세히 알아볼 수 있습니다.

이미지를 호스팅하는 Amazon S3 버킷에 다음 CORS 구성 코드를 사용하세요. CORS 구성에 대한 지침은 Amazon Simple Storage Service 사용 설명서의 [교차 오리진 리소스 공유(CORS) 구성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html)을 참조하세요. Amazon S3 콘솔을 사용하여 버킷에 정책을 추가하려면 JSON 형식을 사용해야 합니다.

**JSON**

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "Access-Control-Allow-Origin"
        ]
    }
]
```

**XML**

```
<CORSConfiguration>
 <CORSRule>
   <AllowedHeader>*</AllowedHeader>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>PUT</AllowedMethod>
   <ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
 </CORSRule>
</CORSConfiguration>
```

다음 GIF는 Amazon S3 콘솔을 사용하여 CORS 헤더 정책을 추가하는 방법에 대한 Amazon S3 설명서의 지침을 보여줍니다.

![\[Amazon S3 콘솔을 사용하여 CORS 헤더 정책을 추가하는 방법에 대한 Gif입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sms/gifs/cors-config.gif)


## Pipelines 작업에 대한 액세스 관리 사용자 지정
<a name="build-and-manage-step-permissions-prefix"></a>

IAM 정책을 추가로 사용자 지정하여 조직 내 선택된 구성원이 일부 또는 모든 파이프라인 단계를 실행할 수 있도록 할 수 있습니다. 예를 들어 특정 사용자에게는 훈련 작업을 생성할 권한을 부여하고, 다른 사용자 그룹에게는 처리 작업을 생성할 수 있는 권한을 부여하고, 모든 사용자에게 나머지 단계를 실행할 수 있는 권한을 부여할 수 있습니다. 이 기능을 사용하려면 작업 이름 앞에 접두사를 붙이는 사용자 지정 문자열을 선택합니다. 관리자는 허용된 ARN 앞에 접두사를 추가하는 반면, 데이터 사이언티스트는 파이프라인 인스턴스화에 이 접두사를 포함합니다. 허용된 사용자를 위한 IAM 정책에는 지정된 접두사가 있는 작업 ARN이 포함되어 있으므로 파이프라인 단계의 후속 작업을 진행하는 데 필요한 권한이 있어야 합니다. 작업 접두사는 기본적으로 꺼져 있습니다.이 옵션을 사용하려면 `Pipeline`클래스에서 이 옵션을 켜야 합니다.

접두사가 해제된 작업의 경우 작업 이름은 다음과 같이 형식이 지정되며 다음 테이블에 설명된 필드가 연결되어 있습니다.

`pipelines-<executionId>-<stepNamePrefix>-<entityToken>-<failureCount>`


| Field | 정의 | 
| --- | --- | 
|  파이프라인   |  항상 정적 문자열이 앞에 추가됩니다. 이 문자열은 파이프라인 오케스트레이션 서비스를 작업의 소스로 식별합니다.  | 
|  ExecutionId  |  실행 중인 파이프라인 인스턴스를 위한 무작위 버퍼입니다.  | 
|  stepNamePrefix  |  사용자가 지정한 단계 이름(파이프라인 단계의 `name`인수에 지정됨)으로, 처음 20자로 제한됩니다.  | 
|  entityToken  |  단계 개체의 멱등성을 보장하기 위한 무작위 토큰입니다.  | 
|  failureCount  |  작업을 완료하기 위해 시도한 현재 재시도 횟수입니다.  | 

이 경우 작업 이름 앞에 사용자 지정 접두사가 추가되지 않으며 해당 IAM 정책이 이 문자열과 일치해야 합니다.

작업 접두사를 사용하는 사용자의 경우 기본 작업 이름은 다음과 같은 형식을 취하며 사용자 지정 접두사는 `MyBaseJobName`으로 지정됩니다.

*<MyBaseJobName>*-*<executionId>*-*<entityToken>*-*<failureCount>*

사용자 지정 접두사는 정적 `pipelines` 문자열을 대체하므로 SageMaker AI 작업을 파이프라인의 일부로 실행할 수 있는 사용자 선택 범위를 좁힐 수 있습니다.

**접두사 길이 제한**

작업 이름에는 개별 파이프라인 단계에 따른 내부 길이 제약이 있습니다. 또한 이 제약 조건은 허용되는 접두사 길이를 제한합니다. 접두사 길이 요구 사항은 다음과 같습니다.


| 파이프라인 단계 | 접두사 길이 | 
| --- | --- | 
|   `[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`, `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`, `[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`, `[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`, `[ClarifyCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)`, `[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)`, `[RegisterModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`   |  38  | 
|  `[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`, `[AutoML](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`  |  6  | 

### IAM 정책에 작업 접두사 적용
<a name="build-and-manage-step-permissions-prefix-iam"></a>

관리자는 특정 접두사를 사용하는 사용자가 작업을 생성할 수 있도록 IAM 정책을 생성합니다. 다음 예제 정책은 데이터 사이언티스트가 `MyBaseJobName`접두사를 사용하는 경우 훈련 작업을 생성할 수 있도록 허용합니다.

```
{
    "Action": "sagemaker:CreateTrainingJob",
    "Effect": "Allow",
    "Resource": [
        "arn:aws:sagemaker:region:account-id:*/MyBaseJobName-*"
    ]
}
```

### 파이프라인 인스턴스화에 작업 접두사를 적용합니다.
<a name="build-and-manage-step-permissions-prefix-inst"></a>

작업 인스턴스 클래스의 `*base_job_name`인수를 사용하여 접두사를 지정합니다.

**참고**  
파이프라인 단계를 생성하기 전에 `*base_job_name`인수와 함께 작업 접두사를 작업 인스턴스에 전달합니다. 이 작업 인스턴스에는 작업을 파이프라인에서 한 단계로 실행하는 데 필요한 정보가 들어 있습니다. 이 인수는 사용된 작업 인스턴스에 따라 달라집니다. 다음 목록은 각 파이프라인 단계 유형에 사용할 인수를 보여줍니다.  
`[Estimator](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)` (`[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`), `[Processor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html)`(`[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`), `[AutoML](https://sagemaker.readthedocs.io/en/stable/api/training/automl.html)`(`[AutoMLStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`) 클래스의 경우 `base_job_name`
`[Tuner](https://sagemaker.readthedocs.io/en/stable/api/training/tuner.html)` 클래스(`[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`)의 경우 `tuning_base_job_name`
`[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html)` 클래스(`[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`)의 경우 `transform_base_job_name`
`[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)`(품질 검사) 및 `[ClarifyCheckstep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)`(명확화 검사) 클래스의 경우 `[CheckJobConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#checkjobconfig)`의 `base_job_name`
`[Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html)` 클래스의 경우 사용되는 인수는 `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`에 결과를 전달하기 전에 `create`또는 `register`를 모델에 실행했는지에 따라 달라집니다.  
`create` 호출 시 사용자 지정 접두사는 모델을 생성할 때 `name`인수에서 가져옵니다(예:`Model(name=)`).
`register` 호출 시 사용자 지정 접두사는 `register`호출의 `model_package_name`인수에서 가져옵니다(예:`my_model.register(model_package_name=)`).

다음 예제에서는 새 훈련 작업 인스턴스에 접두사를 지정하는 방법을 보여줍니다.

```
# Create a job instance
xgb_train = Estimator(
    image_uri=image_uri,
    instance_type="ml.m5.xlarge",
    instance_count=1,
    output_path=model_path,
    role=role,
    subnets=["subnet-0ab12c34567de89f0"],
    base_job_name="MyBaseJobName"
    security_group_ids=["sg-1a2bbcc3bd4444e55"],
    tags = [ ... ]
    encrypt_inter_container_traffic=True, 
)

# Attach your job instance to a pipeline step
step_train = TrainingStep(
    name="TestTrainingJob",
    estimator=xgb_train, 
    inputs={
        "train": TrainingInput(...), 
        "validation": TrainingInput(...) 
    }
)
```

작업 접두사는 기본적으로 해제되어 있습니다. 이 기능을 사용하려면 다음 스니펫에 표시된 `PipelineDefinitionConfig`의 `use_custom_job_prefix`옵션을 사용하세요.

```
from sagemaker.workflow.pipeline_definition_config import PipelineDefinitionConfig
        
# Create a definition configuration and toggle on custom prefixing
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True);

# Create a pipeline with a custom prefix
 pipeline = Pipeline(
     name="MyJobPrefixedPipeline",
     parameters=[...]
     steps=[...]
     pipeline_definition_config=definition_config
)
```

파이프라인을 생성하고 실행합니다. 다음 예제는 파이프라인을 생성 및 실행하고, 작업 접두사를 끄고 파이프라인을 다시 실행하는 방법도 보여줍니다.

```
pipeline.create(role_arn=sagemaker.get_execution_role())

# Optionally, call definition() to confirm your prefixed job names are in the built JSON
pipeline.definition()
pipeline.start()
      
# To run a pipeline without custom-prefixes, toggle off use_custom_job_prefix, update the pipeline 
# via upsert() or update(), and start a new run
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=False)
pipeline.pipeline_definition_config = definition_config
pipeline.update()
execution = pipeline.start()
```

마찬가지로 기존 파이프라인에서도 이 기능을 켜고 작업 접두사를 사용하는 새 실행을 시작할 수 있습니다.

```
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True)
pipeline.pipeline_definition_config = definition_config
pipeline.update()
execution = pipeline.start()
```

마지막으로, 파이프라인 실행의 `list_steps`을 호출하여 접두사가 지정된 사용자 지정 작업을 볼 수 있습니다.

```
steps = execution.list_steps()

prefixed_training_job_name = steps['PipelineExecutionSteps'][0]['Metadata']['TrainingJob']['Arn']
```

## 파이프라인 버전에 대한 액세스 사용자 지정
<a name="build-and-manage-step-permissions-version"></a>

`sagemaker:PipelineVersionId` 조건 키를 사용하여 Amazon SageMaker Pipelines의 특정 버전에 대한 사용자 지정 액세스 권한을 부여할 수 있습니다. 예를 들어 아래 정책은 버전 ID 6 이상에 대해서만 실행을 시작하거나 파이프라인 버전을 업데이트할 수 있는 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "AllowStartPipelineExecution",
        "Effect": "Allow",
        "Action": [
            "sagemaker:StartPipelineExecution",
            "sagemaker:UpdatePipelineVersion"
        ],
        "Resource": "*",
        "Condition": {
            "NumericGreaterThanEquals": {
                "sagemaker:PipelineVersionId": 6
            }
        }
    }
}
```

------

지원되는 조건 키에 대한 자세한 정보는 [Amazon SageMaker에 사용되는 조건 키](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)를 참조하세요.

## 파이프라인을 사용한 서비스 제어 정책
<a name="build-and-manage-scp"></a>

서비스 제어 정책(SCP)은 조직의 권한을 관리하는 데 사용할 수 있는 조직 정책 유형입니다. SCP는 조직의 모든 계정에 사용 가능한 최대 권한을 중앙에서 제어합니다. 조직 내에서 파이프라인을 사용하면 데이터 과학자가 AWS 콘솔과 상호 작용하지 않고도 파이프라인 실행을 관리할 수 있습니다. 

Amazon S3에 대한 액세스를 제한하는 SCP와 함께 VPC를 사용하는 경우 파이프라인이 다른 Amazon S3 리소스에 액세스할 수 있도록 허용하는 조치를 취해야 합니다.

Pipelines이 함수를 사용하여 VPC 외부의 Amazon S3에 액세스할 수 있도록 하려면 Pipelines을 사용하는 `JsonGet` 역할이 Amazon S3에 액세스할 수 있도록 조직의 SCP를 업데이트하세요. 이렇게 하려면 위탁자 태그와 조건 키를 사용하여 파이프라인 실행 역할을 통해 Pipelines 실행기가 사용하는 역할에 대한 예외를 만드세요.

**Pipelines이 VPC 외부에서 Amazon S3에 액세스하도록 허용하는 방법**

1. [IAM 사용자 및 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) 태그 지정의 단계에 따라 파이프라인 실행 역할에 고유한 태그를 생성하세요.

1. 생성한 태그의 `Aws:PrincipalTag IAM`조건 키를 사용하여 SCP에 예외를 허용하세요. SCP를 생성하는 방법에 대한 자세한 내용은 [서비스 제어 정책 생성, 업데이트 및 삭제](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html)를 참조하세요.

# Pipelines에 대한 교차 계정 지원 설정
<a name="build-and-manage-xaccount"></a>

Amazon SageMaker Pipelines에 대한 교차 계정 지원을 통해 기계 학습 파이프라인에서 다른 AWS 계정에서 운영하는 다른 팀 또는 조직과 협업할 수 있습니다. 교차 계정 파이프라인 공유를 설정하면 파이프라인에 대한 제어된 액세스 권한을 부여하고, 다른 계정이 파이프라인 세부 정보를 보고, 실행을 트리거하고, 실행을 모니터링하도록 허용할 수 있습니다. 다음 주제에서는 교차 계정 파이프라인 공유를 설정하는 방법, 공유 리소스에 사용할 수 있는 다양한 권한 정책, SageMaker AI에 대한 API 직접 호출을 통해 공유 파이프라인 엔터티에 액세스하고 상호 작용하는 방법을 다룹니다.

## 교차 계정 파이프라인 공유 설정
<a name="build-and-manage-xaccount-set-up"></a>

SageMaker AI는 [AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)(AWS RAM)를 사용하여 계정 간에 파이프라인 엔터티를 안전하게 공유하는 데 도움이 됩니다.

### 리소스 공유 생성
<a name="build-and-manage-xaccount-set-up-console"></a>

1. [AWS RAM 콘솔](https://console.aws.amazon.com/ram/home)을 통해 **리소스 공유 생성**을 선택합니다.

1. 리소스 공유 세부 정보를 지정할 때 Pipelines 리소스 유형을 선택하고 공유하려는 하나 이상의 파이프라인을 선택합니다. 파이프라인을 다른 계정과 공유하면 해당 계정의 모든 실행도 암시적으로 공유됩니다.

1. 권한을 리소스 공유에 연결합니다. 기본 읽기 전용 권한 정책 또는 확장 파이프라인 실행 권한 정책을 선택합니다. 더 자세한 내용은 [Pipelines 리소스에 대한 권한 정책](#build-and-manage-xaccount-permissions)섹션을 참조하세요.
**참고**  
확장 파이프라인 실행 정책을 선택하는 경우 공유 계정에서 호출한 시작, 중지 및 재시도 명령은 파이프라인을 공유한 AWS 계정의 리소스를 사용합니다.

1.  AWS 계정 IDs 사용하여 공유 리소스에 대한 액세스 권한을 부여할 계정을 지정합니다.

1. 리소스 공유 구성을 검토하고 **리소스 공유 생성**을 선택합니다. 리소스 공유 및 보안 주체 연결이 완료되는 데 몇 분 정도 걸릴 수 있습니다.

자세한 내용은AWS 리소스 액세스 관리자 사용 설명서의 [AWS 리소스 공유](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)를 참조하세요.**

### 리소스 공유 초대에 대한 응답 수신
<a name="build-and-manage-xaccount-set-up-responses"></a>

리소스 공유와 보안 주체 연결이 설정되면 지정된 AWS 계정에 리소스 공유에 조인하라는 초대가 발송됩니다. 공유 리소스에 액세스하려면 AWS 계정이 초대를 수락해야 합니다.

를 통한 리소스 공유 초대 수락에 대한 자세한 내용은 *AWS Resource Access Manager 사용 설명서*의 [공유 AWS 리소스 사용을 ](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html) AWS RAM참조하세요.

## Pipelines 리소스에 대한 권한 정책
<a name="build-and-manage-xaccount-permissions"></a>

리소스 공유를 생성할 때 지원되는 두 가지 권한 정책 중 하나를 선택하여 SageMaker AI Pipelines 리소스 유형에 연결합니다. 두 정책 모두 선택한 파이프라인 및 모든 해당 실행에 대한 접근 권한을 부여합니다.

### 기본 읽기 전용 권한
<a name="build-and-manage-xaccount-permissions-default"></a>

`AWSRAMDefaultPermissionSageMakerPipeline` 정책은 다음 읽기 전용 작업을 할 수 있도록 허용합니다.

```
"sagemaker:DescribePipeline"
"sagemaker:DescribePipelineDefinitionForExecution"   
"sagemaker:DescribePipelineExecution"
"sagemaker:ListPipelineExecutions"
"sagemaker:ListPipelineExecutionSteps"
"sagemaker:ListPipelineParametersForExecution"
"sagemaker:Search"
```

### 확장된 파이프라인 실행 권한
<a name="build-and-manage-xaccount-permissions-extended"></a>

`AWSRAMPermissionSageMakerPipelineAllowExecution` 정책에는 기본 정책의 모든 읽기 전용 권한이 포함되며 공유 계정이 파이프라인 실행을 시작, 중지 및 재시도할 수 있도록 허용합니다.

**참고**  
확장 파이프라인 실행 권한 정책을 사용할 때는 AWS 리소스 사용에 유의하세요. 이 정책을 사용하면 공유 계정이 파이프라인 실행을 시작, 중지, 재시도할 수 있습니다. 공유 파이프라인 실행에 사용되는 모든 리소스는 소유자 계정에서 사용합니다.

확장된 파이프라인 실행 권한 정책은 다음과 같은 작업을 허용합니다.

```
"sagemaker:DescribePipeline"
"sagemaker:DescribePipelineDefinitionForExecution"   
"sagemaker:DescribePipelineExecution"
"sagemaker:ListPipelineExecutions"
"sagemaker:ListPipelineExecutionSteps"
"sagemaker:ListPipelineParametersForExecution"
"sagemaker:StartPipelineExecution"
"sagemaker:StopPipelineExecution"
"sagemaker:RetryPipelineExecution"
"sagemaker:Search"
```

## 직접 API 직접 호출을 통해 공유 파이프라인 엔티티에 액세스합니다.
<a name="build-and-manage-xaccount-api-calls"></a>

교차 계정 파이프라인 공유가 설정되면 파이프라인 ARN을 사용하여 다음 SageMaker API 작업을 호출할 수 있습니다.

**참고**  
리소스 공유와 관련된 권한에 API 명령이 포함된 경우에만 API 명령을 호출할 수 있습니다. `AWSRAMPermissionSageMakerPipelineAllowExecution` 정책을 선택하면 시작, 중지 및 재시도 명령은 파이프라인을 공유한 AWS 계정의 리소스를 사용합니다.
+ [DescribePipeline](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipeline.html)
+ [DescribePipelineDefinitionForExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipelineDefinitionForExecution.html)
+ [DescribePipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipelineExecution.html)
+ [ListPipelineExecutions](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineExecutions.html)
+ [ListPipelineExecutionSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineExecutionSteps.html)
+ [ListPipelineParametersForExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineParametersForExecution.html)
+ [StartPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartPipelineExecution.html)
+ [StopPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html)
+ [RetryPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RetryPipelineExecution.html)

# 파이프라인 파라미터
<a name="build-and-manage-parameters"></a>

파라미터를 사용하여 파이프라인 정의에 변수를 도입할 수 있습니다. 파이프라인 정의 전체에서 정의한 파라미터를 참조할 수 있습니다. 파라미터에는 기본값이 있으며, 파이프라인 실행을 시작할 때 파라미터 값을 지정하여 기본값을 재정의할 수 있습니다. 기본값은 파라미터 유형과 일치하는 인스턴스여야 합니다.단계 정의에 사용되는 모든 파라미터는 파이프라인 정의에 정의되어야 합니다. 이 주제에서는 정의할 수 있는 파라미터와 이를 구현하는 방법을 설명합니다.

Amazon SageMaker Pipelines은 다음과 같은 파라미터 유형을 지원합니다.
+  `ParameterString` - 문자열 파라미터를 나타냅니다.
+  `ParameterInteger` - 정수 파라미터를 나타냅니다.
+  `ParameterFloat` - 플로트 파라미터를 나타냅니다.
+  `ParameterBoolean` - 부울 Python 형식을 나타냅니다.

파라미터의 형식은 다음과 같습니다.

```
<parameter> = <parameter_type>(
    name="<parameter_name>",
    default_value=<default_value>
)
```

다음 예제에서는 예제 파라미터 구현을 보여 줍니다.

```
from sagemaker.workflow.parameters import (
    ParameterInteger,
    ParameterString,
    ParameterFloat,
    ParameterBoolean
)

processing_instance_count = ParameterInteger(
    name="ProcessingInstanceCount",
    default_value=1
)
```

다음 예제와 같이 파이프라인을 생성할 때 파라미터를 전달합니다.

```
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        processing_instance_count
    ],
    steps=[step_process]
)
```

다음 예제와 같이 기본값과 다른 파라미터 값을 파이프라인 실행에 전달할 수도 있습니다.

```
execution = pipeline.start(
    parameters=dict(
        ProcessingInstanceCount="2",
        ModelApprovalStatus="Approved"
    )
)
```

`[ sagemaker.workflow.functions.Join](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.functions.Join)`와 같은 SageMaker Python SDK 함수를 사용하여 파라미터를 조작할 수 있습니다. 파라미터에 대한 자세한 내용은 [SageMaker Pipelines 파라미터](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#parameters)를 참조하세요.

Pipelines 파라미터의 알려진 제한 사항은 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)의 *[Limitations - Parameterization](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#parameterization)*을 참조하세요.

# Pipelines 단계
<a name="build-and-manage-steps"></a>

Pipelines은 여러 단계로 구성되어 있습니다. 이 단계는 파이프라인이 수행하는 작업과 속성을 사용하여 단계 간의 관계를 정의합니다. 다음 페이지에서는 단계 유형, 속성 및 이들 간의 관계를 설명합니다.

**Topics**
+ [단계 추가](build-and-manage-steps-types.md)
+ [통합 추가](build-and-manage-steps-integration.md)
+ [단계 속성](#build-and-manage-properties)
+ [단계 병렬화](#build-and-manage-parallelism)
+ [단계 간 데이터 종속성](#build-and-manage-data-dependency)
+ [단계 간 사용자 지정 종속성](#build-and-manage-custom-dependency)
+ [단계의 사용자 지정 이미지](#build-and-manage-images)

# 단계 추가
<a name="build-and-manage-steps-types"></a>

다음은 각 단계 유형의 요구 사항을 설명하고 해당 단계의 예시 구현을 제공하며 Pipelines에 단계를 추가하는 방법을 설명합니다. 이는 필요한 리소스와 입력을 제공하지 않으므로 작동하는 구현이 아닙니다. 이러한 단계를 구현하는 자습서는 [Pipelines 작업](pipelines-build.md)섹션을 참조하세요.

**참고**  
로컬 기계 학습 코드에서 `@step` 데코레이터를 사용하여 파이프라인 단계로 변환하여 단계를 만들 수도 있습니다. 자세한 내용은 [@step 데코레이터](#step-type-custom) 단원을 참조하십시오.

Amazon SageMaker Pipelines은 다음과 같은 단계 유형을 지원합니다.
+ [코드 실행](#step-type-executecode)

  [처리](#step-type-processing)
+ [학습](#step-type-training)
+ [튜닝](#step-type-tuning)
+ [AutoML](#step-type-automl)
+ [`Model`](#step-type-model)
+ [`Create model`](#step-type-create-model)
+ [`Register model`](#step-type-register-model)
+ [`Deploy model (endpoint)`](#step-type-deploy-model-endpoint)
+ [변환](#step-type-transform)
+ [조건](#step-type-condition)
+ [`Callback`](#step-type-callback)
+ [Lambda](#step-type-lambda)
+ [`ClarifyCheck`](#step-type-clarify-check)
+ [`QualityCheck`](#step-type-quality-check)
+ [EMR](#step-type-emr)
+ [노트북 작업](#step-type-notebook-job)
+ [Fail](#step-type-fail)

## @step 데코레이터
<a name="step-type-custom"></a>

drag-and-drop기 파이프라인 UI에서 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면를 사용합니다[코드 실행 단계](#step-type-executecode).

`@step` 데코레이터를 사용하여 로컬 기계 학습 코드에서 단계를 만들 수 있습니다. 코드를 테스트한 후 `@step` 데코레이터로 주석을 달아 함수를 SageMaker AI 파이프라인 단계로 변환할 수 있습니다. 파이프라인은 `@step`으로 데코레이션된 함수의 출력을 파이프라인에 단계로 전달할 때 파이프라인을 만들고 실행합니다. 또한 하나 이상의 `@step`으로 데코레이션된 함수와 기존 SageMaker AI 파이프라인 단계를 포함하는 다단계 DAG 파이프라인을 만들 수 있습니다. `@step` 데코레이터로 단계를 만드는 방법에 대한 자세한 내용은 [@step 데코레이터를 사용한 Python 코드 리프트 앤 시프트](pipelines-step-decorator.md) 섹션을 참조하세요.

## 코드 실행 단계
<a name="step-type-executecode"></a>

Pipelines 드래그 앤 드롭 UI에서 **코드 실행** 단계를 사용하여 자체 코드를 파이프라인 단계로 실행할 수 있습니다. 파이프라인의 일부로 실행할 Python 함수, 스크립트 또는 노트북을 업로드할 수 있습니다. 고급 SageMaker AI 기능 또는 기타 AWS 서비스를 활용하는 사용자 지정 ML 작업을 오케스트레이션하려면이 단계를 사용해야 합니다.

**코드 실행** 단계는 Amazon SageMaker AI용 기본 Amazon S3 버킷에 파일을 업로드합니다. 이 버킷에는 필요한 교차 오리진 리소스 공유(CORS) 권한 세트가 없을 수 있습니다. CORS 권한 구성에 대한 자세한 내용은 [입력 이미지 데이터에 대한 CORS 요구 사항](sms-cors-update.md) 섹션을 참조하세요.

**코드 실행** 단계에서는 Amazon SageMaker 훈련 작업을 사용하여 코드를 실행합니다. IAM 역할에 `sagemaker:DescribeTrainingJob` 및 `sagemaker:CreateTrainingJob` API 권한이 있어야 합니다. Amazon SageMaker AI에 필요한 모든 권한과 이를 설정하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조](api-permissions-reference.md) 섹션을 참조하세요.

파이프라인 디자이너를 사용하여 파이프라인에 코드 실행 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

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

1. 캔버스에서 추가한 **코드 실행** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다.

1. 단일 파일을 업로드하여 여러 아티팩트가 포함된 압축 폴더를 실행하거나 업로드할 수 있습니다.

1. 단일 파일 업로드의 경우 노트북, Python 함수 또는 스크립트에 대한 파라미터를 선택적으로 제공할 수 있습니다.

1. Python 함수를 제공할 때 핸들러를 `file.py:<function_name>` 형식으로 제공해야 합니다.

1. 압축 폴더 업로드의 경우 코드에 대한 상대 경로를 제공해야 하며, 선택적으로 압축 폴더 내의 `requirements.txt` 파일 또는 초기화 스크립트에 대한 경로를 제공할 수 있습니다.

1. 캔버스에 추가한 **코드 실행** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **코드 실행** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **코드 실행** 단계 바로 뒤에 있는 단계가 포함된 경우 **코드 실행** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다. **코드 실행** 단계의 출력은 Python 함수를 위해 참조할 수 있습니다.

## 처리 단계
<a name="step-type-processing"></a>

처리 단계를 사용하여 데이터 처리를 위한 처리 작업을 생성합니다. 작업 처리에 대한 자세한 내용은 [데이터 처리 및 모델 평가](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)를 참조하세요.

------
#### [ Pipeline Designer ]

파이프라인 디자이너를 사용하여 파이프라인에 처리 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.

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

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

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

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

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep)을 참조하세요.

1. 캔버스에 추가한 **데이터 처리** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **데이터 처리** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **데이터 처리** 단계 바로 뒤에 있는 단계가 포함된 경우 **데이터 처리** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

처리 단계에는 프로세서, 처리 코드를 정의하는 Python 스크립트, 처리를 위한 출력 및 작업 인수가 필요합니다. 다음 예제는 `ProcessingStep`정의를 생성하는 방법을 보여줍니다.

```
from sagemaker.sklearn.processing import SKLearnProcessor

sklearn_processor = SKLearnProcessor(framework_version='1.0-1',
                                     role=<role>,
                                     instance_type='ml.m5.xlarge',
                                     instance_count=1)
```

```
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker.workflow.steps import ProcessingStep

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")
]

step_process = ProcessingStep(
    name="AbaloneProcess",
    step_args = sklearn_processor.run(inputs=inputs, outputs=outputs,
        code="abalone/preprocessing.py")
)
```

**런타임 파라미터 전달**

다음 예제는 Pyspark 프로세서에서 `ProcessingStep`으로 런타임 파라미터를 전달하는 방법을 보여줍니다.

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.spark.processing import PySparkProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker.workflow.steps import ProcessingStep

pipeline_session = PipelineSession()

pyspark_processor = PySparkProcessor(
    framework_version='2.4',
    role=<role>,
    instance_type='ml.m5.xlarge',
    instance_count=1,
    sagemaker_session=pipeline_session,
)

step_args = pyspark_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="preprocess.py",
    arguments=None,
)


step_process = ProcessingStep(
    name="AbaloneProcess",
    step_args=step_args,
)
```

처리 단계 요구 사항에 대한 자세한 내용은 [SageMaker.Workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep) 설명서를 참조하세요. 자세한 예시는 [Orchestrate Jobs to Train and Evaluate Models with Amazon SageMaker Pipelines](https://github.com/aws/amazon-sagemaker-examples/blob/62de6a1fca74c7e70089d77e36f1356033adbe5f/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.ipynb) 예시 노트북을 참조하세요. *Define a Processing Step for Feature Engineering* 섹션에 자세한 정보가 포함되어 있습니다.

------

## 훈련 단계
<a name="step-type-training"></a>

훈련 단계를 사용하여 모델을 훈련시키는 훈련 작업을 생성합니다. 훈련 작업에 대한 자세한 내용은 [Train a Model with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)를 참조하세요.

훈련 단계에는 훈련 및 검증 데이터 입력뿐만 아니라 예측기가 필요합니다.

------
#### [ Pipeline Designer ]

파이프라인 디자이너를 사용하여 파이프라인에 훈련 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

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

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

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.TrainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep)을 참조하세요.

1. 캔버스에 추가한 **모델 훈련** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 훈련** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 훈련** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 훈련** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

다음 예제는 `TrainingStep`정의를 생성하는 방법을 보여줍니다. 훈련 단계 요구 사항에 대한 자세한 내용은 [SageMaker.workflow.steps.trainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep) 문서를 참조하세요.

```
from sagemaker.workflow.pipeline_context import PipelineSession

from sagemaker.inputs import TrainingInput
from sagemaker.workflow.steps import TrainingStep

from sagemaker.xgboost.estimator import XGBoost

pipeline_session = PipelineSession()

xgb_estimator = XGBoost(..., sagemaker_session=pipeline_session)

step_args = xgb_estimator.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="TrainAbaloneModel",
    step_args=step_args,
)
```

------

## 튜닝 단계
<a name="step-type-tuning"></a>

튜닝 단계를 사용하여 하이퍼파라미터 최적화(HPO) 라고도 하는 하이퍼파라미터 튜닝 작업을 생성합니다. 하이퍼파라미터 조정 작업은 여러 개의 훈련 작업을 실행하며 각 작업은 모델 버전을 생성합니다. 하이퍼파라미터 튜닝에 대한 자세한 내용은 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md)섹션을 참조하세요.

조정 작업은 파이프라인에 대한 SageMaker AI 실험과 관련이 있으며, 훈련 작업은 평가판으로 생성됩니다. 자세한 내용은 [실험 통합](pipelines-experiments.md) 단원을 참조하십시오.

튜닝 단계에는 [하이퍼파라미터 튜너](https://sagemaker.readthedocs.io/en/stable/api/training/tuner.html)와 훈련 입력이 필요합니다. `HyperparameterTuner`의 `warm_start_config`파라미터를 지정하여 이전 튜닝 작업을 다시 훈련할 수 있습니다. 하이퍼파라미터 튜닝 및 부팅에 대한 자세한 내용은 [웜 스타트 하이퍼파라미터 튜닝 작업 실행](automatic-model-tuning-warm-start.md)섹션을 참조하세요.

[SageMaker.Workflow.steps.TuningStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep) 클래스의 [get\$1top\$1model\$1s3\$1uri](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep.get_top_model_s3_uri) 메서드를 사용하여 성능이 가장 우수한 모델 버전 중 하나에서 모델 아티팩트를 가져올 수 있습니다. SageMaker AI 파이프라인에서 조정 단계를 사용하는 방법을 보여주는 노트북은 [sagemaker-pipelines-tuning-step.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/tuning-step/sagemaker-pipelines-tuning-step.ipynb)를 참조하세요.

**중요**  
조정 단계는 Amazon SageMaker Python SDK v2.48.0과 Amazon SageMaker Studio Classic v3.8.0에 도입되었습니다. 조정 단계를 사용하기 전에 Studio Classic을 업데이트해야 합니다. 업데이트하지 않으면 파이프라인 DAG가 표시되지 않습니다. Studio Classic을 업데이트하려면 [Amazon SageMaker Studio Classic 종료 및 업데이트](studio-tasks-update-studio.md) 섹션을 참조하세요.

다음 예제는 `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](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobObjective.html)에 따라 순위가 매겨집니다. `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](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep) 설명서를 참조하세요.

## 미세 조정 단계
<a name="step-type-fine-tuning"></a>

미세 조정은 새 데이터세트에 대해 Amazon SageMaker JumpStart의 사전 훈련된 파운데이션 모델을 훈련합니다. 전이 학습이라고도 하는 이 프로세스를 통해 더 작은 데이터세트를 사용하고 훈련 시간을 단축하여 정확한 모델을 생성할 수 있습니다. 모델을 미세 조정할 때 기본 데이터세트를 사용하거나 자체 데이터를 선택할 수 있습니다. JumpStart에서 파운데이션 모델을 미세 조정하는 방법에 대한 자세한 내용은 [모델 미세 조정](jumpstart-fine-tune.md) 섹션을 참조하세요.

미세 조정 단계에서는 Amazon SageMaker 훈련 작업을 사용하여 모델을 사용자 지정합니다. IAM 역할에 파이프라인에서 미세 조정 작업을 실행할 수 있는 `sagemaker:DescribeTrainingJob` 및 `sagemaker:CreateTrainingJob` API 권한이 있어야 합니다. Amazon SageMaker AI에 필요한 권한과 이를 설정하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조](api-permissions-reference.md) 섹션을 참조하세요.

드래그 앤 드롭 편집기를 사용하여 파이프라인에 **미세 조정 모델** 단계를 추가하려면 다음 단계를 따르세요.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

1. 왼쪽 사이드바에서 **모델 미세 조정**을 선택하고 캔버스로 드래그합니다.

1. 캔버스에서 추가한 **모델 미세 조정** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다.

1. 캔버스에 추가한 **모델 미세 조정** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 미세 조정** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 미세 조정** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 미세 조정** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

## AutoML 단계
<a name="step-type-automl"></a>

[AutoML](https://sagemaker.readthedocs.io/en/stable/api/training/automl.html) API를 사용하여 모델을 자동으로 학습시키는 AutoML 작업을 생성할 수 있습니다. AutoML 작업에 대한 자세한 내용은 [Amazon SageMaker Autopilot을 사용한 모델 개발 자동화](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-automate-model-development.html)를 참조하세요.

**참고**  
현재 AutoML 단계는 [앙상블 훈련 모드](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html)만 지원합니다.

다음 예제는 `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](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.automl_step.AutoMLStep) 단계를 참조하세요.

## 모델 단계
<a name="step-type-model"></a>

`ModelStep`을 사용하여 SageMaker AI 모델을 생성하거나 등록할 수 있습니다. `ModelStep` 요구 사항에 대한 자세한 내용은 [SageMaker.Workflow.Model\$1Step.ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.model_step.ModelStep) 설명서를 참조하세요.

### 모델 생성
<a name="step-type-model-create"></a>

`ModelStep`을 사용하여 SageMaker AI 모델을 생성할 수 있습니다. `ModelStep`에는 모델 아티팩트와 모델을 생성하는 데 사용해야 하는 SageMaker AI 인스턴스 유형에 대한 정보가 필요합니다. SageMaker AI 모델 훈련에 대한 자세한 내용은 [Train a Model with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)를 참조하세요.

다음 예제는 `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"),
)
```

### 모델 등록
<a name="step-type-model-register"></a>

`ModelStep`을 사용하여 Amazon SageMaker Model Registry에 `sagemaker.model.Model` 또는 `sagemaker.pipeline.PipelineModel`을 등록할 수 있습니다. `PipelineModel`은 추론 파이프라인은 데이터에 대해 추론 요청을 처리하는 컨테이너로 이루어진 선형 시퀀스로 구성된 모델입니다. 모델을 등록하는 자세한 방법은 [Model Registry를 사용한 모델 등록 배포](model-registry.md)섹션을 참조하세요.

다음 예제에서는 `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,
)
```

## 모델 만들기 단계
<a name="step-type-create-model"></a>

모델 생성 단계를 사용하여 SageMaker AI 모델을 생성합니다. SageMaker AI 모델에 대한 자세한 내용은 [Amazon SageMaker를 사용한 모델 훈련](how-it-works-training.md) 섹션을 참조하세요.

모델 생성 단계에는 모델 아티팩트와 모델을 생성하는 데 사용해야 하는 SageMaker AI 인스턴스 유형에 대한 정보가 필요합니다. 다음 예시는 모델 만들기 단계 정의를 만드는 방법을 보여줍니다. 모델 만들기 단계 요구 사항에 대한 자세한 내용은 [sagemaker.workflow.steps.CreateModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.CreateModelStep) 설명서를 참조하세요.

------
#### [ Pipeline Designer ]

파이프라인에 모델 만들기 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

1. 왼쪽 사이드바에서 **모델 만들기**를 선택하고 캔버스로 드래그합니다.

1. 캔버스에서 추가한 **모델 만들기** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.CreateModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.CreateModelStep)을 참조하세요.

1. 캔버스에 추가한 **모델 만들기** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 만들기** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 만들기** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 만들기** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

**중요**  
[모델 단계](#step-type-model)을 사용하여 SageMaker AI Python SDK v2.90.0 이후 모델을 생성하는 것이 좋습니다. `CreateModelStep`은 이전 버전의 SageMaker Python SDK에서 계속 작동하지만 더 이상 적극적으로 지원되지는 않습니다.

```
from sagemaker.workflow.steps import CreateModelStep

step_create_model = CreateModelStep(
    name="AbaloneCreateModel",
    model=best_model,
    inputs=inputs
)
```

------

## 모델 등록 단계
<a name="step-type-register-model"></a>

모델 등록 단계에서는 모델을 SageMaker Model Registry에 등록합니다.

------
#### [ Pipeline Designer ]

파이프라인 디자이너를 사용하여 파이프라인에서 모델을 등록하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

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

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

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.step\$1collections.RegisterModel](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_collections.RegisterModel)을 참조하세요.

1. 캔버스에 추가한 **모델 등록** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 등록** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 등록** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 등록** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

**중요**  
[모델 단계](#step-type-model)을 사용하여 SageMaker AI Python SDK v2.90.0 이후 모델을 등록하는 것이 좋습니다. `RegisterModel`은 이전 버전의 SageMaker Python SDK에서 계속 작동하지만 더 이상 적극적으로 지원되지는 않습니다.

`RegisterModel` 단계를 사용하여 [Sagemaker.Model.Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html) 또는 [Sagemaker.Pipeline.PipelineModel](https://sagemaker.readthedocs.io/en/stable/api/inference/pipeline.html#pipelinemodel)을 Amazon SageMaker Model Registry에 등록합니다. `PipelineModel`은 추론 파이프라인은 데이터에 대해 추론 요청을 처리하는 컨테이너로 이루어진 선형 시퀀스로 구성된 모델입니다.

모델을 등록하는 자세한 방법은 [Model Registry를 사용한 모델 등록 배포](model-registry.md)섹션을 참조하세요. `RegisterModel` 단계 요구 사항에 대한 자세한 내용은 [SageMaker.Workflow.step\$1Collections.RegisterModel](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_collections.RegisterModel) 설명서를 참조하세요.

다음 예제에서는 `PipelineModel`을 등록하는 `RegisterModel`단계 생성 방법을 보여 줍니다.

```
import time
from sagemaker.sklearn import SKLearnModel
from sagemaker.xgboost import XGBoostModel

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=sagemaker_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=sagemaker_session,
 role=role)

from sagemaker.workflow.step_collections import RegisterModel
from sagemaker import PipelineModel
pipeline_model = PipelineModel(models=[sklearn_model,xgboost_model],role=role,sagemaker_session=sagemaker_session)

step_register = RegisterModel(
 name="AbaloneRegisterModel",
 model=pipeline_model,
 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',
)
```

`model`이 제공되지 않은 경우 모델 등록 단계에는 다음 예제와 같이 예측기가 필요합니다.

```
from sagemaker.workflow.step_collections import RegisterModel

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
)
```

------

## 모델 배포(엔드포인트) 단계
<a name="step-type-deploy-model-endpoint"></a>

파이프라인 디자이너에서 모델 배포(엔드포인트) 단계를 사용하여 모델을 엔드포인트에 배포합니다. 새 엔드포인트를 만들거나 기존 엔드포인트를 사용할 수 있습니다. 실시간 추론은 실시간, 대화형, 짧은 지연 시간이 요구되는 추론 워크로드에 적합합니다. SageMaker AI Hosting 서비스에 모델을 배포하고 추론에 사용할 수 있는 실시간 엔드포인트를 가져올 수 있습니다. 이러한 엔드포인트는 완전 관리형이며 오토 스케일링을 지원합니다. SageMaker AI의 실시간 추론에 대한 자세한 내용은 [실시간 추론](realtime-endpoints.md) 섹션을 참조하세요.

파이프라인에 모델 배포 단계를 추가하기 전에 IAM 역할에 다음 권한이 있는지 확인합니다.
+ `sagemaker:CreateModel`
+ `sagemaker:CreateEndpointConfig`
+ `sagemaker:CreateEndpoint`
+ `sagemaker:UpdateEndpoint`
+ `sagemaker:DescribeModel`
+ `sagemaker:DescribeEndpointConfig`
+ `sagemaker:DescribeEndpoint`

SageMaker AI에 필요한 모든 권한과 이를 설정하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI API 권한: 작업, 권한 및 리소스 참조](api-permissions-reference.md) 섹션을 참조하세요.

드래그 앤 드롭 편집기에서 파이프라인에 모델 배포 단계를 추가하려면 다음 단계를 완료하세요.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

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

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

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다.

1. 캔버스에 추가한 **모델 배포(엔드포인트)** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 배포(엔드포인트)** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 배포(엔드포인트)** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 배포(엔드포인트)** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

## 변환 단계
<a name="step-type-transform"></a>

배치 변환을 위한 변환 단계를 사용하여 전체 데이터세트에 대해 추론을 실행합니다. 배치 변환에 대한 자세한 정보는 [추론 파이프라인을 사용하여 배치 변환](inference-pipeline-batch.md)섹션을 참조하세요.

변환 단계에는 배치 변환을 실행하는 데 사용할 변환기와 데이터가 필요합니다. 다음 예시는 변환 단계 정의를 만드는 방법을 보여줍니다. 변환 단계 요구 사항에 대한 자세한 내용은 [sagemaker.workflow.steps.TransformStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TransformStep) 문서를 참조하세요.

------
#### [ Pipeline Designer ]

드래그 앤 드롭 시각적 편집기를 사용하여 파이프라인에 배치 변환 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

1. 왼쪽 사이드바에서 **모델 배포(배치 변환)**을 선택하고 캔버스로 드래그합니다.

1. 캔버스에서 추가한 **모델 배포(배치 변환)** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.TransformStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TransformStep)을 참조하세요.

1. 캔버스에 추가한 **모델 배포(배치 변환)** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **모델 배포(배치 변환)** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **모델 배포(배치 변환)** 단계 바로 뒤에 있는 단계가 포함된 경우 **모델 배포(배치 변환)** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

```
from sagemaker.workflow.pipeline_context import PipelineSession

from sagemaker.transformer import Transformer
from sagemaker.inputs import TransformInput
from sagemaker.workflow.steps import TransformStep

transformer = Transformer(..., sagemaker_session=PipelineSession())

step_transform = TransformStep(
    name="AbaloneTransform",
    step_args=transformer.transform(data="s3://amzn-s3-demo-bucket/my-data"),
)
```

------

## 조건 단계
<a name="step-type-condition"></a>

조건 단계를 사용하여 단계 속성의 조건을 평가하여 파이프라인에서 다음에 취해야 할 조치를 평가합니다.

조건 단계에는 다음이 필요합니다.
+ 조건 목록
+ 조건이 `true`로 평가되는 경우 실행할 단계의 목록
+ 조건이 `false`로 평가되는 경우 실행할 단계의 목록

------
#### [ Pipeline Designer ]

파이프라인 디자이너를 사용하여 파이프라인에 조건 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Amazon SageMaker Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

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

1. 캔버스에서 추가한 **조건** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.condition\$1step.ConditionStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.condition_step.ConditionStep)을 참조하세요.

1. 캔버스에 추가한 **조건** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **조건** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **조건** 단계 바로 뒤에 있는 단계가 포함된 경우 **조건** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

 다음 예제는 `ConditionStep`정의를 생성하는 방법을 보여줍니다.

**제한 사항 **
+ Pipelines은 중첩된 조건 단계의 사용을 지원하지 않습니다. 조건 단계를 다른 조건 단계의 입력으로 전달할 수 없습니다.
+ 조건 단계는 두 브랜치에서 동일한 단계를 사용할 수 없습니다. 두 브랜치에 동일한 단계 기능이 필요한 경우 단계를 복제하고 다른 이름을 지정하세요.

```
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
)

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

`ConditionStep` 요구 사항에 대한 자세한 내용은 [SageMaker.Workflow.Condition\$1Step.ConditionStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#conditionstep) API 참조를 참조하세요. 지원되는 조건에 대한 자세한 내용은 SageMaker AI Python SDK 설명서의 *[Amazon SageMaker Pipelines - Conditions](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#conditions)*을 참조하세요.

------

## 콜백 단계
<a name="step-type-callback"></a>

`Callback` 단계를 사용하여 Amazon SageMaker Pipelines에서 직접 제공하지 않는 추가 프로세스와 AWS 서비스를 워크플로에 추가합니다. `Callback` 단계가 실행되면 다음 절차가 수행됩니다.
+ Pipelines이 고객 지정한 Amazon Simple Queue Service(Amazon SQS) 대기열에 메시지를 전송합니다. 메시지에는 Pipelines에서 생성한 토큰과 고객이 제공한 입력 파라미터 목록이 포함되어 있습니다. 메시지를 보낸 후 Pipelines은 고객의 응답을 기다립니다.
+ 고객은 Amazon SQS 대기열에서 메시지를 검색하고 사용자 지정 프로세스를 시작합니다.
+ 프로세스가 완료되면 고객은 다음 API 중 하나를 직접 호출하고 Pipelines에서 생성된 토큰을 제출합니다.
  +  [SendPipelineExecutionStepSuccess](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_SendPipelineExecutionStepSuccess.html)와 출력 파라미터 목록
  +  [SendPipelineExecutionStepFailure](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_SendPipelineExecutionStepFailure.html)와 실패 사유
+ API 직접 호출로 인해 Pipelines이 파이프라인 프로세스를 계속하거나 프로세스에 실패합니다.

`Callback` 단계 요구 사항에 대한 자세한 내용은 [SageMaker.Workflow.Callback\$1step.CallbackStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.callback_step.CallbackStep) 설명서를 참조하세요. 전체 솔루션을 보려면 [콜백 단계를 사용하여 사용자 지정 단계를 포함하도록 SageMaker Pipelines 확장](https://aws.amazon.com/blogs/machine-learning/extend-amazon-sagemaker-pipelines-to-include-custom-steps-using-callback-steps/)을 참조하세요.

**중요**  
`Callback` 단계는 Amazon SageMaker Python SDK v2.45.0과 Amazon SageMaker Studio Classic v3.6.2에 도입되었습니다. `Callback` 단계를 사용하기 전에 Studio Classic을 업데이트해야 합니다. 업데이트하지 않으면 파이프라인 DAG가 표시되지 않습니다. Studio Classic을 업데이트하려면 [Amazon SageMaker Studio Classic 종료 및 업데이트](studio-tasks-update-studio.md) 섹션을 참조하세요.

다음 샘플은 이전 절차의 구현을 보여줍니다.

```
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](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html)을 직접 호출하면 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 단계
<a name="step-type-lambda"></a>

Lambda 단계를 사용하여 AWS Lambda 함수를 실행합니다. 기존 Lambda 함수를 실행하거나 SageMaker AI는 새 Lambda 함수를 생성하고 실행할 수 있습니다. 기존 Lambda 함수를 사용하기로 선택한 경우 SageMaker AI 파이프라인 AWS 리전 과 동일한에 있어야 합니다. SageMaker AI 파이프라인에서 Lambda 단계를 사용하는 방법을 보여주는 노트북은 [sagemaker-pipelines-lambda-step.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/lambda-step/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을 업데이트하려면 [Amazon SageMaker Studio Classic 종료 및 업데이트](studio-tasks-update-studio.md) 섹션을 참조하세요.

SageMaker AI는 Lambda 함수를 생성, 업데이트, 간접 호출 및 삭제할 수 있는 [SageMaker.Lambda\$1Helper.Lambda](https://sagemaker.readthedocs.io/en/stable/api/utility/lambda_helper.html) 클래스를 제공합니다. `Lambda`에는 다음과 같은 서명이 있습니다.

```
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\$1step.LambdaStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.lambda_step.LambdaStep) 클래스에는 `Lambda`유형의 `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 단계
<a name="step-type-clarify-check"></a>

이 `ClarifyCheck`단계를 사용하여 바이어스 분석 및 모델 설명 가능성에 대해 이전 기준 대비 기준 드리프트 검사를 수행할 수 있습니다. 그런 다음 `model.register()`메서드로 [기준을 생성 및 등록](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html#pipelines-quality-clarify-baseline-calculations)하고 해당 메서드의 결과를 `[step\$1args](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#model-step)`을 사용하여 [모델 단계](#step-type-model)에 전달할 수 있습니다. 이러한 드리프트 검사 기준은 Amazon SageMaker Model Monitor가 모델 엔드포인트에 사용할 수 있습니다. 따라서 [기준](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-create-baseline.html) 제안을 별도로 수행할 필요가 없습니다.

`ClarifyCheck` 단계에서는 모델 레지스트리에서 드리프트 검사의 기준을 가져올 수도 있습니다. `ClarifyCheck` 단계에서는 SageMaker Clarify 사전 빌드된 컨테이너를 사용합니다. 이 컨테이너는 제약 조건 제안 및 주어진 기준에 대한 제약 조건 검증을 비롯한 다양한 모델 모니터링 기능을 제공합니다. 자세한 내용은 [사전 구축된 SageMaker Clarify 컨테이너](clarify-processing-job-configure-container.md) 단원을 참조하십시오.

### ClarifyCheck 단계 구성
<a name="configuring-step-type-clarify"></a>

파이프라인에서 사용할 때마다 사용 가능한 검사 유형 중 하나만을 수행하도록 `ClarifyCheck`단계를 구성할 수 있습니다.
+ 데이터 바이어스 검사
+ 모델 바이어스 검사
+ 모델 설명 가능성 검사

그러기 위해 `clarify_check_config` 파라미터를 다음 검사 유형 값 중 하나로 설정합니다.
+ `DataBiasCheckConfig`
+ `ModelBiasCheckConfig`
+ `ModelExplainabilityCheckConfig`

`ClarifyCheck` 단계는 SageMaker AI Clarify 사전 구축된 컨테이너를 실행하는 처리 작업을 시작하며 [검사 및 처리 작업을 위한 전용 구성](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-configure-processing-jobs.html)이 필요합니다. `ClarifyCheckConfig` 및 `CheckJobConfig`는 이러한 구성을 위한 도우미 함수입니다. 이러한 도우미 함수는 SageMaker Clarify 처리 작업이 모델 편향, 데이터 편향 또는 모델 설명 가능성을 검사하기 위해 계산하는 방식에 부합합니다. 자세한 내용은 [편향 분석 및 설명 가능성을 위한 SageMaker Clarify 처리 작업 실행](clarify-processing-job-run.md) 단원을 참조하십시오.

### 드리프트 검사의 단계 동작 제어
<a name="controlling-step-type-clarify"></a>

`ClarifyCheck` 단계의 동작을 제어하려면 다음 두 개의 부울 플래그가 필요합니다.
+ `skip_check`: 이 파라미터는 이전 기준에 대한 드리프트 검사를 건너뛰었는지 여부를 나타냅니다. `False`로 설정된 경우 구성된 검사 유형의 이전 기준을 사용할 수 있어야 합니다.
+ `register_new_baseline`: 이 파라미터는 `BaselineUsedForDriftCheckConstraints`단계 속성을 통해 새로 계산된 기준에 액세스할 수 있는지 여부를 나타냅니다. `False`로 설정된 경우 구성된 검사 유형의 이전 기준 역시 사용할 수 있어야 합니다. `BaselineUsedForDriftCheckConstraints` 속성을 통해 액세스할 수 있습니다.

자세한 내용은 [Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기](pipelines-quality-clarify-baseline-lifecycle.md)섹션을 참조하세요.

### 기준 작업
<a name="step-type-clarify-working-with-baselines"></a>

선택적으로 `model_package_group_name`을 지정하여 기존 기준을 찾을 수 있습니다. 그런 다음 `ClarifyCheck` 단계는 모델 패키지 그룹의 승인된 최신 모델 패키지에서 `DriftCheckBaselines`을 가져옵니다.

또는 `supplied_baseline_constraints`파라미터를 통해 이전 기준을 제공할 수 있습니다. `model_package_group_name`, `supplied_baseline_constraints`를 모두 지정하는 경우 `ClarifyCheck`단계에서는 `supplied_baseline_constraints`파라미터로 지정된 기준을 사용합니다.

`ClarifyCheck` 단계 요구 사항 사용에 대한 자세한 내용은 *Amazon SageMaker AI SDK for Python*의 [SageMaker.workflow.steps.ClarifyCheckStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.clarify_check_step.ClarifyCheckStep)을 참조하세요. Pipelines에서 `ClarifyCheck` 단계를 사용하는 방법을 보여주는 Amazon SageMaker Studio Classic 노트북은 [sagemaker-pipeline-model-monitor-clarify-steps.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/model-monitor-clarify-pipelines/sagemaker-pipeline-model-monitor-clarify-steps.ipynb)를 참조하세요.

**Example 데이터 바이어스 검사를 위한 `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 단계
<a name="step-type-quality-check"></a>

`QualityCheck` 단계를 사용하여 파이프라인의 데이터 품질 또는 모델 품질에 대한 이전 기준과 비교하여 [기준 제안](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-create-baseline.html) 및 드리프트 검사를 수행합니다. 그런 다음 `model.register()` 메서드로 [기준을 생성 및 등록](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html#pipelines-quality-clarify-baseline-calculations)하고 해당 메서드의 결과를 `[step\$1args](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#model-step)`를 사용하여 [모델 단계](#step-type-model)에 전달할 수 있습니다.

Model Monitor는 이러한 기준을 모델 엔드포인트의 드리프트 검사에 사용할 수 있으므로 기준 제안을 별도로 수행할 필요가 없습니다. `QualityCheck` 단계에서는 모델 레지스트리에서 드리프트 검사의 기준을 가져올 수도 있습니다. `QualityCheck` 단계에서는 Amazon SageMaker AI Model Monitor 사전 구축 컨테이너를 활용합니다. 이 컨테이너에는 제약 조건 제안, 통계 생성, 주어진 기준에 대한 제약 조건 검증을 비롯한 다양한 모델 모니터링 기능이 있습니다. 자세한 내용은 [Amazon SageMaker Model Monitor 사전 구축 컨테이너](model-monitor-pre-built-container.md) 단원을 참조하십시오.

### QualityCheck 단계 구성
<a name="configuring-step-type-quality"></a>

파이프라인에서 사용할 때마다 사용 가능한 검사 유형 중 하나만을 실행하도록 `QualityCheck` 단계를 구성할 수 있습니다.
+ 데이터 품질 검사
+ 모델 품질 검사

다음 검사 유형 값 중 하나로 `quality_check_config`파라미터를 설정하여 이 작업을 수행합니다.
+ `DataQualityCheckConfig`
+ `ModelQualityCheckConfig`

`QualityCheck` 단계에서는 Model Monitor 사전 빌드된 컨테이너를 실행하는 처리 작업을 시작하며 검사 및 처리 작업을 위한 전용 구성이 필요합니다. `QualityCheckConfig` 및 `CheckJobConfig`는 이러한 구성에 대한 도우미 함수입니다. 이러한 도우미 함수는 Model Monitor가 모델 품질 또는 데이터 품질 모니터링을 위한 기준을 만드는 방식에 부합합니다. 모델 모니터 기준 제안에 대한 자세한 내용은 [기준 생성](model-monitor-create-baseline.md), [모델 품질 기준 만들기](model-monitor-model-quality-baseline.md)섹션을 참조하세요.

### 드리프트 검사의 단계 동작 제어
<a name="controlling-step-type-quality"></a>

`QualityCheck` 단계의 동작을 제어하려면 다음 두 개의 부울 플래그가 필요합니다.
+ `skip_check`: 이 파라미터는 이전 기준에 대한 드리프트 검사를 건너뛰었는지 여부를 나타냅니다. `False`로 설정된 경우 구성된 검사 유형의 이전 기준을 사용할 수 있어야 합니다.
+ `register_new_baseline`: 이 파라미터는 단계 속성 `BaselineUsedForDriftCheckConstraints`및 `BaselineUsedForDriftCheckStatistics`를 통해 새로 계산된 기준에 액세스할 수 있는지 여부를 나타냅니다. `False`로 설정된 경우 구성된 검사 유형의 이전 기준 역시 사용할 수 있어야 합니다. `BaselineUsedForDriftCheckConstraints` 및 `BaselineUsedForDriftCheckStatistics`속성을 통해 이러한 속성에 액세스할 수 있습니다.

자세한 내용은 [Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기](pipelines-quality-clarify-baseline-lifecycle.md)섹션을 참조하세요.

### 기준 작업
<a name="step-type-quality-working-with-baselines"></a>

`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 AI SDK for Python*의 [sagemaker.workflow.steps.QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.quality_check_step.QualityCheckStep)을 참조하세요. Pipelines에서 `QualityCheck` 단계를 사용하는 방법을 보여주는 Amazon SageMaker Studio Classic 노트북은 [sagemaker-pipeline-model-monitor-clarify-steps.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/model-monitor-clarify-pipelines/sagemaker-pipeline-model-monitor-clarify-steps.ipynb)를 참조하세요.

**Example 데이터 품질 검사를 위한 `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"
)
```

## EMR 단계
<a name="step-type-emr"></a>

Amazon SageMaker Pipelines [EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html) 단계를 사용하여 다음을 수행합니다.
+ 실행 중인 Amazon EMR 클러스터에서 [Amazon EMR 단계](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html)를 처리합니다.
+ 파이프라인에서 Amazon EMR 클러스터를 만들고 관리하도록 합니다.

Amazon EMR에 대한 자세한 내용은 [Amazon EMR 시작하기](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)를 참조하세요.

EMR 단계를 수행하려면 Amazon EMR 클러스터에서 사용하는 JAR 파일의 위치와 전달할 인수가 `EMRStepConfig`에 포함되어야 합니다. 실행 중인 EMR 클러스터에서 단계를 실행하려는 경우 Amazon EMR 클러스터 ID도 제공합니다. 클러스터 구성을 전달하여 클러스터가 만들고 관리하고 종료하는 클러스터에서 EMR 단계를 실행할 수도 있습니다. 다음 섹션에는 두 가지 방법을 모두 보여주는 샘플 노트북으로 연결되는 링크와 예제가 포함되어 있습니다.

**참고**  
EMR 단계를 수행하려면 파이프라인에 전달된 역할에 추가 권한이 있어야 합니다. [AWS 관리형 정책인 `AmazonSageMakerPipelinesIntegrations`](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-pipelines.html#security-iam-awsmanpol-AmazonSageMakerPipelinesIntegrations)을 파이프라인 역할에 연결하거나 역할에 해당 정책의 권한이 포함되어 있는지 확인합니다.
실행 중인 클러스터에서 EMR 단계를 처리하는 경우 다음 상태 중 하나에 있는 클러스터만 사용할 수 있습니다.  
`STARTING`
`BOOTSTRAPPING`
`RUNNING`
`WAITING`
실행 중인 클러스터에서 EMR 단계를 처리하는 경우 EMR 클러스터의 `PENDING`상태에서 최대 256개의 EMR 단계를 가질 수 있습니다. 이 한도를 초과하여 제출된 EMR 단계는 파이프라인 실행에 실패합니다. [파이프라인 단계에 대한 재시도 정책](pipelines-retry-policy.md) 사용을 고려해 볼 수 있습니다.
클러스터 ID와 클러스터 구성 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.
EMR 단계는 Amazon EventBridge를 사용하여 EMR 단계 또는 클러스터 상태의 변경 사항을 모니터링합니다. 실행 중인 클러스터에서 Amazon EMR 작업을 처리하는 경우 EMR 단계는 `SageMakerPipelineExecutionEMRStepStatusUpdateRule`규칙을 사용하여 EMR 단계 상태를 모니터링합니다. EMR 단계에서 만드는 클러스터에서 작업을 처리하는 경우 단계는 `SageMakerPipelineExecutionEMRClusterStatusRule` 규칙을 사용하여 클러스터 상태의 변경을 모니터링합니다. AWS 계정에 이러한 EventBridge 규칙 중 하나가 표시되면 삭제하지 마십시오. 그렇지 않으면 EMR 단계가 완료되지 않을 수 있습니다.

**파이프라인에 Amazon EMR 단계 추가**

파이프라인에 EMR 단계를 추가하려면 다음을 수행합니다.
+ [Amazon SageMaker Studio 시작의 지침에 따라 Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html) 콘솔을 엽니다.
+ 왼쪽 탐색 창에서 **파이프라인**을 클릭합니다.
+ **생성(Create)**을 선택합니다.
+ **비어 있음**을 선택합니다.
+ 왼쪽 사이드바에서 **데이터 처리**를 선택하고 캔버스로 드래그합니다.
+ 캔버스에서 추가한 **데이터 처리** 단계를 선택합니다.
+ 오른쪽 사이드바의 모드에서 **EMR(관리형)**을 선택합니다.
+ 오른쪽 사이드바의 **설정 및 세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.fail\$1step.EMRstep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.emr_step.EMRStep)을 참조하세요.

**실행 중인 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](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/emr-step/sagemaker-pipelines-emr-step-with-running-emr-cluster.ipynb)를 참조하세요.

**실행 중인 Amazon EMR 클러스터에서 새 작업 시작**

`EMRStep`이 사용자를 대신해 만드는 새 클러스터에서 새 작업을 시작하려면 클러스터 구성을 딕셔너리로 제공합니다. 딕셔너리는 [RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) 요청과 구조가 동일해야 합니다. 하지만 클러스터 구성에 다음 필드를 포함시키지 마세요.
+ [`Name`]
+ [`Steps`]
+ [`AutoTerminationPolicy`]
+ [`Instances`][`KeepJobFlowAliveWhenNoSteps`]
+ [`Instances`][`TerminationProtected`]

다른 모든 `RunJobFlow`인수는 클러스터 구성에서 사용할 수 있습니다. 요청 구문에 대한 자세한 내용은 [RunJobflow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)를 참조하세요.

다음 예시에서는 클러스터 구성을 EMR 단계 정의에 전달합니다. 그러면 새 EMR 클러스터에서 새 작업을 시작하는 단계가 표시됩니다. 이 예제의 EMR 클러스터 구성에는 기본 및 코어 EMR 클러스터 노드의 사양이 포함되어 있습니다. Amazon EMR 노드 유형에 대한 자세한 내용은 [노드 유형 이해: 기본, 코어 및 태스크 노드](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html)를 참조하세요.

```
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](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/emr-step/sagemaker-pipelines-emr-step-with-cluster-lifecycle-management.ipynb)를 참조하세요.

## EMR 서버리스 단계
<a name="step-type-serverless"></a>

파이프라인에 EMR 서버리스 단계를 추가하려면 다음을 수행합니다.
+ [Amazon SageMaker Studio 시작의 지침에 따라 Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html) 콘솔을 엽니다.
+ 왼쪽 탐색 창에서 **파이프라인**을 클릭합니다.
+ **생성(Create)**을 선택합니다.
+ **비어 있음**을 선택합니다.
+ 왼쪽 사이드바에서 **데이터 처리**를 선택하고 캔버스로 드래그합니다.
+ 캔버스에서 추가한 **데이터 처리** 단계를 선택합니다.
+ 오른쪽 사이드바의 모드에서 **EMR(서버리스)**을 선택합니다.
+ 오른쪽 사이드바의 **설정 및 세부 정보** 탭에 있는 양식을 작성합니다.

## 노트북 작업 단계
<a name="step-type-notebook-job"></a>

`NotebookJobStep`을 사용하여 SageMaker 노트북 작업을 파이프라인 단계로 비대화형으로 실행합니다. Pipelines 드래그 앤 드롭 UI에서 파이프라인을 빌드하는 경우 [코드 실행 단계](#step-type-executecode)를 사용하여 노트북을 실행합니다. SageMaker 노트북 작업에 대한 자세한 정보는 [SageMaker 노트북](notebook-auto-run.md)에서 확인하세요.

`NotebookJobStep`에는 최소한 입력 노트북, 이미지 URI 및 커널 이름이 필요합니다. 노트북 작업 단계 요구 사항 및 단계를 사용자 지정하기 위해 설정할 수 있는 기타 파라미터에 대한 자세한 내용은 [sagemaker.workflow.steps.NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.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 대시보드에서 노트북 작업 보기](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash) 섹션을 참조하세요.

또한 SageMaker Python SDK를 사용하여 노트북 작업을 예약하는 경우 노트북 작업을 실행할 특정 이미지만 지정할 수 있습니다. 자세한 내용은 [SageMaker AI Python SDK 노트북 작업에 대한 이미지 제약 조건](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk) 단원을 참조하십시오.

## 실패 단계
<a name="step-type-fail"></a>

원하는 조건 또는 상태가 달성되지 않을 때 Amazon SageMaker Pipelines을 중지하는 데 실패 단계를 사용합니다. 또한 실패 단계를 사용하여 파이프라인 실행 실패의 원인을 나타내는 사용자 지정 오류 메시지를 입력할 수 있습니다.

**참고**  
실패 단계 및 다른 파이프라인 단계를 동시에 실행하면 모든 동시 작업 단계가 완료될 때까지 파이프라인이 종료되지 않습니다.

### 실패 단계 사용에 대한 제한 사항
<a name="step-type-fail-limitations"></a>
+ 다른 단계의 `DependsOn` 목록에 실패 단계를 추가할 수 없습니다. 자세한 내용은 [단계 간 사용자 지정 종속성](build-and-manage-steps.md#build-and-manage-custom-dependency) 단원을 참조하십시오.
+ 다른 단계는 실패 단계를 참조할 수 없습니다. 이는 항상 파이프라인 실행의 마지막 단계입니다.**
+ 실패 단계로 끝나는 파이프라인 실행은 재시도할 수 없습니다.

정적 텍스트 문자열 형태로 실패 단계 오류 메시지를 만들 수 있습니다. 또는 SDK를 사용할 경우 [파이프라인 파라미터](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-parameters.html), [조인](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html?highlight=Join#sagemaker.workflow.functions.Join) 작업 또는 기타 [단계 속성](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#build-and-manage-properties)을 사용하여 보다 유용한 오류 메시지를 만들 수도 있습니다.

------
#### [ Pipeline Designer ]

파이프라인에 실패 단계를 추가하려면 다음을 수행합니다.

1. [Amazon SageMaker Studio 출시](studio-updated-launch.md)의 지침에 따라 Studio 콘솔을 엽니다.

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

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

1. **비어 있음**을 선택합니다.

1. 왼쪽 사이드바에서 **실패**를 선택하고 캔버스로 드래그합니다.

1. 캔버스에서 추가한 **실패** 단계를 선택합니다.

1. 오른쪽 사이드바의 **설정** 및 **세부 정보** 탭에서 양식을 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.fail\$1step.FailStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.fail_step.FailStep)을 참조하세요.

1. 캔버스에 추가한 **실패** 단계 바로 앞에 있는 단계가 포함된 경우 커서를 클릭하고 단계에서 **실패** 단계로 드래그하여 엣지를 만듭니다.

1. 캔버스에 추가한 **실패** 단계 바로 뒤에 있는 단계가 포함된 경우 **실패** 단계에서 커서를 클릭하고 단계로 드래그하여 엣지를 만듭니다.

------
#### [ SageMaker Python SDK ]

**Example**  
다음 예제 코드 스니펫은 파이프라인 파라미터로 구성된 `ErrorMessage`와 `Join`작업을 사용하는 `FailStep`을 사용합니다.  

```
from sagemaker.workflow.fail_step import FailStep
from sagemaker.workflow.functions import Join
from sagemaker.workflow.parameters import ParameterInteger

mse_threshold_param = ParameterInteger(name="MseThreshold", default_value=5)
step_fail = FailStep(
    name="AbaloneMSEFail",
    error_message=Join(
        on=" ", values=["Execution failed due to MSE >", mse_threshold_param]
    ),
)
```

------

# 통합 추가
<a name="build-and-manage-steps-integration"></a>

MLflow 통합을 사용하면 MLflow를 파이프라인과 함께 사용하여 추적 서버 또는 서버리스 애플리케이션을 선택하고, 실험을 선택하고, 지표를 로깅할 수 있습니다.

## 주요 개념
<a name="add-integration-key-concepts"></a>

**기본 앱 생성** - 파이프라인 시각적 편집기를 입력하면 기본 MLflow 애플리케이션이 생성됩니다.

**통합 패널** - 새 통합 패널에는 선택 및 구성할 수 있는 MLflow가 포함되어 있습니다.

**앱 및 실험 업데이트** - 파이프라인 실행 중에 선택한 애플리케이션 및 실험을 재정의하는 옵션입니다.

## 작동 방식
<a name="add-integration-how-it-works"></a>
+ **파이프라인 시각적 편집기**로 이동
+ 도구 모음에서 **통합**을 선택합니다.
+ **MLflow** 선택
+ MLflow 앱 및 실험 구성

## 스크린샷 예제
<a name="add-integration-example-screenshots"></a>

통합 사이드 패널

![\[할 일 설명입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/screenshot-pipeline-1.png)


MLflow 구성

![\[할 일 설명입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/screenshot-pipeline-2.png)


파이프라인 실행 중에 실험을 재정의하는 방법

![\[할 일 설명입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/screenshot-pipeline-3.png)


## 단계 속성
<a name="build-and-manage-properties"></a>

`properties` 속성을 사용하여 파이프라인의 단계 간에 데이터 종속성을 추가합니다. Pipelines은 이러한 데이터 종속성을 사용하여 파이프라인 정의에서 DAG를 구성합니다. 이러한 속성은 자리 표시자 값으로 참조될 수 있으며 런타임에 확인됩니다.

Pipelines 단계의 `properties` 속성은 해당 SageMaker AI 작업 유형에 대한 `Describe` 직접 호출에서 반환된 객체와 일치합니다. 각 작업 유형에 대해 `Describe`호출은 다음과 같은 응답 객체를 반환합니다.
+ `ProcessingStep` – [DescribeProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html)
+ `TrainingStep` – [DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html)
+ `TransformStep` – [DescribeTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTransformJob.html)

데이터 종속성 생성 중에 각 단계 유형에 대해 참조할 수 있는 속성을 확인하려면 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)의 [데이터 종속성 - 속성 참조](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#data-dependency-property-reference)를 참조하세요.**

## 단계 병렬화
<a name="build-and-manage-parallelism"></a>

단계가 다른 단계에 종속되지 않는 경우 파이프라인 실행 즉시 실행됩니다. 하지만 너무 많은 파이프라인 단계를 병렬로 실행하면 가용 리소스가 빠르게 고갈될 수 있습니다. `ParallelismConfiguration`을 사용하여 파이프라인 실행의 동시 단계 수를 제어할 수 있습니다.

다음 예제에서는 `ParallelismConfiguration`을 사용하여 동시 단계 제한을 5로 설정합니다.

```
pipeline.create(
    parallelism_config=ParallelismConfiguration(5),
)
```

## 단계 간 데이터 종속성
<a name="build-and-manage-data-dependency"></a>

단계 간 데이터 관계를 지정하여 DAG의 구조를 정의합니다. 단계 간에 데이터 종속성을 만들려면 한 단계의 속성을 파이프라인의 다른 단계에 입력으로 전달합니다. 입력을 받는 단계는 입력을 제공하는 단계가 실행을 완료할 때까지 시작되지 않습니다.

데이터 종속성은 다음 형식의 JSONPath 표기법을 사용합니다. 이 형식은 JSON 속성 파일을 통과합니다. 즉, 파일에서 원하는 중첩 속성에 도달하는 데 필요한 만큼 *<property>* 인스턴스를 추가할 수 있습니다. JSONPath 표기법에 대한 자세한 내용은 [JSONPath 리포지토리](https://github.com/json-path/JsonPath)를 참조하세요.

```
<step_name>.properties.<property>.<property>
```

다음은 처리 단계의 `ProcessingOutputConfig`속성을 사용하여 Amazon S3 버킷을 지정하는 방법을 보여줍니다.

```
step_process.properties.ProcessingOutputConfig.Outputs["train_data"].S3Output.S3Uri
```

데이터 종속성을 생성하려면 다음과 같이 버킷을 훈련 단계로 전달하세요.

```
from sagemaker.workflow.pipeline_context import PipelineSession

sklearn_train = SKLearn(..., sagemaker_session=PipelineSession())

step_train = TrainingStep(
    name="CensusTrain",
    step_args=sklearn_train.fit(inputs=TrainingInput(
        s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
            "train_data"].S3Output.S3Uri
    ))
)
```

데이터 종속성 생성 중에 각 단계 유형에 대해 참조할 수 있는 속성을 확인하려면 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)의 [데이터 종속성 - 속성 참조](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#data-dependency-property-reference)를 참조하세요.**

## 단계 간 사용자 지정 종속성
<a name="build-and-manage-custom-dependency"></a>

데이터 종속성을 지정하면 Pipelines은 단계 간의 데이터 연결을 제공합니다. 또는 Pipelines을 직접 사용하지 않고도 한 단계에서 이전 단계의 데이터에 접근할 수 있습니다. 이 경우 다른 단계 실행이 완료될 때까지 단계를 시작하지 않도록 Pipelines에 알리는 사용자 지정 종속성을 만들 수 있습니다. 단계의 `DependsOn`속성을 지정하여 사용자 지정 종속성을 생성합니다.

예를 들어, 다음은 `A`단계와 `B`단계가 모두 실행된 후에만 시작되는 `C`단계를 정의합니다.

```
{
  'Steps': [
    {'Name':'A', ...},
    {'Name':'B', ...},
    {'Name':'C', 'DependsOn': ['A', 'B']}
  ]
}
```

종속 항목이 순환 종속성을 만드는 경우 Pipelines에서 검증 예외가 발생합니다.

다음 예제는 처리 단계 실행이 끝난 후 시작되는 훈련 단계를 생성합니다.

```
processing_step = ProcessingStep(...)
training_step = TrainingStep(...)

training_step.add_depends_on([processing_step])
```

다음 예제에서는 서로 다른 두 처리 단계의 실행이 완료될 때까지 시작되지 않는 훈련 단계를 만듭니다.

```
processing_step_1 = ProcessingStep(...)
processing_step_2 = ProcessingStep(...)

training_step = TrainingStep(...)

training_step.add_depends_on([processing_step_1, processing_step_2])
```

다음은 사용자 지정 종속성을 생성하는 다른 방법을 제공합니다.

```
training_step.add_depends_on([processing_step_1])
training_step.add_depends_on([processing_step_2])
```

다음 예제에서는 한 처리 단계에서 입력을 받고 다른 처리 단계가 실행을 마칠 때까지 기다리는 훈련 단계를 만듭니다.

```
processing_step_1 = ProcessingStep(...)
processing_step_2 = ProcessingStep(...)

training_step = TrainingStep(
    ...,
    inputs=TrainingInput(
        s3_data=processing_step_1.properties.ProcessingOutputConfig.Outputs[
            "train_data"
        ].S3Output.S3Uri
    )

training_step.add_depends_on([processing_step_2])
```

다음 예제에서는 단계의 사용자 지정 종속성에 대한 문자열 목록을 검색하는 방법을 보여줍니다.

```
custom_dependencies = training_step.depends_on
```

## 단계의 사용자 지정 이미지
<a name="build-and-manage-images"></a>

 파이프라인에서 단계를 생성할 때 사용 가능한 SageMaker AI [딥 러닝 컨테이너 이미지](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)를 모두 사용할 수 있습니다.

파이프라인 단계가 있는 자체 컨테이너를 사용할 수도 있습니다. Studio Classic 내에서 이미지를 만들 수 없으므로 Pipelines에서 이미지를 사용하기 전에 다른 방법을 사용하여 이미지를 만들어야 합니다.

파이프라인 단계를 생성할 때 자체 컨테이너를 사용하려면 예측기 정의에 이미지 URI를 포함합니다. SageMaker AI에서 자체 컨테이너를 사용하는 방법에 대한 자세한 내용은 [Using Docker Containers with SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers.html)를 참조하세요.

# @step 데코레이터를 사용한 Python 코드 리프트 앤 시프트
<a name="pipelines-step-decorator"></a>

`@step` 데코레이터는 로컬 기계 학습(ML) 코드를 하나 이상의 파이프라인 단계로 변환하는 기능입니다. 다른 ML 프로젝트와 마찬가지로 ML 함수를 작성할 수 있습니다. 로컬에서 테스트하거나 `@remote` 데코레이터를 사용하여 훈련 작업으로 테스트한 후에는 `@step` 데코레이터를 추가하여 함수를 SageMaker AI 파이프라인 단계로 변환할 수 있습니다. 그런 다음, `@step`으로 데코레이션된 함수 직접 호출의 출력을 파이프라인에 단계로 전달하여 파이프라인을 만들고 실행합니다. `@step` 데코레이터와 일련의 함수를 연결하여 다단계 방향성 비순환 그래프(DAG) 파이프라인을 만들 수도 있습니다.

`@step` 데코레이터를 사용하는 설정은 `@remote` 데코레이터를 사용하는 설정과 동일합니다. [환경을 설정](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator.html#train-remote-decorator-env)하고 [구성 파일을 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-config.html)하여 기본값을 설정하는 방법에 대한 자세한 내용은 원격 함수 설명서를 참조하세요. `@step` 데코레이터에 대한 자세한 내용은 [sagemaker.workflow.function\$1step.step](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.function_step.step)을 참조하세요.

`@step` 데코레이터 사용을 보여주는 샘플 노트북을 보려면 [@step decorator sample notebooks](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/step-decorator)을 참조하세요.

다음 섹션에서는 `@step` 데코레이터로 로컬 ML 코드에 주석을 달아 단계를 만들고, 단계를 사용하여 파이프라인을 만들고 실행하고, 사용 사례에 맞게 환경을 사용자 지정하는 방법을 설명합니다.

**Topics**
+ [`@step`으로 데코레이션된 함수를 사용하여 파이프라인 만들기](pipelines-step-decorator-create-pipeline.md)
+ [파이프라인 실행](pipelines-step-decorator-run-pipeline.md)
+ [파이프라인 구성](pipelines-step-decorator-cfg-pipeline.md)
+ [모범 사례](pipelines-step-decorator-best.md)
+ [제한 사항](pipelines-step-decorator-limit.md)

# `@step`으로 데코레이션된 함수를 사용하여 파이프라인 만들기
<a name="pipelines-step-decorator-create-pipeline"></a>

`@step` 데코레이터를 사용하여 Python 함수를 파이프라인 단계로 변환하고, 이러한 함수 간에 종속성을 만들어 파이프라인 그래프(또는 방향성 비순환 그래프(DAG))를 만들고, 해당 그래프의 리프 노드를 파이프라인에 단계 목록으로 전달하여 파이프라인을 만들 수 있습니다. 다음 섹션에서는 예시와 함께 이 절차에 대해 자세히 설명합니다.

**Topics**
+ [함수를 단계로 변환](#pipelines-step-decorator-run-pipeline-convert)
+ [단계 간 종속성 만들기](#pipelines-step-decorator-run-pipeline-link)
+ [`@step`으로 데코레이션된 단계와 함께 `ConditionStep` 사용](#pipelines-step-decorator-condition)
+ [단계의 `DelayedReturn` 출력을 사용하여 파이프라인 정의](#pipelines-step-define-delayed)
+ [파이프라인 생성](#pipelines-step-decorator-pipeline-create)

## 함수를 단계로 변환
<a name="pipelines-step-decorator-run-pipeline-convert"></a>

`@step` 데코레이터를 사용하여 단계를 만들려면 함수에 `@step`을 주석으로 지정합니다. 다음 예시에서는 데이터를 사전 처리하는 `@step`으로 데코레이션된 함수를 보여줍니다.

```
from sagemaker.workflow.function_step import step

@step
def preprocess(raw_data):
    df = pandas.read_csv(raw_data)
    ...
    return procesed_dataframe
    
step_process_result = preprocess(raw_data)
```

`@step`으로 데코레이션된 함수를 간접 호출하면 SageMaker AI는 함수를 실행하는 대신 `DelayedReturn` 인스턴스를 반환합니다. `DelayedReturn` 인스턴스는 해당 함수의 실제 반환에 대한 프록시입니다. `DelayedReturn` 인스턴스는 인수로 다른 함수에 전달하거나 파이프라인 인스턴스에 단계로 직접 전달할 수 있습니다. `DelayedReturn` 클래스에 대한 자세한 내용은 [sagemaker.workflow.function\$1step.DelayedReturn](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.function_step.DelayedReturn)을 참조하세요.

## 단계 간 종속성 만들기
<a name="pipelines-step-decorator-run-pipeline-link"></a>

두 단계 간에 종속성을 만들 때 파이프라인 그래프의 단계 간에 연결을 만듭니다. 다음 섹션에서는 파이프라인 단계 간에 종속성을 만들 수 있는 여러 방법을 소개합니다.

### 입력 인수를 통한 데이터 종속성
<a name="pipelines-step-decorator-run-pipeline-link-interstep"></a>

한 함수의 `DelayedReturn` 출력을 다른 함수에 대한 입력으로 전달하면 파이프라인 DAG에 데이터 종속성이 자동으로 만들어집니다. 다음 예시에서는 `preprocess` 함수의 `DelayedReturn` 출력을 `train` 함수에 전달하면 `preprocess`와 `train` 사이에 종속성이 만들어집니다.

```
from sagemaker.workflow.function_step import step

@step
def preprocess(raw_data):
    df = pandas.read_csv(raw_data)
    ...
    return procesed_dataframe

@step
def train(training_data):
    ...
    return trained_model

step_process_result = preprocess(raw_data)    
step_train_result = train(step_process_result)
```

이전 예시에서는 `@step`으로 데코레이션된 훈련 함수를 정의합니다. 이 함수가 간접 호출되면 사전 처리 파이프라인 단계의 `DelayedReturn` 출력을 입력으로 수신합니다. 훈련 함수를 간접 호출하면 다른 `DelayedReturn` 인스턴스가 반환됩니다. 이 인스턴스는 파이프라인 DAG를 형성하는 해당 함수에 정의된 모든 이전 단계(예: 이 예시의 `preprocess` 단계)에 대한 정보를 보유합니다.

이전 예시에서 `preprocess` 함수는 단일 값을 반환합니다. 목록 또는 튜플과 같은 더 복잡한 반환 유형은 [제한 사항](pipelines-step-decorator-limit.md) 섹션을 참조하세요.

### 사용자 지정 종속성 정의
<a name="pipelines-step-decorator-run-pipeline-link-custom"></a>

이전 예시에서 `train` 함수는 `preprocess`의 `DelayedReturn` 출력을 수신하고 종속성을 만들었습니다. 이전 단계 출력을 전달하지 않고 종속성을 명시적으로 정의하려면 단계와 함께 `add_depends_on` 함수를 사용합니다. `get_step()` 함수를 사용하여 `DelayedReturn` 인스턴스에서 기본 단계를 검색한 다음, 종속성을 입력으로 사용하여 `add_depends_on`\$1on을 직접 호출할 수 있습니다. `get_step()` 함수 정의를 보려면 [sagemaker.workflow.step\$1outputs.get\$1step](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_outputs.get_step)을 참조하세요. 다음 예시에서는 `get_step()` 및 `add_depends_on()`을 사용하여 `preprocess` 및 `train` 간의 종속성을 만드는 방법을 보여줍니다.

```
from sagemaker.workflow.step_outputs import get_step

@step
def preprocess(raw_data):
    df = pandas.read_csv(raw_data)
    ...
    processed_data = ..
    return s3.upload(processed_data)

@step
def train():
    training_data = s3.download(....)
    ...
    return trained_model

step_process_result = preprocess(raw_data)    
step_train_result = train()

get_step(step_train_result).add_depends_on([step_process_result])
```

### `@step`으로 데코레이션된 함수에서 기존 파이프라인 단계로 데이터를 주고 받습니다.
<a name="pipelines-step-decorator-run-pipeline-link-pass"></a>

`@step`으로 데코레이션된 단계와 기존 파이프라인 단계가 포함된 파이프라인을 만들고 이들 간에 데이터를 전달할 수 있습니다. 예를 들어 `ProcessingStep`을 사용하여 데이터를 처리하고 결과를 `@step`으로 데코레이션된 훈련 함수에 전달할 수 있습니다. 다음 예시에서는 `@step`으로 데코레이션된 훈련 단계가 처리 단계의 출력을 참조합니다.

```
# Define processing step

from sagemaker.sklearn.processing import SKLearnProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker.workflow.steps import ProcessingStep

sklearn_processor = SKLearnProcessor(
    framework_version='1.2-1',
    role='arn:aws:iam::123456789012:role/SagemakerExecutionRole',
    instance_type='ml.m5.large',
    instance_count='1',
)

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")
]

process_step = ProcessingStep(
    name="MyProcessStep",
    step_args=sklearn_processor.run(inputs=inputs, outputs=outputs,code='preprocessing.py'),
)
```

```
# Define a @step-decorated train step which references the 
# output of a processing step

@step
def train(train_data_path, test_data_path):
    ...
    return trained_model
    
step_train_result = train(
   process_step.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri,
   process_step.properties.ProcessingOutputConfig.Outputs["test"].S3Output.S3Uri,
)
```

## `@step`으로 데코레이션된 단계와 함께 `ConditionStep` 사용
<a name="pipelines-step-decorator-condition"></a>

Pipelines은 파이프라인에서 수행할 작업을 결정하기 위해 이전 단계의 결과를 평가하는 `ConditionStep` 클래스를 지원합니다. `@step`으로 데코레이션된 단계와 함께 `ConditionStep`을 사용할 수도 있습니다. `ConditionStep`으로 데코레이션된 단계와 함께 `@step`을 사용하려면 해당 단계의 출력을 `ConditionStep`에 대한 인수로 입력합니다. 다음 예시에서는 조건 단계가 `@step`으로 데코레이션된 모델 평가 단계의 출력을 수신합니다.

```
# Define steps

@step(name="evaluate")
def evaluate_model():
    # code to evaluate the model
    return {
        "rmse":rmse_value
    }
    
@step(name="register")
def register_model():
    # code to register the model
    ...
```

```
# Define ConditionStep

from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.conditions import ConditionGreaterThanOrEqualTo
from sagemaker.workflow.fail_step import FailStep

conditionally_register = ConditionStep(
    name="conditional_register",
    conditions=[
        ConditionGreaterThanOrEqualTo(
            # Output of the evaluate step must be json serializable
            left=evaluate_model()["rmse"],  # 
            right=5,
        )
    ],
    if_steps=[FailStep(name="Fail", error_message="Model performance is not good enough")],
    else_steps=[register_model()],
)
```

## 단계의 `DelayedReturn` 출력을 사용하여 파이프라인 정의
<a name="pipelines-step-define-delayed"></a>

`@step` 데코레이터 사용 여부와 관계없이 파이프라인을 동일한 방식으로 정의합니다. `DelayedReturn` 인스턴스를 파이프라인에 전달할 때 파이프라인을 빌드하기 위해 전체 단계 목록을 전달할 필요가 없습니다. SDK는 사용자가 정의한 종속성을 기반으로 이전 단계를 자동으로 추론합니다. 파이프라인에 전달한 `Step` 객체 또는 `DelayedReturn` 객체의 이전 단계는 모두 파이프라인 그래프에 포함됩니다. 다음 예시에서는 파이프라인이 `train` 함수에 대한 `DelayedReturn` 객체를 수신합니다. SageMaker AI는 파이프라인 그래프에 `train` 이전 단계로 `preprocess` 단계를 추가합니다.

```
from sagemaker.workflow.pipeline import Pipeline

pipeline = Pipeline(
    name="<pipeline-name>",
    steps=[step_train_result],
    sagemaker_session=<sagemaker-session>,
)
```

단계 간에 데이터 또는 사용자 지정 종속성이 없고 여러 단계를 병렬로 실행하는 경우 파이프라인 그래프에 둘 이상의 리프 노드가 있습니다. 다음 예시와 같이 목록에 있는 이러한 모든 리프 노드를 파이프라인 정의의 `steps` 인수에 전달합니다.

```
@step
def process1():
    ...
    return data
    
@step
def process2():
   ...
   return data
   
step_process1_result = process1()
step_process2_result = process2()

pipeline = Pipeline(
    name="<pipeline-name>",
    steps=[step_process1_result, step_process2_result],
    sagemaker_session=sagemaker-session,
)
```

파이프라인이 실행되면 두 단계가 병렬로 실행됩니다.

리프 노드에는 데이터 또는 사용자 지정 종속성을 통해 정의된 모든 이전 단계에 대한 정보가 포함되어 있으므로 그래프의 리프 노드만 파이프라인에 전달합니다. 파이프라인을 컴파일할 때 SageMaker AI는 파이프라인 그래프를 구성하는 모든 후속 단계를 추론하고 각 단계를 파이프라인에 별도의 단계로 추가합니다.

## 파이프라인 생성
<a name="pipelines-step-decorator-pipeline-create"></a>

다음 코드 조각과 같이 `pipeline.create()`를 직접 호출하여 파이프라인을 만듭니다. `create()`에 대한 자세한 내용은 [sagemaker.workflow.pipeline.Pipeline.create](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.create)를 참조하세요.

```
role = "pipeline-role"
pipeline.create(role)
```

`pipeline.create()`를 직접적으로 호출하면 SageMaker AI는 파이프라인 인스턴스의 일부로 정의된 모든 단계를 컴파일합니다. SageMaker AI는 직렬화된 함수, 인수 및 기타 모든 단계 관련 아티팩트를 Amazon S3에 업로드합니다.

데이터는 다음 구조에 따라 S3 버킷에 상주합니다.

```
s3_root_uri/
    pipeline_name/
        sm_rf_user_ws/
            workspace.zip  # archive of the current working directory (workdir)
        step_name/
            timestamp/
                arguments/                # serialized function arguments
                function/                 # serialized function
                pre_train_dependencies/   # any dependencies and pre_execution scripts provided for the step       
        execution_id/
            step_name/
                results     # returned output from the serialized function including the model
```

`s3_root_uri`는 SageMaker AI 구성 파일에 정의되어 있으며 전체 파이프라인에 적용됩니다. 정의되지 않은 경우 기본 SageMaker AI 버킷이 사용됩니다.

**참고**  
SageMaker AI가 파이프라인을 컴파일할 때마다 SageMaker AI는 타임스탬프가 현재 시간인 폴더에 단계의 직렬화된 함수, 인수 및 종속성을 저장합니다. 이는 `pipeline.create()`, `pipeline.update()`, `pipeline.upsert()` 또는 `pipeline.definition()`을 실행할 때마다 발생합니다.

# 파이프라인 실행
<a name="pipelines-step-decorator-run-pipeline"></a>

아래 페이지에서는 SageMaker AI 리소스를 사용하거나 로컬에서 Amazon SageMaker Pipelines으로 파이프라인을 실행하는 방법을 설명합니다.

기존 SageMaker AI 파이프라인 실행과 마찬가지로 `pipeline.start()` 함수로 새 파이프라인 실행을 시작합니다. `start()` 함수에 대한 자세한 내용은 [sagemaker.workflow.pipeline.Pipeline.start](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.start)를 참조하세요.

**참고**  
`@step` 데코레이터를 사용하여 정의된 단계는 훈련 작업으로 실행됩니다. 따라서 다음 제한 사항을 고려해야 합니다.  
계정의 인스턴스 한도 및 훈련 작업 한도. 스로틀링 또는 리소스 한도 문제를 방지하려면 적절하게 한도를 업데이트합니다.
파이프라인에서 훈련 단계를 실행할 때마다 발생하는 금전적 비용. 자세한 내용은 [Amazon SageMaker 요금](https://aws.amazon.com/sagemaker/pricing/)을 참조하세요.

## 로컬에서 실행되는 파이프라인에서 결과 검색
<a name="pipelines-step-decorator-run-pipeline-retrieve"></a>

파이프라인 실행 단계의 결과를 보려면 다음 코드 조각과 같이 [execution.result()](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline._PipelineExecution.result           )를 사용합니다.

```
execution = pipeline.start()
execution.result(step_name="train")
```

**참고**  
Pipelines은 로컬 모드에서 `execution.result()`를 지원하지 않습니다.

한 번에 한 단계의 결과만 검색할 수 있습니다. 단계 이름이 SageMaker AI에서 생성된 경우 다음과 같이 `list_steps`을 직접적으로 호출하여 단계 이름을 검색할 수 있습니다.

```
execution.list_step()
```

## 로컬에서 파이프라인 실행
<a name="pipelines-step-decorator-run-pipeline-local"></a>

기존 파이프라인 단계와 마찬가지로 로컬에서 `@step`으로 데코레이션된 단계를 사용하여 파이프라인을 실행할 수 있습니다. 로컬 모드 파이프라인 실행에 대한 자세한 내용은 [로컬 모드를 사용하여 파이프라인 실행](pipelines-local-mode.md) 섹션을 참조하세요. 로컬 모드를 사용하려면 다음 예시와 같이 파이프라인 정의에 `SageMakerSession` 대신 `LocalPipelineSession`을 제공합니다.

```
from sagemaker.workflow.function_step import step
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.pipeline_context import LocalPipelineSession

@step
def train():
    training_data = s3.download(....)
    ...
    return trained_model
    
step_train_result = train()

local_pipeline_session = LocalPipelineSession()

local_pipeline = Pipeline(
    name="<pipeline-name>",
    steps=[step_train_result],
    sagemaker_session=local_pipeline_session # needed for local mode
)

local_pipeline.create(role_arn="role_arn")

# pipeline runs locally
execution = local_pipeline.start()
```

# 파이프라인 구성
<a name="pipelines-step-decorator-cfg-pipeline"></a>

SageMaker AI 구성 파일을 사용하여 파이프라인의 기본값을 설정하는 것이 좋습니다. SageMaker AI 구성 파일에 대한 자세한 내용은 [Configuring and using defaults with the SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/overview.html#configuring-and-using-defaults-with-the-sagemaker-python-sdk)를 참조하세요. 구성 파일에 추가된 구성은 파이프라인의 모든 단계에 적용됩니다. 단계에 대한 옵션을 재정의하려면 `@step` 데코레이터 인수에 새 값을 입력합니다. 다음 주제에서는 구성 파일을 설정하는 방법을 설명합니다.

구성 파일의 `@step` 데코레이터 구성은 `@remote` 데코레이터 구성과 동일합니다. 구성 파일에서 파이프라인 역할 ARN 및 파이프라인 태그를 설정하려면 다음 코드 조각에 표시된 `Pipeline` 섹션을 사용합니다.

```
SchemaVersion: '1.0'
SageMaker:
  Pipeline:
    RoleArn: 'arn:aws:iam::555555555555:role/IMRole'
    Tags:
    - Key: 'tag_key'
      Value: 'tag_value'
```

구성 파일에서 설정할 수 있는 대부분의 기본값의 경우 새 값을 `@step` 데코레이터에 전달하여 재정의할 수도 있습니다. 예를 들어 다음 예시와 같이 사전 처리 단계의 구성 파일에 설정된 인스턴스 유형을 재정의할 수 있습니다.

```
@step(instance_type="ml.m5.large")
def preprocess(raw_data):
    df = pandas.read_csv(raw_data)
    ...
    return procesed_dataframe
```

일부 인수는 `@step` 데코레이터 파라미터 목록에 포함되지 않습니다. 이러한 인수는 SageMaker AI 구성 파일을 통해서만 전체 파이프라인에 대해 구성할 수 있습니다. 다음과 같이 나열됩니다.
+ `sagemaker_session`(`sagemaker.session.Session`): SageMaker AI가 서비스 직접 호출을 위임하는 기본 SageMaker AI 세션입니다. 지정되지 않은 경우 다음과 같이 기본 구성을 사용하여 세션이 만들어집니다.

  ```
  SageMaker:
    PythonSDK:
      Modules:
        Session:
          DefaultS3Bucket: 'default_s3_bucket'
          DefaultS3ObjectKeyPrefix: 'key_prefix'
  ```
+ `custom_file_filter`(`CustomFileFilter)`: 파이프라인 단계에 포함할 로컬 디렉터리 및 파일을 지정하는 `CustomFileFilter` 객체입니다. 지정되지 않은 경우 이 값은 기본적으로 `None`으로 설정됩니다. `custom_file_filter`를 적용하려면 `IncludeLocalWorkdir`을 `True`로 설정해야 합니다. 다음 예시는 모든 노트북 파일과 `data`라는 파일 및 디렉터리를 무시하는 구성을 보여줍니다.

  ```
  SchemaVersion: '1.0'
  SageMaker:
    PythonSDK:
      Modules:
        RemoteFunction:
          IncludeLocalWorkDir: true
          CustomFileFilter: 
            IgnoreNamePatterns: # files or directories to ignore
            - "*.ipynb" # all notebook files
            - "data" # folder or file named "data"
  ```

  `IncludeLocalWorkdir`과 `CustomFileFilter`를 함께 사용하는 방법에 대한 자세한 내용은 [@remote 데코레이터와 함께 모듈식 코드 사용하기](train-remote-decorator-modular.md) 섹션을 참조하세요.
+ `s3_root_uri (str)`: SageMaker AI가 코드 아카이브 및 데이터를 업로드하는 루트 Amazon S3 폴더입니다. 지정되지 않은 경우 기본 SageMaker AI 버킷이 사용됩니다.
+ `s3_kms_key (str)`: 입력 및 출력 데이터를 암호화하는 데 사용되는 키입니다. SageMaker AI 구성 파일에서만 이 인수를 구성할 수 있으며 인수는 파이프라인에 정의된 모든 단계에 적용됩니다. 지정되지 않은 경우 값은 기본적으로 `None`으로 설정됩니다. 예시 S3 KMS 키 구성은 다음 코드 조각을 참조하세요.

  ```
  SchemaVersion: '1.0'
  SageMaker:
    PythonSDK:
      Modules:
        RemoteFunction:
          S3KmsKeyId: 's3kmskeyid'
          S3RootUri: 's3://amzn-s3-demo-bucket/my-project
  ```

# 모범 사례
<a name="pipelines-step-decorator-best"></a>

다음 섹션에서는 파이프라인 단계에 `@step` 데코레이터를 사용할 때 따라야 할 모범 사례를 제안합니다.

## 웜 풀 사용
<a name="pipelines-step-decorator-best-warmpool"></a>

더 빠른 파이프라인 단계 실행을 위해 훈련 작업에 제공되는 웜 풀 기능을 사용합니다. 다음 코드 조각에 설명된 대로 `@step` 데코레이터에 `keep_alive_period_in_seconds` 인수를 제공하여 웜 풀 기능을 켤 수 있습니다.

```
@step(
   keep_alive_period_in_seconds=900
)
```

웜 풀에 대한 자세한 정보는 [SageMaker AI 관리형 웜 풀](train-warm-pools.md) 부문을 참조하세요.

## 디렉터리 구조 지정
<a name="pipelines-step-decorator-best-dir"></a>

`@step` 데코레이터를 사용하는 동안 코드 모듈을 사용하는 것이 좋습니다. 단계 함수를 간접 호출하고 파이프라인을 정의하는 `pipeline.py` 모듈을 워크스페이스의 루트에 놓습니다. 권장하는 구조는 다음과 같습니다.

```
.
├── config.yaml # the configuration file that define the infra settings
├── requirements.txt # dependencies
├── pipeline.py  # invoke @step-decorated functions and define the pipeline here
├── steps/
| ├── processing.py
| ├── train.py
├── data/
├── test/
```

# 제한 사항
<a name="pipelines-step-decorator-limit"></a>

아래 섹션에서는 파이프라인 단계에 `@step` 데코레이터를 사용할 때 알아야 할 제한 사항을 간략하게 설명합니다.

## 함수 인수 제한 사항
<a name="pipelines-step-decorator-arg"></a>

입력 인수를 `@step`으로 데코레이션된 함수에 전달하면 다음 제한 사항이 적용됩니다.
+ `DelayedReturn`, `Properties`(다른 유형의 단계 중), `Parameter` 및 `ExecutionVariable` 객체를 `@step`으로 데코레이션된 함수에 인수로 전달할 수 있습니다. 하지만 `@step`으로 데코레이션된 함수는 `JsonGet` 및 `Join` 객체를 인수로 지원하지 않습니다.
+ `@step` 함수에서 파이프라인 변수에 직접 액세스할 수 없습니다. 다음 예시는 오류를 유발합니다.

  ```
  param = ParameterInteger(name="<parameter-name>", default_value=10)
  
  @step
  def func():
      print(param)
  
  func() # this raises a SerializationError
  ```
+ 파이프라인 변수를 다른 객체에 중첩하여 `@step` 함수에 전달할 수 없습니다. 다음 예시는 오류를 유발합니다.

  ```
  param = ParameterInteger(name="<parameter-name>", default_value=10)
  
  @step
  def func(arg):
      print(arg)
  
  func(arg=(param,)) # this raises a SerializationError because param is nested in a tuple
  ```
+ 함수의 입력 및 출력은 직렬화되므로 함수의 입력 또는 출력으로 전달할 수 있는 데이터 유형에 제한이 있습니다. 자세한 내용은 [원격 함수 간접 호출](train-remote-decorator-invocation.md)의 *Data serialization and deserialization* 섹션을 참조하세요. `@step`으로 데코레이션된 함수에도 동일한 제한이 적용됩니다.
+ Boto 클라이언트가 있는 객체는 직렬화할 수 없으므로 `@step`으로 데코레이션된 함수에 입력 또는 출력으로 그러한 객체를 전달할 수 없습니다. 예를 들어 `Estimator`, `Predictor`, `Processor`와 같은 SageMaker Python SDK 클라이언트 클래스는 직렬화할 수 없습니다.

## 함수 가져오기
<a name="pipelines-step-decorator-best-import"></a>

함수 외부가 아닌 내부 단계에서 필요한 라이브러리를 가져와야 합니다. 전역 범위에서 가져오는 경우 함수를 직렬화하는 동안 가져오기 충돌이 발생할 위험이 있습니다. 예를 들어 `sklearn.pipeline.Pipeline`은 `sagemaker.workflow.pipeline.Pipeline`으로 재정의될 수 있습니다.

## 함수 반환 값의 하위 멤버 참조
<a name="pipelines-step-decorator-best-child"></a>

`@step`으로 데코레이션된 함수의 반환 값의 하위 멤버를 참조하는 경우 다음 제한 사항이 적용됩니다.
+ 다음 예시와 같이 `DelayedReturn` 객체가 튜플, 목록 또는 딕셔너리를 나타내는 경우 `[]`로 하위 멤버를 참조할 수 있습니다.

  ```
  delayed_return[0]
  delayed_return["a_key"]
  delayed_return[1]["a_key"]
  ```
+ 함수를 간접 호출할 때 기본 튜플 또는 목록의 정확한 길이를 알 수 없으므로 튜플 또는 목록 출력을 압축 해제할 수 없습니다. 다음 예시는 오류를 유발합니다.

  ```
  a, b, c = func() # this raises ValueError
  ```
+ `DelayedReturn` 객체에 대해 반복할 수 없습니다. 다음 예시는 오류를 유발합니다.

  ```
  for item in func(): # this raises a NotImplementedError
  ```
+ '`.`'로 임의의 하위 멤버를 참조할 수 없습니다. 다음 예시는 오류를 유발합니다.

  ```
  delayed_return.a_child # raises AttributeError
  ```

## 지원되지 않는 기존 파이프라인 기능
<a name="pipelines-step-decorator-best-unsupported"></a>

다음 파이프라인 기능과 함께 `@step` 데코레이터를 사용할 수 없습니다.
+ [파이프라인 단계 캐싱](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-caching.html)
+ [속성 파일](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-propertyfile.html#build-and-manage-propertyfile-property)

# 단계 간 데이터 전달
<a name="build-and-manage-propertyfile"></a>

Amazon SageMaker Pipelines을 사용하여 파이프라인을 구축할 때 한 단계에서 다음 단계로 데이터를 전달해야 할 수 있습니다. 예를 들어 훈련 단계에서 생성된 모델 아티팩트를 모델 평가 또는 배포 단계에 대한 입력으로 사용할 수 있습니다. 이 기능을 사용하여 상호 의존적 파이프라인 단계를 만들고 ML 워크플로를 구축할 수 있습니다.

파이프라인 단계의 출력에서 정보를 검색해야 하는 경우 `JsonGet`을 사용할 수 있습니다. `JsonGet`은 Amazon S3 또는 속성 파일에서 정보를 추출하는 데 도움이 됩니다. 아래 섹션에서는 `JsonGet`으로 단계 출력을 추출하는 데 사용할 수 있는 방법을 설명합니다.

## Amazon S3를 사용하여 단계 간에 데이터 전달
<a name="build-and-manage-propertyfile-s3"></a>

`ConditionStep`에서 `JsonGet`을 사용하여 Amazon S3에서 JSON 출력을 직접 가져올 수 있습니다. Amazon S3 URI는 기본 문자열, 파이프라인 실행 변수 또는 파이프라인 파라미터를 포함하는 `Std:Join` 함수일 수 있습니다. 다음은 `ConditionStep`에서 `JsonGet`을 사용하는 방법을 나타낸 예시입니다.

```
# Example json file in s3 bucket generated by a processing_step
{
   "Output": [5, 10]
}

cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name="<step-name>",
        s3_uri="<s3-path-to-json>",
        json_path="Output[1]"
    ),
    right=6.0
)
```

조건 단계에서 Amazon S3 경로와 함께 `JsonGet`을 사용하는 경우 조건 단계와 JSON 출력을 생성하는 단계 간에 종속성을 명시적으로 추가해야 합니다. 다음 예시에서는 처리 단계에 따라 조건 단계가 만들어집니다.

```
cond_step = ConditionStep(
        name="<step-name>",
        conditions=[cond_lte],
        if_steps=[fail_step],
        else_steps=[register_model_step],
        depends_on=[processing_step],
)
```

## 속성 파일을 사용하여 단계 간에 데이터 전달
<a name="build-and-manage-propertyfile-property"></a>

속성 파일을 사용하여 처리 단계 출력의 정보를 저장합니다. 이는 처리 단계의 결과를 분석하여 조건부 단계의 실행 방법을 결정할 때 특히 유용합니다. `JsonGet` 함수는 속성 파일을 처리하고 JSONPath 표기법을 사용하여 속성 JSON 파일을 쿼리할 수 있도록 합니다. JSONPath 표기법에 대한 자세한 내용은 [JSONPath 리포지토리](https://github.com/json-path/JsonPath)를 참조하세요.

나중에 사용할 수 있도록 속성 파일을 저장하려면 먼저 다음 형식의 `PropertyFile`인스턴스를 만들어야 합니다. `path` 파라미터는 속성 파일이 저장되는 JSON 파일의 이름입니다. 모든 `output_name`은 처리 단계에서 정의한 `ProcessingOutput`의 `output_name`과 일치해야 합니다. 이렇게 하면 속성 파일이 단계에서 `ProcessingOutput`을 캡처할 수 있습니다.

```
from sagemaker.workflow.properties import PropertyFile

<property_file_instance> = PropertyFile(
    name="<property_file_name>",
    output_name="<processingoutput_output_name>",
    path="<path_to_json_file>"
)
```

`ProcessingStep` 인스턴스를 만들 때 Amazon SageMaker Pipelines 서비스가 인덱싱해야 하는 모든 파라미터 파일을 나열하는 `property_files` 파라미터를 추가합니다. 이렇게 하면 나중에 사용할 수 있도록 속성 파일이 저장됩니다.

```
property_files=[<property_file_instance>]
```

조건 단계에서 속성 파일을 사용하려면 다음 예제와 같이 조건 단계에 전달하는 조건에 `property_file`을 추가하고 `json_path`파라미터를 사용하여 원하는 속성에 대한 JSON 파일을 쿼리합니다.

```
cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name=step_eval.name,
        property_file=<property_file_instance>,
        json_path="mse"
    ),
    right=6.0
)
```

자세한 예제는 [Amazon SageMaker Python SDK의](https://sagemaker.readthedocs.io/en/stable) [속성 파일](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#property-file)을 참조하세요.**

# 파이프라인 캐싱 단계
<a name="pipelines-caching"></a>

Amazon SageMaker Pipelines에서 단계 캐싱을 사용하여 파이프라인을 다시 실행할 때 시간과 리소스를 절약할 수 있습니다. 단계 캐싱은 단계의 구성과 입력이 동일할 때 (재컴퓨팅 대신) 이전에 성공한 단계 실행의 출력을 재사용합니다. 이를 통해 동일한 파라미터로 파이프라인 재실행 전반에서 일관된 결과를 얻을 수 있습니다. 다음 주제에서는 파이프라인에 대한 단계 캐싱을 구성하고 활성화하는 방법을 보여줍니다.

단계 서명 캐싱을 사용하는 경우 Pipelines은 특정 속성에 대해 값이 동일한 현재 파이프라인 단계의 이전 실행을 찾으려고 합니다. 발견된 경우 Pipelines은 단계를 다시 계산하는 대신 이전 실행의 출력을 전파합니다. 검사된 속성은 단계 유형별로 다르며 [파이프라인 단계 유형별 기본 캐시 키 속성](pipelines-default-keys.md)에 나열되어 있습니다.

단계 캐싱은 기본적으로 해제되어 있으므로 반드시 옵트인해야 합니다. 단계 캐싱을 활성화할 때는 제한 시간도 정의해야 합니다. 이 제한 시간은 이전 실행이 재사용 대상으로 남아 있을 수 있는 기간을 정의합니다.

단계 캐싱은 성공한 실행만 고려하며 실패한 실행은 재사용하지 않습니다. 제한 시간 내에 여러 번 성공적으로 실행한 경우 Pipelines은 가장 최근에 성공한 실행의 결과를 사용합니다. 제한 시간 내에 일치하는 성공 실행이 없는 경우 Pipelines은 단계를 재실행합니다. 실행기가 조건을 충족하지만 아직 진행 중인 이전 실행을 찾은 경우 두 단계 모두 계속 실행되고 성공하면 캐시를 업데이트합니다.

단계 캐싱은 개별 파이프라인에서만 범위가 지정되므로 단계 서명이 일치하더라도 다른 파이프라인의 단계를 재사용할 수 없습니다.

단계 캐싱은 다음 단계 유형에 사용할 수 있습니다.
+ [처리](build-and-manage-steps-types.md#step-type-processing)
+ [학습](build-and-manage-steps-types.md#step-type-training)
+ [튜닝](build-and-manage-steps-types.md#step-type-tuning)
+ [AutoML](build-and-manage-steps-types.md#step-type-automl)
+ [변환](build-and-manage-steps-types.md#step-type-transform)
+ [`ClarifyCheck`](build-and-manage-steps-types.md#step-type-clarify-check)
+ [`QualityCheck`](build-and-manage-steps-types.md#step-type-quality-check)
+ [EMR](build-and-manage-steps-types.md#step-type-emr)

**Topics**
+ [단계 캐싱을 활성화합니다.](pipelines-caching-enabling.md)
+ [단계 캐싱 비활성화](pipelines-caching-disabling.md)
+ [파이프라인 단계 유형별 기본 캐시 키 속성](pipelines-default-keys.md)
+ [캐시된 데이터 액세스 제어](pipelines-access-control.md)

# 단계 캐싱을 활성화합니다.
<a name="pipelines-caching-enabling"></a>

단계 캐싱을 켜려면 단계 정의에 `CacheConfig` 속성을 추가해야 합니다. `CacheConfig` 속성은 파이프라인 정의 파일에서 다음 형식을 사용합니다.

```
{
    "CacheConfig": {
        "Enabled": false,
        "ExpireAfter": "<time>"
    }
}
```

이 `Enabled`필드는 특정 단계에서 캐싱이 켜져 있는지 여부를 나타냅니다. 필드를 `true`로 설정하면 SageMaker AI가 동일한 속성을 가진 이전 단계 실행을 찾으려고 시도하도록 지시할 수 있습니다. 또는 필드를 `false`로 설정하여 파이프라인이 실행될 때마다 SageMaker AI가 단계를 실행하도록 지시할 수 있습니다. `ExpireAfter`는 제한 기간을 정의하는 [ISO 8601 기간](https://en.wikipedia.org/wiki/ISO_8601#Durations) 형식의 문자열입니다. `ExpireAfter` 기간은 년, 월, 주, 일, 시간 또는 분 값일 수 있습니다. 각 값은 숫자 다음에 기간 단위를 나타내는 문자로 구성됩니다. 예제:
+ "30d" = 30일
+ "5y" = 5년
+ "T16m" = 16분
+ "30dT5h" = 30일 5시간.

다음 설명에서는 Amazon SageMaker Python SDK를 사용하여 새 파이프라인 또는 기존 파이프라인에 대한 캐싱을 활성화하는 절차를 설명합니다.

**새 파이프라인 캐싱 활성화**

새 파이프라인의 경우 `enable_caching=True`를 사용하여 `CacheConfig`인스턴스를 초기화하고 이를 파이프라인 단계의 입력으로 제공합니다. 다음 예시에서는 훈련 단계에 1시간의 제한 시간을 두고 캐싱을 활성화합니다.

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.workflow.steps import CacheConfig
      
cache_config = CacheConfig(enable_caching=True, expire_after="PT1H")
estimator = Estimator(..., sagemaker_session=PipelineSession())

step_train = TrainingStep(
    name="TrainAbaloneModel",
    step_args=estimator.fit(inputs=inputs),
    cache_config=cache_config
)
```

**기존 파이프라인 캐싱 활성화**

사전 정의된 기존 파이프라인의 캐싱을 활성화려면 해당 단계의 `enable_caching`속성을 켜고 `expire_after`를 시간 제한 값으로 설정합니다. 마지막으로 `pipeline.upsert()`또는 `pipeline.update()`를 사용하여 파이프라인을 업데이트합니다. 다시 실행하면 다음 코드 예제가 훈련 단계에 대해 1시간의 제한 시간을 두고 캐싱을 활성화합니다.

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.workflow.steps import CacheConfig
from sagemaker.workflow.pipeline import Pipeline

cache_config = CacheConfig(enable_caching=True, expire_after="PT1H")
estimator = Estimator(..., sagemaker_session=PipelineSession())

step_train = TrainingStep(
    name="TrainAbaloneModel",
    step_args=estimator.fit(inputs=inputs),
    cache_config=cache_config
)

# define pipeline
pipeline = Pipeline(
    steps=[step_train]
)

# additional step for existing pipelines
pipeline.update()
# or, call upsert() to update the pipeline
# pipeline.upsert()
```

또는 (기존) 파이프라인을 이미 정의한 후 캐시 구성을 업데이트하여 한 번의 연속 코드 실행을 허용합니다. 다음 코드 샘플은 이 방법을 보여줍니다.

```
# turn on caching with timeout period of one hour
pipeline.steps[0].cache_config.enable_caching = True 
pipeline.steps[0].cache_config.expire_after = "PT1H" 

# additional step for existing pipelines
pipeline.update()
# or, call upsert() to update the pipeline
# pipeline.upsert()
```

Python SDK 파라미터가 캐싱에 미치는 영향에 대한 자세한 코드 예제와 설명은 Amazon SageMaker Python SDK 설명서의 [캐싱 구성](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)을 참조하세요.

# 단계 캐싱 비활성화
<a name="pipelines-caching-disabling"></a>

단계 유형 [파이프라인 단계 유형별 기본 캐시 키 속성](pipelines-default-keys.md)에 나열되지 않은 속성을 변경해도 파이프라인 단계는 재실행되지 않습니다. 하지만 어쨌든 파이프라인 단계를 다시 실행하기로 결정할 수도 있습니다. 이 경우 단계 캐싱을 비활성화해야 합니다.

단계 캐싱을 비활성화하려면 다음 코드 스니펫과 같이 단계 정의의 `CacheConfig`단계 정의 속성에 있는 `Enabled`속성을 `false`로 설정합니다.

```
{
    "CacheConfig": {
        "Enabled": false,
        "ExpireAfter": "<time>"
    }
}
```

참고로, `Enabled`가 `false`인 경우 `ExpireAfter`속성은 무시됩니다.

Amazon SageMaker Python SDK를 사용하여 파이프라인 단계의 캐싱을 해제하려면 파이프라인 단계의 파이프라인을 정의하고 `enable_caching`속성을 비활성화한 다음 파이프라인을 업데이트하세요.

다시 실행하면 다음 코드 예제가 훈련 단계에 대한 캐싱을 해제합니다.

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.workflow.steps import CacheConfig
from sagemaker.workflow.pipeline import Pipeline

cache_config = CacheConfig(enable_caching=False, expire_after="PT1H")
estimator = Estimator(..., sagemaker_session=PipelineSession())

step_train = TrainingStep(
    name="TrainAbaloneModel",
    step_args=estimator.fit(inputs=inputs),
    cache_config=cache_config
)

# define pipeline
pipeline = Pipeline(
    steps=[step_train]
)

# update the pipeline
pipeline.update()
# or, call upsert() to update the pipeline
# pipeline.upsert()
```

또는 파이프라인을 이미 정의한 후 `enable_caching`속성을 비활성화하면 한 번의 연속 코드 실행이 가능합니다. 다음 코드 샘플은 이 방법을 보여줍니다.

```
# turn off caching for the training step
pipeline.steps[0].cache_config.enable_caching = False

# update the pipeline
pipeline.update()
# or, call upsert() to update the pipeline
# pipeline.upsert()
```

Python SDK 파라미터가 캐싱에 미치는 영향에 대한 자세한 코드 예제와 설명은 Amazon SageMaker Python SDK 설명서의 [캐싱 구성](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)을 참조하세요.

# 파이프라인 단계 유형별 기본 캐시 키 속성
<a name="pipelines-default-keys"></a>

이전 파이프라인 단계를 재사용할지 또는 단계를 다시 실행할지 결정할 때 Pipelines은 특정 속성이 변경되었는지 확인합니다. 속성 세트가 제한 시간 내에 이전의 모든 실행과 다른 경우 단계가 다시 실행됩니다. 이러한 속성에는 입력 아티팩트, 앱 또는 알고리즘 사양, 환경 변수가 포함됩니다. 다음 목록은 각 파이프라인 단계 유형과 변경될 경우 단계 재실행을 시작하는 속성을 보여줍니다. 다음 속성을 생성하는 데 사용되는 Python SDK 파라미터에 대한 자세한 내용은 Amazon SageMaker Python SDK 설명서의 [캐싱 구성](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)을 참조하세요.

## [처리 단계](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)
<a name="collapsible-caching-section-1"></a>
+ AppSpecification
+ 환경
+ ProcessingInputs. 이 속성에는 사전 처리 스크립트에 대한 정보가 포함되어 있습니다.

  

## [훈련 단계](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)
<a name="collapsible-caching-section-2"></a>
+ AlgorithmSpecification
+ CheckpointConfig
+ DebugHookConfig
+ DebugRuleConfigurations
+ 환경
+ HyperParameters
+ InputDataConfig. 이 속성에는 훈련 스크립트에 대한 정보가 포함되어 있습니다.

  

## [튜닝 단계](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html)
<a name="collapsible-caching-section-3"></a>
+ HyperParameterTuningJobConfig
+ TrainingJobDefinition. 이 속성은 여러 하위 속성으로 구성되며, 이로 인해 단계가 다시 실행되지는 않습니다. 재실행이 발생할 수 있는 하위 속성(변경된 경우)은 다음과 같습니다.
  + AlgorithmSpecification
  + HyperParameterRanges
  + InputDataConfig
  + StaticHyperParameters
  + TuningObjective
+ TrainingJobDefinitions

  

## [AutoML 단계](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobConfig.html)
<a name="collapsible-caching-section-4"></a>
+ AutoMLJobConfig. 이 속성은 여러 하위 속성으로 구성되며, 이로 인해 단계가 다시 실행되지는 않습니다. 재실행이 발생할 수 있는 하위 속성(변경된 경우)은 다음과 같습니다.
  + CompletionCriteria
  + CandidateGenerationConfig
  + DataSplitConfig
  + Mode
+ AutoMLJobObjective
+ InputDataConfig
+ ProblemType

  

## [변환 단계](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)
<a name="collapsible-caching-section-5"></a>
+ DataProcessing
+ 환경
+ ModelName
+ TransformInput

  

## [ClarifyCheck 단계](build-and-manage-steps-types.md#step-type-clarify-check)
<a name="collapsible-caching-section-6"></a>
+ ClarifyCheckConfig
+ CheckJobConfig
+ SkipCheck
+ RegisterNewBaseline
+ ModelPackageGroupName
+ SuppliedBaselineConstraints

  

## [QualityCheck 단계](build-and-manage-steps-types.md#step-type-quality-check)
<a name="collapsible-caching-section-7"></a>
+ QualityCheckConfig
+ CheckJobConfig
+ SkipCheck
+ RegisterNewBaseline
+ ModelPackageGroupName
+ SuppliedBaselineConstraints
+ SuppliedBaselineStatistics

  

## [EMR 단계](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-emr)
<a name="collapsible-caching-section-8"></a>
+ ClusterId
+ StepConfig

  

# 캐시된 데이터 액세스 제어
<a name="pipelines-access-control"></a>

SageMaker AI 파이프라인이 실행되면 파이프라인에서 시작한 SageMaker AI 작업과 관련된 파라미터 및 메타데이터를 캐시하고 후속 실행에서 재사용할 수 있도록 저장합니다. 이 메타데이터는 캐시된 파이프라인 단계 외에도 다양한 소스를 통해 접근할 수 있으며 다음과 같은 유형을 포함합니다.
+ `Describe*Job` 요청
+ CloudWatch Logs
+ CloudWatch Events
+ CloudWatch 지표
+ SageMaker AI 검색

목록에 있는 각 데이터 원본에 대한 접근은 고유한 IAM 권한 세트에 의해 제어된다는 점에 유의하세요. 한 데이터 소스에 대한 특정 역할의 액세스 권한을 제거해도 다른 데이터 소스에 대한 액세스 수준에는 영향을 주지 않습니다. 예를 들어 계정 관리자는 호출자 역할에서 `Describe*Job`요청에 대한 IAM 권한을 제거할 수 있습니다. 호출자는 더 이상 `Describe*Job`요청을 할 수 없지만, 파이프라인을 실행할 권한이 있으면 캐시된 단계가 있는 파이프라인 실행에서 메타데이터를 검색할 수 있습니다. 계정 관리자가 특정 SageMaker AI 작업의 메타데이터에 대한 접근 권한을 완전히 제거하려는 경우 데이터에 대한 액세스를 제공하는 관련 서비스 각각에 대한 권한을 제거해야 합니다.

# 파이프라인 단계에 대한 재시도 정책
<a name="pipelines-retry-policy"></a>

재시도 정책은 오류가 발생한 후 Pipelines 단계를 자동으로 재시도하는 데 도움이 됩니다. 모든 파이프라인 단계에서 예외가 발생할 수 있으며 다양한 이유로 예외가 발생합니다. 경우에 따라 재시도를 통해 이러한 문제를 해결할 수 있습니다. 파이프라인 단계에 대한 재시도 정책을 사용하여 특정 파이프라인 단계를 재시도할지 여부를 선택할 수 있습니다.

재시도 정책은 다음 파이프라인 단계만 지원합니다.
+ [처리 단계](build-and-manage-steps-types.md#step-type-processing) 
+ [훈련 단계](build-and-manage-steps-types.md#step-type-training) 
+ [튜닝 단계](build-and-manage-steps-types.md#step-type-tuning) 
+ [AutoML 단계](build-and-manage-steps-types.md#step-type-automl) 
+ [모델 만들기 단계](build-and-manage-steps-types.md#step-type-create-model) 
+ [모델 등록 단계](build-and-manage-steps-types.md#step-type-register-model) 
+ [변환 단계](build-and-manage-steps-types.md#step-type-transform) 
+ [노트북 작업 단계](build-and-manage-steps-types.md#step-type-notebook-job) 

**참고**  
조정 단계와 AutoML 단계 모두에서 실행 중인 작업은 내부적으로 재시도를 수행하며 재시도 정책이 구성되어 있더라도 `SageMaker.JOB_INTERNAL_ERROR`예외 유형을 재시도하지 않습니다. SageMaker API를 사용하여 자체 [재시도 전략](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RetryStrategy.html)을 프로그래밍할 수 있습니다.

## 재시도 정책에 지원되는 예외 유형
<a name="pipelines-retry-policy-supported-exceptions"></a>

파이프라인 단계에 대한 재시도 정책은 다음과 같은 예외 유형을 지원합니다.
+ `Step.SERVICE_FAULT`: 이러한 예외는 다운스트림 서비스를 호출할 때 내부 서버 오류나 일시적 오류가 발생할 때 발생합니다. Pipelines은 이 유형의 오류를 자동으로 재시도합니다. 재시도 정책을 사용하면 이 예외 유형에 대한 기본 재시도 작업을 재정의할 수 있습니다.
+ `Step.THROTTLING`: 다운스트림 서비스를 호출하는 동안 제한 예외가 발생할 수 있습니다. Pipelines은 이 유형의 오류를 자동으로 재시도합니다. 재시도 정책을 사용하면 이 예외 유형에 대한 기본 재시도 작업을 재정의할 수 있습니다.
+ `SageMaker.JOB_INTERNAL_ERROR`: 이러한 예외는 SageMaker AI 작업이 `InternalServerError`를 반환할 때 발생합니다. 이 경우 새 작업을 시작하면 일시적인 문제가 해결될 수 있습니다.
+ `SageMaker.CAPACITY_ERROR`: SageMaker AI 작업에서 Amazon EC2 `InsufficientCapacityErrors`와 충돌하여 SageMaker AI 작업이 실패할 수 있습니다. 문제를 방지하려면 새 SageMaker AI 작업을 시작하여 다시 시도할 수 있습니다.
+ `SageMaker.RESOURCE_LIMIT`: SageMaker AI 작업을 실행할 때 리소스 제한 할당량을 초과할 수 있습니다. 잠시 기다린 후 SageMaker AI 작업을 다시 실행하여 리소스가 릴리스되었는지 확인할 수 있습니다.

## 재시도 정책의 JSON 스키마
<a name="pipelines-retry-policy-json-schema"></a>

파이프라인의 재시도 정책에는 다음과 같은 JSON 스키마가 있습니다.

```
"RetryPolicy": {
   "ExceptionType": [String]
   "IntervalSeconds": Integer
   "BackoffRate": Double
   "MaxAttempts": Integer
   "ExpireAfterMin": Integer
}
```
+ `ExceptionType`: 이 필드에는 문자열 배열 형식의 다음과 같은 예외 유형이 필요합니다.
  + `Step.SERVICE_FAULT`
  + `Step.THROTTLING`
  + `SageMaker.JOB_INTERNAL_ERROR`
  + `SageMaker.CAPACITY_ERROR`
  + `SageMaker.RESOURCE_LIMIT`
+ `IntervalSeconds`(선택 사항): 첫 번째 재시도 이전의 시간(초)(기본값: 1). `IntervalSeconds`의 최댓값은 43200초(12시간)입니다.
+ `BackoffRate`(선택 사항): 각 시도때마다 재시도 간격이 늘어나도록 정한 곱하기 배수입니다(기본값 2.0).
+ `MaxAttempts`(선택 사항): 최대 재시도 횟수를 나타내는 양의 정수입니다(기본값 5). 지정된 횟수 `MaxAttempts`보다 많이 오류가 발생하는 경우 재시도가 중지되고 일반 오류 처리가 다시 시작됩니다. 값이 0이면 오류가 다시 시도되지 않습니다. `MaxAttempts`의 최대값은 20입니다.
+ `ExpireAfterMin`(선택 사항): 최대 재시도 시간을 나타내는 양의 정수입니다. 단계부터 `ExpireAfterMin`분 단위 계산을 실행한 후 오류가 다시 발생하면 재시도가 중단되고 일반 오류 처리가 다시 시작됩니다. 값이 0이면 오류가 다시 시도되지 않습니다. `ExpireAfterMin `의 최대값은 14,400분 (10일)입니다.
**참고**  
`MaxAttempts` 또는 `ExpireAfterMin`둘 중 하나만 지정할 수 있으며 둘 다 지정할 수는 없습니다. 둘 다 지정하지 않으면 기본값은 `MaxAttempts`입니다.** 한 정책 내에서 두 속성이 모두 식별되는 경우 재시도 정책에서 검증 오류가 발생합니다.

# 재시도 정책 구성
<a name="pipelines-configuring-retry-policy"></a>

SageMaker Pipelines은 기계 학습 워크플로를 오케스트레이션하는 강력하고 자동화된 방법을 제공하지만 실행 시 오류가 발생할 수 있습니다. 이러한 시나리오를 원활하게 처리하고 파이프라인의 신뢰성을 높이려면 예외가 발생한 후 특정 단계를 자동으로 재시도하는 방법과 시기를 정의하는 재시도 정책을 구성할 수 있습니다. 재시도 정책을 사용하면 재시도할 예외 유형, 최대 재시도 횟수, 재시도 간격 및 재시도 간격을 늘리기 위한 백오프 속도를 지정할 수 있습니다. 다음 섹션에서는 JSON 및 SageMaker Python SDK를 사용하여 파이프라인의 훈련 단계에 대한 재시도 정책을 구성하는 방법의 예를 제공합니다.

다음은 재시도 정책이 포함된 훈련 단계의 예제입니다.

```
{
    "Steps": [
        {
            "Name": "MyTrainingStep",
            "Type": "Training",
            "RetryPolicies": [
                {
                    "ExceptionType": [
                        "SageMaker.JOB_INTERNAL_ERROR",
                        "SageMaker.CAPACITY_ERROR"
                    ],
                    "IntervalSeconds": 1,
                    "BackoffRate": 2,
                    "MaxAttempts": 5
                }
            ]
        }
    ]
}
```



다음은 재시도 정책을 사용하여 Python용 SDK (Boto3)에서 `TrainingStep`을 빌드하는 방법의 예제입니다.

```
from sagemaker.workflow.retry import (
    StepRetryPolicy, 
    StepExceptionTypeEnum,
    SageMakerJobExceptionTypeEnum,
    SageMakerJobStepRetryPolicy
)

step_train = TrainingStep(
    name="MyTrainingStep",
    xxx,
    retry_policies=[
        // override the default 
        StepRetryPolicy(
            exception_types=[
                StepExceptionTypeEnum.SERVICE_FAULT, 
                StepExceptionTypeEnum.THROTTLING
            ],
            expire_after_mins=5,
            interval_seconds=10,
            backoff_rate=2.0 
        ),
        // retry when resource limit quota gets exceeded
        SageMakerJobStepRetryPolicy(
            exception_types=[SageMakerJobExceptionTypeEnum.RESOURCE_LIMIT],
            expire_after_mins=120,
            interval_seconds=60,
            backoff_rate=2.0
        ),
        // retry when job failed due to transient error or EC2 ICE.
        SageMakerJobStepRetryPolicy(
            failure_reason_types=[
                SageMakerJobExceptionTypeEnum.INTERNAL_ERROR,
                SageMakerJobExceptionTypeEnum.CAPACITY_ERROR,
            ],
            max_attempts=10,
            interval_seconds=30,
            backoff_rate=2.0
        )
    ]
)
```

특정 단계 유형에 대한 재시도 동작을 구성하는 방법에 대한 자세한 내용은 Amazon SageMaker Python SDK 설명서에서 *[Amazon SageMaker Pipelines - Retry Policy](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#retry-policy)*을 참조하세요.

# 파이프라인 단계의 선택적 실행
<a name="pipelines-selective-ex"></a>

Pipelines을 사용하여 워크플로를 만들고 ML 훈련 단계를 조율할 때 여러 실험 단계를 수행해야 할 수 있습니다. 매번 전체 파이프라인을 실행하는 대신 특정 단계만 반복하면 됩니다. Pipelines을 사용하면 파이프라인 단계를 선택적으로 실행할 수 있습니다. 이렇게 하면 ML 훈련을 최적화하는 데 도움이 됩니다. 선택적 실행은 다음 시나리오에서 유용합니다.
+ 업스트림 단계의 파라미터를 유지하면서 업데이트된 인스턴스 유형, 하이퍼파라미터 또는 기타 변수를 사용하여 특정 단계를 다시 시작하려고 합니다.
+ 파이프라인이 중간 단계에서 실패합니다. 데이터 준비 또는 특징 추출과 같은 이전 실행 단계는 다시 실행하는 데 비용이 많이 듭니다. 파이프라인을 완료하려면 수정 사항을 적용하고 특정 단계를 수동으로 다시 실행해야 할 수 있습니다.

선택적 실행을 사용하면 파이프라인의 방향성 비순환 그래프(DAG)에 연결되어 있는 한 일부 단계를 실행하도록 선택할 수 있습니다. 다음 DAG는 예제 파이프라인 워크플로를 보여줍니다.

![\[예제 파이프라인의 방향성 비순환 그래프(DAG) 입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipeline-full.png)


선택적 실행에서는 `AbaloneTrain` 단계와 `AbaloneEval` 단계를 선택할 수 있지만 DAG에서 `AbaloneTrain`, `AbaloneMSECond` 단계가 연결되어 있지 않기 때문에 이 단계만 선택할 수는 없습니다. 워크플로에서 선택되지 않은 단계의 경우 선택적 실행은 단계를 다시 실행하는 대신 참조 파이프라인 실행의 출력을 재사용합니다. 또한 선택한 단계의 다운스트림에 있는 선택되지 않은 단계는 선택적 실행에서 실행되지 않습니다.

파이프라인에서 중간 단계 중 일부를 실행하도록 선택하면 단계가 이전 단계에 종속될 수 있습니다. SageMaker AI는 이러한 종속성을 리소싱할 참조 파이프라인 실행이 필요합니다. 예를 들어, `AbaloneTrain` 및 `AbaloneEval` 단계를 실행하도록 선택한 경우 `AbaloneProcess` 단계에 대한 출력이 필요합니다. 참조 실행 ARN을 제공하거나 SageMaker AI가 기본 동작인 최신 파이프라인 실행을 사용하도록 지시할 수 있습니다. 참조 실행이 있는 경우 참조 실행에서 런타임 파라미터를 빌드하여 재정의와 함께 선택적 실행에 제공할 수도 있습니다. 자세한 내용은 [참조 실행의 런타임 파라미터 값을 재사용합니다.](#pipelines-selective-ex-reuse)을 참조하세요.

세부 사항으로는 `SelectiveExecutionConfig`를 사용하여 선택적 실행 파이프라인 실행을 위한 구성을 제공합니다. 참조 파이프라인 실행(`source_pipeline_execution_arn` 인수 포함)에 대해 ARN을 포함하는 경우 SageMaker AI는 제공한 파이프라인 실행의 이전 단계 종속성을 사용합니다. ARN을 포함하지 않고 최신 파이프라인 실행이 존재하는 경우 SageMaker AI는 기본적으로 최신 파이프라인 실행을 참조로 사용합니다. ARN을 포함하지 않고 SageMaker AI가 최신 파이프라인 실행을 사용하지 않도록 하려면 `reference_latest_execution`을 `False`로 설정하세요. SageMaker AI가 최종적으로 참조로 사용하는 파이프라인 실행(최신 또는 사용자 지정 파이프라인)은 `Success` 또는 `Failed` 상태여야 합니다.

다음 표에는 SageMaker AI가 참조 실행을 선택하는 방법이 요약되어 있습니다.


| `source_pipeline_execution_arn` 인수 값 | `reference_latest_execution` 인수 값 | 사용된 참조 실행 | 
| --- | --- | --- | 
| 파이프라인 ARN | `True` 또는 지정되지 않음 | 지정된 파이프라인 ARN | 
| 파이프라인 ARN | `False` | 지정된 파이프라인 ARN | 
| null 또는 지정되지 않음 | `True` 또는 지정되지 않음 | 최신 파이프라인 실행 | 
| null 또는 지정되지 않음 | `False` | 없음 - 이 경우 업스트림 종속성이 없는 단계를 선택하세요. | 

선택적 실행 구성 요구 사항에 대한 자세한 내용은 [Sagemaker.workflow.Selective\$1Execution\$1config.SelectiveExecutionConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#selective-execution-config) 설명서를 참조하세요.

다음 설명에는 파이프라인 참조 실행을 지정하거나, 최신 파이프라인 실행을 참조로 사용하거나, 참조 파이프라인 실행 없이 선택적 실행을 실행하려는 경우의 예제가 포함되어 있습니다.

## 사용자 지정 파이프라인 참조를 사용한 선택적 실행
<a name="pipelines-selective-ex-arn"></a>

다음 예시는 참조 파이프라인 실행을 사용한 `AbaloneTrain` 단계와 `AbaloneEval` 단계의 선택적 실행을 보여줍니다.

```
from sagemaker.workflow.selective_execution_config import SelectiveExecutionConfig

selective_execution_config = SelectiveExecutionConfig(
    source_pipeline_execution_arn="arn:aws:sagemaker:us-west-2:123123123123:pipeline/abalone/execution/123ab12cd3ef", 
    selected_steps=["AbaloneTrain", "AbaloneEval"]
)

selective_execution = pipeline.start(
    execution_display_name=f"Sample-Selective-Execution-1",
    parameters={"MaxDepth":6, "NumRound":60},
    selective_execution_config=selective_execution_config,
)
```

## 최신 파이프라인 실행을 참조로 사용한 선택적 실행
<a name="pipelines-selective-ex-latest"></a>

다음 예시는 최신 파이프라인 실행을 참조로 사용한 `AbaloneTrain` 단계와 `AbaloneEval` 단계의 선택적 실행을 보여줍니다. SageMaker AI는 기본적으로 최신 파이프라인 실행을 사용하므로 선택적으로 `reference_latest_execution` 인수를 `True`로 설정할 수 있습니다.

```
# Prepare a new selective execution. Select only the first step in the pipeline without providing source_pipeline_execution_arn.
selective_execution_config = SelectiveExecutionConfig(
    selected_steps=["AbaloneTrain", "AbaloneEval"],
    # optional
    reference_latest_execution=True
)

# Start pipeline execution without source_pipeline_execution_arn
pipeline.start(
    execution_display_name=f"Sample-Selective-Execution-1",
    parameters={"MaxDepth":6, "NumRound":60},
    selective_execution_config=selective_execution_config,
)
```

## 참조 파이프라인 없이 선택적 실행
<a name="pipelines-selective-ex-none"></a>

다음 예시는 참조 ARN을 제공하지 않고 최신 파이프라인 실행을 참조로 사용하는 옵션을 끈 상태에서 `AbaloneProcess` 단계와 `AbaloneTrain` 단계의 선택적 실행을 보여줍니다. SageMaker AI는 이 단계 하위 집합이 이전 단계에 종속되지 않으므로 이 구성을 허용합니다.

```
# Prepare a new selective execution. Select only the first step in the pipeline without providing source_pipeline_execution_arn.
selective_execution_config = SelectiveExecutionConfig(
    selected_steps=["AbaloneProcess", "AbaloneTrain"],
    reference_latest_execution=False
)

# Start pipeline execution without source_pipeline_execution_arn
pipeline.start(
    execution_display_name=f"Sample-Selective-Execution-1",
    parameters={"MaxDepth":6, "NumRound":60},
    selective_execution_config=selective_execution_config,
)
```

## 참조 실행의 런타임 파라미터 값을 재사용합니다.
<a name="pipelines-selective-ex-reuse"></a>

`build_parameters_from_execution`을 사용하여 참조 파이프라인 실행에서 파라미터를 빌드하고 선택적 실행 파이프라인에 결과를 제공할 수 있습니다. 참조 실행의 원래 파라미터를 사용하거나 `parameter_value_overrides`인수를 사용하여 재정의를 적용할 수 있습니다.

다음 예제는 참조 실행에서 파라미터를 빌드하고 `MseThreshold`파라미터에 대한 재정의를 적용하는 방법을 보여줍니다.

```
# Prepare a new selective execution.
selective_execution_config = SelectiveExecutionConfig(
    source_pipeline_execution_arn="arn:aws:sagemaker:us-west-2:123123123123:pipeline/abalone/execution/123ab12cd3ef",
    selected_steps=["AbaloneTrain", "AbaloneEval", "AbaloneMSECond"],
)
# Define a new parameters list to test.
new_parameters_mse={
    "MseThreshold": 5,
}

# Build parameters from reference execution and override with new parameters to test.
new_parameters = pipeline.build_parameters_from_execution(
    pipeline_execution_arn="arn:aws:sagemaker:us-west-2:123123123123:pipeline/abalone/execution/123ab12cd3ef",
    parameter_value_overrides=new_parameters_mse
)

# Start pipeline execution with new parameters.
execution = pipeline.start(
    selective_execution_config=selective_execution_config,
    parameters=new_parameters
)
```

# Amazon SageMaker Pipelines의 명확화 검사 및 품질 검사 단계를 사용한 기준 계산, 드리프트 감지 및 수명 주기
<a name="pipelines-quality-clarify-baseline-lifecycle"></a>

다음 주제에서는 [`ClarifyCheck`](build-and-manage-steps-types.md#step-type-clarify-check) 및 [`QualityCheck`](build-and-manage-steps-types.md#step-type-quality-check) 단계를 사용할 때 Amazon SageMaker Pipelines 기준과 모델 버전이 어떻게 변화하는지 설명합니다.

`ClarifyCheck` 단계에서 기준은 단계 속성에 `constraints`접미사가 있는 단일 파일입니다. `QualityCheck` 단계에서 기준은 단계 속성에 있는 두 파일의 조합입니다.하나는 `statistics`접미사가 있고 다른 하나는 `constraints`접미사가 있는 파일입니다. 다음 항목에서는 사용 방법을 설명하는 접두사를 사용하여 이러한 속성에 대해 설명합니다.접두사는 이러한 두 파이프라인 단계의 기준 동작과 수명 주기에 영향을 미칩니다. 예를 들어, `ClarifyCheck`단계는 항상 `CalculatedBaselineConstraints`속성의 새 기준을 계산하여 할당하고 `QualityCheck`단계는 `CalculatedBaselineConstraints`및 `CalculatedBaselineStatistics`속성에서 동일한 작업을 수행합니다.

## 명확화 검사 및 품질 검사 단계를 위한 기준 계산 및 등록
<a name="pipelines-quality-clarify-baseline-calculations"></a>

`ClarifyCheck` 및 `QualityCheck`단계 모두는 기본 처리 작업 실행을 통한 단계 입력을 기반으로 항상 새 기준을 계산합니다. 새로 계산된 기준은 `CalculatedBaseline`접두사가 있는 속성을 통해 액세스할 수 있습니다. 이러한 속성을 모델 패키지의 `ModelMetrics`속성으로 [모델 단계](build-and-manage-steps-types.md#step-type-model)에 기록할 수 있습니다. 이 모델 패키지는 5가지 기준으로 등록할 수 있습니다. 각 검사 유형별로 하나씩 등록할 수 있습니다.즉, `ClarifyCheck`단계 실행으로 데이터 바이어스, 모델 바이어스, 모델 설명 가능성, `QualityCheck`단계 실행으로 데이터 품질 등이 가능합니다. `register_new_baseline` 파라미터는 단계 실행 후 `BaselineUsedForDriftCheck`접두사가 있는 속성에 설정된 값을 결정합니다.

다음 잠재적 사용 사례 표는 `ClarifyCheck`및 `QualityCheck`단계에 대해 설정할 수 있는 단계 파라미터로 인한 다양한 동작을 보여줍니다.


| 이 구성을 선택할 때 고려할 수 있는 잠재적 사용 사례  | `skip_check` / `register_new_baseline` | 단계의 드리프트 검사 시행여부 | 단계 속성의 값 `CalculatedBaseline` | 단계 속성의 값 `BaselineUsedForDriftCheck` | 
| --- | --- | --- | --- | --- | 
| 새 모델 버전을 얻기 위해 검사를 활성화한 상태에서 정기적으로 재훈련을 하고 있지만, 새 모델 버전의 모델 레지스트리에 있는 `DriftCheckBaselines`으로 이전 기준을 그대로 유지하려고 합니다.** | False/ False | 드리프트 검사는 기존 기준에 대해 실행됩니다. | 단계를 실행하여 계산된 새 기준 | 모델 레지스트리에서 승인된 최신 모델의 기준 또는 단계 파라미터로 제공된 기준 | 
| 새 모델 버전을 받기 위해 검사를 활성화하여 정기적으로 재훈련을 하고 있지만 새 모델 버전에 맞게 새로 계산된 기준으로 모델 레지스트리의 `DriftCheckBaselines`을 새로 고치려고 합니다.** | False/ True | 드리프트 검사는 기존 기준을 기준으로 실행됩니다. | 단계를 실행하여 계산된 새 기준 | 단계를 실행하여 새로 계산된 기준 (속성 값 CalculatedBaseline) | 
| 특정 유형의 검사에 대해 Amazon SageMaker Model Monitor에서 위반이 감지되었으므로 새 모델 버전을 재훈련하기 위해 파이프라인을 시작하고 있습니다.이 유형의 검사는 이전 기준에 대해서는 건너뛰고 새 모델 버전의 모델 레지스트리에서 `DriftCheckBaselines`과 같이 이전 기준은 그대로 유지하려고 합니다.** | True/ False | 드리프트 검사 없음 | 실행을 통해 계산된 새 기준 | 모델 레지스트리에서 승인된 최신 모델의 기준 또는 단계 파라미터로 제공된 기준 | 
| 이 동작은 다음과 같은 경우에 발생합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html)  | True/ True | 드리프트 검사 없음 | 단계를 실행하여 계산된 새 기준 | 단계를 실행하여 새로 계산된 기준 (속성 값 CalculatedBaseline) | 

**참고**  
제약 조건에 과학적 표기법을 사용하는 경우 플로트로 변환해야 합니다. 이렇게 하는 방법의 전처리 스크립트 예제는 [모델 품질 기준 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-baseline.html)을 참조하세요.

[모델 단계](build-and-manage-steps-types.md#step-type-model)에 모델을 등록할 때 `BaselineUsedForDriftCheck`속성을 `DriftCheckBaselines`으로 등록할 수 있습니다. 그러면 Model Monitor에서 모델 및 데이터 품질 검사에 이러한 기준 파일을 사용할 수 있습니다. 또한 ClarifyCheckStep 및 `QualityCheck`단계에서 이러한 기준을 사용하여 새로 훈련된 모델을 향후 파이프라인 실행을 위해 모델 레지스트리에 등록된 기존 모델과 비교할 수도 있습니다.

## Pipelines의 이전 기준에 대한 드리프트 감지
<a name="pipelines-quality-clarify-baseline-drift-detection"></a>

이 `QualityCheck`단계에서 새 모델 버전을 받기 위해 정기적인 재훈련을 위한 파이프라인을 시작할 때 데이터 품질과 데이터 바이어스에 이전 승인된 모델 버전의 기준에 대해 [위반에 대한 스키마(constraint\$1violations.json 파일)](model-monitor-interpreting-violations.md)이 존재한다면 훈련 단계를 실행하지 않는 것이 좋습니다. 또한 `ClarifyCheck`단계를 실행할 때 모델 품질, 모델 바이어스 또는 모델 설명 가능성이 이전에 승인된 모델 버전의 등록된 기준을 위반하는 경우 새로 훈련된 모델 버전을 등록하지 않는 것이 좋습니다. 이러한 경우, 해당 검사 단계 세트의 `skip_check`속성을 `False`로 설정하여 원하는 검사를 활성화할 수 있으며, 이전 기준에 대한 위반이 감지되면 `ClarifyCheck`및 `QualityCheck`단계가 실패하게 됩니다. 그러면 파이프라인 프로세스가 진행되지 않아 기준에서 벗어난 모델이 등록되지 않습니다. 또한 `ClarifyCheck`, `QualityCheck`단계를 통해 특정 모델 패키지 그룹의 승인된 최신 모델 버전의 `DriftCheckBaselines`을 가져와 비교할 수 있습니다. 이전 기준은 `supplied_baseline_constraints`를 통해(`QualityCheck` 단계가 있는 경우 `supplied_baseline_statistics`에 추가하여) 직접 제공할 수도 있으며, 이전 기준은 항상 모델 패키지 그룹에서 가져온 기준보다 우선 순위가 지정됩니다.

## Pipelines을 사용한 기준 및 모델 버전 수명 주기 및 변화
<a name="pipelines-quality-clarify-baseline-evolution"></a>

`ClarifyCheck` 및 `QualityCheck`단계의 `register_new_baseline`을 `False`로 설정하면 단계 속성 접두사 `BaselineUsedForDriftCheck`을 통해 이전 기준에 액세스할 수 있습니다. 그러면 모델을 [모델 단계](build-and-manage-steps-types.md#step-type-model)에 등록할 때 이러한 기준을 새 모델 버전의 `DriftCheckBaselines`으로 등록할 수 있습니다. 모델 레지스트리에서 이 새 모델 버전을 승인하면 이 모델의 버전의 `DriftCheckBaseline`을 다음 파이프라인 프로세스의 `ClarifyCheck`및 `QualityCheck`단계에서 사용할 수 있게 됩니다. 향후 모델 버전을 위해 특정 검사 유형의 기준을 새로 고치려는 경우 `BaselineUsedForDriftCheck`접두사가 있는 속성이 새로 계산된 기준이 되도록 `register_new_baseline`을 `True`로 설정할 수 있습니다. 이러한 방식으로 향후 훈련된 모델에 대해 선호하는 기준을 보존하거나, 필요할 때 드리프트 검사의 기준을 새로 고쳐 모델 트레이닝 반복 전반에 걸친 기준 진화 및 라이프사이클을 관리할 수 있습니다.

다음 다이어그램은 기준 진화 및 수명 주기에 대한 모델 버전 중심의 관점을 보여줍니다.

![\[기준 변화 및 수명 주기에 대한 모델 버전 중심 보기\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipelines/Baseline-Lifecycle.png)


# 파이프라인 실행 예약
<a name="pipeline-eventbridge"></a>

[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)를 사용하여 Amazon SageMaker Pipelines 실행을 예약할 수 있습니다. Amazon SageMaker Pipelines은 [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)에서 대상으로 지원됩니다. 이를 통해 이벤트 버스의 모든 이벤트를 기반으로 모델 구축 파이프라인의 실행을 시작할 수 있습니다. EventBridge를 사용하면 파이프라인 실행을 자동화하고 훈련 작업 또는 엔드포인트 상태 변경 같은 이벤트에 자동으로 대응할 수 있습니다. 이벤트에는 Amazon S3 버킷에 업로드되는 새 파일, 드리프트로 인한 Amazon SageMaker AI 엔드포인트 상태 변경, *Amazon Simple Notification Service*(SNS) 주제 등이 포함됩니다.

자동으로 실행할 수 있는 Pipelines 작업은 다음과 같습니다.  
+  `StartPipelineExecution` 

SageMaker AI 작업 예약에 대한 자세한 내용은 [Automating SageMaker AI with Amazon EventBridge](https://docs.aws.amazon.com/sagemaker/latest/dg/automating-sagemaker-with-eventbridge.html)를 참조하세요.

**Topics**
+ [Amazon EventBridge를 이용한 파이프라인 예약](#pipeline-eventbridge-schedule)
+ [SageMaker Python SDK를 사용하여 파이프라인 예약](#build-and-manage-scheduling)

## Amazon EventBridge를 이용한 파이프라인 예약
<a name="pipeline-eventbridge-schedule"></a>

Amazon CloudWatch Events를 사용하여 파이프라인 실행을 시작하려면 EventBridge [규칙](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html)을 생성해야 합니다. 이벤트에 대한 규칙을 생성할 때는 EventBridge가 규칙과 일치하는 이벤트를 수신할 때 수행할 대상 작업을 지정합니다. 이벤트가 규칙과 일치하면 EventBridge는 이벤트를 지정된 대상으로 보내고 규칙에 정의된 작업을 시작합니다.

 다음 자습서에서는 EventBridge 콘솔 또는 AWS CLI를 사용하여 EventBridge로 파이프라인 실행을 예약하는 방법을 보여줍니다.  

### 필요 조건
<a name="pipeline-eventbridge-schedule-prerequisites"></a>
+ `SageMaker::StartPipelineExecution` 권한이 있는 경우 EventBridge가 맡을 수 있는 역할. EventBridge 콘솔에서 규칙을 생성하면 이 역할을 자동으로 생성할 수 있습니다. 아니면 이 역할을 직접 생성해야 합니다. SageMaker AI 역할 생성에 대한 자세한 내용은 [SageMaker Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)을 참조하세요.
+ 일정을 예약할 Amazon SageMaker AI 파이프라인. Amazon SageMaker AI 파이프라인을 생성하려면 [Define a Pipeline](https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html)을 참조하세요.

### EventBridge 콘솔을 사용하여 EventBridge 규칙 생성
<a name="pipeline-eventbridge-schedule-console"></a>

 다음 절차에서는 EventBridge 콘솔을 사용하여 EventBridge 규칙을 생성하는 방법을 설명합니다.  

1. [EventBridge 콘솔](https://console.aws.amazon.com/events)로 이동합니다.

1. 왼쪽에서 **규칙**을 선택합니다.

1.  `Create Rule`을 선택합니다.

1. 규칙의 이름과 설명을 입력합니다.

1.  이 규칙을 시작하는 방법을 선택합니다. 다음과 같은 선택 사항이 있습니다.
   + **이벤트 패턴**: 패턴과 일치하는 이벤트가 발생하면 규칙이 시작됩니다. 특정 유형의 이벤트와 일치하는 사전 정의된 패턴을 선택하거나 사용자 지정 패턴을 만들 수 있습니다. 미리 정의된 패턴을 선택한 경우 패턴을 편집하여 사용자 정의할 수 있습니다. 이벤트 패턴에 대한 자세한 내용은 [CloudWatch Events의 이벤트 패턴](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)을 참조하세요.
   + **일정**: 규칙은 지정된 일정에 따라 정기적으로 시작됩니다. 지정된 분, 시간 또는 주 동안 정기적으로 시작되는 고정 비율 일정을 사용할 수 있습니다. [cron 표현식](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions)을 사용하여 “매월 첫 번째 월요일 오전 8시”와 같이 보다 세분화된 일정을 만들 수도 있습니다. 사용자 지정 또는 파트너 이벤트 버스에서는 일정이 지원되지 않습니다.

1. 원하는 이벤트 버스를 선택합니다.

1. 이벤트가 이벤트 패턴과 일치하거나 일정이 시작될 때 간접적으로 호출할 대상을 선택합니다. 규칙당 최대 5개의 대상을 추가할 수 있습니다. 대상 드롭다운 목록에서 `SageMaker Pipeline`을 선택합니다.

1. 파이프라인 드롭다운 목록에서 시작하려는 파이프라인을 선택합니다.

1. 이름과 값 쌍을 사용하여 파이프라인 실행에 전달할 파라미터를 추가합니다. 파라미터 값은 정적이거나 동적일 수 있습니다. Amazon SageMaker AI Pipeline 파라미터에 대한 자세한 내용은 [AWS::Events::Rule SagemakerPipelineParameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#aws-resource-sagemaker-pipeline-properties)를 참조하세요.
   + 파이프라인이 시작될 때마다 정적 값이 파이프라인 실행에 전달됩니다. 예를 들어, 파라미터 목록에 `{"Name": "Instance_type", "Value": "ml.4xlarge"}`이 지정된 경우 EventBridge가 파이프라인을 시작할 때마다 `StartPipelineExecutionRequest`의 파라미터로 전달됩니다.
   + 동적 값은 JSON 경로를 사용하여 지정됩니다. EventBridge는 이벤트 페이로드에서 값을 전달한 다음 이를 파이프라인 실행으로 전달합니다. 예: *`$.detail.param.value`* 

1. 이 규칙에 사용할 역할을 선택합니다. 기존 역할을 만들거나 새로운 역할을 사용할 수 있습니다.

1. (선택 사항) 태그를 추가할 수 있습니다.

1. `Create`를 선택하면 규칙을 확정할 수 있습니다.

 이제 규칙이 적용되어 파이프라인 실행을 시작할 준비가 되었습니다.

### [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/events/index.html)를 사용한 EventBridge 규칙 생성
<a name="pipeline-eventbridge-schedule-cli"></a>

 다음 절차에서는 AWS CLI를 사용하여 EventBridge 규칙을 생성하는 방법을 설명합니다.

1. 시작할 규칙을 생성하세요. 를 사용하여 EventBridge 규칙을 생성할 때 규칙이 시작되는 방식에는 이벤트 패턴 및 일정이라는 두 AWS CLI가지 옵션이 있습니다.
   +  **이벤트 패턴**: 패턴과 일치하는 이벤트가 발생하면 규칙이 시작됩니다. 특정 유형의 이벤트와 일치하는 사전 정의된 패턴을 선택하거나 사용자 지정 패턴을 만들 수 있습니다. 미리 정의된 패턴을 선택한 경우 패턴을 편집하여 사용자 지정할 수 있습니다.   다음 명령을 사용하면 이벤트 패턴에 규칙을 생성할 수 있습니다.

     ```
     aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
     ```
   +  **일정**: 규칙은 지정된 일정에 따라 정기적으로 시작됩니다. 지정된 분, 시간 또는 주 동안 정기적으로 시작되는 고정 비율 일정을 사용할 수 있습니다. cron 표현식을 사용하여 “매월 첫 번째 월요일 오전 8시”와 같이 보다 세분화된 일정을 만들 수도 있습니다. 사용자 지정 또는 파트너 이벤트 버스에서는 일정이 지원되지 않습니다. 다음 명령을 사용하면 일정에서도 규칙을 생성할 수 있습니다.

     ```
     aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
     ```

1. 이벤트가 이벤트 패턴과 일치하거나 일정이 시작될 때 간접적으로 호출할 대상을 추가합니다. 규칙당 최대 5개의 대상을 추가할 수 있습니다.   각 대상에 대해 다음을 지정해야 합니다.  
   +  ARN: 파이프라인의 리소스 ARN입니다.
   +  역할 ARN: EventBridge가 파이프라인을 실행하기 위해 맡아야 하는 역할의 ARN입니다.
   +  파라미터: 전달할 Amazon SageMaker AI 파이프라인 파라미터입니다.

1. 다음 명령을 실행하여 [put-targets](https://docs.aws.amazon.com/cli/latest/reference/events/put-targets.html)으로 Amazon SageMaker AI 파이프라인을 규칙의 대상으로 전달합니다.

   ```
   aws events put-targets --rule <RULE_NAME> --event-bus-name <EVENT_BUS_NAME> --targets "[{\"Id\": <ID>, \"Arn\": <RESOURCE_ARN>, \"RoleArn\": <ROLE_ARN>, \"SageMakerPipelineParameter\": { \"SageMakerParameterList\": [{\"Name\": <NAME>, \"Value\": <VALUE>}]} }]"] 
   ```

## SageMaker Python SDK를 사용하여 파이프라인 예약
<a name="build-and-manage-scheduling"></a>

다음 섹션에서는 SageMaker Python SDK를 사용하여 EventBridge 리소스에 액세스하고 파이프라인 일정을 만들 수 있는 권한을 설정하는 방법을 보여줍니다.

### 필수 권한
<a name="build-and-manage-scheduling-permissions"></a>

파이프라인 스케줄러를 사용하려면 필요한 권한이 있어야 합니다. 권한을 설정하려면 다음 단계를 완료하세요.

1. 파이프라인 트리거를 생성하는 데 사용되는 IAM 역할에 다음 최소 권한 정책을 연결하거나 AWS 관리형 정책를 사용합니다`AmazonEventBridgeSchedulerFullAccess`.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Action":
               [
                   "scheduler:ListSchedules",
                   "scheduler:GetSchedule",
                   "scheduler:CreateSchedule",
                   "scheduler:UpdateSchedule",
                   "scheduler:DeleteSchedule"
               ],
               "Effect": "Allow",
               "Resource":
               [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*", 
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": "scheduler.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 이 역할의 신뢰 정책에 서비스 위탁자(`scheduler.amazonaws.com`)를 추가하여 EventBridge와 신뢰 관계를 설정합니다. SageMaker Studio에서 노트북을 시작하는 경우 실행 역할에 다음 신뢰 정책을 연결해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.amazonaws.com",
                    "sagemaker.amazonaws.com"
                ]
            },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### 파이프라인 일정 만들기
<a name="build-and-manage-scheduling-create"></a>

`PipelineSchedule` 구성기를 사용하여 파이프라인이 한 번 또는 사전에 결정된 간격으로 실행되도록 예약할 수 있습니다. 파이프라인 일정은 `at`, `rate` 또는 `cron` 유형이어야 합니다. 이 예약 유형 세트는 [EventBridge 예약 옵션](https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html)의 확장입니다. `PipelineSchedule` 클래스를 사용하는 방법에 대한 자세한 내용은 [sagemaker.workflow.triggers.PipelineSchedule](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#pipeline-schedule)을 참조하세요. 다음 예시에서는 `PipelineSchedule`을 사용하여 각 예약 유형을 만드는 방법을 보여줍니다.

```
from sagemaker.workflow.triggers import PipelineSchedule

# schedules a pipeline run for 12/13/2023 at time 10:15:20 UTC
my_datetime_schedule = PipelineSchedule(
    name="<schedule-name>", 
    at=datetime(2023, 12, 13, 10, 15, 20)
)

# schedules a pipeline run every 5 minutes
my_rate_schedule = PipelineSchedule(
    name="<schedule-name>", 
    rate=(5, "minutes")
)

# schedules a pipeline run at 10:15am UTC on the last Friday of each month during the years 2022 to 2023
my_cron_schedule = PipelineSchedule(
    name="<schedule-name>", 
    cron="15 10 ? * 6L 2022-2023"
)
```

**참고**  
일회성 일정을 만들고 현재 시간에 액세스해야 하는 경우 `datetime.now()` 대신 `datetime.utcnow()`를 사용하세요. 전자는 현재 영역 컨텍스트를 저장하지 않으며 EventBridge에 잘못된 시간이 전달됩니다.

### 파이프라인에 트리거 연결
<a name="build-and-manage-scheduling-attach"></a>

`PipelineSchedule`을 파이프라인에 연결하려면 트리거 목록이 포함된 만든 파이프라인 객체에서 `put_triggers`를 호출합니다. 응답 ARN을 받으면 계정에서 일정을 성공적으로 만들었으며 EventBridge가 지정된 시간 또는 속도로 대상 파이프라인을 간접 호출하기 시작합니다. 상위 파이프라인에 트리거를 연결하려면 올바른 권한이 있는 역할을 지정해야 합니다. 제공하지 않으면 파이프라인은 [구성 파일](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-config.html)에서 파이프라인을 만드는 데 사용되는 기본 역할을 가져옵니다.

다음 예시에서는 일정을 파이프라인에 연결하는 방법을 보여줍니다.

```
scheduled_pipeline = Pipeline(
    name="<pipeline-name>",
    steps=[...],
    sagemaker_session=<sagemaker-session>,
)
custom_schedule = PipelineSchedule(
    name="<schedule-name>", 
    at=datetime(year=2023, month=12, date=25, hour=10, minute=30, second=30)
)
scheduled_pipeline.put_triggers(triggers=[custom_schedule], role_arn=<role>)
```

### 현재 트리거 설명
<a name="build-and-manage-scheduling-describe"></a>

만든 파이프라인 트리거에 대한 정보를 검색하려면 트리거 이름으로 `describe_trigger()` API를 간접 호출할 수 있습니다. 이 명령은 시작 시간, 활성화된 상태 및 기타 유용한 정보와 같이 만든 일정 표현식에 대한 세부 정보를 반환합니다. 다음 코드 조각은 샘플 간접 호출을 보여줍니다.

```
scheduled_pipeline.describe_trigger(name="<schedule-name>")
```

### 트리거 리소스 정리
<a name="build-and-manage-scheduling-clean"></a>

파이프라인을 삭제하기 전에 계정의 리소스 누출을 방지하기 위해 기존 트리거를 정리합니다. 상위 파이프라인을 삭제하기 전에 트리거를 삭제해야 합니다. `delete_triggers` API에 트리거 이름 목록을 전달하여 트리거를 삭제할 수 있습니다. 다음 코드 조각은 트리거를 삭제하는 방법을 보여줍니다.

```
pipeline.delete_triggers(trigger_names=["<schedule-name>"])
```

**참고**  
트리거를 삭제할 때 다음 제한 사항에 유의하세요.  
트리거 이름을 지정하여 트리거를 삭제하는 옵션은 SageMaker Python SDK에서만 사용할 수 있습니다. CLI 또는 `DeletePipeline` API 직접 호출에서 파이프라인을 삭제해도 트리거는 삭제되지 않습니다. 따라서 트리거가 분리되고 SageMaker AI는 존재하지 않는 파이프라인에 대한 실행을 시작하려고 시도합니다.
또한 다른 노트북 세션을 사용 중이거나 파이프라인 대상을 이미 삭제한 경우 스케줄러 [CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/delete-schedule.html) 또는 EventBridge 콘솔을 통해 분리된 일정을 정리합니다.

# Amazon SageMaker Experiments 통합
<a name="pipelines-experiments"></a>

Amazon SageMaker Pipelines은 Amazon SageMaker Experiments와 긴밀하게 통합되어 있습니다. 기본적으로 Pipelines이 파이프라인을 만들고 실행할 때 다음과 같은 SageMaker Experiments가 존재하지 않는 경우 만들어집니다.
+ 파이프라인에 대한 실험
+ 파이프라인의 모든 실행을 위한 실행 그룹
+ 파이프라인 실행 단계에서 생성된 각 SageMaker AI 작업의 실행 그룹에 추가된 실행

SageMaker AI 모델 훈련 실험의 여러 실행 그룹에서 해당 지표를 비교할 수 있는 것처럼 여러 파이프라인 실행에서 모델 훈련 정확도와 같은 지표를 비교할 수 있습니다.

다음 샘플은 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)에 있는 [파이프라인](https://github.com/aws/sagemaker-python-sdk/blob/v2.41.0/src/sagemaker/workflow/pipeline.py) 클래스의 관련 파라미터를 보여줍니다.

```
Pipeline(
    name="MyPipeline",
    parameters=[...],
    pipeline_experiment_config=PipelineExperimentConfig(
      ExecutionVariables.PIPELINE_NAME,
      ExecutionVariables.PIPELINE_EXECUTION_ID
    ),
    steps=[...]
)
```

파이프라인용으로 실험 및 실행 그룹을 생성하지 않으려면 `pipeline_experiment_config`을 `None`으로 설정합니다.

**참고**  
실험 통합은 Amazon SageMaker Python SDK v2.41.0에 도입되었습니다.

`pipeline_experiment_config`의 `ExperimentName`및 `TrialName`파라미터에 대해 지정한 내용에 따라 다음과 같은 이름 지정 규칙이 적용됩니다.
+ `ExperimentName`을 지정하지 않으면 `name`파이프라인이 실험 이름으로 사용됩니다.

  `ExperimentName`을 지정하면 실험 이름으로 사용됩니다. 같은 이름의 실험이 있는 경우 파이프라인에서 만든 실행 그룹은 기존 실험에 추가됩니다. 해당 이름의 실험이 존재하지 않는 경우 새 실험이 생성됩니다.
+ `TrialName`을 지정하지 않으면 파이프라인 실행 ID가 실행 그룹 이름으로 사용됩니다.

  `TrialName`을 지정하면 실행 그룹 이름으로 사용됩니다. 같은 이름의 실행 그룹이 있는 경우 파이프라인에서 만든 실행은 기존 실행 그룹에 추가됩니다. 같은 이름의 실행 그룹이 없는 경우 새 실행 그룹이 생성됩니다.

**참고**  
엔터티를 만든 파이프라인이 삭제되어도 실험 엔터티는 삭제되지 않습니다. SageMaker Experiments API를 사용하여 엔터티를 삭제할 수 있습니다.

파이프라인과 연결된 SageMaker AI Experiment 엔터티를 보는 방법에 대한 자세한 내용은 [파이프라인에서 실험 데이터에 액세스](pipelines-studio-experiments.md) 섹션을 참조하세요. SageMaker 실험에 대한 자세한 내용은 [Studio Classic의 Amazon SageMaker Experiments](experiments.md)섹션을 참조하세요.

다음 섹션에서는 이전 규칙의 예시와 파이프라인 정의 파일에서 어떻게 표현되는지 보여줍니다. 파이프라인 정의 파일에 대한 자세한 내용은 [Pipelines 개요](pipelines-overview.md)섹션을 참조하세요.

**Topics**
+ [기본 동작](pipelines-experiments-default.md)
+ [실험 통합 비활성화](pipelines-experiments-none.md)
+ [사용자 지정 실험 이름을 지정하세요](pipelines-experiments-custom-experiment.md)
+ [사용자 지정 실행 그룹 이름을 지정하세요](pipelines-experiments-custom-trial.md)

# 기본 동작
<a name="pipelines-experiments-default"></a>

**파이프라인 생성**

SageMaker AI 파이프라인을 만들 때 기본 동작은 SageMaker Experiments와 자동으로 통합하는 것입니다. 사용자 지정 구성을 지정하지 않으면 SageMaker AI는 파이프라인과 동일한 이름의 실험, 파이프라인 실행 ID를 이름으로 사용한 파이프라인의 각 실행에 대한 실행 그룹, 파이프라인 단계의 일부로 시작된 모든 SageMaker AI 작업에 대한 각 실행 그룹 내의 개별 실행을 만듭니다. 모델 훈련 실험을 분석하는 방법과 마찬가지로 다양한 파이프라인 실행에서 지표를 원활하게 추적하고 비교할 수 있습니다. 다음 섹션에서는 실험 통합을 명시적으로 구성하지 않고 파이프라인을 정의할 때 이 기본 동작을 보여줍니다.

`pipeline_experiment_config`이 생략되었습니다. `ExperimentName`기본값은 `name`파이프라인입니다. `TrialName`기본값은 실행 ID입니다.

```
pipeline_name = f"MyPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[...],
    steps=[step_train]
)
```

**파이프라인 정의 파일**

```
{
  "Version": "2020-12-01",
  "Parameters": [
    {
      "Name": "InputDataSource"
    },
    {
      "Name": "InstanceCount",
      "Type": "Integer",
      "DefaultValue": 1
    }
  ],
  "PipelineExperimentConfig": {
    "ExperimentName": {"Get": "Execution.PipelineName"},
    "TrialName": {"Get": "Execution.PipelineExecutionId"}
  },
  "Steps": [...]
}
```

# 실험 통합 비활성화
<a name="pipelines-experiments-none"></a>

**파이프라인 생성**

파이프라인을 정의할 때 `pipeline_experiment_config` 파라미터를 `None`으로 설정하여 파이프라인과 SageMaker Experiments의 통합을 비활성화할 수 있습니다. 이렇게 하면 SageMaker AI는 파이프라인 실행과 관련된 지표 및 아티팩트를 추적하기 위한 실험, 실행 그룹 또는 개별 실행을 자동으로 만들지 않습니다. 다음 예시에서는 파이프라인 구성 파라미터를 `None`으로 설정합니다.

```
pipeline_name = f"MyPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[...],
    pipeline_experiment_config=None,
    steps=[step_train]
)
```

**파이프라인 정의 파일**

위의 기본 예시와 동일하지만 이 예시는 `PipelineExperimentConfig`이 없습니다.

# 사용자 지정 실험 이름을 지정하세요
<a name="pipelines-experiments-custom-experiment"></a>

기본 동작은 SageMaker Experiments에서 파이프라인 이름을 실험 이름으로 사용하는 것이지만, 이를 재정의하고 대신 사용자 지정 실험 이름을 지정할 수 있습니다. 이는 더 쉬운 분석 및 비교를 위해 동일한 실험에서 여러 파이프라인 실행을 그룹화하려는 경우에 유용할 수 있습니다. 실행 그룹 이름은 사용자 지정 이름을 명시적으로 설정하지 않는 한 파이프라인 실행 ID로 기본 설정됩니다. 다음 섹션에서는 실행 그룹 이름을 기본 실행 ID로 유지하면서 사용자 지정 실험 이름으로 파이프라인을 만드는 방법을 보여줍니다.

**파이프라인 생성**

```
pipeline_name = f"MyPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[...],
    pipeline_experiment_config=PipelineExperimentConfig(
      "CustomExperimentName",
      ExecutionVariables.PIPELINE_EXECUTION_ID
    ),
    steps=[step_train]
)
```

**파이프라인 정의 파일**

```
{
  ...,
  "PipelineExperimentConfig": {
    "ExperimentName": "CustomExperimentName",
    "TrialName": {"Get": "Execution.PipelineExecutionId"}
  },
  "Steps": [...]
}
```

# 사용자 지정 실행 그룹 이름을 지정하세요
<a name="pipelines-experiments-custom-trial"></a>

사용자 지정 실험 이름을 설정하는 것 외에도 파이프라인 실행 중에 SageMaker Experiments에서 만든 실행 그룹의 사용자 지정 이름을 지정할 수도 있습니다. 이 이름은 고유성을 보장하기 위해 파이프라인 실행 ID와 함께 추가됩니다. 사용자 지정 실행 그룹 이름을 지정하여 동일한 실험 내에서 관련 파이프라인 실행을 식별하고 분석할 수 있습니다. 다음 섹션에서는 실험 이름에 기본 파이프라인 이름을 사용하는 동안 사용자 지정 실행 그룹 이름으로 파이프라인을 정의하는 방법을 보여줍니다.

**파이프라인 생성**

```
pipeline_name = f"MyPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[...],
    pipeline_experiment_config=PipelineExperimentConfig(
      ExecutionVariables.PIPELINE_NAME,
      Join(on="-", values=["CustomTrialName", ExecutionVariables.PIPELINE_EXECUTION_ID])
    ),
    steps=[step_train]
)
```

**파이프라인 정의 파일**

```
{
  ...,
  "PipelineExperimentConfig": {
    "ExperimentName": {"Get": "Execution.PipelineName"},
    "TrialName": {
      "On": "-",
      "Values": [
         "CustomTrialName",
         {"Get": "Execution.PipelineExecutionId"}
       ]
    }
  },
  "Steps": [...]
}
```

# 로컬 모드를 사용하여 파이프라인 실행
<a name="pipelines-local-mode"></a>

SageMaker Pipelines 로컬 모드는 관리형 SageMaker AI 서비스에서 파이프라인을 실행하기 전에 훈련, 처리, 추론 스크립트, [파이프라인 파라미터](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#pipeline-parameters)의 런타임 호환성을 테스트할 수 있는 쉬운 방법입니다. 로컬 모드를 사용하면 더 작은 데이터세트를 사용하여 SageMaker AI 파이프라인을 로컬에서 테스트할 수 있습니다. 이렇게 하면 관리 서비스 사용 비용을 들이지 않고도 사용자 스크립트와 파이프라인 정의 자체의 오류를 빠르고 쉽게 디버깅할 수 있습니다. 다음 주제에서는 파이프라인을 로컬에서 정의하고 실행하는 방법을 보여줍니다.

파이프라인 로컬 모드는 내부적으로 [SageMaker AI 작업 로컬 모드](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)를 활용합니다. 이는 SageMaker Python SDK의 기능으로, Docker 컨테이너를 사용하여 SageMaker AI 내장 이미지 또는 사용자 지정 이미지를 로컬에서 실행할 수 있습니다. 파이프라인 로컬 모드는 SageMaker AI 작업 로컬 모드를 기반으로 구축됩니다. 따라서 해당 작업을 개별적으로 실행하는 것과 동일한 결과를 기대할 수 있습니다. 예를 들어 로컬 모드에서는 여전히 Amazon S3를 사용하여 모델 아티팩트를 업로드하고 출력을 처리합니다. 로컬 작업에서 생성된 데이터를 로컬 디스크에 저장하려는 경우 [로컬 모드](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)에 언급된 설정을 사용할 수 있습니다.

파이프라인 로컬 모드는 현재 다음 단계 유형을 지원합니다.
+ [훈련 단계](build-and-manage-steps-types.md#step-type-training)
+ [처리 단계](build-and-manage-steps-types.md#step-type-processing)
+ [변환 단계](build-and-manage-steps-types.md#step-type-transform)
+ [모델 단계](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-model-create)(모델 생성 인수만 사용)
+ [조건 단계](build-and-manage-steps-types.md#step-type-condition)
+ [실패 단계](build-and-manage-steps-types.md#step-type-fail)

[병렬 처리 구성](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#parallelism-configuration)을 사용하여 여러 단계를 병렬로 실행할 수 있는 관리형 파이프라인 서비스와 달리, 로컬 파이프라인 실행기는 단계를 순차적으로 실행합니다. 따라서 로컬 파이프라인의 전체 실행 성능은 클라우드에서 실행되는 파이프라인보다 낮을 수 있으며, 이는 주로 데이터세트의 크기, 알고리즘, 로컬 컴퓨터의 성능에 따라 달라집니다. 또한 로컬 모드에서 실행된 파이프라인은 [SageMaker 실험](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-experiments.html)에 기록되지 않는다는 점에 유의하시기 바랍니다.

**참고**  
파이프라인 로컬 모드는 XGBoost와 같은 SageMaker AI 알고리즘과 호환되지 않습니다. 이러한 알고리즘을 사용하려면 [스크립트 모드](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html)에서 사용해야 합니다.

파이프라인을 로컬에서 실행하려면 파이프라인 단계와 관련된 `sagemaker_session`필드 및 파이프라인 자체가 `LocalPipelineSession`유형이어야 합니다. 다음 예시에서는 SageMaker AI 파이프라인을 정의하여 로컬로 실행하는 방법을 보여줍니다.

```
from sagemaker.workflow.pipeline_context import LocalPipelineSession
from sagemaker.pytorch import PyTorch
from sagemaker.workflow.steps import TrainingStep
from sagemaker.workflow.pipeline import Pipeline

local_pipeline_session = LocalPipelineSession()

pytorch_estimator = PyTorch(
    sagemaker_session=local_pipeline_session,
    role=sagemaker.get_execution_role(),
    instance_type="ml.c5.xlarge",
    instance_count=1,
    framework_version="1.8.0",
    py_version="py36",
    entry_point="./entry_point.py",
)

step = TrainingStep(
    name="MyTrainingStep",
    step_args=pytorch_estimator.fit(
        inputs=TrainingInput(s3_data="s3://amzn-s3-demo-bucket/my-data/train"),
    )
)

pipeline = Pipeline(
    name="MyPipeline",
    steps=[step],
    sagemaker_session=local_pipeline_session
)

pipeline.create(
    role_arn=sagemaker.get_execution_role(), 
    description="local pipeline example"
)

// pipeline will execute locally
execution = pipeline.start()

steps = execution.list_steps()

training_job_name = steps['PipelineExecutionSteps'][0]['Metadata']['TrainingJob']['Arn']

step_outputs = pipeline_session.sagemaker_client.describe_training_job(TrainingJobName = training_job_name)
```

관리형 SageMaker Pipelines 서비스에서 파이프라인을 실행할 준비가 되면 이전 코드 스니펫의 `LocalPipelineSession`을 `PipelineSession`(다음 코드 샘플 참조)으로 변경하고 코드를 다시 실행하여 실행할 수 있습니다.

```
from sagemaker.workflow.pipeline_context import PipelineSession

pipeline_session = PipelineSession()
```

# Amazon SageMaker Pipelines 문제 해결
<a name="pipelines-troubleshooting"></a>

Amazon SageMaker Pipelines을 사용할 때 여러 가지 이유로 문제가 발생할 수 있습니다. 이 항목에서는 일반적인 오류와 해결 방법에 대한 정보를 제공합니다.

 **파이프라인 정의 문제** 

파이프라인 정의의 형식이 올바르지 않을 수 있습니다. 이로 인해 실행이 실패하거나 작업이 정확하지 않을 수 있습니다. 이러한 오류는 파이프라인이 생성되거나 실행이 발생할 때 발견될 수 있습니다. 정의가 검증되지 않는 경우 Pipelines은 JSON 파일 형식이 잘못된 문자를 식별하는 오류 메시지를 반환합니다. 이 문제를 해결하려면 SageMaker AI Python SDK를 사용하여 생성된 단계가 정확한지 검토하세요.

파이프라인 정의에는 단계를 한 번만 포함할 수 있습니다. 따라서 단계는 조건 단계 및 파이프라인의 일부로 동일한 파이프라인에 존재할 수 없습니다.**

 **파이프라인 로그 검사** 

다음 명령을 사용하여 단계의 상태를 볼 수 있습니다.

```
execution.list_steps()
```

각 단계에는 다음 정보가 포함됩니다.
+ 파이프라인에서 시작된 엔터티의 ARN(예: SageMaker AI 작업 ARN, 모델 ARN 또는 모델 패키지 ARN) 
+ 실패 이유에는 단계 실패에 대한 간략한 설명이 포함됩니다.
+ 단계가 조건 단계인 경우 조건의 true 또는 false 평가 여부가 포함됩니다.  
+ 실행에서 이전 작업 실행을 재사용하는 경우 `CacheHit`에 소스 실행이 나열됩니다.  

Amazon SageMaker Studio 인터페이스에서 오류 메시지와 로그를 볼 수도 있습니다. 스튜디오에서 로그를 확인하는 방법에 대한 자세한 내용은 [파이프라인 실행 세부 정보 보기](pipelines-studio-view-execution.md)섹션을 참조하세요.

 **권한 누락** 

파이프라인 실행을 생성하는 역할과 파이프라인 실행에서 각 작업을 생성하는 단계에 올바른 권한이 필요합니다. 이러한 권한이 없으면 파이프라인 실행 제출 또는 SageMaker AI 작업을 예상대로 실행하지 못할 수 있습니다. 권한이 제대로 설정되었는지 확인하려면 [IAM 액세스 관리](build-and-manage-access.md)섹션을 참조하세요.

 **작업 실행 오류** 

SageMaker AI 작업의 기능을 정의하는 스크립트의 문제로 인해 단계를 실행할 때 문제가 발생할 수 있습니다. 각 작업에는 일련의 CloudWatch 로그가 있습니다.스튜디오에서 이러한 로그를 보려면 [파이프라인 실행 세부 정보 보기](pipelines-studio-view-execution.md)섹션을 참조하세요. SageMaker AI에서 CloudWatch를 사용하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI용 CloudWatch Logs](logging-cloudwatch.md) 섹션을 참조하세요.

 **속성 파일 오류** 

파이프라인으로 속성 파일을 잘못 구현하면 문제가 발생할 수 있습니다. 속성 파일 구현이 예상대로 작동하도록 하려면 [단계 간 데이터 전달](build-and-manage-propertyfile.md)섹션을 참조하세요.

 **Dockerfile의 컨테이너에 스크립트 복사 문제** 

다음 코드 샘플에 나와 있는 것처럼 스크립트를 컨테이너에 복사하거나 추정기 엔터티의 `entry_point` 인수 또는 프로로세서 엔터티의 `code` 인수를 통해 전달할 수 있습니다.

```
step_process = ProcessingStep(
    name="PreprocessAbaloneData",
    processor=sklearn_processor,
    inputs = [
        ProcessingInput(
            input_name='dataset',
            source=...,
            destination="/opt/ml/processing/code",
        )
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train", destination = processed_data_path),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation", destination = processed_data_path),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test", destination = processed_data_path),
    ],
    code=os.path.join(BASE_DIR, "process.py"), ## Code is passed through an argument
    cache_config = cache_config,
    job_arguments = ['--input', 'arg1']
)

sklearn_estimator = SKLearn(
    entry_point=os.path.join(BASE_DIR, "train.py"), ## Code is passed through the entry_point
    framework_version="0.23-1",
    instance_type=training_instance_type,
    role=role,
    output_path=model_path, # New
    sagemaker_session=sagemaker_session, # New
    instance_count=1, # New
    base_job_name=f"{base_job_prefix}/pilot-train",
    metric_definitions=[
        {'Name': 'train:accuracy', 'Regex': 'accuracy_train=(.*?);'},
        {'Name': 'validation:accuracy', 'Regex': 'accuracy_validation=(.*?);'}
    ],
)
```