

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

# MLOps 구현
<a name="mlops"></a>

Amazon SageMaker AI는 연속 통합 및 배포를 통해 프로덕션 환경에서 기계 학습 모델을 구현하는 특성을 지원합니다. 다음 주제에서는 SageMaker AI를 사용할 때 MLOps 인프라를 설정하는 방법에 대한 정보를 제공합니다.

**Topics**
+ [

# MLOps를 사용해야 하는 이유는 무엇입니까?
](sagemaker-projects-why.md)
+ [

# SageMaker Experiments
](experiments-mlops.md)
+ [

# SageMaker AI 워크플로
](workflows.md)
+ [

# Amazon SageMaker ML 계보 추적
](lineage-tracking.md)
+ [

# Model Registry를 사용한 모델 등록 배포
](model-registry.md)
+ [

# SageMaker AI에서의 모델 배포
](model-deploy-mlops.md)
+ [

# SageMaker 모델 모니터
](model-monitor-mlops.md)
+ [

# SageMaker 프로젝트를 통한 MLOps 자동화
](sagemaker-projects.md)
+ [

# Amazon SageMaker AI MLOps 문제 해결
](mlopsfaq.md)

# MLOps를 사용해야 하는 이유는 무엇입니까?
<a name="sagemaker-projects-why"></a>

개별적인 인공 지능 및 기계 학습(AI/ML) 프로젝트를 실행하는 것에서 벗어나 AI/ML을 사용하여 대규모로 비즈니스를 혁신하는 방향으로 전환함에 따라 ML 운영(MLOps) 원칙이 도움이 될 수 있습니다. MLOps는 프로젝트 관리, CI/CD 및 품질 보증에서 AI/ML 프로젝트의 고유한 측면을 고려하여 전달 시간을 개선하고 결함을 줄이며 데이터 과학의 생산성을 높이는 데 도움이 됩니다. MLOps는 DevOps 사례를 기계 학습 워크로드에 적용하는 데 기반을 둔 방법론을 말합니다. DevOps 원칙에 대한 논의는 [AWS의 DevOps 소개](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/welcome.html?did=wp_card) 백서를 참조하세요. AWS 서비스를 사용한 구현에 대한 자세한 내용은 [에서 CI/CD 연습 AWS](https://d1.awsstatic.com/whitepapers/DevOps/practicing-continuous-integration-continuous-delivery-on-AWS.pdf) 및 [코드형 인프라를](https://d1.awsstatic.com/whitepapers/DevOps/infrastructure-as-code.pdf) 참조하세요.

DevOps와 마찬가지로 MLOps는 사람, 프로세스 및 기술의 교집합에서 기계 학습 워크로드를 개발, 구축 및 운영하는 데 필요한 엔드 투 엔드 활동을 최적화하는 기계 학습 개발 라이프사이클에 대한 협업적이고 간소화된 접근 방식을 사용합니다.

MLOps는 기존 DevOps 관행과 결합하여 기계 학습 개발 라이프사이클 전반에 걸쳐 모델 제공을 간소화하기 위해 데이터 과학과 데이터 엔지니어링의 교집합에 중점을 둡니다. MLOps는 ML 워크로드를 릴리스 관리, CI/CD 및 운영에 통합하는 원칙입니다. MLOps에는 소프트웨어 개발, 운영, 데이터 엔지니어링 및 데이터 과학의 통합이 필요합니다.

## MLOp 당면 과제
<a name="sagemaker-projects-why-challenges"></a>

MLOps는 비즈니스를 확장하는 데 유용한 도구를 제공할 수 있지만 MLOP를 기계 학습 워크로드에 통합할 때 특정 문제에 직면할 수 있습니다.

**프로젝트 관리**
+ ML 프로젝트에는 비교적 새로운 역할인 데이터 사이언티스트가 참여하며 부서 간 팀에 통합되는 경우가 많지 않습니다. 이러한 신입 팀 구성원은 제품 소유자 및 소프트웨어 엔지니어와는 매우 다른 기술 언어를 사용하는 경우가 많으며, 이로 인해 비즈니스 요구 사항을 기술 요구 사항으로 변환하는 일반적인 문제가 더욱 복잡해집니다.

**커뮤니케이션 및 협업**
+ 성공적인 결과를 보장하기 위해서는 ML 프로젝트에 대한 가시성을 구축하고 데이터 엔지니어, 데이터 사이언티스트, ML 엔지니어, DevOps와 같은 다양한 이해 관계자 간의 협업을 가능하게 하는 것이 점점 더 중요해지고 있습니다.



**모든 것이 코드입니다**
+ 개발 활동에 프로덕션 데이터 사용, 실험 수명 주기 연장, 데이터 파이프라인에 대한 종속성, 배포 파이프라인 재훈련, 모델 성능 평가 시 고유한 지표 사용.
+ 모델에는 해당 모델과 통합되는 애플리케이션 및 시스템과 독립적인 수명 주기가 있는 경우가 많습니다.
+ 버전이 지정된 코드와 아티팩트를 통해 전체 엔드-투-엔드 시스템을 재현할 수 있습니다. DevOps 프로젝트는 코드형 인프라(IaC) 및 코드형 구성(CaC)을 사용하여 환경을 구축하고, 코드형 파이프라인(PAC)을 사용하여 일관된 CI/CD 패턴을 보장합니다. 파이프라인은 빅 데이터 및 ML 훈련 워크플로와 통합되어야 합니다. 이는 파이프라인이 기존 CI/CD 도구와 다른 워크플로 엔진의 조합이라는 뜻인 경우가 많습니다. 다수의 ML 프로젝트는 중요한 정책과 관련되어 있으므로 파이프라인에서 이러한 정책을 적용해야 할 수도 있습니다. 편향된 입력 데이터는 편향된 결과를 낳기 때문에 비즈니스 이해 관계자의 우려가 커지고 있습니다.

**CI/CD**
+ MLOps에서 소스 데이터는 소스 코드와 함께 최고 수준의 입력입니다. 이것이 바로 MLOps가 소스 데이터 버전 관리를 요구하고 소스 또는 추론 데이터가 변경될 때 파이프라인 실행을 시작하는 이유입니다.
+ 또한 파이프라인은 추적성을 제공하기 위해 입력 및 기타 출력과 함께 ML 모델의 버전을 관리해야 합니다.
+ 자동 테스트에는 빌드 단계 및 모델이 프로덕션 단계에 있을 때 ML 모델에 대한 적절한 검증이 포함되어야 합니다.
+ 빌드 단계에는 시간이 많이 걸리고 리소스 집약적인 프로세스인 모델 훈련 및 재훈련이 포함될 수 있습니다. 파이프라인은 관련 구성 요소가 변경될 때가 아니라 소스 데이터나 ML 코드가 변경될 때만 전체 훈련 주기를 수행할 수 있을 만큼 세분화되어야 합니다.
+ 기계 학습 코드는 일반적으로 전체 솔루션의 일부분이기 때문에 배포 파이프라인에는 다른 애플리케이션과 시스템에서 API로 사용할 모델을 패키징하는 데 필요한 추가 단계가 포함될 수도 있습니다.

**모니터링 및 로깅**
+ 모델 훈련 지표와 모델 실험을 캡처하는 데 필요한 기능 엔지니어링 및 모델 훈련 단계. ML 모델을 튜닝하려면 입력 데이터의 형태와 알고리즘 하이퍼파라미터를 조작하고 이러한 실험을 체계적으로 캡처해야 합니다. 실험 추적은 데이터 사이언티스트가 더 효과적으로 작업하는 데 도움이 되며 작업의 재현 가능한 스냅샷을 제공합니다.
+ 배포된 ML 모델을 사용하려면 표준 엔드포인트 안정성 및 성능 지표와 함께 추론을 위해 모델에 전달된 데이터를 모니터링해야 합니다. 또한 모니터링 시스템은 적절한 ML 지표로 평가한 모델 출력의 품질을 캡처해야 합니다.

## MLOps의 이점
<a name="sagemaker-projects-benefits"></a>

MLOps 방식을 채택하면 다음과 같은 이점을 제공하여 ML 프로젝트의 시장 출시 시간을 단축할 수 있습니다.
+ **생산성**: 큐레이션된 데이터세트에 액세스할 수 있는 셀프 서비스 환경을 제공하면 데이터 엔지니어와 데이터 사이언티스트가 더 빠르게 움직이고 누락되거나 유효하지 않은 데이터로 인해 시간을 낭비하는 시간을 줄일 수 있습니다.
+ **반복성**: MLDC의 모든 단계를 자동화하면 모델 훈련, 평가, 버전 관리 및 배포 방법을 비롯한 반복 가능한 프로세스를 보장할 수 있습니다.
+ **안정성**: CI/CD 관행을 통합하면 신속하게 배포할 수 있을 뿐만 아니라 품질과 일관성을 높일 수 있습니다.
+ **감사 가능성**: 데이터 과학 실험부터 소스 데이터, 훈련된 모델에 이르기까지 모든 입력과 출력의 버전을 관리하면 모델이 어떻게 구축되었고 어디에 배포되었는지 정확히 보여줄 수 있습니다.
+ **데이터 및 모델 품질**: MLOps를 사용하면 모델 편향을 방지하고 시간 경과에 따른 데이터 통계 속성 및 모델 품질의 변화를 추적하는 정책을 시행할 수 있습니다.

# SageMaker Experiments
<a name="experiments-mlops"></a>

ML 모델 구축에는 높은 예측 정확도를 달성하기 위해 알고리즘, 모델 아키텍처 및 파라미터를 조정하면서 여러 번의 반복 훈련이 필요합니다. Amazon SageMaker Experimments를 사용하면 이러한 훈련 반복에서 입력 및 출력을 추적하여 팀 내 시험 및 협업의 반복성을 개선할 수 있습니다. 또한 모델 훈련 작업과 관련된 파라미터, 지표, 데이터세트 및 기타 아티팩트를 추적할 수 있습니다. SageMaker Experimments는 진행 중인 훈련 작업을 시각화하고, 팀 내에서 실험을 공유하고, 실험에서 직접 모델을 배포할 수 있는 단일 인터페이스를 제공합니다.

SageMaker Experiments에 대해 자세히 알아보려면 [Studio Classic의 Amazon SageMaker Experiments](experiments.md)섹션을 참조하세요.

# SageMaker AI 워크플로
<a name="workflows"></a>

기계 학습(ML) 작업 규모 조정 시 Amazon SageMaker AI 완전관리형 워크플로 서비스를 사용하여 ML 수명 주기에 대한 연속 통합 및 배포(CI/CD) 방식을 구현할 수 있습니다. Pipelines SDK를 사용하면 파이프라인 단계를 선택하고 통합 솔루션으로 통합하여 데이터 준비부터 모델 배포까지 모델 구축 프로세스를 자동화합니다. Kubernetes 기반 아키텍처의 경우, SageMaker AI Operators를 Kubernetes 클러스터에 설치하여 Kubernetes API 및 `kubectl` 등의 명령줄 Kubernetes 도구를 사용하여 기본적으로 SageMaker AI 작업을 생성할 수 있습니다. Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하여 Kubeflow 파이프라인에서 네이티브 SageMaker AI 작업을 생성하고 모니터링할 수 있습니다. SageMaker AI의 작업 파라미터, 상태 및 출력은 Kubeflow Pipelines UI에서 액세스할 수 있습니다. 마지막으로 배치 작업을 예약하려면 AWS Batch 작업 대기열 통합 또는 Jupyter 노트북 기반 워크플로 서비스를 사용하여 정의한 일정에 따라 독립 실행형 또는 정기 실행을 시작할 수 있습니다.

요약하면 SageMaker AI는 다음과 같은 워크플로 기술을 제공합니다.
+ [파이프라인](pipelines.md): ML 파이프라인을 구축하고 관리하기 위한 도구.
+ [Kubernetes 오케스트레이션](kubernetes-workflows.md): Kubernetes 클러스터를 위한 SageMaker AI 사용자 지정 운영자와 Kubeflow Pipelines의 구성 요소
+ [SageMaker 노트북](notebook-auto-run.md): Jupyter notebook의 온디맨드 또는 예약된 비대화형 배치 실행.

SageMaker AI와 통합되는 다른 서비스를 활용하여 워크플로를 구축할 수도 있습니다. 옵션에는 다음 사항이 포함됩니다.
+ [에어플로우 워크플로](https://sagemaker.readthedocs.io/en/stable/workflows/airflow/index.html): 에어플로우 워크플로를 생성 및 관리하기 위한 구성을 내보내기 위한 SageMaker API
+ [AWS Step Functions](https://sagemaker.readthedocs.io/en/stable/workflows/step_functions/index.html): 리소스를 별도로 프로비저닝하지 않고도 SageMaker AI 인프라를 오케스트레이션하는 Python의 다단계 ML 워크플로
+ [AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-sagemaker.html): 컴퓨팅 환경에서 실행되도록 작업의 우선 순위를 지정하고 예약할 수 있는 AWS Batch 작업 대기열에 SageMaker AI 훈련 작업을 제출합니다.

SageMaker 훈련 및 추론 관리에 대한 자세한 내용은 [Amazon SageMaker Python SDK 워크플로](https://sagemaker.readthedocs.io/en/stable/workflows/index.html)를 참조하세요.

**Topics**
+ [

# 파이프라인
](pipelines.md)
+ [

# Kubernetes 오케스트레이션
](kubernetes-workflows.md)
+ [

# SageMaker 노트북
](notebook-auto-run.md)
+ [

# ML 워크플로 예약
](workflow-scheduling.md)
+ [

# AWS Batch SageMaker AI 훈련 작업에 대한 지원
](training-job-queues.md)

# 파이프라인
<a name="pipelines"></a>

Amazon SageMaker Pipelines은 기계 학습(ML) 개발을 자동화하기 위해 특별히 설계된 워크플로 오케스트레이션 서비스입니다.

파이프라인은 다른 AWS 워크플로 제품에 비해 다음과 같은 이점을 제공합니다.

**서버리스 인프라 오토 스케일링** Pipelines을 실행하기 위해 기본 오케스트레이션 인프라를 관리할 필요가 없으므로 핵심 ML 작업에 집중할 수 있습니다. SageMaker AI는 ML 워크로드 요구 사항에 따라 파이프라인 오케스트레이션 컴퓨팅 리소스를 자동으로 프로비저닝, 규모 조정 및 종료합니다.

**직관적인 사용자 경험** Pipelines은 시각적 편집기, SDK, API 또는 JSON 중 원하는 인터페이스를 통해 만들고 관리할 수 있습니다. 다양한 ML 단계를 드래그 앤 드롭하여 Amazon SageMaker Studio 시각적 인터페이스에서 파이프라인을 작성할 수 있습니다. 다음 스크린샷은 파이프라인용 Studio 시각적 편집기를 보여줍니다.

![\[Studio의 Pipelines용 시각적 드래그 앤 드롭 인터페이스 스크린샷\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


프로그래밍 방식으로 ML 워크플로를 관리하려는 경우 SageMaker Python SDK는 고급 오케스트레이션 기능을 제공합니다. 자세한 내용은 SageMaker Python SDK 설명서의 [Amazon SageMaker Pipelines](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html)을 참조하세요.

**AWS 통합** 파이프라인은 모든 SageMaker AI 기능 및 기타 AWS 서비스와 원활하게 통합되어 데이터 처리, 모델 훈련, 미세 조정, 평가, 배포 및 모니터링 작업을 자동화합니다. Pipelines에 SageMaker AI 기능을 통합하고 딥 링크를 사용하여 이를 탐색하여 대규모로 ML 워크플로를 만들고, 모니터링하고, 디버깅할 수 있습니다.

**비용 절감** Pipelines을 사용하면 SageMaker Studio 환경과 Pipelines이 오케스트레이션하는 기본 작업(예: SageMaker 훈련, SageMaker Processing, SageMaker AI 추론 및 Amazon S3 데이터 스토리지)에 대해서만 비용을 지불합니다.

**감사 가능성 및 계보 추적** Pipelines을 사용하면 기본 제공 버전 관리를 사용하여 파이프라인 업데이트 및 실행 기록을 추적할 수 있습니다. Amazon SageMaker ML Lineage Tracking을 사용하면 엔드투엔드 ML 개발 수명 주기에서 데이터 소스 및 데이터 소비자를 분석할 수 있습니다.

**Topics**
+ [

# Pipelines 개요
](pipelines-overview.md)
+ [

# Pipelines 작업
](pipelines-build.md)

# 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=(.*?);'}
    ],
)
```

# Pipelines 작업
<a name="pipelines-build"></a>

Amazon SageMaker Pipelines Python SDK 또는 Amazon SageMaker Studio의 드래그 앤 드롭 시각적 디자이너를 사용하여 ML 워크플로를 작성, 보기, 편집, 실행 및 모니터링할 수 있습니다.

다음 스크린샷은 Amazon SageMaker Pipelines을 만들고 관리하는 데 사용할 수 있는 시각적 디자이너를 보여줍니다.

![\[Studio의 Pipelines용 시각적 드래그 앤 드롭 인터페이스 스크린샷\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


파이프라인이 배포되면 Amazon SageMaker Studio를 사용하여 파이프라인의 방향성 비순환 그래프(DAG)를 보고 실행을 관리할 수 있습니다.SageMaker Studio를 사용하여 현재 및 과거 파이프라인에 대한 정보를 얻고, 실행을 비교하고, 실행의 DAG를 확인하고, 메타데이터 정보를 가져오는 등의 작업을 수행할 수 있습니다. Studio에서 파이프라인을 확인하는 방법을 알아보려면 [파이프라인 세부 정보 보기](pipelines-studio-list.md) 섹션을 참조하세요.

**Topics**
+ [

# 파이프라인 정의
](define-pipeline.md)
+ [

# 파이프라인 편집
](edit-pipeline-before-execution.md)
+ [

# 파이프라인 실행
](run-pipeline.md)
+ [

# 파이프라인 중지
](pipelines-studio-stop.md)
+ [

# 파이프라인 세부 정보 보기
](pipelines-studio-list.md)
+ [

# 파이프라인 실행 세부 정보 보기
](pipelines-studio-view-execution.md)
+ [

# 파이프라인 정의 파일 다운로드
](pipelines-studio-download.md)
+ [

# 파이프라인에서 실험 데이터에 액세스
](pipelines-studio-experiments.md)
+ [

# 파이프라인의 계보 추적
](pipelines-lineage-tracking.md)

# 파이프라인 정의
<a name="define-pipeline"></a>

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

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

![\[Studio의 Pipelines용 시각적 드래그 앤 드롭 인터페이스 스크린샷\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


다음 섹션에서 정의하는 파이프라인은 회귀 문제를 해결하여 물리적 측정치를 기반으로 전복의 수명을 판단합니다. 이 자습서의 콘텐츠가 포함된 Jupyter Notebook은 [Orchestrating Jobs with Amazon SageMaker Model Building Pipelines](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.html)을 참조하세요.

**참고**  
Github의 엔드 투 엔드 예시 [CustomerChurn 파이프라인](https://github.com/aws-samples/customer-churn-sagemaker-pipelines-sample/blob/main/pipelines/customerchurn/pipeline.py)에 나와 있는 것처럼 모델 위치를 훈련 단계의 속성으로 참조할 수 있습니다.

**Topics**

## 파이프라인 정의(파이프라인 디자이너)
<a name="create-pipeline-designer"></a>

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

### 처리 단계를 만드는 방법
<a name="create-processing-step"></a>

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

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

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

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

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

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

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

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

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

1. 오른쪽 사이드바의 나머지 필드를 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep)을 참조하세요.

### 훈련 단계 만들기
<a name="create-training-step"></a>

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

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

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

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

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

1. 오른쪽 사이드바의 나머지 필드를 작성합니다. 이러한 탭의 필드에 대한 자세한 내용은 [sagemaker.workflow.steps.TrainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep)을 참조하세요.

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

### 모델 등록 단계를 사용하여 모델 패키지 만들기
<a name="create-register-model-step"></a>

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

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

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. 이전 섹션에서 추가한 **모델 훈련** 단계에서 커서를 클릭하고 **모델 등록** 단계로 드래그하여 두 단계를 연결하는 엣지를 만듭니다.

### 모델 배포(엔드포인트) 단계를 사용하여 엔드포인트에 모델 배포
<a name="create-deploy-endpoint-step"></a>

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

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

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

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

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

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

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

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

### 파이프라인 파라미터 정의
<a name="define-pipeline-parameters"></a>

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

### 파이프라인 저장
<a name="save-pipeline"></a>

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

## 파이프라인 정의(SageMaker Python SDK)
<a name="create-pipeline-wrap"></a>

### 사전 조건
<a name="define-pipeline-prereq"></a>

 다음 자습서를 실행하려면 다음을 수행해야 합니다.
+ [노트북 인스턴스 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-create-ws.html)에 설명된 대로 노트북 인스턴스를 설정합니다. 그러면 역할에 Amazon S3에 대한 읽기 및 쓰기 권한이 부여되며 SageMaker AI에서 훈련, 배치 변환 및 처리 작업을 생성할 수 있습니다.
+ [역할 권한 정책 수정](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)에 표시된 대로 노트북에 자체 역할을 가져오고 전달할 수 있는 권한을 부여합니다. 다음 JSON 스니펫을 추가하여 이 정책을 역할에 연결합니다. `<your-role-arn>`을 노트북 인스턴스를 생성하는 데 사용된 ARN으로 바꿉니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iam:GetRole",
                  "iam:PassRole"
              ],
              "Resource": "arn:aws:iam::111122223333:role/role-name"
          }
      ]
  }
  ```

------
+  [Modifying a role trust policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-cli.html#roles-managingrole_edit-trust-policy-cli)의 단계에 따라 SageMaker AI 서비스 위탁자를 신뢰합니다. 역할의 신뢰 관계에 다음 명령문 부분을 추가합니다.

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

#### 환경 설정
<a name="define-pipeline-prereq-setup"></a>

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

```
import boto3
import sagemaker
import sagemaker.session
from sagemaker.workflow.pipeline_context import PipelineSession

region = boto3.Session().region_name
sagemaker_session = sagemaker.session.Session()
role = sagemaker.get_execution_role()
default_bucket = sagemaker_session.default_bucket()

pipeline_session = PipelineSession()

model_package_group_name = f"AbaloneModelPackageGroupName"
```

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

**중요**  
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 [SageMaker AI 리소스 태그 지정을 위한 권한 제공](security_iam_id-based-policy-examples.md#grant-tagging-permissions) 섹션을 참조하세요.  
SageMaker 리소스를 만들 수 있는 권한을 부여하는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md)에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

SageMaker AI 노트북 인스턴스에서 다음 단계를 실행하여 다음에 대한 단계를 포함하는 파이프라인을 만듭니다.
+ 사전 처리
+ 학습
+ 평가
+ 조건부 평가
+ 모델 등록

**참고**  
[ExecutionVariables](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#execution-variables) 및 [Join](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#execution-variables) 함수를 사용하여 출력 위치를 지정할 수 있습니다. 런타임 시 `ExecutionVariables`이 확인됩니다. 예를 들어, `ExecutionVariables.PIPELINE_EXECUTION_ID`는 현재 실행의 ID로 확인되며, 이 ID는 여러 실행에서 고유한 식별자로 사용될 수 있습니다.

#### 1단계: 데이터세트 다운로드
<a name="define-pipeline-data-download"></a>

이 노트북은 UCI Machine Learning 전복 데이터세트를 사용합니다. 데이터세트에는 다음과 같은 기능이 있습니다.
+ `length` - 전복의 가장 긴 껍데기 치수입니다.
+ `diameter` - 길이와 수직을 이루는 전복의 지름입니다.
+ `height` - 껍데기의 살이 들어 있는 전복의 높이입니다.
+ `whole_weight` - 전복 전체의 무게입니다.
+ `shucked_weight` - 전복에서 꺼낸 살의 무게입니다.
+ `viscera_weight` - 출혈 후 전복 내장의 무게입니다.
+ `shell_weight` - 살을 제거하고 건조시킨 후의 전복 껍데기의 무게입니다.
+ `sex` - 전복의 성별입니다. 'M', 'F', 'I' 중 하나이며, 여기서 'I'는 어린 전복입니다.
+ `rings` - 전복 껍데기에 있는 고리 개수입니다.

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

**데이터세트를 다운로드하려면**

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

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

1. 모델을 생성한 후 배치 변환을 위해 두 번째 데이터세트를 다운로드합니다.

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

#### 2단계: 파이프라인 파라미터 정의
<a name="define-pipeline-parameters"></a>

 이 코드 블록은 파이프라인의 다음 파라미터를 정의합니다.
+  `processing_instance_count` - 처리 작업의 인스턴스 수입니다.
+  `input_data` – 입력 데이터의 Amazon S3 위치입니다.
+  `batch_data` - 배치 변환을 위한 입력 데이터의 Amazon S3 위치입니다.
+  `model_approval_status` - 훈련된 모델을 CI/CD용으로 등록하기 위한 승인 상태입니다. 자세한 내용은 [SageMaker 프로젝트를 통한 MLOps 자동화](sagemaker-projects.md)섹션을 참조하세요.

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

processing_instance_count = ParameterInteger(
    name="ProcessingInstanceCount",
    default_value=1
)
model_approval_status = ParameterString(
    name="ModelApprovalStatus",
    default_value="PendingManualApproval"
)
input_data = ParameterString(
    name="InputData",
    default_value=input_data_uri,
)
batch_data = ParameterString(
    name="BatchData",
    default_value=batch_data_uri,
)
```

#### 3단계: 특성 엔지니어링을 위한 처리 단계 정의
<a name="define-pipeline-processing-feature"></a>

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

**처리 단계를 만들려면**

1.  처리 스크립트를 위한 디렉토리를 생성합니다.

   ```
   !mkdir -p abalone
   ```

1. `/abalone` 디렉터리에 다음 콘텐츠로 `preprocessing.py`라는 파일을 생성합니다. 이 사전 처리 스크립트는 입력 데이터에 대한 실행을 위해 처리 단계로 전달됩니다. 그런 다음 훈련 단계에서는 사전 처리된 훈련 특성과 레이블을 사용하여 모델을 훈련합니다. 평가 단계에서는 훈련된 모델과 사전 처리된 테스트 특성 및 레이블을 사용하여 모델을 평가합니다. 이 스크립트는 `scikit-learn`를 사용하여 다음을 수행할 수 있습니다.
   +  누락된 `sex`범주형 데이터를 채우고 훈련에 적합하도록 인코딩합니다.
   +  `rings` 및 `sex`을 제외한 모든 수치 필드를 조정하고 정규화합니다.
   +  데이터를 훈련, 테스트, 검증 데이터세트로 분할합니다.

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

1.  `SKLearnProcessor`의 인스턴스를 만들어 처리 단계로 전달합니다.

   ```
   from sagemaker.sklearn.processing import SKLearnProcessor
   
   
   framework_version = "0.23-1"
   
   sklearn_processor = SKLearnProcessor(
       framework_version=framework_version,
       instance_type="ml.m5.xlarge",
       instance_count=processing_instance_count,
       base_job_name="sklearn-abalone-process",
       sagemaker_session=pipeline_session,
       role=role,
   )
   ```

1. 처리 단계를 만들려면 `SKLearnProcessor`에서 이 단계는 입력 및 출력 채널, 생성된 `preprocessing.py`스크립트를 가져옵니다. 이는 SageMaker AI Python SDK의 프로세서 인스턴스의 `run` 메서드와 매우 유사합니다. `ProcessingStep`에 전달되는 `input_data`파라미터는 단계 자체의 입력 데이터입니다. 이 입력 데이터는 프로세서 인스턴스가 실행될 때 사용됩니다.

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

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

#### 4단계: 훈련 단계 정의
<a name="define-pipeline-training"></a>

이 섹션에서는 SageMaker AI [XGBoost Algorithm](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html)을 사용하여 처리 단계의 훈련 데이터 출력에 대해 모델을 훈련하는 방법을 보여줍니다.

**훈련 단계를 정의하려면**

1.  훈련에서 가져온 모델을 저장할 모델 경로를 지정합니다.

   ```
   model_path = f"s3://{default_bucket}/AbaloneTrain"
   ```

1. XGBoost 알고리즘과 입력 데이터세트에 대한 예측기를 구성합니다. 훈련 인스턴스 유형이 예측기에 전달됩니다. 일반적인 훈련 스크립트:
   + 입력 채널에서 데이터를 로드합니다.
   + 하이퍼파라미터를 사용하여 훈련을 구성합니다.
   + 모델을 훈련합니다.
   + 나중에 호스팅할 수 있도록 모델을 `model_dir`에 저장합니다.

   SageMaker AI는 훈련 작업 종료 시 모델을 `model.tar.gz`의 형태로 Amazon S3에 업로드합니다.

   ```
   from sagemaker.estimator import Estimator
   
   
   image_uri = sagemaker.image_uris.retrieve(
       framework="xgboost",
       region=region,
       version="1.0-1",
       py_version="py3",
       instance_type="ml.m5.xlarge"
   )
   xgb_train = Estimator(
       image_uri=image_uri,
       instance_type="ml.m5.xlarge",
       instance_count=1,
       output_path=model_path,
       sagemaker_session=pipeline_session,
       role=role,
   )
   xgb_train.set_hyperparameters(
       objective="reg:linear",
       num_round=50,
       max_depth=5,
       eta=0.2,
       gamma=4,
       min_child_weight=6,
       subsample=0.7,
       silent=0
   )
   ```

1. 예측기 인스턴스와 `ProcessingStep`의 속성을 사용하여 `TrainingStep`을 만듭니다. `"train"` 및 `"validation"` 출력 채널의 `S3Uri`를 `TrainingStep`에 전달합니다.  

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

#### 5단계: 모델 평가를 위한 처리 단계 정의
<a name="define-pipeline-processing-model"></a>

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

**모델 평가를 위한 처리 단계를 정의하려면**

1. `evaluation.py`라는 `/abalone`디렉터리에서 파일을 생성합니다. 이 스크립트는 모델 평가를 수행하는 처리 단계에서 사용됩니다. 훈련된 모델과 테스트 데이터세트를 입력으로 가져온 다음 분류 평가 지표가 포함된 JSON 파일을 생성합니다.

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

1.  `ProcessingStep`을 생성하는 데 사용되는 `ScriptProcessor`의 인스턴스를 생성합니다.

   ```
   from sagemaker.processing import ScriptProcessor
   
   
   script_eval = ScriptProcessor(
       image_uri=image_uri,
       command=["python3"],
       instance_type="ml.m5.xlarge",
       instance_count=1,
       base_job_name="script-abalone-eval",
       sagemaker_session=pipeline_session,
       role=role,
   )
   ```

1.  프로세서 인스턴스, 입력 및 출력 채널, `evaluation.py` 스크립트를 사용하여 `ProcessingStep`을 만듭니다. 다음을 전달합니다.
   + `step_train` 훈련 단계의 `S3ModelArtifacts` 속성
   + `step_process` 처리 단계의 `"test"` 출력 채널의 `S3Uri`

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

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

#### 6단계: 배치 변환을 위한 모델 만들기 단계 정의
<a name="define-pipeline-create-model"></a>

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

이 섹션에서는 훈련 단계의 출력에서 SageMaker AI 모델을 생성하는 방법을 소개합니다. 이 모델은 새 데이터세트의 배치 변환에 사용됩니다. 이 단계는 조건 단계로 전달되며 조건 단계가 `true`로 평가되는 경우에만 실행됩니다.

**배치 변환을 위한 모델 생성 단계를 정의하려면**

1.  SageMaker AI 모델을 생성합니다. `step_train` 훈련 단계에서 `S3ModelArtifacts`속성을 전달합니다.

   ```
   from sagemaker.model import Model
   
   
   model = Model(
       image_uri=image_uri,
       model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
       sagemaker_session=pipeline_session,
       role=role,
   )
   ```

1. SageMaker AI 모델의 모델 입력을 정의합니다.

   ```
   from sagemaker.inputs import CreateModelInput
   
   
   inputs = CreateModelInput(
       instance_type="ml.m5.large",
       accelerator_type="ml.eia1.medium",
   )
   ```

1. 정의한 `CreateModelInput` 및 SageMaker AI 모델 인스턴스를 사용하여 `CreateModelStep`을 생성합니다.

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

#### 7단계: 배치 변환을 수행할 변환 단계 정의
<a name="define-pipeline-transform"></a>

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

**배치 변환을 수행할 변환 단계를 정의하려면**

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

   ```
   from sagemaker.transformer import Transformer
   
   
   transformer = Transformer(
       model_name=step_create_model.properties.ModelName,
       instance_type="ml.m5.xlarge",
       instance_count=1,
       output_path=f"s3://{default_bucket}/AbaloneTransform"
   )
   ```

1. 정의한 변환기 인스턴스와 `batch_data`파이프라인 파라미터를 사용하여 `TransformStep`을 생성합니다.

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

#### 8단계: 모델 패키지를 만들기 위한 모델 등록 단계 정의
<a name="define-pipeline-register"></a>

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

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

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

**레지스터 모델 단계를 정의하여 모델 패키지를 만들려면**
+  훈련 단계에서 사용한 예측기 인스턴스를 사용하여 `RegisterModel`단계를 생성합니다. `step_train` 훈련 단계에서 `S3ModelArtifacts`속성을 전달하고 `ModelPackageGroup`을 지정합니다. Pipelines은 사용자를 위해 `ModelPackageGroup`을 만듭니다.

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

#### 9단계: 모델 정확도를 확인하기 위한 조건 단계 정의
<a name="define-pipeline-condition"></a>

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

**모델 정확도를 확인하기 위해 조건 단계를 정의하려면**

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

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

1.  `ConditionStep`을 생성합니다. `ConditionEquals` 조건을 전달한 다음, 조건이 충족되면 모델 패키지 등록 및 배치 변환 단계를 다음 단계로 설정합니다.

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

#### 10단계: 파이프라인 생성
<a name="define-pipeline-pipeline"></a>

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

**파이프라인을 만들려면**

1.  파이프라인에 `name`, `parameters`, `steps`을 정의합니다. 이름은 `(account, region)`페어 내에서 고유해야 합니다.
**참고**  
단계는 파이프라인의 단계 목록 또는 조건 단계의 if/else 단계 목록에 한 번만 나타날 수 있습니다. 둘 다에 모두 나타날 수는 없습니다.

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

1.  (선택 사항) JSON 파이프라인 정의를 검사하여 형식이 올바른지 확인합니다.

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

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

## 파이프라인 정의(JSON)
<a name="collapsible-section-1"></a>

[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_pipeline) 또는 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html)을 사용하여 파이프라인을 만들 수도 있습니다. 파이프라인을 생성하려면 파이프라인의 각 단계를 정의하는 JSON 객체인 파이프라인 정의가 필요합니다. SageMaker SDK는 파이프라인 정의를 구성하는 간단한 방법을 제공하며, 앞서 언급한 모든 API와 함께 사용하여 파이프라인 자체를 생성할 수 있습니다. SDK를 사용하지 않는 경우 사용자는 SageMaker Python SDK에서 제공하는 오류 검사 없이 원시 JSON 정의를 작성하여 파이프라인을 생성해야 합니다. 파이프라인 JSON 정의의 스키마를 보려면 [SageMaker AI Pipeline Definition JSON Schema](https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/)를 참조하세요. 다음 코드 샘플은 SageMaker AI Pipelines 정의 JSON 객체의 예시를 보여줍니다.

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

 **다음 단계:** [파이프라인 실행](run-pipeline.md) 

# 파이프라인 편집
<a name="edit-pipeline-before-execution"></a>

파이프라인을 실행하기 전에 변경하려면 다음을 수행합니다.

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio를 엽니다.

1. Studio의 왼쪽 탐색 창에서 **파이프라인**을 선택합니다.

1. 파이프라인 이름을 선택하면 파이프라인에 대한 세부 정보를 볼 수 있습니다.

1. **실행** 탭을 선택합니다.

1. 파이프라인 실행의 이름을 선택합니다.

1. **편집**을 선택하여 파이프라인 디자이너를 엽니다.

1. 필요에 따라 단계 간 엣지 또는 단계 구성을 업데이트하고 **저장**을 클릭합니다.

   편집 후 파이프라인을 저장하면 새 버전 번호가 자동으로 생성됩니다.

1. **실행**을 선택합니다.

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

파이프라인의 단계를 방향성 비순환 그래프(DAG)로 정의한 후 파이프라인을 실행하여 DAG에 정의된 단계를 실행할 수 있습니다. 다음 연습에서는 Amazon SageMaker Studio의 드래그 앤 드롭 시각적 편집기 또는 Amazon SageMaker Python SDK를 사용하여 Amazon SageMaker AI 파이프라인을 실행하는 방법을 보여줍니다.

## 파이프라인 실행(파이프라인 디자이너)
<a name="run-pipeline-designer"></a>

파이프라인의 새 실행을 시작하려면 다음을 수행합니다.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio를 엽니다.

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택하면 파이프라인 세부 정보 뷰가 열립니다.

1. 오른쪽 상단에서 **시각적 편집기**를 선택합니다.

1. 최신 버전에서 실행을 시작하려면 **실행**을 선택합니다.

1. 특정 버전에서 실행을 시작하려면 다음 단계를 따릅니다.
   + 하단 도구 모음에서 버전 아이콘을 선택하여 버전 패널을 엽니다.
   + 실행할 파이프라인 버전을 선택합니다.
   + 버전 항목 위로 마우스를 가져가서 점 3개 메뉴가 표시되면 **실행**을 선택합니다.
   + (선택 사항) 파이프라인의 이전 버전을 보려면 버전 패널의 점 3개 메뉴에서 **미리 보기**를 선택합니다. 알림 표시줄에서 **편집**을 선택하여 버전을 편집할 수도 있습니다.

**참고**  
파이프라인이 실패하면 상태 배너에 **실패** 상태가 표시됩니다. 실패한 단계의 문제를 해결한 후 상태 배너에서 **재시도**를 선택하여 해당 단계부터 파이프라인 실행을 재개합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. 파이프라인 목록을 이름으로 좁히려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택합니다.

1. 실행 목록의 **실행** 또는 **그래프** 탭에서 **실행 생성**을 선택합니다.

1. 다음 필수 정보를 입력하거나 업데이트합니다.
   + **이름** – AWS 리전의 계정 내에서 고유해야 합니다.
   + **처리 인스턴스 수** – 처리에 사용할 인스턴스 수입니다.
   + **모델 승인 상태** – 사용자 편의를 위한 정보입니다.
   + **InputDataUrl** – 입력 데이터의 Amazon S3 URI입니다.

1. **시작**을 선택합니다.

파이프라인이 실행되면 상태 배너에서 **세부 정보 보기**를 선택하여 실행 세부 정보를 볼 수 있습니다.

실행을 중지하려면 상태 배너에서 **중지**를 선택합니다. 중지된 위치에서 실행을 재개하려면 상태 배너에서 **재개**를 선택합니다.

**참고**  
파이프라인이 실패하면 상태 배너에 **실패** 상태가 표시됩니다. 실패한 단계의 문제를 해결한 후 상태 배너에서 **재시도**를 선택하여 해당 단계부터 파이프라인 실행을 재개합니다.

------

## 파이프라인 실행(SageMaker Python SDK)
<a name="run-pipeline-sdk"></a>

SageMaker AI Python SDK를 사용하여 파이프라인 정의를 생성한 후 이를 SageMaker AI에 제출하여 실행을 시작할 수 있습니다. 다음 튜토리얼에서는 파이프라인을 제출하고, 실행을 시작하고, 해당 실행의 결과를 검사하고, 파이프라인을 삭제하는 방법을 보여줍니다.

**Topics**
+ [

### 사전 조건
](#run-pipeline-prereq)
+ [

### 1단계: 파이프라인 시작
](#run-pipeline-submit)
+ [

### 2단계: 파이프라인 실행 검사
](#run-pipeline-examine)
+ [

### 3단계: 파이프라인 실행을 위한 기본 파라미터 재정의
](#run-pipeline-parametrized)
+ [

### 4단계: 파이프라인 실행 중지 및 삭제
](#run-pipeline-delete)

### 사전 조건
<a name="run-pipeline-prereq"></a>

이 튜토리얼을 시작하려면 다음이 필요합니다.
+  SageMaker 노트북 인스턴스.  
+  Pipelines 파이프라인 정의입니다. 이 튜토리얼에서는 [파이프라인 정의](define-pipeline.md)튜토리얼을 완료하여 생성한 파이프라인 정의를 사용하고 있다고 가정합니다.

### 1단계: 파이프라인 시작
<a name="run-pipeline-submit"></a>

먼저, 파이프라인을 시작해야 합니다.

**파이프라인을 시작하려면**

1. JSON 파이프라인 정의를 검사하여 형식이 올바른지 확인합니다.

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

1. 파이프라인 정의를 Pipelines 서비스에 제출하여 파이프라인이 존재하지 않는 경우 파이프라인을 만들거나, 파이프라인이 있는 경우 파이프라인을 업데이트합니다.전달된 역할은 Pipelines에서 단계에 정의된 모든 작업을 만드는 데 사용됩니다.

   ```
   pipeline.upsert(role_arn=role)
   ```

1. 파이프라인 실행을 시작합니다.

   ```
   execution = pipeline.start()
   ```

### 2단계: 파이프라인 실행 검사
<a name="run-pipeline-examine"></a>

다음으로 파이프라인 실행을 검사해야 합니다.

**파이프라인 실행을 검사하려면**

1.  파이프라인 실행 상태를 설명하여 파이프라인이 성공적으로 생성되고 시작되었는지 확인합니다.

   ```
   execution.describe()
   ```

1. 실행이 마칠 때까지 기다립니다.

   ```
   execution.wait()
   ```

1. 실행 단계 및 상태를 나열합니다.

   ```
   execution.list_steps()
   ```

   출력은 다음과 같아야 합니다.

   ```
   [{'StepName': 'AbaloneTransform',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 27, 870000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 45, 50, 492000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'TransformJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:transform-job/pipelines-cfvy1tjuxdq8-abalonetransform-ptyjoef3jy'}}},
    {'StepName': 'AbaloneRegisterModel',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 929000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 28, 15000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'RegisterModel': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:model-package/abalonemodelpackagegroupname/1'}}},
    {'StepName': 'AbaloneCreateModel',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 895000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 27, 708000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'Model': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:model/pipelines-cfvy1tjuxdq8-abalonecreatemodel-jl94rai0ra'}}},
    {'StepName': 'AbaloneMSECond',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 25, 558000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 329000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'Condition': {'Outcome': 'True'}}},
    {'StepName': 'AbaloneEval',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 37, 34, 767000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 18, 80000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:processing-job/pipelines-cfvy1tjuxdq8-abaloneeval-zfraozhmny'}}},
    {'StepName': 'AbaloneTrain',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 34, 55, 867000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 37, 34, 34000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'TrainingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:training-job/pipelines-cfvy1tjuxdq8-abalonetrain-tavd6f3wdf'}}},
    {'StepName': 'AbaloneProcess',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 30, 27, 160000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 34, 48, 390000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:processing-job/pipelines-cfvy1tjuxdq8-abaloneprocess-mgqyfdujcj'}}}]
   ```

1. 파이프라인 실행이 완료되면 Amazon S3에서 결과 `evaluation.json`파일을 다운로드하여 보고서를 검사합니다.

   ```
   evaluation_json = sagemaker.s3.S3Downloader.read_file("{}/evaluation.json".format(
       step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"]
   ))
   json.loads(evaluation_json)
   ```

### 3단계: 파이프라인 실행을 위한 기본 파라미터 재정의
<a name="run-pipeline-parametrized"></a>

다른 파이프라인 파라미터를 지정하여 기본값을 재정의함으로써 파이프라인을 추가로 실행할 수 있습니다.

**기본 파라미터를 재정의하려면**

1. 파이프라인 실행을 생성합니다. 그러면 모델 승인 상태 재정의가 “승인됨”으로 설정된 상태에서 또 다른 파이프라인 실행이 시작됩니다. 즉, `RegisterModel`단계에서 생성된 모델 패키지 버전은 SageMaker 프로젝트와 같은 CI/CD 파이프라인을 통해 자동으로 배포할 준비가 됩니다. 자세한 내용은 [SageMaker 프로젝트를 통한 MLOps 자동화](sagemaker-projects.md)섹션을 참조하세요.

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

1. 실행이 마칠 때까지 기다립니다.

   ```
   execution.wait()
   ```

1. 실행 단계 및 상태를 나열합니다.

   ```
   execution.list_steps()
   ```

1. 파이프라인 실행이 완료되면 Amazon S3에서 결과 `evaluation.json`파일을 다운로드하여 보고서를 검사합니다.

   ```
   evaluation_json = sagemaker.s3.S3Downloader.read_file("{}/evaluation.json".format(
       step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"]
   ))
   json.loads(evaluation_json)
   ```

### 4단계: 파이프라인 실행 중지 및 삭제
<a name="run-pipeline-delete"></a>

파이프라인 사용을 마치면 진행 중인 실행을 중단하고 파이프라인을 삭제할 수 있습니다.

**파이프라인 실행 중지 및 삭제하려면**

1. 파이프라인 실행을 중지합니다.

   ```
   execution.stop()
   ```

1. 파이프라인을 삭제합니다.

   ```
   pipeline.delete()
   ```

# 파이프라인 중지
<a name="pipelines-studio-stop"></a>

Amazon SageMaker Studio 콘솔에서 파이프라인 실행을 중지할 수 있습니다.

Amazon SageMaker Studio 콘솔에서 파이프라인 실행을 중지하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택합니다.

1. **실행** 탭을 선택합니다.

1. 중지할 실행을 선택합니다.

1. **중지**를 선택합니다. 중지된 위치에서 실행을 재개하려면 **재개**를 선택합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. 파이프라인 목록을 이름으로 좁히려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 실행을 중지하려면 파이프라인의 상태 배너에서 **세부 정보 보기**를 선택한 다음 **중지**를 선택합니다. 중지된 위치에서 실행을 재개하려면 **재개**를 선택합니다.

------

# 파이프라인 세부 정보 보기
<a name="pipelines-studio-list"></a>

SageMaker AI 파이프라인의 세부 정보를 보고 파라미터, 단계의 종속성을 이해하거나 진행 상황 및 상태를 모니터링할 수 있습니다. 이를 통해 워크플로 문제를 해결하거나 최적화할 수 있습니다. Amazon SageMaker Studio 콘솔을 사용하여 지정된 파이프라인의 세부 정보에 액세스하고 실행 기록, 정의, 파라미터 및 메타데이터를 탐색할 수 있습니다.

또는 파이프라인이 SageMaker AI 프로젝트와 연결된 경우 프로젝트의 세부 정보 페이지에서 파이프라인 세부 정보에 액세스할 수 있습니다. 자세한 내용은 [프로젝트 리소스 보기](sagemaker-projects-resources.md) 단원을 참조하십시오.

SageMaker AI 파이프라인의 세부 정보를 보려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

**참고**  
모델 재압축은 파이프라인이 Amazon S3에 업로드하고 SageMaker AI 엔드포인트에 모델을 배포하는 데 사용할 사용자 지정 스크립트를 압축된 모델 파일(model.tar.gz)에 포함해야 할 때 발생합니다. SageMaker AI 파이프라인이 모델을 훈련하고 모델 레지스트리에 등록할 때, 훈련 작업의 훈련된 모델 출력에 사용자 지정 추론 스크립트가 포함되어야 하는 *경우* 재압축 단계를 도입합니다. 재압축 단계에서는 모델의 압축을 해제하고, 새 스크립트를 추가하고, 모델을 다시 압축합니다. 파이프라인을 실행하면 재압축 단계가 훈련 작업으로 추가됩니다.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택하면 파이프라인에 대한 세부 정보를 볼 수 있습니다.

1. 파이프라인 세부 정보를 보려면 다음 탭 중 하나를 선택합니다.
   + **실행** - 실행에 대한 세부 정보입니다.
   + **그래프** - 모든 단계를 포함한 파이프라인 그래프입니다.
   + **파라미터** - 파이프라인과 관련된 실행 파라미터 및 지표입니다.
   + **정보** - 태그, 파이프라인 Amazon 리소스 이름(ARN) 및 역할 ARN과 같은 파이프라인과 연결된 메타데이터입니다. 이 페이지에서 파이프라인 설명을 편집할 수도 있습니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. 파이프라인 목록을 이름으로 좁히려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택하면 파이프라인에 대한 세부 정보를 볼 수 있습니다. 파이프라인 세부 정보 탭이 열리고 파이프라인 실행 목록이 표시됩니다. 실행을 시작하거나 다른 탭 중 하나를 선택하여 파이프라인에 대한 자세한 내용을 확인할 수 있습니다. **속성 검사기** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/gears.png))을 사용하여 표시할 열을 선택합니다.

1. 파이프라인 세부 정보 페이지에서 다음 탭 중 하나를 선택하여 파이프라인에 대한 세부 정보를 확인합니다.
   + **실행** - 실행에 대한 세부 정보입니다. 이 탭 또는 **그래프** 탭에서 실행을 생성할 수 있습니다.
   + **그래프** - 파이프라인의 DAG입니다.
   + **파라미터** - 모델 승인 상태를 포함합니다.
   + **설정** - 파이프라인과 관련된 메타데이터입니다. 이 탭에서 파이프라인 정의 파일을 다운로드하고 파이프라인 이름과 설명을 편집할 수 있습니다.

------

# 파이프라인 실행 세부 정보 보기
<a name="pipelines-studio-view-execution"></a>

특정 SageMaker AI 파이프라인 실행의 세부 정보를 검토할 수 있습니다. 검토하면 다음과 같이 도움이 됩니다.
+ 실패한 단계 또는 예상치 못한 오류와 같이 실행 중에 발생했을 수 있는 문제를 식별하고 해결합니다.
+ 다양한 파이프라인 실행 결과를 비교하여 입력 데이터 또는 파라미터의 변경 사항이 전체 워크플로에 미치는 영향을 이해합니다.
+ 병목 현상과 최적화 기회를 식별합니다.

파이프라인 실행의 세부 정보를 보려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택하면 파이프라인에 대한 세부 정보를 볼 수 있습니다.

1. **실행** 탭을 선택합니다.

1. 보려는 파이프라인 실행의 이름을 선택합니다. 해당 실행에 대한 파이프라인 그래프가 나타납니다.

1. 그래프에서 파이프라인 단계를 선택하여 오른쪽 사이드바에서 단계 설정을 확인합니다.

1. 더 많은 파이프라인 세부 정보를 보려면 다음 탭 중 하나를 선택합니다.
   + **정의** - 모든 단계를 포함한 파이프라인 그래프입니다.
   + **파라미터** - 모델 승인 상태를 포함합니다.
   + **세부 정보** - 태그, 파이프라인 Amazon 리소스 이름(ARN) 및 역할 ARN과 같은 파이프라인과 연결된 메타데이터입니다. 이 페이지에서 파이프라인 설명을 편집할 수도 있습니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. 파이프라인 목록을 이름으로 좁히려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택합니다. 파이프라인의 **실행** 페이지가 열립니다.

1. **실행** 페이지에서 실행 이름을 선택하여 실행에 대한 세부 정보를 확인합니다. 실행 세부 정보 탭이 열리고 파이프라인에 단계 그래프가 표시됩니다.

1. 이름으로 단계를 검색하려면 검색 필드에 단계 이름과 일치하는 문자를 입력합니다. 그래프의 오른쪽 하단에 있는 크기 조정 아이콘을 사용하여 그래프를 확대 및 축소하고, 그래프를 화면에 맞추고, 그래프를 전체 화면으로 확장합니다. 그래프의 특정 부분에 초점을 맞추려면 그래프의 빈 영역을 선택하고 그래프를 해당 영역의 가운데로 드래그하면 됩니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/yosemite/execution-graph-w-input.png)

1. 그래프에 있는 파이프라인 단계 중 하나를 선택하면 단계에 대한 세부 정보를 볼 수 있습니다. 위 스크린샷에서는 훈련 단계가 선택되고 다음과 같은 탭이 표시됩니다.
   + **입력** - 훈련 입력입니다. 입력 소스가 Amazon Simple Storage Service(S3)에서 가져온 경우, 링크를 선택하여 Amazon S3 콘솔의 파일을 봅니다.
   + **출력** - 훈련 결과(예: 지표, 차트, 파일, 평가 결과 등)입니다. 그래프는 [Tracker](https://sagemaker-experiments.readthedocs.io/en/latest/tracker.html#smexperiments.tracker.Tracker.log_precision_recall) API를 사용하여 생성되었습니다.
   + **로그** - 단계에서 생성된 Amazon CloudWatch 로그입니다.
   + **정보** - 단계와 관련된 파라미터 및 메타데이터입니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/yosemite/execution-graph-info.png)

------

# 파이프라인 정의 파일 다운로드
<a name="pipelines-studio-download"></a>

Amazon SageMaker Studio UI에서 직접 SageMaker AI 파이프라인의 정의 파일을 다운로드할 수 있습니다. 이 파이프라인 정의 파일은 다음 용도로 사용할 수 있습니다.
+ 백업 및 복원: 다운로드한 파일을 사용하여 파이프라인 구성의 백업을 만듭니다. 이 백업은 인프라 장애 또는 우발적인 변경 시 복원할 수 있습니다.
+ 버전 관리: 파이프라인 정의 파일을 소스 제어 시스템에 저장하여 파이프라인의 변경 사항을 추적하고 필요한 경우 이전 버전으로 되돌립니다.
+ 프로그래밍 방식 상호 작용: 파이프라인 정의 파일을 SageMaker SDK 또는 AWS CLI에 대한 입력으로 사용합니다.
+ 자동화 프로세스와의 통합: 파이프라인 정의를 CI/CD 워크플로 또는 기타 자동화 프로세스에 통합합니다.

파이프라인의 정의 파일을 다운로드하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택합니다. **실행** 페이지가 열리고 파이프라인 실행 목록이 표시됩니다.

1. **실행** 페이지에 남아 있거나 파이프라인 실행 테이블 왼쪽의 **그래프**, **정보** 또는 **파라미터** 페이지를 선택합니다. 이러한 페이지에서 파이프라인 정의를 다운로드할 수 있습니다.

1. 페이지 오른쪽 상단에서 세로 줄임표를 선택하고 **파이프라인 정의 다운로드(JSON)**를 선택합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. 파이프라인 목록을 이름으로 좁히려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. 파이프라인 이름을 선택합니다.

1. **설정** 탭을 선택합니다.

1. **파이프라인 정의 파일 다운로드**를 선택합니다.

------

# 파이프라인에서 실험 데이터에 액세스
<a name="pipelines-studio-experiments"></a>

**참고**  
SageMaker Experiments는 Studio Classic에서만 제공되는 기능입니다.

파이프라인을 만들고 [pipeline\$1experiment\$1config](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.pipeline_experiment_config)를 지정하면, Pipelines은 다음과 같은 SageMaker Experiments 엔터티가 존재하지 않는 경우 기본적으로 만듭니다.
+ 파이프라인에 대한 실험
+ 파이프라인의 모든 실행을 위한 실행 그룹
+ 파이프라인 단계에서 생성된 각 SageMaker AI 작업에 대한 실행

실험이 파이프라인과 통합되는 방법에 대한 자세한 내용은 [Amazon SageMaker Experiments 통합](pipelines-experiments.md) 섹션을 참조하세요. SageMaker Experiments에 대한 자세한 내용은 [Studio Classic의 Amazon SageMaker Experiments](experiments.md) 섹션을 참조하세요.

파이프라인 실행 목록 또는 실험 목록에서 파이프라인과 관련된 실행 목록을 가져올 수 있습니다.

**파이프라인 실행 목록에서 실행 목록을 보려면**

1. 파이프라인 실행 목록을 보려면 [파이프라인 세부 정보 보기](pipelines-studio-list.md)의 *Studio Classic* 탭에서 처음 다섯 단계를 따릅니다.

1. 화면 오른쪽 상단에서 **필터** 아이콘(![\[Funnel or filter icon representing data filtering or narrowing down options.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/jumpstart/jumpstart-filter-icon.png))을 선택합니다.

1. **실험** 탭을 선택합니다. 파이프라인이 생성될 때 실험 통합이 비활성화되지 않은 경우 실험 이름이 실행 목록에 표시됩니다.
**참고**  
실험 통합은 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) v2.41.0에 도입되었습니다. 이전 버전의 SDK로 생성한 파이프라인은 기본적으로 실험에 통합되지 않습니다.

1. 원하는 실험을 선택하면 해당 실험과 관련된 실행 그룹 및 실행을 볼 수 있습니다.

**실험 목록에서 실행 목록을 보려면**

1. Studio Classic 왼쪽 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **실험**을 선택합니다.

1. 검색 막대 또는 **필터** 아이콘(![\[Funnel or filter icon representing data filtering or narrowing down options.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/jumpstart/jumpstart-filter-icon.png))을 사용하여 파이프라인에서 만든 실험으로 목록을 필터링합니다.

1. 실험 이름을 열고 파이프라인에서 만든 실행 목록을 확인합니다.

# 파이프라인의 계보 추적
<a name="pipelines-lineage-tracking"></a>

이 자습서에서는 Amazon SageMaker Studio를 사용하여 Amazon SageMaker AI ML 파이프라인의 계보를 추적합니다.

이 파이프라인은 [Amazon SageMaker 예시 GitHub 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples)의 [Amazon SageMaker 모델 구축 파이프라인 오케스트레이션 작업](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.html) 노트북에 의해 생성되었습니다. 파이프라인 생성 방법에 대한 자세한 내용은 [파이프라인 정의](define-pipeline.md)섹션을 참조하세요.

스튜디오의 계보 추적은 방향성 비순환 그래프(DAG)를 중심으로 이루어집니다. DAG는 파이프라인의 단계를 나타냅니다. DAG에서 모든 단계에서 다른 단계까지의 계보를 추적할 수 있습니다. 다음 다이어그램은 파이프라인의 단계를 보여줍니다. 이러한 단계는 스튜디오에서 DAG로 표시됩니다.

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


Amazon SageMaker Studio 콘솔에서 파이프라인의 계보를 추적하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

**파이프라인의 계보를 추적하려면**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

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

1. (선택 사항) 파이프라인 목록을 이름으로 필터링하려면 검색 필드에 파이프라인 이름의 전체 또는 일부를 입력합니다.

1. **이름** 열에서 파이프라인 이름을 선택하여 파이프라인에 대한 세부 정보를 확인합니다.

1. **실행** 탭을 선택합니다.

1. **실행** 테이블의 **이름** 열에서 보려는 파이프라인 실행의 이름을 선택합니다.

1. **실행** 페이지의 오른쪽 상단에서 세로 줄임표를 선택하고 **파이프라인 정의 다운로드(JSON)**를 선택합니다. 파일을 보고 파이프라인 그래프가 어떻게 정의되었는지 확인할 수 있습니다.

1. **편집**을 선택하여 파이프라인 디자이너를 엽니다.

1. 캔버스의 오른쪽 상단 모서리에 있는 크기 조정 및 확대/축소 컨트롤을 사용하여 그래프를 확대 및 축소하거나, 그래프를 화면에 맞추거나, 그래프를 전체 화면으로 확장할 수 있습니다.

1. 훈련, 검증 및 테스트 데이터세트를 보려면 다음 단계를 완료하세요.

   1. 파이프라인 그래프에서 처리 단계를 선택합니다.

   1. 오른쪽 사이드바에서 **개요** 탭을 선택합니다.

   1. **파일** 섹션에서 훈련, 검증 및 테스트 데이터세트에 대한 Amazon S3 경로를 찾습니다.

1. 모델 아티팩트를 보려면 다음 단계를 완료하세요.

   1. 파이프라인 그래프에서 훈련 단계를 선택합니다.

   1. 오른쪽 사이드바에서 **개요** 탭을 선택합니다.

   1. **파일** 섹션에서 모델 아티팩트에 대한 Amazon S3 경로를 찾습니다.

1. 모델 패키지 ARN을 찾으려면 다음 단계를 완료하세요.

   1. 모델 등록 단계를 선택합니다.

   1. 오른쪽 사이드바에서 **개요** 탭을 선택합니다.

   1. **파일** 섹션에서 모델 패키지의 ARN을 찾습니다.

------
#### [ Studio Classic ]

**파이프라인의 계보를 추적하려면**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 스튜디오 왼쪽 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **파이프라인**을 선택합니다.

1. **검색** 상자를 사용하여 파이프라인 목록을 필터링합니다.

1. `AbalonePipeline` 파이프라인을 선택하여 실행 목록과 파이프라인에 대한 기타 세부 정보를 볼 수 있습니다.

1. 오른쪽 사이드바에서 **속성 검사기** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/gears.png))을 선택하여 보려는 속성을 선택할 수 있는 **테이블 속성** 창을 엽니다.

1. **설정** 탭을 선택한 다음 **파이프라인 정의 파일 다운로드**를 선택합니다. 파일을 보고 파이프라인 그래프가 어떻게 정의되었는지 확인할 수 있습니다.

1. **실행** 탭에서 실행 목록의 첫 번째 행을 선택하여 실행 그래프와 실행에 대한 기타 세부 정보를 볼 수 있습니다. 참고로 그래프는 튜토리얼 시작 부분에 표시된 다이어그램과 일치합니다.

   그래프의 오른쪽 하단에 있는 크기 조정 아이콘을 사용하여 그래프를 확대 및 축소하고, 그래프를 화면에 맞추거나 그래프를 전체 화면으로 확장합니다. 그래프의 특정 부분에 초점을 맞추려면 그래프의 빈 영역을 선택하고 그래프를 해당 영역의 가운데로 드래그하면 됩니다. 그래프 오른쪽 아래에 있는 삽입 그림은 그래프 내 위치를 표시합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/yosemite/pipeline-tutorial-execution-graph.png)

1. **그래프** 탭에서 `AbaloneProcess`단계를 선택하면 단계에 대한 세부 정보를 볼 수 있습니다.

1. **파일** 아래의 **출력** 탭에서 훈련, 검증 및 테스트 데이터세트에 대한 Amazon S3 경로를 찾을 수 있습니다.
**참고**  
전체 경로를 보려면 경로를 마우스 오른쪽 버튼으로 클릭한 다음 **셀 내용 복사**를 선택합니다.

   ```
   s3://sagemaker-eu-west-1-acct-id/sklearn-abalone-process-2020-12-05-17-28-28-509/output/train
   s3://sagemaker-eu-west-1-acct-id/sklearn-abalone-process-2020-12-05-17-28-28-509/output/validation
   s3://sagemaker-eu-west-1-acct-id/sklearn-abalone-process-2020-12-05-17-28-28-509/output/test
   ```

1. `AbaloneTrain` 단계를 선택합니다.

1. **파일** 아래의 **출력** 탭에서 모델 아티팩트에 대한 Amazon S3 경로를 찾습니다.

   ```
   s3://sagemaker-eu-west-1-acct-id/AbaloneTrain/pipelines-6locnsqz4bfu-AbaloneTrain-NtfEpI0Ahu/output/model.tar.gz
   ```

1. `AbaloneRegisterModel` 단계를 선택합니다.

1. **파일** 아래의 **출력** 탭에서 모델 패키지의 ARN을 찾습니다.

   ```
   arn:aws:sagemaker:eu-west-1:acct-id:model-package/abalonemodelpackagegroupname/2
   ```

------

# Kubernetes 오케스트레이션
<a name="kubernetes-workflows"></a>

Kubernetes용 SageMaker AI Operators와 Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하여 SageMaker 훈련 및 추론 작업을 오케스트레이션할 수 있습니다. Kubernetes용 SageMaker AI Operator를 사용하면 Kubernetes를 사용하는 개발자와 데이터 과학자가 SageMaker AI에서 기계 학습(ML) 모델을 훈련, 조정 및 배포하는 작업을 더 쉽게 수행할 수 있습니다. Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하면 데이터 처리 및 훈련 작업을 Kubernetes 클러스터에서 SageMaker AI의 기계 학습에 최적화된 관리형 서비스로 이동할 수 있습니다.

**Topics**
+ [

# Kubernetes용 SageMaker AI Operators
](kubernetes-sagemaker-operators.md)
+ [

# Kubeflow Pipelines용 SageMaker AI 구성 요소
](kubernetes-sagemaker-components-for-kubeflow-pipelines.md)

# Kubernetes용 SageMaker AI Operators
<a name="kubernetes-sagemaker-operators"></a>

Kubernetes용 SageMaker AI Operator를 사용하면 Kubernetes를 사용하는 개발자와 데이터 과학자가 SageMaker AI에서 기계 학습(ML) 모델을 훈련, 조정 및 배포하는 작업을 더 쉽게 수행할 수 있습니다. 이러한 SageMaker AI Operators를 Amazon Elastic Kubernetes Service(Amazon EKS)의 Kubernetes 클러스터에 설치하여 Kubernetes API 및 `kubectl` 등의 명령줄 Kubernetes 도구를 사용하여 기본적으로 SageMaker AI 작업을 생성할 수 있습니다. 이 안내서에서는 운영자를 설정하고 사용하여 Kubernetes 클러스터에서 SageMaker AI의 모델 훈련, 하이퍼파라미터 조정 또는 추론(실시간 및 배치)을 실행하는 방법을 보여줍니다. 이 장의 절차와 지침은 사용자가 Kubernetes와 그 기본 명령을 잘 알고 있다고 가정합니다.

**중요**  
[Kubernetes용 SageMaker Operators ](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)오리지널 버전의 개발 및 기술 지원을 중단합니다.  
현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.  
마이그레이션 단계에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)섹션을 참조하세요.  
Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

**참고**  
이러한 연산자를 사용하는 데 따르는 추가 요금은 없습니다. 이러한 운영자를 통해 사용하는 모든 SageMaker AI 리소스에 대해서는 요금이 부과됩니다.

## 연산자란 무엇인가요?
<a name="kubernetes-sagemaker-operators-overview"></a>

Kubernetes 연산자는 Kubernetes 사용자를 대신하여 애플리케이션을 관리하는 애플리케이션 컨트롤러입니다. 제어 영역의 컨트롤러는 자신이 제어하는 애플리케이션의 상태를 규제하기 위해 중앙 상태 관리자(ETCD)를 수신하는 다양한 제어 루프를 포함합니다. 이러한 애플리케이션의 예시로는 [클라우드 컨트롤러 관리자](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) 및 `[kube-controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/)`등이 있습니다. 연산자는 일반적으로 원시 Kubernetes API보다 높은 수준의 추상화를 제공하므로 사용자가 애플리케이션을 더 쉽게 배포하고 관리할 수 있습니다. Kubernetes에 새로운 기능을 추가하기 위해 개발자는 애플리케이션별 또는 도메인별 로직 및 구성 요소가 포함된 **사용자 지정 리소스**를 생성하여 Kubernetes API를 확장할 수 있습니다. Kubernetes의 연산자를 사용하면 사용자가 기본적으로 이러한 사용자 지정 리소스를 호출하고 관련 워크플로를 자동화할 수 있습니다.

### Kubernetes용 AWS 컨트롤러(ACK)는 어떻게 작동하나요?
<a name="kubernetes-sagemaker-operators-explained"></a>

Kubernetes용 SageMaker AI Operators를 사용하면 Kubernetes 클러스터에서 SageMaker AI의 작업을 관리할 수 있습니다. Kubernetes용 SageMaker AI Operators의 최신 버전은 Kubernetes용 AWS 컨트롤러(ACK)를 기반으로 합니다. ACK에는 공통 컨트롤러 런타임, 코드 생성기 및 AWS 서비스별 컨트롤러 세트가 포함되며,이 중 하나는 SageMaker AI 컨트롤러입니다.

다음 다이어그램에서 ACK 작동 방식에 대해 설명합니다.

![\[ACK 기반 Kubernetes용 SageMaker AI Operator에 대해 설명했습니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-ack-controller.png)


이 다이어그램에서 Kubernetes 사용자는 Kubernetes API를 사용하여 Kubernetes 클러스터 내에서 SageMaker AI의 모델 훈련을 실행하고자 합니다. 사용자가 SageMaker 훈련 작업을 설명하는 Kubernetes 사용자 지정 리소스를 설명하는 파일을 전달하여 `kubectl apply`를 호출합니다. `kubectl apply`는 매니페스트라고 하는 이 파일을 Kubernetes 컨트롤러 노드에서 실행 중인 Kubernetes API 서버로 전달합니다(워크플로 다이어그램의 *1*단계). Kubernetes API 서버는 SageMaker 훈련 작업 사양이 포함된 매니페스트를 수신하고 사용자에게 `sageMaker.services.k8s.aws/TrainingJob`유형의 사용자 지정 리소스를 생성할 권한이 있는지 여부와 사용자 지정 리소스가 적절한 형식으로 지정되었는지 여부를 확인합니다(*2*단계). 사용자에게 권한이 부여되고 사용자 지정 리소스가 유효하면 Kubernetes API 서버는 사용자 지정 리소스를 etcd 데이터 스토어에 쓰고(*3단계*), 사용자 지정 리소스가 생성되었다고 사용자에게 다시 응답합니다(*4단계*). 일반 Kubernetes 포드의 컨텍스트 내 Kubernetes 워커 노드에서 실행되는 SageMaker AI 컨트롤러는 새로운 `sageMaker.services.k8s.aws/TrainingJob` 유형의 사용자 지정 리소스가 생성되었다는 알림을 받습니다(*5단계*). 그러면 SageMaker AI 컨트롤러가 SageMaker API와 통신하여(*6단계*), SageMaker AI `CreateTrainingJob` API를 직접적으로 호출하여 AWS에서 훈련 작업을 생성합니다. SageMaker API와 통신한 후, SageMaker AI 컨트롤러는 Kubernetes API 서버를 직접적으로 호출하여 SageMaker AI로부터 수신한 정보로 사용자 지정 리소스의 상태를 업데이트합니다(*7단계*). 따라서 SageMaker AI 컨트롤러는 개발자가 AWS SDK를 사용하여 받은 것과 동일한 정보를 개발자에게 제공합니다.

### 권한 개요
<a name="kubernetes-sagemaker-operators-authentication"></a>

운영자는 사용자를 대신하여 SageMaker AI 리소스에 액세스합니다. 운영자가 AWS 리소스와 상호 작용하기 위해 수임하는 IAM 역할은 Kubernetes 클러스터에 액세스하는 데 사용하는 자격 증명과 다릅니다. 역할은 기계 학습 작업을 실행할 때가 AWS 수임하는 역할과도 다릅니다.

다음 이미지는 다양한 인증 계층을 설명합니다.

![\[Kubernetes의 다양한 인증 계층용 SageMaker AI Operator입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-authentication.png)


# 최신 Kubernetes용 SageMaker AI Operator
<a name="kubernetes-sagemaker-operators-ack"></a>

이 섹션은 AWS Controllers for Kubernetes(ACK)를 사용하는 Kubernetes용 SageMaker AI Operators를 기반으로 합니다.

**중요**  
현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.  
마이그레이션 단계에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)섹션을 참조하세요.  
Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

[Kubernetes용 SageMaker AI Operators](https://github.com/aws-controllers-k8s/sagemaker-controller)의 최신 버전은 각 컨트롤러가 AWS 서비스 API와 통신하는 [AWS Kubernetes 사용자 지정 컨트롤러를 빌드하기 위한 프레임워크인 Kubernetes용 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/ )를 기반으로 합니다. 이러한 컨트롤러를 통해 Kubernetes 사용자는 Kubernetes API를 사용하여 데이터베이스 또는 메시지 대기열과 같은 AWS 리소스를 프로비저닝할 수 있습니다.

Amazon SageMaker AI를 사용하여 기계 학습 모델을 훈련, 조정 및 배포하기 위해 ACK를 설치하고 사용하려면 다음 단계를 사용하세요.

**Topics**
+ [

## Kubernetes용 SageMaker AI Operators 설치
](#kubernetes-sagemaker-operators-ack-install)
+ [

## Kubernetes용 SageMaker AI Operators 사용
](#kubernetes-sagemaker-operators-ack-use)
+ [

## 레퍼런스
](#kubernetes-sagemaker-operators-ack-reference)

## Kubernetes용 SageMaker AI Operators 설치
<a name="kubernetes-sagemaker-operators-ack-install"></a>

Kubernetes용 SageMaker AI Operators의 최신 버전을 설정하려면 [Machine Learning with the ACK SageMaker AI Controller](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)의 *Setup* 섹션을 참조하세요.

## Kubernetes용 SageMaker AI Operators 사용
<a name="kubernetes-sagemaker-operators-ack-use"></a>

Amazon EKS를 사용하여 Amazon SageMaker AI용 ACK 서비스 컨트롤러로 기계 학습 모델을 훈련하는 방법에 대한 자습서는 [Machine Learning with the ACK SageMaker AI Controller](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)를 참조하세요.

오토 스케일링 예시는 [Scale SageMaker AI Workloads with Application Auto Scaling](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)을 참조하세요.

## 레퍼런스
<a name="kubernetes-sagemaker-operators-ack-reference"></a>

[Amazon SageMaker AI용 ACK 서비스 컨트롤러 GitHub 리포지토리](https://github.com/aws-controllers-k8s/sagemaker-controller)도 참조하거나 [AWS Controllers for Kubernetes Documentation](https://aws-controllers-k8s.github.io/community/docs/community/overview/)을 읽어보세요.

# 구형 Kubernetes용 SageMaker AI Operators
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

이 섹션은 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s)의 오리지널 버전을 기반으로 합니다.

**중요**  
[Kubernetes용 SageMaker Operators ](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)오리지널 버전의 개발 및 기술 지원을 중단합니다.  
현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.  
마이그레이션 단계에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)섹션을 참조하세요.  
Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

**Topics**
+ [

## Kubernetes용 SageMaker AI Operators 설치
](#kubernetes-sagemaker-operators-eos-install)
+ [

# Amazon SageMaker AI 작업 사용
](kubernetes-sagemaker-jobs.md)
+ [

# 리소스를 최신 연산자로 마이그레이션
](kubernetes-sagemaker-operators-migrate.md)
+ [

# Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표
](kubernetes-sagemaker-operators-eos-announcement.md)

## Kubernetes용 SageMaker AI Operators 설치
<a name="kubernetes-sagemaker-operators-eos-install"></a>

Amazon SageMaker AI를 사용하여 기계 학습 모델을 훈련, 조정 및 배포하기 위해 Kubernetes용 SageMaker AI Operators를 설치하고 사용하려면 다음 단계를 사용하세요.

**Topics**
+ [

### IAM 역할 기반 설정 및 연산자 배포
](#iam-role-based-setup-and-operator-deployment)
+ [

### 리소스 정리
](#cleanup-operator-resources)
+ [

### 연산자 삭제
](#delete-operators)
+ [

### 문제 해결
](#troubleshooting)
+ [

### 각 리전의 이미지 및 SMlog
](#images-and-smlogs-in-each-region)

### IAM 역할 기반 설정 및 연산자 배포
<a name="iam-role-based-setup-and-operator-deployment"></a>

다음 섹션에서는 연산자의 원본 버전을 설정하고 배포하는 단계를 설명합니다.

**주의**  
**참고:** 다음 단계에서는 Kubernetes용 SageMaker AI Operators의 최신 버전을 설치하지 않습니다. 새로운 Kubernetes용 ACK 기반 SageMaker AI Operators를 설치하려면 [최신 Kubernetes용 SageMaker AI Operator](kubernetes-sagemaker-operators-ack.md) 섹션을 참조하세요.

#### 사전 조건
<a name="prerequisites"></a>

이 가이드에서는 다음 사전 조건이 충족되었다고 가정합니다.
+ Kubernetes 클러스터에 접근하는 데 사용되는 클라이언트 머신에 다음 도구를 설치합니다.
  + [https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 버전 1.13 이상. Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 `kubectl`버전을 사용합니다. 예를 들어, 1.13 `kubectl`클라이언트는 Kubernetes 1.13 및 1.14 클러스터로 작업해야 합니다. OpenID Connect(OIDC)는 1.13 이전 버전에서는 지원되지 않습니다.
  + [https://github.com/weaveworks/eksctl](https://github.com/weaveworks/eksctl) 버전 0.7.0 이상 
  + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 버전 1.16.232 이상 
  + (선택 사항) [Helm ](https://helm.sh/docs/intro/install/)버전 3.0 이상 
  + [AWS-iam-Authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) 
+ 역할을 생성하고 정책을 역할에 연결하기 위한 IAM 권한이 있습니다.
+ 연산자를 실행할 Kubernetes 클러스터를 생성했습니다. Kubernetes 버전 1.13 또는 1.14여야 합니다. `eksctl`을 사용한 자동 클러스터 생성에 대해서는 [eksctl 시작하기](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)를 참조하세요. 클러스터를 프로비저닝하는 데 20-30분 정도 걸립니다.

#### 클러스터 범위 배포
<a name="cluster-scoped-deployment"></a>

IAM 역할을 사용하여 연산자를 배포하려면 먼저 OpenID Connect(OIDC) ID 공급자(IdP)를 역할과 연결하여 IAM 서비스로 인증합니다.

##### 클러스터에 대한 OIDC 공급자 생성
<a name="create-an-openid-connect-provider-for-your-cluster"></a>

다음 지침은 OIDC 공급자를 생성하여 Amazon EKS 클러스터와 연결하는 방법을 보여줍니다.

1. 다음과 같이 로컬 `CLUSTER_NAME`및 `AWS_REGION`환경 변수를 설정합니다.

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="<your cluster name>"
   export AWS_REGION="<your region>"
   ```

1. 다음 명령을 사용하여 OIDC 공급자를 클러스터에 연결합니다. 자세한 내용은 [클러스터의 서비스 계정에 대한 IAM 역할 활성화](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)를 참조하세요.

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
         --region ${AWS_REGION} --approve
   ```

   출력은 다음과 같아야 합니다.

   ```
   [_]  eksctl version 0.10.1
     [_]  using region us-east-1
     [_]  IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"
   ```

이제 클러스터에 OIDC ID 공급자가 있으므로 역할을 생성하고 Kubernetes ServiceAccount에 역할을 수임할 권한을 부여할 수 있습니다.

##### OIDC ID를 가져옵니다.
<a name="get-the-oidc-id"></a>

ServiceAccount를 설정하려면 다음 명령을 사용하여 OIDC 발급자 URL을 얻습니다.

```
aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \
      --query cluster.identity.oidc.issuer --output text
```

명령은 다음과 같은 URL을 반환합니다.

```
https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

이 URL에서 값 `D48675832CA65BD10A532F597OIDCID`는 OIDC ID입니다. 클러스터의 OIDC ID는 다릅니다. 역할을 만들려면 이 OIDC ID 값이 필요합니다.

 출력이 `None`인 경우 클라이언트 버전이 오래된 것입니다. 이 문제를 해결하려면 다음 명령을 실행합니다.

```
aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC
```

OIDC URL은 다음과 같이 반환됩니다.

```
OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

##### IAM 역할 생성
<a name="create-an-iam-role"></a>

1. `trust.json` 파일을 만들고 이 파일에 다음 신뢰 관계 코드 블록을 삽입합니다. `<OIDC ID>`, `<AWS account number>`, `<EKS Cluster region>`자리 표시자를 모두 클러스터에 해당하는 값으로 바꿔야 합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

1. `trust.json`에 정의된 신뢰 관계를 사용하여 역할을 생성하려면 다음 명령을 실행합니다. 이 역할을 통해 Amazon EKS 클러스터는 IAM으로부터 자격 증명을 가져오고 새로 고칠 수 있습니다.

   ```
   aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text
   ```

   출력은 다음과 같아야 합니다.

   ```
   ROLE    arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z    /       ABCDEFSFODNN7EXAMPLE   my-role
   ASSUMEROLEPOLICYDOCUMENT        2012-10-17		 	 	 
   STATEMENT       sts:AssumeRoleWithWebIdentity   Allow
   STRINGEQUALS    sts.amazonaws.com       system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default
   PRINCIPAL       arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/
   ```

    연산자에 전달하는 값인 `ROLE ARN`을 기록합니다.

##### AmazonSageMakerFullAccess 정책을 역할에 연결
<a name="attach-the-amazonsagemakerfullaccess-policy-to-the-role"></a>

SageMaker AI에 역할 액세스 권한을 부여하려면 [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 정책을 연결합니다. 연산자에게만 권한을 제한하려는 경우 고유한 사용자 지정 정책을 생성하여 연결할 수 있습니다.

 `AmazonSageMakerFullAccess`를 연결하려면 다음 명령을 실행합니다.

```
aws iam attach-role-policy --role-name <role name>  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes ServiceAccount `sagemaker-k8s-operator-default`에는 `AmazonSageMakerFullAccess`권한이 있어야 합니다. 연산자를 설치할 때 이를 확인합니다.

##### 연산자 배포
<a name="deploy-the-operator"></a>

연산자를 배포할 때 YAML 파일 또는 Helm 차트를 사용할 수 있습니다.

##### YAML을 사용하여 연산자 배포
<a name="deploy-the-operator-using-yaml"></a>

이는 연산자를 배포하는 가장 간단한 방법입니다. 프로세스는 다음과 같습니다.

1. 다음 명령을 사용하여 설치 관리자 스크립트를 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/installer.yaml
   ```

1. `installer.yaml` 파일을 편집하여 `eks.amazonaws.com/role-arn`을 교체합니다. 여기서 ARN을 생성한 OIDC 기반 역할의 Amazon 리소스 이름(ARN)으로 바꿉니다.

1. 다음 명령을 사용하여 클러스터를 배포합니다.

   ```
   kubectl apply -f installer.yaml
   ```

##### Helm 차트를 사용하여 연산자를 배포합니다.
<a name="deploy-the-operator-using-helm-charts"></a>

제공된 Helm 차트를 사용하여 연산자를 설치합니다.

1. 다음 명령을 사용하여 Helm 설치 관리자 디렉터리를 복제합니다.

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. `amazon-sagemaker-operator-for-k8s/hack/charts/installer` 폴더로 이동합니다. 차트의 상위 수준 파라미터가 포함된 `rolebased/values.yaml`파일을 편집합니다. 여기서 역할 ARN을 생성한 OIDC 기반 역할의 Amazon 리소스 이름(ARN)으로 바꿉니다.

1. 다음 명령을 사용하여 Helm 차트를 설치합니다.

   ```
   kubectl create namespace sagemaker-k8s-operator-system
     helm install --namespace sagemaker-k8s-operator-system sagemaker-operator rolebased/
   ```

   지정된 네임스페이스가 아닌 다른 네임스페이스에 연산자를 설치하려면 IAM 역할 `trust.json`파일에 정의된 네임스페이스를 일치하도록 조정해야 합니다.

1. 잠시 후 차트가 임의로 생성된 이름으로 설치됩니다. 다음 명령을 실행하여 성공적으로 설치되었는지 확인합니다.

   ```
   helm ls
   ```

   출력은 다음과 같아야 합니다.

   ```
   NAME                    NAMESPACE                       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
     sagemaker-operator      sagemaker-k8s-operator-system   1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

##### 연산자 배포 확인
<a name="verify-the-operator-deployment"></a>

1. 다음 명령을 실행하여 클러스터에 배포된 각 운영자에 대한 SageMaker AI 사용자 지정 리소스 정의(CRD)를 볼 수 있어야 합니다.

   ```
   kubectl get crd | grep sagemaker
   ```

   출력은 다음과 같아야 합니다.

   ```
   batchtransformjobs.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   endpointconfigs.sagemaker.aws.amazon.com            2019-11-20T17:12:34Z
   hostingdeployments.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   hyperparametertuningjobs.sagemaker.aws.amazon.com   2019-11-20T17:12:34Z
   models.sagemaker.aws.amazon.com                     2019-11-20T17:12:34Z
   trainingjobs.sagemaker.aws.amazon.com               2019-11-20T17:12:34Z
   ```

1. 연산자 포드가 실행 중인지 확인합니다. 다음 명령을 사용하여 모든 포드를 나열합니다.

   ```
   kubectl -n sagemaker-k8s-operator-system get pods
   ```

   다음과 같이 네임스페이스 `sagemaker-k8s-operator-system`에 이름이 `sagemaker-k8s-operator-controller-manager-*****`라고 지정된 포드가 표시되어야 합니다.

   ```
   NAME                                                         READY   STATUS    RESTARTS   AGE
   sagemaker-k8s-operator-controller-manager-12345678-r8abc     2/2     Running   0          23s
   ```

#### 네임스페이스 범위 배포
<a name="namespace-scoped-deployment"></a>

개별 Kubernetes 네임스페이스 범위 내에 연산자를 설치할 수 있습니다. 이 모드에서 컨트롤러는 리소스가 해당 네임스페이스 내에 생성된 경우에만 리소스를 모니터링하고 SageMaker AI와 조정합니다. 이를 통해 어떤 컨트롤러가 어떤 리소스를 관리하는지 세밀하게 제어할 수 있습니다. 이는 여러 AWS 계정에 배포하거나 특정 작업에 액세스할 수 있는 사용자를 제어하는 데 유용합니다.

이 가이드에서는 미리 정의된 특정 네임스페이스에 연산자를 설치하는 방법을 설명합니다. 컨트롤러를 두 번째 네임스페이스에 배포하려면 가이드를 처음부터 끝까지 따르고 각 단계에서 네임스페이스를 변경합니다.

##### Amazon EKS 클러스터에 대한 OIDC 공급자 생성
<a name="create-an-openid-connect-provider-for-your-eks-cluster"></a>

다음 지침은 OIDC 공급자를 생성하여 Amazon EKS 클러스터와 연결하는 방법을 보여줍니다.

1. 다음과 같이 로컬 `CLUSTER_NAME`및 `AWS_REGION`환경 변수를 설정합니다.

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="<your cluster name>"
   export AWS_REGION="<your region>"
   ```

1. 다음 명령을 사용하여 OIDC 공급자를 클러스터에 연결합니다. 자세한 내용은 [클러스터의 서비스 계정에 대한 IAM 역할 활성화](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)를 참조하세요.

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
         --region ${AWS_REGION} --approve
   ```

   출력은 다음과 같아야 합니다.

   ```
   [_]  eksctl version 0.10.1
     [_]  using region us-east-1
     [_]  IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"
   ```

이제 클러스터에 OIDC ID 공급자가 있으므로 역할을 생성하고 Kubernetes ServiceAccount에 역할을 수임할 권한을 부여합니다.

##### OIDC ID를 가져옵니다.
<a name="get-your-oidc-id"></a>

ServiceAccount를 설정하려면 먼저 다음 명령을 사용하여 OpenID Connect 발급자 URL을 얻습니다.

```
aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \
      --query cluster.identity.oidc.issuer --output text
```

명령은 다음과 같은 URL을 반환합니다.

```
https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

이 URL에서 값 D48675832CA65BD10A532F597OIDCID는 OIDC ID입니다. 클러스터의 OIDC ID는 다릅니다. 역할을 만들려면 이 OIDC ID 값이 필요합니다.

 출력이 `None`인 경우 클라이언트 버전이 오래된 것입니다. 이 문제를 해결하려면 다음 명령을 실행합니다.

```
aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC
```

OIDC URL은 다음과 같이 반환됩니다.

```
OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

##### IAM 역할 생성
<a name="create-your-iam-role"></a>

1. `trust.json` 파일을 만들고 이 파일에 다음 신뢰 관계 코드 블록을 삽입합니다. `<OIDC ID>`, `<AWS account number>`, `<EKS Cluster region>`, `<Namespace>` 자리 표시자를 모두 클러스터에 해당하는 값으로 바꿔야 합니다. 이 가이드의 목적상 `my-namespace`는 `<Namespace>`값에 사용됩니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
           "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

1. `trust.json`에 정의된 신뢰 관계를 사용하여 역할을 생성하려면 다음 명령을 실행합니다. 이 역할을 통해 Amazon EKS 클러스터는 IAM으로부터 자격 증명을 가져오고 새로 고칠 수 있습니다.

   ```
   aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text
   ```

   출력은 다음과 같아야 합니다.

   ```
   ROLE    arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z    /       ABCDEFSFODNN7EXAMPLE   my-role
     ASSUMEROLEPOLICYDOCUMENT        2012-10-17		 	 	 
     STATEMENT       sts:AssumeRoleWithWebIdentity   Allow
     STRINGEQUALS    sts.amazonaws.com       system:serviceaccount:my-namespace:sagemaker-k8s-operator-default
     PRINCIPAL       arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/
   ```

`ROLE ARN`을 기록합니다. 이 값을 연산자에게 전달합니다.

##### AmazonSageMakerFullAccess 정책을 역할에 연결
<a name="attach-the-amazonsagemakerfullaccess-policy-to-your-role"></a>

SageMaker AI에 역할 액세스 권한을 부여하려면 [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 정책을 연결합니다. 연산자에게만 권한을 제한하려는 경우 고유한 사용자 지정 정책을 생성하여 연결할 수 있습니다.

 `AmazonSageMakerFullAccess`를 연결하려면 다음 명령을 실행합니다.

```
aws iam attach-role-policy --role-name <role name>  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes ServiceAccount `sagemaker-k8s-operator-default`에는 `AmazonSageMakerFullAccess`권한이 있어야 합니다. 연산자를 설치할 때 이를 확인합니다.

##### 네임스페이스에 연산자를 배포합니다.
<a name="deploy-the-operator-to-your-namespace"></a>

연산자를 배포할 때 YAML 파일 또는 Helm 차트를 사용할 수 있습니다.

##### YAML을 사용하여 네임스페이스에 연산자를 배포합니다.
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

네임스페이스 범위 내에 연산자를 배포하는 데에는 두 부분이 있습니다. 첫 번째는 클러스터 수준에서 설치되는 CRD 세트입니다. 이러한 리소스 정의는 Kubernetes 클러스터당 한 번만 설치하면 됩니다. 두 번째 부분은 연산자 권한 및 배포 자체입니다.

 클러스터에 CRD를 아직 설치하지 않은 경우 다음 명령을 사용하여 CRD 설치 관리자 YAML을 적용합니다.

```
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml
```

클러스터에 연산자를 설치하려면: 

1. 다음 명령을 사용하여 연산자 설치 관리자 YAML을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/operator.yaml
   ```

1. 다음 명령을 사용하여 설치 관리자 YAML을 업데이트하여 리소스를 지정된 네임스페이스에 배치합니다.

   ```
   sed -i -e 's/PLACEHOLDER-NAMESPACE/<YOUR NAMESPACE>/g' operator.yaml
   ```

1. `operator.yaml` 파일을 편집하여 리소스를 `eks.amazonaws.com/role-arn`에 배치합니다. 여기서 ARN을 생성한 OIDC 기반 역할의 Amazon 리소스 이름(ARN)으로 바꿉니다.

1. 다음 명령을 사용하여 클러스터를 배포합니다.

   ```
   kubectl apply -f operator.yaml
   ```

##### Helm 차트를 사용하여 네임스페이스에 연산자를 배포합니다.
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

네임스페이스 범위 내에 연산자를 배포하는 데에는 두 부분이 필요합니다. 첫 번째는 클러스터 수준에서 설치되는 CRD 세트입니다. 이러한 리소스 정의는 Kubernetes 클러스터당 한 번만 설치하면 됩니다. 두 번째 부분은 연산자 권한 및 배포 자체입니다. Helm 차트를 사용할 때는 먼저 `kubectl`을 사용하여 네임스페이스를 생성해야 합니다.

1. 다음 명령을 사용하여 Helm 설치 관리자 디렉터리를 복제합니다.

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. `amazon-sagemaker-operator-for-k8s/hack/charts/installer/namespaced` 폴더로 이동합니다. 차트의 상위 수준 파라미터가 포함된 `rolebased/values.yaml`파일을 편집합니다. 여기서 역할 ARN을 생성한 OIDC 기반 역할의 Amazon 리소스 이름(ARN)으로 바꿉니다.

1. 다음 명령을 사용하여 Helm 차트를 설치합니다.

   ```
   helm install crds crd_chart/
   ```

1. 다음 명령을 사용하여 필요한 네임스페이스를 만들고 연산자를 설치합니다.

   ```
   kubectl create namespace <namespace>
   helm install --n <namespace> op operator_chart/
   ```

1. 잠시 후 차트가 해당 이름 `sagemaker-operator`와 함께 설치됩니다. 다음 명령을 실행하여 성공적으로 설치되었는지 확인합니다.

   ```
   helm ls
   ```

   출력은 다음과 같아야 합니다.

   ```
   NAME                    NAMESPACE                       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
   sagemaker-operator      my-namespace                    1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

##### 네임스페이스에 대한 연산자 배포를 확인합니다.
<a name="verify-the-operator-deployment-to-your-namespace"></a>

1. 다음 명령을 실행하여 클러스터에 배포된 각 운영자에 대한 SageMaker AI 사용자 지정 리소스 정의(CRD)를 볼 수 있어야 합니다.

   ```
   kubectl get crd | grep sagemaker
   ```

   출력은 다음과 같아야 합니다.

   ```
   batchtransformjobs.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   endpointconfigs.sagemaker.aws.amazon.com            2019-11-20T17:12:34Z
   hostingdeployments.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   hyperparametertuningjobs.sagemaker.aws.amazon.com   2019-11-20T17:12:34Z
   models.sagemaker.aws.amazon.com                     2019-11-20T17:12:34Z
   trainingjobs.sagemaker.aws.amazon.com               2019-11-20T17:12:34Z
   ```

1. 연산자 포드가 실행 중인지 확인합니다. 다음 명령을 사용하여 모든 포드를 나열합니다.

   ```
   kubectl -n my-namespace get pods
   ```

   다음과 같이 네임스페이스 `my-namespace`에 이름이 `sagemaker-k8s-operator-controller-manager-*****`라고 지정된 포드가 표시되어야 합니다.

   ```
   NAME                                                         READY   STATUS    RESTARTS   AGE
   sagemaker-k8s-operator-controller-manager-12345678-r8abc     2/2     Running   0          23s
   ```

#### SageMaker AI 로그 `kubectl` 플러그인 설치
<a name="install-the-amazon-sagemaker-logs-kubectl-plugin"></a>

 Kubernetes용 SageMaker AI Operators의 일부로 `kubectl`에 대해 `smlogs` [플러그인](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)을 사용할 수 있습니다. 이를 통해 SageMaker AI CloudWatch 로그를 `kubectl`로 스트리밍할 수 있습니다. `kubectl`은 [경로](http://www.linfo.org/path_env_var.html)에 설치되어야 합니다. 다음 명령은 바이너리를 홈 디렉터리의 `sagemaker-k8s-bin`디렉터리에 배치하고 해당 디렉터리를 `PATH`에 추가합니다.

```
export os="linux"
  
wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/v1/${os}.amd64.tar.gz
tar xvzf ${os}.amd64.tar.gz
  
# Move binaries to a directory in your homedir.
mkdir ~/sagemaker-k8s-bin
cp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/.
  
# This line adds the binaries to your PATH in your .bashrc.
  
echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc
  
# Source your .bashrc to update environment variables:
source ~/.bashrc
```

다음 명령을 사용하여 `kubectl`플러그인이 올바르게 설치되어 있는지 확인합니다.

```
kubectl smlogs
```

`kubectl` 플러그인이 올바르게 설치된 경우 출력은 다음과 같아야 합니다.

```
View SageMaker AI logs via Kubernetes
  
Usage:
  smlogs [command]
  
Aliases:
  smlogs, SMLogs, Smlogs
  
Available Commands:
  BatchTransformJob       View BatchTransformJob logs via Kubernetes
  TrainingJob             View TrainingJob logs via Kubernetes
  help                    Help about any command
  
Flags:
   -h, --help   help for smlogs
  
Use "smlogs [command] --help" for more information about a command.
```

### 리소스 정리
<a name="cleanup-operator-resources"></a>

클러스터에서 운영자를 제거하려면 먼저 클러스터에서 모든 SageMaker AI 리소스를 삭제해야 합니다. 그렇지 않으면 연산자 삭제 작업이 정지됩니다. 모든 작업을 중지하려면 다음 명령을 실행합니다.

```
# Delete all SageMaker AI jobs from Kubernetes
kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
```

다음과 유사한 출력 화면이 표시되어야 합니다.

```
$ kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com
trainingjobs.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted
  
$ kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com
hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted
  
$ kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com
batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted
  
$ kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
```

모든 SageMaker AI 작업을 삭제한 후 클러스터에서 운영자를 삭제하려면 [연산자 삭제](#delete-operators) 섹션을 참조하세요.

### 연산자 삭제
<a name="delete-operators"></a>

#### 클러스터 기반 연산자 삭제
<a name="delete-cluster-based-operators"></a>

##### YAML을 사용하여 설치한 연산자
<a name="operators-installed-using-yaml"></a>

클러스터에서 운영자를 제거하려면 클러스터에서 모든 SageMaker AI 리소스가 삭제되었는지 확인합니다. 그렇지 않으면 연산자 삭제 작업이 정지됩니다.

**참고**  
클러스터를 삭제하기 전에 클러스터에서 모든 SageMaker AI 리소스를 삭제해야 합니다. 자세한 정보는 [리소스 정리](#cleanup-operator-resources)을 참조하세요.

모든 SageMaker AI 작업을 삭제한 후 클러스터에서 운영자를 삭제하려면 `kubectl`을 사용합니다.

```
# Delete the operator and its resources
kubectl delete -f /installer.yaml
```

다음과 유사한 출력 화면이 표시되어야 합니다.

```
$ kubectl delete -f raw-yaml/installer.yaml
namespace "sagemaker-k8s-operator-system" deleted
customresourcedefinition.apiextensions.k8s.io "batchtransformjobs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "endpointconfigs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "hostingdeployments.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "hyperparametertuningjobs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "models.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "trainingjobs.sagemaker.aws.amazon.com" deleted
role.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-role" deleted
clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-role" deleted
clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-role" deleted
rolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-rolebinding" deleted
clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-rolebinding" deleted
clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-rolebinding" deleted
service "sagemaker-k8s-operator-controller-manager-metrics-service" deleted
deployment.apps "sagemaker-k8s-operator-controller-manager" deleted
secrets "sagemaker-k8s-operator-abcde" deleted
```

##### Helm 차트를 사용하여 설치한 연산자
<a name="operators-installed-using-helm-charts"></a>

연산자 CRD를 삭제하려면 먼저 실행 중인 모든 작업을 삭제합니다. 그리고 다음 명령을 사용하여 연산자를 배포하는 데 사용된 Helm 차트를 삭제합니다.

```
# get the helm charts
helm ls
  
# delete the charts
helm delete <chart_name>
```

#### 네임스페이스 기반 연산자를 삭제합니다.
<a name="delete-namespace-based-operators"></a>

##### YAML로 설치한 연산자
<a name="operators-installed-with-yaml"></a>

클러스터에서 운영자를 제거하려면 먼저 클러스터에서 모든 SageMaker AI 리소스가 삭제되었는지 확인합니다. 그렇지 않으면 연산자 삭제 작업이 정지됩니다.

**참고**  
클러스터를 삭제하기 전에 클러스터에서 모든 SageMaker AI 리소스를 삭제해야 합니다. 자세한 정보는 [리소스 정리](#cleanup-operator-resources)을 참조하세요.

모든 SageMaker AI 작업을 삭제한 후 먼저 `kubectl`을 사용하여 네임스페이스에서 운영자를 삭제하고 클러스터에서 CRD를 삭제합니다. 다음 명령을 실행하여 클러스터에서 연산자를 삭제합니다.

```
# Delete the operator using the same yaml file that was used to install the operator
kubectl delete -f operator.yaml
  
# Now delete the CRDs using the CRD installer yaml
kubectl delete -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml
  
# Now you can delete the namespace if you want
kubectl delete namespace <namespace>
```

##### Helm 차트로 설치된 연산자
<a name="operators-installed-with-helm-charts"></a>

연산자 CRD를 삭제하려면 먼저 실행 중인 모든 작업을 삭제합니다. 그리고 다음 명령을 사용하여 연산자를 배포하는 데 사용된 Helm 차트를 삭제합니다.

```
# Delete the operator
helm delete <chart_name>
  
# delete the crds
helm delete crds
  
# optionally delete the namespace
kubectl delete namespace <namespace>
```

### 문제 해결
<a name="troubleshooting"></a>

#### 실패한 작업 디버깅
<a name="debugging-a-failed-job"></a>

다음 단계를 사용하여 실패한 작업을 디버깅할 수 있습니다.
+ 다음을 실행하여 작업 상태를 확인할 수 있습니다.

  ```
  kubectl get <CRD Type> <job name>
  ```
+ SageMaker AI에서 작업이 생성된 경우 다음 명령을 사용하여 `STATUS` 및 `SageMaker Job Name`을 볼 수 있습니다.

  ```
  kubectl get <crd type> <job name>
  ```
+ `smlogs`를 통해 다음 명령을 사용하여 문제의 원인을 찾을 수 있습니다.

  ```
  kubectl smlogs <crd type> <job name>
  ```
+  `describe` 명령을 통해 다음 명령을 사용하여 작업에 대한 세부 정보를 볼 수도 있습니다. 출력에는 작업 상태에 대한 자세한 정보가 있는 `additional`필드가 있습니다.

  ```
  kubectl describe <crd type> <job name>
  ```
+ SageMaker AI에서 작업이 생성되지 않은 경우 다음과 같이 운영자 포드의 로그를 사용하여 문제의 원인을 찾습니다.

  ```
  $ kubectl get pods -A | grep sagemaker
  # Output:
  sagemaker-k8s-operator-system   sagemaker-k8s-operator-controller-manager-5cd7df4d74-wh22z   2/2     Running   0          3h33m
    
  $ kubectl logs -p <pod name> -c manager -n sagemaker-k8s-operator-system
  ```

#### 연산자 CRD 삭제
<a name="deleting-an-operator-crd"></a>

작업 삭제가 작동하지 않는 경우 연산자가 실행 중인지 확인합니다. 연산자가 실행 중이 아닌 경우 다음 단계를 사용하여 파이널라이저를 삭제해야 합니다.

1. 새 터미널에서 다음과 같이 `kubectl edit`을 사용하는 편집기에서 작업을 엽니다.

   ```
   kubectl edit <crd type> <job name>
   ```

1. 파일에서 다음 두 줄을 제거하여 파이널라이저를 삭제하도록 작업을 편집합니다. 파일을 저장하면 작업이 삭제됩니다.

   ```
   finalizers:
     - sagemaker-operator-finalizer
   ```

### 각 리전의 이미지 및 SMlog
<a name="images-and-smlogs-in-each-region"></a>

다음 표에는 각 리전에서 사용 가능한 연산자 이미지와 SMLog가 나열되어 있습니다.


|  리전  |  컨트롤러 이미지  |  Linux SmLogs  | 
| --- | --- | --- | 
|  us-east-1  |  957583890962.dkr.ecr.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  us-east-2  |  922499468684.dkr.ecr.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  us-west-2  |  640106867763.dkr.ecr.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  eu-west-1  |  613661167059.dkr.ecr.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 

# Amazon SageMaker AI 작업 사용
<a name="kubernetes-sagemaker-jobs"></a>

이 섹션은 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s)의 오리지널 버전을 기반으로 합니다.

**중요**  
[Kubernetes용 SageMaker Operators ](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)오리지널 버전의 개발 및 기술 지원을 중단합니다.  
현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.  
마이그레이션 단계에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md)섹션을 참조하세요.  
Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

Kubernetes용 Operators를 사용하여 Amazon SageMaker AI 작업을 실행하려면 YAML 파일을 적용하거나 제공된 헬름 차트를 사용할 수 있습니다.

다음 튜토리얼의 모든 샘플 연산자 작업은 공개 MNIST 데이터세트에서 가져온 샘플 데이터를 사용합니다. 이 샘플을 실행하려면 Amazon S3 버킷으로 데이터세트를 다운로드합니다. [MNIST 데이터세트 다운로드](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-preprocess-data-pull-data.html)에서 데이터세트를 찾을 수 있습니다.

**Topics**
+ [

## 훈련 작업 연산자
](#trainingjob-operator)
+ [

## 하이퍼파라미터 조정 작업 연산자
](#hyperparametertuningjobs-operator)
+ [

## 배치 변환 작업 연산자
](#batchtransformjobs-operator)
+ [

## 호스팅 배포 연산자
](#hosting-deployment-operator)
+ [

## 처리 작업 연산자
](#kubernetes-processing-job-operator)
+ [

## 호스팅 오토 스케일링 정책(HAP) 연산자
](#kubernetes-hap-operator)

## 훈련 작업 연산자
<a name="trainingjob-operator"></a>

훈련 작업 운영자는 지정된 훈련 작업 사양을 SageMaker AI에서 실행하여 SageMaker AI에 맞게 조정합니다. SageMaker AI 훈련 작업에 대한 자세한 내용은 SageMaker [CreateTrainingJob API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html)에서 확인할 수 있습니다.

**Topics**
+ [

### YAML 파일을 사용하여 훈련 작업 생성
](#create-a-trainingjob-using-a-simple-yaml-file)
+ [

### Helm 차트를 사용하여 훈련 작업 생성
](#create-a-trainingjob-using-a-helm-chart)
+ [

### 훈련 작업 나열
](#list-training-jobs)
+ [

### 훈련 작업 설명
](#describe-a-training-job)
+ [

### 훈련 작업 로그 보기
](#view-logs-from-training-jobs)
+ [

### 훈련 작업 삭제
](#delete-training-jobs)

### YAML 파일을 사용하여 훈련 작업 생성
<a name="create-a-trainingjob-using-a-simple-yaml-file"></a>

1. 다음 명령을 사용하여 훈련용 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-trainingjob.yaml
   ```

1. `xgboost-mnist-trainingjob.yaml` 파일을 편집하여 `<sagemaker-execution-role>`이 포함된 `roleArn` 파라미터 및 `outputPath`를 SageMaker AI 실행 역할에 쓰기 권한이 있는 Amazon S3 버킷으로 대체합니다. SageMaker AI가 사용자를 대신하여 Amazon S3, Amazon CloudWatch 및 기타 서비스에 액세스할 수 있으려면 `roleArn`에 권한이 있어야 합니다. SageMaker AI ExecutionRole 생성에 대한 자세한 내용은 [SageMaker AI Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)을 참조하세요. 다음 명령을 사용하여 YAML 파일을 적용합니다.

   ```
   kubectl apply -f xgboost-mnist-trainingjob.yaml
   ```

### Helm 차트를 사용하여 훈련 작업 생성
<a name="create-a-trainingjob-using-a-helm-chart"></a>

Helm 차트를 사용하여 훈련 작업을 실행할 수 있습니다.

1. 다음 명령을 사용하여 GitHub 리포지토리를 복제하여 소스를 가져옵니다.

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. `amazon-sagemaker-operator-for-k8s/hack/charts/training-jobs/` 폴더로 이동한 다음 `values.yaml`파일을 편집하여 `rolearn`및 `outputpath`등의 값을 계정에 해당하는 값으로 대체합니다. SageMaker AI가 사용자를 대신하여 Amazon S3, Amazon CloudWatch 및 기타 서비스에 액세스할 수 있으려면 RoleARN에 권한이 있어야 합니다. SageMaker AI ExecutionRole 생성에 대한 자세한 내용은 [SageMaker AI Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)을 참조하세요.

#### 훈련 작업 생성
<a name="create-the-training-job"></a>

`values.yaml`에서 역할 및 Amazon S3 버킷이 적절한 값으로 대체되었으면 다음 명령을 사용하여 훈련 작업을 생성할 수 있습니다.

```
helm install . --generate-name
```

출력은 다음과 같아야 합니다.

```
NAME: chart-12345678
LAST DEPLOYED: Wed Nov 20 23:35:49 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the sagemaker-k8s-trainingjob.
```

#### 훈련 Helm 차트 확인
<a name="verify-your-training-helm-chart"></a>

Helm 차트가 성공적으로 생성되었는지 확인하려면 다음을 실행합니다.

```
helm ls
```

출력은 다음과 같아야 합니다.

```
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
chart-12345678        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
rolebased-12345678    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
```

`helm install`은 `TrainingJob`Kubernetes 리소스를 생성합니다. 운영자는 SageMaker AI에서 실제 훈련 작업을 시작하고 SageMaker AI의 작업 상태를 반영하도록 `TrainingJob` Kubernetes 리소스를 업데이트합니다. 작업 기간 동안 사용한 SageMaker AI 리소스에 대해 요금이 부과됩니다. 작업이 완료되거나 중지된 후에는 요금이 발생하지 않습니다.

**참고**: SageMaker AI에서는 실행 중인 훈련 작업을 업데이트할 수 없습니다. 파라미터를 편집하고 구성 파일을 다시 적용할 수는 없습니다. 메타데이터 이름을 변경하거나 기존 작업을 삭제하고 새 작업을 생성하세요. Kubeflow의 TFJob과 같은 기존 훈련 작업자와 마찬가지로 `update`는 지원되지 않습니다.

### 훈련 작업 나열
<a name="list-training-jobs"></a>

다음 명령을 사용하여 Kubernetes 연산자를 사용하여 생성된 모든 작업을 나열합니다.

```
kubectl get TrainingJob
```

모든 작업을 나열하는 출력은 다음과 같아야 합니다.

```
kubectl get trainingjobs
NAME                        STATUS       SECONDARY-STATUS   CREATION-TIME          SAGEMAKER-JOB-NAME
xgboost-mnist-from-for-s3   InProgress   Starting           2019-11-20T23:42:35Z   xgboost-mnist-from-for-s3-examplef11eab94e0ed4671d5a8f
```

훈련 작업은 작업이 완료되거나 실패한 후에도 계속 나열됩니다. 다음 [훈련 작업 삭제](#delete-training-jobs)단계에 따라 목록에서 `TrainingJob`작업을 제거할 수 있습니다. 완료 또는 중지된 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다.

#### 훈련 작업 상태 값
<a name="training-job-status-values"></a>

`STATUS` 필드는 다음 값 중 하나일 수 있습니다.
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

이러한 상태는 SageMaker AI 공식 [API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeTrainingJob.html#SageMaker-DescribeTrainingJob-response-TrainingJobStatus)에서 직접 가져온 것입니다.

공식 SageMaker AI 상태 외에도 `STATUS`는 `SynchronizingK8sJobWithSageMaker`가 될 수도 있습니다. 이는 연산자가 아직 작업을 처리하지 않았음을 의미합니다.

#### 보조 상태 값
<a name="secondary-status-values"></a>

보조 상태는 SageMaker AI 공식 [API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeTrainingJob.html#SageMaker-DescribeTrainingJob-response-SecondaryStatus)에서 직접 가져온 것입니다. 여기에는 작업 상태에 대한 보다 세부적인 정보가 포함되어 있습니다.

### 훈련 작업 설명
<a name="describe-a-training-job"></a>

`describe` `kubectl`명령을 사용하여 훈련 작업에 대한 자세한 내용을 확인할 수 있습니다. 이는 일반적으로 문제를 디버깅하거나 훈련 작업의 파라미터를 확인하는 데 사용됩니다. 훈련 작업에 대한 정보를 얻으려면 다음 명령을 사용합니다.

```
kubectl describe trainingjob xgboost-mnist-from-for-s3
```

훈련 작업에 대한 출력은 다음과 같아야 합니다.

```
Name:         xgboost-mnist-from-for-s3
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  sagemaker.aws.amazon.com/v1
Kind:         TrainingJob
Metadata:
  Creation Timestamp:  2019-11-20T23:42:35Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  23119
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/trainingjobs/xgboost-mnist-from-for-s3
  UID:               6d7uiui-0bef-11ea-b94e-0ed467example
Spec:
  Algorithm Specification:
    Training Image:       8256416981234.dkr.ecr.us-east-2.amazonaws.com/xgboost:1
    Training Input Mode:  File
  Hyper Parameters:
    Name:   eta
    Value:  0.2
    Name:   gamma
    Value:  4
    Name:   max_depth
    Value:  5
    Name:   min_child_weight
    Value:  6
    Name:   num_class
    Value:  10
    Name:   num_round
    Value:  10
    Name:   objective
    Value:  multi:softmax
    Name:   silent
    Value:  0
  Input Data Config:
    Channel Name:      train
    Compression Type:  None
    Content Type:      text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Distribution Type:  FullyReplicated
        S 3 Data Type:               S3Prefix
        S 3 Uri:                     https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/train/
    Channel Name:                    validation
    Compression Type:                None
    Content Type:                    text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Distribution Type:  FullyReplicated
        S 3 Data Type:               S3Prefix
        S 3 Uri:                     https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/validation/
  Output Data Config:
    S 3 Output Path:  s3://amzn-s3-demo-bucket/sagemaker/xgboost-mnist/xgboost/
  Region:             us-east-2
  Resource Config:
    Instance Count:     1
    Instance Type:      ml.m4.xlarge
    Volume Size In GB:  5
  Role Arn:             arn:aws:iam::12345678910:role/service-role/AmazonSageMaker-ExecutionRole
  Stopping Condition:
    Max Runtime In Seconds:  86400
  Training Job Name:         xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0example
Status:
  Cloud Watch Log URL:           https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logStream:group=/aws/sagemaker/TrainingJobs;prefix=<example>;streamFilter=typeLogStreamPrefix
  Last Check Time:               2019-11-20T23:44:29Z
  Sage Maker Training Job Name:  xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94eexample
  Secondary Status:              Downloading
  Training Job Status:           InProgress
Events:                          <none>
```

### 훈련 작업 로그 보기
<a name="view-logs-from-training-jobs"></a>

다음 명령을 사용하여 `kmeans-mnist`훈련 작업의 로그를 확인합니다.

```
kubectl smlogs trainingjob xgboost-mnist-from-for-s3
```

출력은 다음과 비슷한 형태가 됩니다. 인스턴스의 로그는 시간순으로 정렬됩니다.

```
"xgboost-mnist-from-for-s3" has SageMaker TrainingJobName "xgboost-mnist-from-for-s3-123456789" in region "us-east-2", status "InProgress" and secondary status "Starting"
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC Arguments: train
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Running standalone xgboost training.
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] File size need to be processed in the node: 1122.95mb. Available memory size in the node: 8586.0mb
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Determined delimiter of CSV input is ','
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [23:45:22] S3DistributionType set as FullyReplicated
```

### 훈련 작업 삭제
<a name="delete-training-jobs"></a>

Amazon SageMaker AI에서 훈련 작업을 중지하려면 다음 명령을 사용합니다.

```
kubectl delete trainingjob xgboost-mnist-from-for-s3
```

이 명령은 Kubernetes에서 SageMaker 훈련 작업을 제거합니다. 이 명령은 다음 출력을 반환합니다.

```
trainingjob.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted
```

SageMaker AI에서 작업이 아직 진행 중인 경우 작업이 중지됩니다. 작업이 중지되거나 완료된 후에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다.

**참고**: SageMaker AI는 훈련 작업을 삭제하지 않습니다. 중지된 작업은 SageMaker AI 콘솔에 계속 표시됩니다. `delete` 명령이 SageMaker AI에서 리소스를 정리하는 데 약 2분이 걸립니다.

## 하이퍼파라미터 조정 작업 연산자
<a name="hyperparametertuningjobs-operator"></a>

하이퍼파라미터 조정 작업 운영자는 SageMaker AI에서 실행하여 지정된 하이퍼파라미터 조정 작업 사양을 SageMaker AI와 조정합니다. SageMaker AI 하이퍼파라미터 조정 작업에 대한 자세한 내용은 SageMaker AI [CreateHyperParameterTuningJob API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html)에서 확인할 수 있습니다.

**Topics**
+ [

### YAML 파일을 사용하여 하이퍼파라미터 조정 작업 생성
](#create-a-hyperparametertuningjob-using-a-simple-yaml-file)
+ [

### Helm 차트를 사용하여 하이퍼파라미터 조정 작업 생성
](#create-a-hyperparametertuningjob-using-a-helm-chart)
+ [

### 하이퍼파라미터 조정 작업 나열
](#list-hyperparameter-tuning-jobs)
+ [

### 하이퍼파라미터 조정 작업 설명
](#describe-a-hyperparameter-tuning-job)
+ [

### 하이퍼파라미터 조정 작업 로그 보기
](#view-logs-from-hyperparametertuning-jobs)
+ [

### 하이퍼파라미터 조정 작업 삭제
](#delete-hyperparametertuning-jobs)

### YAML 파일을 사용하여 하이퍼파라미터 조정 작업 생성
<a name="create-a-hyperparametertuningjob-using-a-simple-yaml-file"></a>

1. 다음 명령을 사용하여 하이퍼파라미터 조정 작업을 위한 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hpo.yaml
   ```

1. `xgboost-mnist-hpo.yaml` 파일을 편집하여 `roleArn`파라미터를 `sagemaker-execution-role`으로 대체합니다. 하이퍼파라미터 조정 작업이 성공하려면 `s3InputPath`및 `s3OutputPath`를 계정에 해당하는 값으로 변경해야 합니다. 다음 명령을 사용하여 업데이트 YAML 파일을 적용합니다.

   ```
   kubectl apply -f xgboost-mnist-hpo.yaml
   ```

### Helm 차트를 사용하여 하이퍼파라미터 조정 작업 생성
<a name="create-a-hyperparametertuningjob-using-a-helm-chart"></a>

Helm 차트를 사용하여 하이퍼파라미터 조정 작업을 실행할 수 있습니다.

1. 다음 명령을 사용하여 GitHub 리포지토리를 복제하여 소스를 가져옵니다.

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. `amazon-sagemaker-operator-for-k8s/hack/charts/hyperparameter-tuning-jobs/` 폴더로 이동합니다.

1. `values.yaml` 파일을 편집하여 `roleArn`파라미터를 `sagemaker-execution-role`으로 대체합니다. 하이퍼파라미터 조정 작업이 성공하려면 `s3InputPath`및 `s3OutputPath`를 계정에 해당하는 값으로 변경해야 합니다.

#### 하이퍼파라미터 조정 작업 생성
<a name="create-the-hpo-job"></a>

`values.yaml`에서 역할 및 Amazon S3 경로가 적절한 값으로 대체되었으면 다음 명령을 사용하여 하이퍼파라미터 조정 작업을 생성할 수 있습니다.

```
helm install . --generate-name
```

출력은 다음과 비슷한 형태가 됩니다.

```
NAME: chart-1574292948
LAST DEPLOYED: Wed Nov 20 23:35:49 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the sagemaker-k8s-hyperparametertuningjob.
```

#### 차트 설치 확인
<a name="verify-chart-installation"></a>

Helm 차트가 성공적으로 생성되었는지 확인하려면 다음 명령을 실행합니다.

```
helm ls
```

출력은 다음과 같아야 합니다.

```
NAME                    NAMESPACE       REVISION        UPDATED
chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-hyperparametertuningjob-0.1.0                               STATUS          CHART                           APP VERSION
chart-1574292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
rolebased-1574291698    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
```

`helm install`은 `HyperParameterTuningJob`Kubernetes 리소스를 생성합니다. 운영자는 SageMaker AI에서 실제 하이퍼파라미터 최적화 작업을 시작하고 SageMaker AI의 작업 상태를 반영하도록 `HyperParameterTuningJob` Kubernetes 리소스를 업데이트합니다. 작업 기간 동안 사용한 SageMaker AI 리소스에 대해 요금이 부과됩니다. 작업이 완료되거나 중지된 후에는 요금이 발생하지 않습니다.

**참고**: SageMaker AI에서는 실행 중인 하이퍼파라미터 조정 작업을 업데이트할 수 없습니다. 파라미터를 편집하고 구성 파일을 다시 적용할 수는 없습니다. 메타데이터 이름을 변경하거나 기존 작업을 삭제하고 새 작업을 생성해야 합니다. Kubeflow의 `TFJob`과 같은 기존 훈련 작업자와 마찬가지로 `update`는 지원되지 않습니다.

### 하이퍼파라미터 조정 작업 나열
<a name="list-hyperparameter-tuning-jobs"></a>

다음 명령을 사용하여 Kubernetes 연산자를 사용하여 생성된 모든 작업을 나열합니다.

```
kubectl get hyperparametertuningjob
```

출력은 다음과 같아야 합니다.

```
NAME         STATUS      CREATION-TIME          COMPLETED   INPROGRESS   ERRORS   STOPPED   BEST-TRAINING-JOB                               SAGEMAKER-JOB-NAME
xgboost-mnist-hpo   Completed   2019-10-17T01:15:52Z   10          0            0        0         xgboostha92f5e3cf07b11e9bf6c06d6-009-4c7a123   xgboostha92f5e3cf07b11e9bf6c123
```

하이퍼파라미터 조정 작업은 작업이 완료되거나 실패한 후에도 계속 나열됩니다. 다음 [하이퍼파라미터 조정 작업 삭제](#delete-hyperparametertuning-jobs)단계에 따라 목록에서 `hyperparametertuningjob`을 제거할 수 있습니다. 완료 또는 중지된 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다.

#### 하이퍼파라미터 조정 작업 상태 값
<a name="hyperparameter-tuning-job-status-values"></a>

`STATUS` 필드는 다음 값 중 하나일 수 있습니다.
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

이러한 상태는 SageMaker AI 공식 [API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)에서 직접 가져온 것입니다.

공식 SageMaker AI 상태 외에도 `STATUS`는 `SynchronizingK8sJobWithSageMaker`가 될 수도 있습니다. 이는 연산자가 아직 작업을 처리하지 않았음을 의미합니다.

#### 상태 카운터
<a name="status-counters"></a>

출력에는 `COMPLETED`, `INPROGRESS`등의 여러 카운터가 있습니다. 이는 각각 완료한 훈련 작업과 진행 중인 훈련 작업 수를 나타냅니다. 결정 방법에 대한 자세한 내용은 SageMaker API 설명서의 [훈련 작업 상태 카운터](https://docs.aws.amazon.com/sagemaker/latest/dg/API_TrainingJobStatusCounters.html)를 참조하세요.

#### 최우수 훈련 작업
<a name="best-training-job"></a>

이 열에는 선택한 지표를 가장 잘 최적화한 `TrainingJob`의 이름이 포함됩니다.

조정된 하이퍼파라미터의 요약을 보려면 다음을 실행합니다.

```
kubectl describe hyperparametertuningjob xgboost-mnist-hpo
```

`TrainingJob`에 대한 자세한 정보를 보려면 다음을 실행합니다.

```
kubectl describe trainingjobs <job name>
```

#### 생성된 훈련 작업
<a name="spawned-training-jobs"></a>

다음 명령을 실행하여 `HyperparameterTuningJob`에서 시작된 Kubernetes의 훈련 작업 10개를 모두 추적할 수도 있습니다.

```
kubectl get trainingjobs
```

### 하이퍼파라미터 조정 작업 설명
<a name="describe-a-hyperparameter-tuning-job"></a>

`describe` `kubectl`명령을 사용하여 디버깅 세부 정보를 얻을 수 있습니다.

```
kubectl describe hyperparametertuningjob xgboost-mnist-hpo
```

Kubernetes용 SageMaker AI Operator는 조정 작업에 대한 정보 외에도 하이퍼파라미터 조정 작업에서 찾은 [최우수 훈련 작업](https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-monitor.html#automatic-model-tuning-best-training-job)을 다음과 같이 `describe` 출력에 표시합니다.

```
Name:         xgboost-mnist-hpo
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HyperparameterTuningJob","metadata":{"annotations":{},"name":"xgboost-mnist-hpo","namespace":...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         HyperparameterTuningJob
Metadata:
  Creation Timestamp:  2019-10-17T01:15:52Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  8167
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hyperparametertuningjobs/xgboost-mnist-hpo
  UID:               a92f5e3c-f07b-11e9-bf6c-06d6f303uidu
Spec:
  Hyper Parameter Tuning Job Config:
    Hyper Parameter Tuning Job Objective:
      Metric Name:  validation:error
      Type:         Minimize
    Parameter Ranges:
      Integer Parameter Ranges:
        Max Value:     20
        Min Value:     10
        Name:          num_round
        Scaling Type:  Linear
    Resource Limits:
      Max Number Of Training Jobs:     10
      Max Parallel Training Jobs:      10
    Strategy:                          Bayesian
    Training Job Early Stopping Type:  Off
  Hyper Parameter Tuning Job Name:     xgboostha92f5e3cf07b11e9bf6c06d6
  Region:                              us-east-2
  Training Job Definition:
    Algorithm Specification:
      Training Image:       12345678910.dkr.ecr.us-east-2.amazonaws.com/xgboost:1
      Training Input Mode:  File
    Input Data Config:
      Channel Name:  train
      Content Type:  text/csv
      Data Source:
        s3DataSource:
          s3DataDistributionType:  FullyReplicated
          s3DataType:              S3Prefix
          s3Uri:                   https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/train/
      Channel Name:                validation
      Content Type:                text/csv
      Data Source:
        s3DataSource:
          s3DataDistributionType:  FullyReplicated
          s3DataType:              S3Prefix
          s3Uri:                   https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/validation/
    Output Data Config:
      s3OutputPath:  https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/xgboost
    Resource Config:
      Instance Count:     1
      Instance Type:      ml.m4.xlarge
      Volume Size In GB:  5
    Role Arn:             arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
    Static Hyper Parameters:
      Name:   base_score
      Value:  0.5
      Name:   booster
      Value:  gbtree
      Name:   csv_weights
      Value:  0
      Name:   dsplit
      Value:  row
      Name:   grow_policy
      Value:  depthwise
      Name:   lambda_bias
      Value:  0.0
      Name:   max_bin
      Value:  256
      Name:   max_leaves
      Value:  0
      Name:   normalize_type
      Value:  tree
      Name:   objective
      Value:  reg:linear
      Name:   one_drop
      Value:  0
      Name:   prob_buffer_row
      Value:  1.0
      Name:   process_type
      Value:  default
      Name:   rate_drop
      Value:  0.0
      Name:   refresh_leaf
      Value:  1
      Name:   sample_type
      Value:  uniform
      Name:   scale_pos_weight
      Value:  1.0
      Name:   silent
      Value:  0
      Name:   sketch_eps
      Value:  0.03
      Name:   skip_drop
      Value:  0.0
      Name:   tree_method
      Value:  auto
      Name:   tweedie_variance_power
      Value:  1.5
    Stopping Condition:
      Max Runtime In Seconds:  86400
Status:
  Best Training Job:
    Creation Time:  2019-10-17T01:16:14Z
    Final Hyper Parameter Tuning Job Objective Metric:
      Metric Name:        validation:error
      Value:
    Objective Status:     Succeeded
    Training End Time:    2019-10-17T01:20:24Z
    Training Job Arn:     arn:aws:sagemaker:us-east-2:123456789012:training-job/xgboostha92f5e3cf07b11e9bf6c06d6-009-4sample
    Training Job Name:    xgboostha92f5e3cf07b11e9bf6c06d6-009-4c7a3059
    Training Job Status:  Completed
    Training Start Time:  2019-10-17T01:18:35Z
    Tuned Hyper Parameters:
      Name:                                    num_round
      Value:                                   18
  Hyper Parameter Tuning Job Status:           Completed
  Last Check Time:                             2019-10-17T01:21:01Z
  Sage Maker Hyper Parameter Tuning Job Name:  xgboostha92f5e3cf07b11e9bf6c06d6
  Training Job Status Counters:
    Completed:            10
    In Progress:          0
    Non Retryable Error:  0
    Retryable Error:      0
    Stopped:              0
    Total Error:          0
Events:                   <none>
```

### 하이퍼파라미터 조정 작업 로그 보기
<a name="view-logs-from-hyperparametertuning-jobs"></a>

하이퍼파라미터 조정 작업에는 로그가 없지만 해당 작업에서 시작한 모든 훈련 작업에는 로그가 있습니다. 이러한 로그는 마치 일반 훈련 작업과 마찬가지로 액세스할 수 있습니다. 자세한 내용은 [훈련 작업 로그 보기](#view-logs-from-training-jobs)섹션을 참조하세요.

### 하이퍼파라미터 조정 작업 삭제
<a name="delete-hyperparametertuning-jobs"></a>

SageMaker AI에서 하이퍼파라미터 작업을 중단하려면 다음 명령을 사용합니다.

```
kubectl delete hyperparametertuningjob xgboost-mnist-hpo
```

이 명령은 Kubernetes 클러스터에서 하이퍼파라미터 조정 작업 및 관련 훈련 작업을 제거하고 SageMaker AI에서 중지합니다. 중지 또는 완료된 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다. SageMaker AI는 하이퍼파라미터 조정 작업을 삭제하지 않습니다. 중지된 작업은 SageMaker AI 콘솔에 계속 표시됩니다.

출력은 다음과 같아야 합니다.

```
hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted
```

**참고**: 삭제 명령이 SageMaker AI에서 리소스를 정리하는 데 약 2분이 걸립니다.

## 배치 변환 작업 연산자
<a name="batchtransformjobs-operator"></a>

배치 변환 작업 운영자는 지정된 배치 변환 작업 사양을 SageMaker AI에서 실행하여 SageMaker AI에 맞게 조정합니다. SageMaker AI 배치 변환 작업에 대한 자세한 내용은 SageMaker AI [CreateTransformJob API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html)에서 확인할 수 있습니다.

**Topics**
+ [

### YAML 파일을 사용하여 배치 변환 작업 생성
](#create-a-batchtransformjob-using-a-simple-yaml-file)
+ [

### Helm 차트를 사용하여 배치 변환 작업 생성
](#create-a-batchtransformjob-using-a-helm-chart)
+ [

### 배치 변환 작업 나열
](#list-batch-transform-jobs)
+ [

### 배치 변환 작업 설명
](#describe-a-batch-transform-job)
+ [

### 배치 변환 작업 로그 보기
](#view-logs-from-batch-transform-jobs)
+ [

### 배치 변환 작업 삭제
](#delete-a-batch-transform-job)

### YAML 파일을 사용하여 배치 변환 작업 생성
<a name="create-a-batchtransformjob-using-a-simple-yaml-file"></a>

1. 다음 명령을 사용하여 배치 변환 작업용 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-batchtransform.yaml
   ```

1. `xgboost-mnist-batchtransform.yaml` 파일을 편집하여 필요한 파라미터를 변환함으로써 입력 데이터가 포함된 `inputdataconfig` 및 `s3OutputPath`를 SageMaker AI 실행 역할에 쓰기 권한이 있는 Amazon S3 버킷으로 대체합니다.

1. 다음 명령을 사용하여 YAML 파일을 적용합니다.

   ```
   kubectl apply -f xgboost-mnist-batchtransform.yaml
   ```

### Helm 차트를 사용하여 배치 변환 작업 생성
<a name="create-a-batchtransformjob-using-a-helm-chart"></a>

Helm 차트를 사용하여 배치 변환 작업을 실행할 수 있습니다.

#### Helm 설치 관리자 디렉터리 가져오기
<a name="get-the-helm-installer-directory"></a>

다음 명령을 사용하여 GitHub 리포지토리를 복제하여 소스를 가져옵니다.

```
git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
```

#### Helm 차트 구성
<a name="configure-the-helm-chart"></a>

`amazon-sagemaker-operator-for-k8s/hack/charts/batch-transform-jobs/` 폴더로 이동합니다.

`values.yaml` 파일을 편집하여 입력 데이터가 포함된 `inputdataconfig` 및 outputPath를 SageMaker AI 실행 역할에 쓰기 권한이 있는 S3 버킷으로 대체합니다.

#### 배치 변환 작업 생성
<a name="create-a-batch-transform-job"></a>

1. 다음 명령을 사용하여 배치 변환 작업을 생성합니다.

   ```
   helm install . --generate-name
   ```

   출력은 다음과 같아야 합니다.

   ```
   NAME: chart-1574292948
   LAST DEPLOYED: Wed Nov 20 23:35:49 2019
   NAMESPACE: default
   STATUS: deployed
   REVISION: 1
   TEST SUITE: None
   NOTES:
   Thanks for installing the sagemaker-k8s-batch-transform-job.
   ```

1. Helm 차트가 성공적으로 생성되었는지 확인하려면 다음 명령을 실행합니다.

   ```
   helm ls
   NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
   chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-batchtransformjob-0.1.0
   chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-hyperparametertuningjob-0.1.0
   chart-1574292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
   rolebased-1574291698    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

   이 명령은 `BatchTransformJob`Kubernetes 리소스를 생성합니다. 운영자는 SageMaker AI에서 실제 변환 작업을 시작하고 SageMaker AI의 작업 상태를 반영하도록 `BatchTransformJob` Kubernetes 리소스를 업데이트합니다. 작업 기간 동안 사용한 SageMaker AI 리소스에 대해 요금이 부과됩니다. 작업이 완료되거나 중지된 후에는 요금이 발생하지 않습니다.

**참고**: SageMaker AI에서는 실행 중인 배치 변환 작업을 업데이트할 수 없습니다. 파라미터를 편집하고 구성 파일을 다시 적용할 수는 없습니다. 메타데이터 이름을 변경하거나 기존 작업을 삭제하고 새 작업을 생성해야 합니다. Kubeflow의 `TFJob`과 같은 기존 훈련 작업자와 마찬가지로 `update`는 지원되지 않습니다.

### 배치 변환 작업 나열
<a name="list-batch-transform-jobs"></a>

다음 명령을 사용하여 Kubernetes 연산자를 사용하여 생성된 모든 작업을 나열합니다.

```
kubectl get batchtransformjob
```

출력은 다음과 같아야 합니다.

```
NAME                                STATUS      CREATION-TIME          SAGEMAKER-JOB-NAME
xgboost-mnist-batch-transform       Completed   2019-11-18T03:44:00Z   xgboost-mnist-a88fb19809b511eaac440aa8axgboost
```

배치 변환 작업은 작업이 완료되거나 실패한 후에도 계속 나열됩니다. 다음 [배치 변환 작업 삭제](#delete-a-batch-transform-job)단계에 따라 목록에서 `hyperparametertuningjob`을 제거할 수 있습니다. 완료 또는 중지된 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다.

#### 배치 변환 상태 값
<a name="batch-transform-status-values"></a>

`STATUS` 필드는 다음 값 중 하나일 수 있습니다.
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

이러한 상태는 SageMaker AI 공식 [API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)에서 직접 가져온 것입니다.

공식 SageMaker AI 상태 외에도 `STATUS`는 `SynchronizingK8sJobWithSageMaker`가 될 수도 있습니다. 이는 연산자가 아직 작업을 처리하지 않았음을 의미합니다.

### 배치 변환 작업 설명
<a name="describe-a-batch-transform-job"></a>

`describe` `kubectl`명령을 사용하여 디버깅 세부 정보를 얻을 수 있습니다.

```
kubectl describe batchtransformjob xgboost-mnist-batch-transform
```

출력은 다음과 같아야 합니다.

```
Name:         xgboost-mnist-batch-transform
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"BatchTransformJob","metadata":{"annotations":{},"name":"xgboost-mnist","namespace"...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         BatchTransformJob
Metadata:
  Creation Timestamp:  2019-11-18T03:44:00Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  21990924
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/batchtransformjobs/xgboost-mnist
  UID:               a88fb198-09b5-11ea-ac44-0aa8a9UIDNUM
Spec:
  Model Name:  TrainingJob-20190814SMJOb-IKEB
  Region:      us-east-1
  Transform Input:
    Content Type:  text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Type:  S3Prefix
        S 3 Uri:        s3://amzn-s3-demo-bucket/mnist_kmeans_example/input
  Transform Job Name:   xgboost-mnist-a88fb19809b511eaac440aa8a9SMJOB
  Transform Output:
    S 3 Output Path:  s3://amzn-s3-demo-bucket/mnist_kmeans_example/output
  Transform Resources:
    Instance Count:  1
    Instance Type:   ml.m4.xlarge
Status:
  Last Check Time:                2019-11-19T22:50:40Z
  Sage Maker Transform Job Name:  xgboost-mnist-a88fb19809b511eaac440aaSMJOB
  Transform Job Status:           Completed
Events:                           <none>
```

### 배치 변환 작업 로그 보기
<a name="view-logs-from-batch-transform-jobs"></a>

다음 명령을 사용하여 `xgboost-mnist`배치 변환 작업의 로그를 확인합니다.

```
kubectl smlogs batchtransformjob xgboost-mnist-batch-transform
```

### 배치 변환 작업 삭제
<a name="delete-a-batch-transform-job"></a>

SageMaker AI에서 배치 변환 작업을 중지하려면 다음 명령을 사용합니다.

```
kubectl delete batchTransformJob xgboost-mnist-batch-transform
```

출력은 다음과 같아야 합니다.

```
batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted
```

이 명령은 Kubernetes 클러스터에서 배치 변환 작업을 제거하고 SageMaker AI에서 중지합니다. 중지 또는 완료된 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다. 삭제 명령이 SageMaker AI에서 리소스를 정리하는 데 약 2분이 걸립니다.

**참고**: SageMaker AI는 배치 변환 작업을 삭제하지 않습니다. 중지된 작업은 SageMaker AI 콘솔에 계속 표시됩니다.

## 호스팅 배포 연산자
<a name="hosting-deployment-operator"></a>

호스팅 배포 연산자는 실시간 추론을 위해 기존 엔드포인트 업데이트뿐 아니라 엔드포인트 생성 및 삭제를 지원합니다. 호스팅 배포 운영자는 SageMaker AI에서 모델, 엔드포인트 구성 및 엔드포인트를 생성하여 지정된 호스팅 배포 작업 사양을 SageMaker AI에 맞게 조정합니다. SageMaker AI 추론에 대한 자세한 내용은 SageMaker AI [CreateEndpoint API 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)에서 확인할 수 있습니다.

**Topics**
+ [

### 호스팅 배포 리소스 구성
](#configure-a-hostingdeployment-resource)
+ [

### 호스팅 배포 생성
](#create-a-hostingdeployment)
+ [

### 호스팅 배포 나열
](#list-hostingdeployments)
+ [

### 호스팅 배포 설명
](#describe-a-hostingdeployment)
+ [

### API 엔드포인트 호출
](#invoking-the-endpoint)
+ [

### 호스팅 배포 업데이트
](#update-hostingdeployment)
+ [

### 호스팅 배포 삭제
](#delete-the-hostingdeployment)

### 호스팅 배포 리소스 구성
<a name="configure-a-hostingdeployment-resource"></a>

다음 명령을 사용하여 호스팅 배포 작업용 샘플 YAML 파일을 다운로드합니다.

```
wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hostingdeployment.yaml
```

`xgboost-mnist-hostingdeployment.yaml` 파일에는 필요에 따라 편집할 수 있는 다음과 같은 구성 요소가 있습니다.
+ 프로덕션 변형.** 프로덕션 변형은 단일 모델을 제공하는 인스턴스 세트입니다. SageMaker AI는 설정된 가중치에 따라 모든 프로덕션 변형 간에 로드 밸런싱합니다.
+ 모델.** 모델은 모델을 제공하는 데 필요한 컨테이너 및 실행 역할 ARN입니다. 컨테이너가 하나 이상 필요합니다.
+ 컨테이너.** 컨테이너는 데이터세트와 제공 이미지를 지정합니다. SageMaker AI에서 제공하는 알고리즘 대신 사용자 지정 알고리즘을 사용하는 경우 추론 코드는 SageMaker AI 요구 사항을 충족해야 합니다. 자세한 내용을 알아보려면 [Using Your Own Algorithms with SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html)를 참조하세요.

### 호스팅 배포 생성
<a name="create-a-hostingdeployment"></a>

호스팅 배포를 생성하려면 다음 명령어로 `kubectl`을 사용하여 `hosting.yaml`파일을 적용합니다.

```
kubectl apply -f hosting.yaml
```

SageMaker AI는 지정된 구성으로 엔드포인트를 생성합니다. 엔드포인트 수명 동안 사용한 SageMaker AI 리소스에 대해 요금이 부과됩니다. 엔드포인트가 삭제되면 요금이 발생하지 않습니다.

생성 프로세스에는 10분 정도 걸립니다.

### 호스팅 배포 나열
<a name="list-hostingdeployments"></a>

호스팅 배포가 생성되었는지 확인하려면 다음 명령을 사용합니다.

```
kubectl get hostingdeployments
```

출력은 다음과 같아야 합니다.

```
NAME           STATUS     SAGEMAKER-ENDPOINT-NAME
host-xgboost   Creating   host-xgboost-def0e83e0d5f11eaaa450aSMLOGS
```

#### 호스팅 배포 상태 값
<a name="hostingdeployment-status-values"></a>

상태 필드는 여러 값 중 하나일 수 있습니다.
+ `SynchronizingK8sJobWithSageMaker`: 연산자가 엔드포인트 생성을 준비 중입니다.
+ `ReconcilingEndpoint`: 연산자가 엔드포인트 리소스를 생성, 업데이트 또는 삭제하고 있습니다. 호스팅 배포가 이 상태로 유지되는 경우 `kubectl describe`를 사용하여 `Additional`필드에서 이유를 확인합니다.
+ `OutOfService`: 엔드포인트는 수신 요청을 받아들이는 데 사용할 수 없습니다.
+ `Creating`: [엔드포인트 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)이 실행 중입니다.
+ `Updating`: [엔드포인트 업데이트 [또는 ](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html)엔드포인트 가중치 및 용량 업데이트](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html)가 실행 중입니다.
+ `SystemUpdating`: 엔드포인트는 유지 관리 중이며 완료될 때까지 업데이트, 삭제 또는 조정할 수 없습니다. 이 유지 관리 작업은 VPC 구성, AWS KMS 암호화, 모델, 인스턴스 유형 또는 인스턴스 수와 같은 고객 지정 값을 변경하지 않습니다.
+ `RollingBack`: 엔드포인트가 변형 가중치를 확대 또는 축소하거나 변경하지 못하고 이전 구성으로 롤백하는 중입니다. 롤백이 완료되면 엔드포인트는 `InService`상태로 돌아갑니다. 이 전환 상태는 오토 스케일링이 켜져 있고 [엔드포인트 가중치 및 용량 업데이트](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 호출의 일환으로 변형 가중치 또는 용량이 변경되는 엔드포인트 또는 [엔드포인트 가중치 및 용량 업데이트](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 작업이 명시적으로 호출되는 경우에만 적용됩니다.
+ `InService`: 엔드포인트는 수신 요청을 처리하는 데 사용할 수 있습니다.
+ `Deleting`: [엔드포인트 삭제](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html)가 실행 중입니다.
+ `Failed`: 엔드포인트를 생성, 업데이트 또는 재조정할 수 없습니다. [엔드포인트 설명: 실패 이유](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeEndpoint.html#SageMaker-DescribeEndpoint-response-FailureReason)를 사용하여 실패에 내용을 확인합니다. [엔드포인트 삭제](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html)는 실패한 엔드포인트에서 수행할 수 있는 유일한 작업입니다.

### 호스팅 배포 설명
<a name="describe-a-hostingdeployment"></a>

`describe` `kubectl`명령을 사용하여 디버깅 세부 정보를 얻을 수 있습니다.

```
kubectl describe hostingdeployment
```

출력은 다음과 같아야 합니다.

```
Name:         host-xgboost
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HostingDeployment","metadata":{"annotations":{},"name":"host-xgboost","namespace":"def..."
API Version:  sagemaker.aws.amazon.com/v1
Kind:         HostingDeployment
Metadata:
  Creation Timestamp:  2019-11-22T19:40:00Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        1
  Resource Version:  4258134
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hostingdeployments/host-xgboost
  UID:               def0e83e-0d5f-11ea-aa45-0a3507uiduid
Spec:
  Containers:
    Container Hostname:  xgboost
    Image:               123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
    Model Data URL:      s3://amzn-s3-demo-bucket/inference/xgboost-mnist/model.tar.gz
  Models:
    Containers:
      xgboost
    Execution Role Arn:  arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
    Name:                xgboost-model
    Primary Container:   xgboost
  Production Variants:
    Initial Instance Count:  1
    Instance Type:           ml.c5.large
    Model Name:              xgboost-model
    Variant Name:            all-traffic
  Region:                    us-east-2
Status:
  Creation Time:         2019-11-22T19:40:04Z
  Endpoint Arn:          arn:aws:sagemaker:us-east-2:123456789012:endpoint/host-xgboost-def0e83e0d5f11eaaaexample
  Endpoint Config Name:  host-xgboost-1-def0e83e0d5f11e-e08f6c510d5f11eaaa450aexample
  Endpoint Name:         host-xgboost-def0e83e0d5f11eaaa450a350733ba06
  Endpoint Status:       Creating
  Endpoint URL:          https://runtime.sagemaker.us-east-2.amazonaws.com/endpoints/host-xgboost-def0e83e0d5f11eaaaexample/invocations
  Last Check Time:       2019-11-22T19:43:57Z
  Last Modified Time:    2019-11-22T19:40:04Z
  Model Names:
    Name:   xgboost-model
    Value:  xgboost-model-1-def0e83e0d5f11-df5cc9fd0d5f11eaaa450aexample
Events:     <none>
```

상태 필드는 다음 필드를 사용하여 자세한 정보를 제공합니다.
+ `Additional`: 호스팅 배포 상태에 대한 추가 정보입니다. 이 필드는 선택 사항이며 오류가 발생한 경우에만 입력됩니다.
+ `Creation Time`: SageMaker AI에서 엔드포인트를 생성한 시점입니다.
+ `Endpoint ARN`: SageMaker AI 엔드포인트 ARN입니다.
+ `Endpoint Config Name`: 엔드포인트 구성의 SageMaker AI 이름입니다.
+ `Endpoint Name`: 엔드포인트의 SageMaker AI 이름입니다.
+ `Endpoint Status`: 엔드포인트의 상태입니다.
+ `Endpoint URL`: 엔드포인트에 액세스하는 데 사용할 수 있는 HTTPS URL입니다. 자세한 내용은 [Deploy a Model on SageMaker AI Hosting Services](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)를 참조하세요.
+ `FailureReason`: 생성, 업데이트 또는 삭제 명령이 실패할 경우 원인을 표시합니다.
+ `Last Check Time`: 연산자가 엔드포인트의 상태를 마지막으로 확인한 시간입니다.
+ `Last Modified Time`: 엔드포인트를 마지막으로 수정한 시간입니다.
+ `Model Names`: HostingDeployment 모델 이름을 SageMaker AI 모델 이름에 연결하는 키-값 페어입니다.

### API 엔드포인트 호출
<a name="invoking-the-endpoint"></a>

엔드포인트 상태가 이면 인증 및 URL 요청 서명을 수행하는 AWS CLI를 사용하거나 cURL과 같은 HTTP 클라이언트를 사용하는 두 가지 방법으로 엔드포인트를 호출`InService`할 수 있습니다. 자체 클라이언트를 사용하는 경우 v AWS 4 URL 서명 및 인증을 직접 수행해야 합니다.

 AWS CLI를 사용하여 엔드포인트를 호출하려면 다음 명령을 실행합니다. 리전 및 엔드포인트 이름을 엔드포인트의 리전 및 SageMaker AI 엔드포인트 이름으로 바꿔야 합니다. 이 정보는 `kubectl describe`의 출력에서 얻을 수 있습니다.

```
# Invoke the endpoint with mock input data.
aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name <endpoint name> \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null
```

예를 들어 리전이 `us-east-2`이고 엔드포인트 구성 이름이 `host-xgboost-f56b6b280d7511ea824b129926example`인 경우 다음 명령으로 엔드포인트를 호출합니다.

```
aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name host-xgboost-f56b6b280d7511ea824b1299example \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null
4.95847082138
```

여기 `4.95847082138`은 모의 데이터에 대한 모델의 예측입니다.

### 호스팅 배포 업데이트
<a name="update-hostingdeployment"></a>

1. 호스팅 배포가 `InService`상태가 되면 업데이트할 수 있습니다. 호스팅 배포가 서비스되려면 약 10분 정도 걸릴 수 있습니다. 다음 명령을 사용하여 `InService`상태인지 확인합니다.

   ```
   kubectl get hostingdeployments
   ```

1. 호스팅 배포는 `InService`상태가 되기 전에 업데이트될 수 있습니다. 운영자는 업데이트를 적용하기 전에 SageMaker AI 엔드포인트가 `InService`가 될 때까지 기다립니다.

   업데이트를 적용하려면 `hosting.yaml`파일을 수정합니다. 예를 들어 다음과 같이 `initialInstanceCount`필드를 1에서 2로 변경합니다.

   ```
   apiVersion: sagemaker.aws.amazon.com/v1
   kind: HostingDeployment
   metadata:
     name: host-xgboost
   spec:
       region: us-east-2
       productionVariants:
           - variantName: all-traffic
             modelName: xgboost-model
             initialInstanceCount: 2
             instanceType: ml.c5.large
       models:
           - name: xgboost-model
             executionRoleArn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
             primaryContainer: xgboost
             containers:
               - xgboost
       containers:
           - containerHostname: xgboost
             modelDataUrl: s3://amzn-s3-demo-bucket/inference/xgboost-mnist/model.tar.gz
             image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
   ```

1. 파일을 저장한 다음 다음과 같이 `kubectl`을 사용하여 업데이트를 적용합니다. 그러면 `InService`상태에서 `ReconcilingEndpoint`상태로 변한 뒤 `Updating`상태로 변하는 것을 확인할 수 있습니다.

   ```
   $ kubectl apply -f hosting.yaml
   hostingdeployment.sagemaker.aws.amazon.com/host-xgboost configured
   
   $ kubectl get hostingdeployments
   NAME           STATUS                SAGEMAKER-ENDPOINT-NAME
   host-xgboost   ReconcilingEndpoint   host-xgboost-def0e83e0d5f11eaaa450a350abcdef
   
   $ kubectl get hostingdeployments
   NAME           STATUS     SAGEMAKER-ENDPOINT-NAME
   host-xgboost   Updating   host-xgboost-def0e83e0d5f11eaaa450a3507abcdef
   ```

SageMaker AI는 모델과 함께 새 인스턴스 세트를 배포하고, 새 인스턴스를 사용하도록 트래픽을 전환하고, 이전 인스턴스를 비웁니다. 이 프로세스가 시작되면 바로 `Updating`상태가 됩니다. 업데이트가 완료되면 엔드포인트는 `InService`가 됩니다. 이 프로세스에는 10분 정도 걸립니다.

### 호스팅 배포 삭제
<a name="delete-the-hostingdeployment"></a>

1. 다음 명령으로 `kubectl`을 사용하여 호스팅 배포를 삭제합니다.

   ```
   kubectl delete hostingdeployments host-xgboost
   ```

   출력은 다음과 같아야 합니다.

   ```
   hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
   ```

1. 호스팅 배포가 삭제되었는지 확인하려면 다음 명령을 사용합니다.

   ```
   kubectl get hostingdeployments
   No resources found.
   ```

삭제된 엔드포인트에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다.

## 처리 작업 연산자
<a name="kubernetes-processing-job-operator"></a>

처리 작업 연산자는 Amazon SageMaker 처리 작업을 시작하는 데 사용됩니다. SageMaker Processing 작업에 대한 자세한 내용은 [CreateProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)을 참조하세요.

**Topics**
+ [

### YAML 파일을 사용하여 처리 작업 생성
](#kubernetes-processing-job-yaml)
+ [

### 처리 작업 나열
](#kubernetes-processing-job-list)
+ [

### 처리 작업 설명
](#kubernetes-processing-job-description)
+ [

### 처리 작업 삭제
](#kubernetes-processing-job-delete)

### YAML 파일을 사용하여 처리 작업 생성
<a name="kubernetes-processing-job-yaml"></a>

다음 단계에 따라 YAML 파일을 사용하여 Amazon SageMaker 처리 작업을 생성합니다.

1. `kmeans_preprocessing.py` 사전 처리 스크립트를 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/kmeans_preprocessing.py
   ```

1. Amazon Simple Storage Service(S3) 버킷 중 하나에서 `mnist_kmeans_example/processing_code`폴더를 생성하고 스크립트를 폴더에 업로드합니다.

1. `kmeans-mnist-processingjob.yaml` 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/kmeans-mnist-processingjob.yaml
   ```

1. YAML 파일을 편집하여 `sagemaker-execution-role`을 지정하고 `amzn-s3-demo-bucket`의 모든 인스턴스를 S3 버킷으로 대체합니다.

   ```
   ...
   metadata:
     name: kmeans-mnist-processing
   ...
     roleArn: arn:aws:iam::<acct-id>:role/service-role/<sagemaker-execution-role>
     ...
     processingOutputConfig:
       outputs:
         ...
             s3Output:
               s3Uri: s3://<amzn-s3-demo-bucket>/mnist_kmeans_example/output/
     ...
     processingInputs:
       ...
           s3Input:
             s3Uri: s3://<amzn-s3-demo-bucket>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
   ```

   SageMaker AI가 사용자를 대신하여 S3 버킷, Amazon CloudWatch 및 기타 서비스에 액세스할 수 있으려면 `sagemaker-execution-role`에 권한이 있어야 합니다. 실행 역할 생성에 대한 자세한 내용은 [SageMaker AI Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)을 참조하세요.

1. 다음 명령 중 하나를 사용하여 YAML 파일을 적용합니다.

   클러스터 범위 설치의 경우:

   ```
   kubectl apply -f kmeans-mnist-processingjob.yaml
   ```

   네임스페이스 범위 설치의 경우:

   ```
   kubectl apply -f kmeans-mnist-processingjob.yaml -n <NAMESPACE>
   ```

### 처리 작업 나열
<a name="kubernetes-processing-job-list"></a>

다음 명령 중 하나로 처리 작업 연산자를 사용하여 생성된 모든 작업을 나열합니다. `SAGEMAKER-JOB-NAME `은 YAML 파일의 `metadata`섹션에서 가져옵니다.

클러스터 범위 설치의 경우:

```
kubectl get ProcessingJob kmeans-mnist-processing
```

네임스페이스 범위 설치의 경우:

```
kubectl get ProcessingJob -n <NAMESPACE> kmeans-mnist-processing
```

출력은 다음과 비슷한 형태가 됩니다.

```
NAME                    STATUS     CREATION-TIME        SAGEMAKER-JOB-NAME
kmeans-mnist-processing InProgress 2020-09-22T21:13:25Z kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385
```

출력에는 상태와 상관없이 모든 작업이 나열됩니다. 목록에서 작업을 제거하려면 [처리 작업 삭제](https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-processing-job-operator.html#kubernetes-processing-job-delete)를 참조하세요.

**처리 상태 처리**
+ `SynchronizingK8sJobWithSageMaker` – 작업이 먼저 클러스터에 제출됩니다. 연산자가 요청을 받았으며 처리 작업을 생성할 준비를 하고 있습니다.
+ `Reconciling` – 연산자가 다른 오류와 함께 일시적 오류를 초기화하거나 복구 중입니다. 처리 작업이 이 상태로 유지되는 경우 `kubectl``describe`명령을 사용하여 `Additional`필드에서 이유를 확인합니다.
+ `InProgress | Completed | Failed | Stopping | Stopped` – SageMaker Processing 작업 상태입니다. 자세한 내용은 [처리 작업 설명](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html#sagemaker-DescribeProcessingJob-response-ProcessingJobStatus)을 참조하세요.
+ `Error` – 연산자는 조정을 통해 복구할 수 없습니다.

완료, 중지 또는 실패한 작업에는 SageMaker AI 리소스에 대한 추가 요금이 부과되지 않습니다.

### 처리 작업 설명
<a name="kubernetes-processing-job-description"></a>

다음 명령 중 하나를 사용하여 처리 작업에 대한 자세한 내용을 볼 수 있습니다. 이러한 명령은 일반적으로 문제를 디버깅하거나 처리 작업의 파라미터를 확인하는 데 사용됩니다.

클러스터 범위 설치의 경우:

```
kubectl describe processingjob kmeans-mnist-processing
```

네임스페이스 범위 설치의 경우:

```
kubectl describe processingjob kmeans-mnist-processing -n <NAMESPACE>
```

처리 작업의 출력은 다음과 비슷한 형태가 됩니다.

```
$ kubectl describe ProcessingJob kmeans-mnist-processing
Name:         kmeans-mnist-processing
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"ProcessingJob","metadata":{"annotations":{},"name":"kmeans-mnist-processing",...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         ProcessingJob
Metadata:
  Creation Timestamp:  2020-09-22T21:13:25Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  21746658
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/processingjobs/kmeans-mnist-processing
  UID:               7410ed52-fd18-11ea-b19a-165ae9f9e385
Spec:
  App Specification:
    Container Entrypoint:
      python
      /opt/ml/processing/code/kmeans_preprocessing.py
    Image Uri:  763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:1.5.0-cpu-py36-ubuntu16.04
  Environment:
    Name:   MYVAR
    Value:  my_value
    Name:   MYVAR2
    Value:  my_value2
  Network Config:
  Processing Inputs:
    Input Name:  mnist_tar
    s3Input:
      Local Path:   /opt/ml/processing/input
      s3DataType:   S3Prefix
      s3InputMode:  File
      s3Uri:        s3://<s3bucket>-us-west-2/algorithms/kmeans/mnist/mnist.pkl.gz
    Input Name:     source_code
    s3Input:
      Local Path:   /opt/ml/processing/code
      s3DataType:   S3Prefix
      s3InputMode:  File
      s3Uri:        s3://<s3bucket>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
  Processing Output Config:
    Outputs:
      Output Name:  train_data
      s3Output:
        Local Path:    /opt/ml/processing/output_train/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
      Output Name:     test_data
      s3Output:
        Local Path:    /opt/ml/processing/output_test/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
      Output Name:     valid_data
      s3Output:
        Local Path:    /opt/ml/processing/output_valid/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
  Processing Resources:
    Cluster Config:
      Instance Count:     1
      Instance Type:      ml.m5.xlarge
      Volume Size In GB:  20
  Region:                 us-west-2
  Role Arn:               arn:aws:iam::<acct-id>:role/m-sagemaker-role
  Stopping Condition:
    Max Runtime In Seconds:  1800
  Tags:
    Key:    tagKey
    Value:  tagValue
Status:
  Cloud Watch Log URL:             https://us-west-2.console.aws.amazon.com/cloudwatch/home?region=us-west-2#logStream:group=/aws/sagemaker/ProcessingJobs;prefix=kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385;streamFilter=typeLogStreamPrefix
  Last Check Time:                 2020-09-22T21:14:29Z
  Processing Job Status:           InProgress
  Sage Maker Processing Job Name:  kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385
Events:                            <none>
```

### 처리 작업 삭제
<a name="kubernetes-processing-job-delete"></a>

처리 작업을 삭제하면 SageMaker Processing 작업이 Kubernetes에서 제거되지만 SageMaker AI에서는 작업이 삭제되지 않습니다. SageMaker AI의 작업 상태가 `InProgress`인 경우 작업이 중지됩니다. 중지된 처리 작업에는 SageMaker AI 리소스에 대한 요금이 부과되지 않습니다. 다음 명령 중 하나를 사용하여 처리 작업을 삭제합니다.

클러스터 범위 설치의 경우:

```
kubectl delete processingjob kmeans-mnist-processing
```

네임스페이스 범위 설치의 경우:

```
kubectl delete processingjob kmeans-mnist-processing -n <NAMESPACE>
```

처리 작업의 출력은 다음과 비슷한 형태가 됩니다.

```
processingjob.sagemaker.aws.amazon.com "kmeans-mnist-processing" deleted
```



**참고**  
SageMaker AI는 처리 작업을 삭제하지 않습니다. 중지된 작업은 SageMaker AI 콘솔에 계속 표시됩니다. `delete` 명령이 SageMaker AI에서 리소스를 정리하는 데 몇 분 정도 걸립니다.

## 호스팅 오토 스케일링 정책(HAP) 연산자
<a name="kubernetes-hap-operator"></a>

호스팅 오토 스케일링 정책(HAP) 연산자는 리소스 ID 목록을 입력으로 받아 각 리소스에 동일한 정책을 적용합니다. 각 리소스 ID는 엔드포인트 이름과 변형 이름의 조합입니다. HAP 연산자는 두 단계를 수행합니다.리소스 ID를 등록한 다음 각 리소스 ID에 조정 정책을 적용합니다. `Delete`는 두 작업을 모두 취소합니다. HAP를 기존 SageMaker AI 엔드포인트에 적용하거나 [HostingDeployment 운영자](https://docs.aws.amazon.com/sagemaker/latest/dg/hosting-deployment-operator.html#create-a-hostingdeployment)를 사용하여 새 SageMaker AI 엔드포인트를 생성할 수 있습니다. [Application Autoscaling Policy 설명서](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)에서 SageMaker AI 오토 스케일링에 대한 자세한 내용을 읽을 수 있습니다.

**참고**  
`kubectl` 명령에서 `hostingautoscalingpolicy`대신 짧은 형식인 `hap`을 사용할 수 있습니다.

**Topics**
+ [

### YAML 파일을 사용하여 호스팅 오토 스케일링 정책 생성
](#kubernetes-hap-job-yaml)
+ [

### 호스팅 오토 스케일링 정책 나열
](#kubernetes-hap-list)
+ [

### 호스팅 오토 스케일링 정책 설명
](#kubernetes-hap-describe)
+ [

### 호스팅 오토 스케일링 정책 업데이트
](#kubernetes-hap-update)
+ [

### 호스팅 오토 스케일링 정책 삭제
](#kubernetes-hap-delete)
+ [

### 호스팅 오토 스케일링 정책이 있는 엔드포인트 업데이트 또는 삭제
](#kubernetes-hap-update-delete-endpoint)

### YAML 파일을 사용하여 호스팅 오토 스케일링 정책 생성
<a name="kubernetes-hap-job-yaml"></a>

YAML 파일을 사용하여 사전 정의된 지표 또는 사용자 지정 지표를 하나 또는 여러 SageMaker AI 엔드포인트에 적용하는 HostingAutoscalingPolicy(HAP)를 만들 수 있습니다.

Amazon SageMaker AI는 변형에 오토 스케일링을 적용하려면 특정 값이 필요합니다. 이러한 값이 YAML 사양에 지정되지 않은 경우 HAP 연산자는 다음 기본값을 적용합니다.

```
# Do not change
Namespace                    = "sagemaker"
# Do not change
ScalableDimension            = "sagemaker:variant:DesiredInstanceCount"
# Only one supported
PolicyType                   = "TargetTrackingScaling"
# This is the default policy name but can be changed to apply a custom policy
DefaultAutoscalingPolicyName = "SageMakerEndpointInvocationScalingPolicy"
```

다음 샘플을 사용하여 하나 이상의 엔드포인트에 사전 정의된 지표 또는 사용자 지정 지표를 적용하는 HAP를 만들 수 있습니다.

#### 샘플 1: 사전 정의된 지표를 단일 엔드포인트 변형에 적용
<a name="kubernetes-hap-predefined-metric"></a>

1. 다음 명령을 사용하여 사전 정의된 지표용 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-predefined-metric.yaml
   ```

1. YAML 파일을 편집하여 `endpointName`, `variantName`및 `Region`을 지정합니다.

1. 다음 명령 중 하나를 사용하여 사전 정의된 지표를 단일 리소스 ID(엔드포인트 이름 및 변형 이름 조합)에 적용합니다.

   클러스터 범위 설치의 경우:

   ```
   kubectl apply -f hap-predefined-metric.yaml
   ```

   네임스페이스 범위 설치의 경우:

   ```
   kubectl apply -f hap-predefined-metric.yaml -n <NAMESPACE>
   ```

#### 샘플 2: 사용자 지정 지표를 단일 엔드포인트 변형에 적용
<a name="kubernetes-hap-custom-metric"></a>

1. 다음 명령을 사용하여 사용자 지정 지표용 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-custom-metric.yaml
   ```

1. YAML 파일을 편집하여 `endpointName`, `variantName`및 `Region`을 지정합니다.

1. 다음 명령 중 하나를 사용하여 사용자 지정 지표를 권장되는 `SageMakerVariantInvocationsPerInstance`대신 단일 리소스 ID(엔드포인트 이름 및 변형 이름 조합)에 적용합니다.
**참고**  
Amazon SageMaker AI는 YAML 사양의 유효성을 검사하지 않습니다.

   클러스터 범위 설치의 경우:

   ```
   kubectl apply -f hap-custom-metric.yaml
   ```

   네임스페이스 범위 설치의 경우:

   ```
   kubectl apply -f hap-custom-metric.yaml -n <NAMESPACE>
   ```

#### 샘플 3: 스케일링 정책을 여러 엔드포인트 및 변형에 적용
<a name="kubernetes-hap-scaling-policy"></a>

HAP 연산자를 사용하여 여러 리소스 ID에 동일한 스케일링 정책을 적용할 수 있습니다. 각 리소스 ID(엔드포인트 이름 및 변형 이름 조합)에 대해 별도의 `scaling_policy`요청이 생성됩니다.

1. 다음 명령을 사용하여 사전 정의된 지표용 샘플 YAML 파일을 다운로드합니다.

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-predefined-metric.yaml
   ```

1. YAML 파일을 편집하여 `Region`및 여러 `endpointName`및 `variantName`값을 지정합니다.

1. 다음 명령 중 하나를 사용하여 사전 정의된 지표를 여러 리소스 ID(엔드포인트 이름 및 변형 이름 조합)에 적용합니다.

   클러스터 범위 설치의 경우:

   ```
   kubectl apply -f hap-predefined-metric.yaml
   ```

   네임스페이스 범위 설치의 경우:

   ```
   kubectl apply -f hap-predefined-metric.yaml -n <NAMESPACE>
   ```

#### 여러 엔드포인트 및 변형에 대한 호스팅 오토 스케일링 정책 고려 사항
<a name="kubernetes-hap-scaling-considerations"></a>

여러 리소스 ID 사용 시 다음 사항을 고려하세요.
+ 여러 리소스 ID에 단일 정책을 적용하는 경우 리소스 ID당 정책 ARN이 하나씩 생성됩니다. 5개의 엔드포인트에는 5개의 정책 ARN이 있습니다. 정책에서 `describe`명령을 실행하면 응답이 하나의 작업으로 표시되며 단일 작업 상태만 포함됩니다.
+ 사용자 지정 지표를 여러 리소스 ID에 적용하는 경우 모든 리소스 ID(변형) 값에 동일한 차원 또는 값이 사용됩니다. 예를 들어 인스턴스 1-5에 고객 지표를 적용하고 엔드포인트 변형 차원이 변형 1에 매핑된 경우, 변형 1이 지표를 초과하면 모 든 엔드포인트가 확대 또는 축소됩니다.
+ HAP 연산자는 리소스 ID 목록 업데이트를 지원합니다. 리소스 ID를 사양에 수정, 추가 또는 삭제하면 오토 스케일링 정책이 이전 변형 목록에서 제거되고 새로 지정된 리소스 ID 조합에 적용됩니다. [https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-hap-operator.html#kubernetes-hap-describe](https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-hap-operator.html#kubernetes-hap-describe) 명령을 사용하여 정책이 현재 적용되는 리소스 ID를 나열합니다.

### 호스팅 오토 스케일링 정책 나열
<a name="kubernetes-hap-list"></a>

다음 명령 중 하나로 HAP 연산자를 사용하여 생성된 모든 호스팅 오토 스케일링 정책(HAP)을 나열합니다.

클러스터 범위 설치의 경우:

```
kubectl get hap
```

네임스페이스 범위 설치의 경우:

```
kubectl get hap -n <NAMESPACE>
```

출력은 다음과 비슷한 형태가 됩니다.

```
NAME             STATUS   CREATION-TIME
hap-predefined   Created  2021-07-13T21:32:21Z
```

다음 명령을 사용하여 호스팅 오토 스케일링 정책(HAP)의 상태를 확인합니다.

```
kubectl get hap <job-name>
```

다음 값 중 하나가 반환됩니다.
+ `Reconciling` – 특정 유형의 오류에는 상태가 `Error`대신 `Reconciling`상태로 표시됩니다. 서버 측 오류와 `Creating`또는 `Updating`상태의 엔드포인트를 예로 들 수 있습니다. 세부 정보는 상태 또는 연산자 로그의 `Additional`필드를 확인하세요.
+ `Created`
+ `Error`

**정책을 적용한 오토 스케일링 엔드포인트를 보려면**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 왼쪽 패널에서 **추론**을 확장합니다.

1. **엔드포인트**를 선택합니다.

1. 관심 엔드포인트의 이름을 선택합니다.

1. **엔드포인트 구성 설정** 섹션으로 스크롤합니다.

### 호스팅 오토 스케일링 정책 설명
<a name="kubernetes-hap-describe"></a>

다음 명령을 사용하여 호스팅 오토 스케일링 정책(HAP)에 대한 자세한 내용을 확인할 수 있습니다. 이러한 명령은 일반적으로 문제를 디버깅하거나 HAP의 리소스 ID(엔드포인트 이름 및 변형 이름 조합)를 확인하는 데 사용됩니다.

```
kubectl describe hap <job-name>
```

### 호스팅 오토 스케일링 정책 업데이트
<a name="kubernetes-hap-update"></a>

호스팅 오토 스케일링 정책(HAP) 연산자가 업데이트를 지원합니다. YAML 사양을 편집하여 값을 변경한 다음 정책을 다시 적용할 수 있습니다. HAP 연산자는 기존 정책을 삭제하고 새 정책을 적용합니다.

### 호스팅 오토 스케일링 정책 삭제
<a name="kubernetes-hap-delete"></a>

다음 명령 중 하나를 사용하여 호스팅 오토 스케일링 정책(HAP)을 삭제합니다.

클러스터 범위 설치의 경우:

```
kubectl delete hap hap-predefined
```

네임스페이스 범위 설치의 경우:

```
kubectl delete hap hap-predefined -n <NAMESPACE>
```

이 명령은 스케일링 정책을 삭제하고 Kubernetes에서 스케일링 대상을 등록 취소합니다. 이 명령은 다음 출력을 반환합니다.

```
hostingautoscalingpolicies.sagemaker.aws.amazon.com "hap-predefined" deleted
```

### 호스팅 오토 스케일링 정책이 있는 엔드포인트 업데이트 또는 삭제
<a name="kubernetes-hap-update-delete-endpoint"></a>

호스팅 오토 스케일링 정책(HAP)이 있는 엔드포인트를 업데이트하려면 `kubectl``delete`명령을 사용하여 HAP를 제거하고 엔드포인트를 업데이트한 다음 HAP를 다시 적용합니다.

HAP가 있는 엔드포인트를 삭제하려면 엔드포인트를 삭제하기 전에 `kubectl``delete`명령을 사용하여 HAP를 제거합니다.

# 리소스를 최신 연산자로 마이그레이션
<a name="kubernetes-sagemaker-operators-migrate"></a>

[Kubernetes용 SageMaker Operators ](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)오리지널 버전의 개발 및 기술 지원을 중단합니다.

현재 `v1.2.2`버전 이하의 [Kubernetes용 SageMaker Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)를 사용하고 있다면 [Amazon SageMaker용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)로 리소스를 마이그레이션하는 것이 좋습니다. ACK 서비스 컨트롤러는 [Kubernetes용AWS 컨트롤러(ACK)](https://aws-controllers-k8s.github.io/community/)를 기반으로 하는 차세대 Kubernetes용 SageMaker Operators입니다.

Kubernetes용 SageMaker Operators 오리지널 버전의 지원 종료에 대한 자주 묻는 질문에 대한 답변은 [Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표](kubernetes-sagemaker-operators-eos-announcement.md)섹션을 참조하세요.

Amazon SageMaker AI를 사용하여 기계 학습 모델을 훈련, 조정 및 배포하기 위해 리소스를 마이그레이션하고 ACK를 사용하려면 다음 단계를 사용하세요.

**참고**  
최신 Kubernetes용 SageMaker AI Operators는 이전 버전과 호환되지 않습니다.

**Topics**
+ [

## 사전 조건
](#migrate-resources-to-new-operators-prerequisites)
+ [

## 리소스 채택
](#migrate-resources-to-new-operators-steps)
+ [

## 이전 리소스 정리
](#migrate-resources-to-new-operators-cleanup)
+ [

## 새로운 Kubernetes용 SageMaker AI Operators 사용
](#migrate-resources-to-new-operators-tutorials)

## 사전 조건
<a name="migrate-resources-to-new-operators-prerequisites"></a>

리소스를 최신 SageMaker AI Operators로 성공적으로 마이그레이션하려면 다음을 수행해야 합니다.

1. 최신 Kubernetes용 SageMaker AI Operators를 설치합니다. 단계별 지침은 *Machine Learning with the ACK SageMaker AI Controller*의 [Setup](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)을 참조하세요.

1. [호스팅 오토 스케일링 리소스](#migrate-resources-to-new-operators-hap)을 사용하는 경우 새 애플리케이션 오토 스케일링 연산자를 설치하세요. 단계별 지침은 *Scale SageMaker AI Workloads with Application Auto Scaling*의 [Setup](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/#setup)을 참조하세요. 호스팅 오토 스케일링 정책 리소스를 사용하지 않는 경우 이 단계는 선택 사항입니다.

권한이 올바르게 구성된 경우 ACK SageMaker AI 서비스 컨트롤러는 AWS 리소스의 사양과 상태를 확인하고 ACK 컨트롤러가 원래 생성한 것처럼 리소스를 조정할 수 있습니다.

## 리소스 채택
<a name="migrate-resources-to-new-operators-steps"></a>

새로운 Kubernetes용 SageMaker AI Operators는 원래 ACK 서비스 컨트롤러에서 생성하지 않은 리소스를 채택할 수 있는 기능을 제공합니다. 자세한 내용은 ACK 설명서의 [기존 AWS 리소스 채택](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/)을 참조하세요.

다음 단계는 새로운 Kubernetes용 SageMaker AI Operators가 기존 SageMaker AI 엔드포인트를 채택할 수 있는 방법을 보여줍니다. 다음 샘플을 `adopt-endpoint-sample.yaml`이라는 파일에 저장합니다.

```
apiVersion: services.k8s.aws/v1alpha1
kind: AdoptedResource
metadata:
  name: adopt-endpoint-sample
spec:  
  aws:
    # resource to adopt, not created by ACK
    nameOrID: xgboost-endpoint
  kubernetes:
    group: sagemaker.services.k8s.aws
    kind: Endpoint
    metadata:
      # target K8s CR name
      name: xgboost-endpoint
```

`kubectl apply`를 사용하여 사용자 지정 리소스(CR)를 제출합니다.

```
kubectl apply -f adopt-endpoint-sample.yaml
```

`kubectl describe`를 사용하여 채택한 리소스의 상태를 확인합니다.

```
kubectl describe adoptedresource adopt-endpoint-sample
```

`ACK.Adopted` 조건이 `True`인지 확인합니다. 출력은 다음 예시와 비슷해야 합니다.

```
---
kind: AdoptedResource
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"services.k8s.aws/v1alpha1","kind":"AdoptedResource","metadata":{"annotations":{},"name":"xgboost-endpoint","namespace":"default"},"spec":{"aws":{"nameOrID":"xgboost-endpoint"},"kubernetes":{"group":"sagemaker.services.k8s.aws","kind":"Endpoint","metadata":{"name":"xgboost-endpoint"}}}}'
  creationTimestamp: '2021-04-27T02:49:14Z'
  finalizers:
  - finalizers.services.k8s.aws/AdoptedResource
  generation: 1
  name: adopt-endpoint-sample
  namespace: default
  resourceVersion: '12669876'
  selfLink: "/apis/services.k8s.aws/v1alpha1/namespaces/default/adoptedresources/adopt-endpoint-sample"
  uid: 35f8fa92-29dd-4040-9d0d-0b07bbd7ca0b
spec:
  aws:
    nameOrID: xgboost-endpoint
  kubernetes:
    group: sagemaker.services.k8s.aws
    kind: Endpoint
    metadata:
      name: xgboost-endpoint
status:
  conditions:
  - status: 'True'
    type: ACK.Adopted
```

클러스터에 리소스가 있는지 확인합니다.

```
kubectl describe endpoints.sagemaker xgboost-endpoint
```

### 호스팅 오토 스케일링 리소스
<a name="migrate-resources-to-new-operators-hap"></a>

`HostingAutoscalingPolicy`(HAP) 리소스는 여러 애플리케이션 오토 스케일링 리소스인 `ScalableTarget`및 `ScalingPolicy`로 구성됩니다. ACK가 있는 HAP 리소스를 채택할 때는 먼저 [애플리케이션 오토 스케일링 컨트롤러](https://github.com/aws-controllers-k8s/applicationautoscaling-controller)를 설치합니다. HAP 리소스를 채택하려면 `ScalableTarget`및 `ScalingPolicy`리소스를 모두 채택해야 합니다. `HostingAutoscalingPolicy` 리소스(`status.ResourceIDList`)의 상태에서 이러한 리소스의 리소스 식별자를 찾을 수 있습니다.

### 호스팅 배포 리소스
<a name="migrate-resources-to-new-operators-hosting-deployment"></a>

`HostingDeployment` 리소스는 여러 SageMaker AI 리소스인 `Endpoint`, `EndpointConfig` 및 각 `Model`로 구성되어 있습니다. ACK에서 SageMaker AI 엔드포인트를 채택하는 경우, `Endpoint`, `EndpointConfig` 및 각 `Model`을 개별적으로 채택해야 합니다. `Endpoint`, `EndpointConfig`및 `Model`이름은 `HostingDeployment`리소스의 상태(`status.endpointName`, `status.endpointConfigName`, 및`status.modelNames`)에서 찾을 수 있습니다.

지원되는 모든 SageMaker AI 리소스 목록은 [ACK API Reference](https://aws-controllers-k8s.github.io/community/reference/)를 참조하세요.

## 이전 리소스 정리
<a name="migrate-resources-to-new-operators-cleanup"></a>

새로운 Kubernetes용 SageMaker AI Operators가 리소스를 채택한 후에는 기존 운영자를 제거하고 기존 리소스를 정리할 수 있습니다.

### 1단계: 기존 연산자 제거
<a name="migrate-resources-to-new-operators-uninstall"></a>

이전 연산자를 제거하려면 [연산자 삭제](kubernetes-sagemaker-operators-end-of-support.md#delete-operators)섹션을 참조하세요.

**주의**  
기존 리소스를 삭제하기 전에 이전 연산자를 제거하세요.

### 2단계: 파이널라이저 제거 및 기존 리소스 삭제
<a name="migrate-resources-to-new-operators-delete-resources"></a>

**주의**  
기존 리소스를 삭제하기 전에 이전 연산자를 제거해야 합니다.

이전 연산자를 제거한 후에는 파이널라이저를 명시적으로 제거하여 기존 연산자 리소스를 삭제해야 합니다. 다음 샘플 스크립트는 지정된 네임스페이스에서 이전 연산자가 관리하는 모든 훈련 작업을 삭제하는 방법을 보여줍니다. 새 연산자가 리소스를 채택한 후 유사한 패턴을 사용하여 추가 리소스를 삭제할 수 있습니다.

**참고**  
리소스를 가져오려면 전체 리소스 이름을 사용해야 합니다. 예를 들어 `kubectl get trainingjob`대신 `kubectl get trainingjobs.sagemaker.aws.amazon.com`을 사용합니다.

```
namespace=sagemaker_namespace
training_jobs=$(kubectl get trainingjobs.sagemaker.aws.amazon.com -n $namespace -ojson | jq -r '.items | .[] | .metadata.name')
 
for job in $training_jobs
do
    echo "Deleting $job resource in $namespace namespace"
    kubectl patch trainingjobs.sagemaker.aws.amazon.com $job -n $namespace -p '{"metadata":{"finalizers":null}}' --type=merge
    kubectl delete trainingjobs.sagemaker.aws.amazon.com $job -n $namespace
done
```

## 새로운 Kubernetes용 SageMaker AI Operators 사용
<a name="migrate-resources-to-new-operators-tutorials"></a>

새로운 Kubernetes용 SageMaker AI Operators 사용에 대한 심층 가이드는 [Kubernetes용 SageMaker AI Operators 사용](kubernetes-sagemaker-operators-ack.md#kubernetes-sagemaker-operators-ack-use) 섹션을 참조하세요.

# Kubernetes용 SageMaker AI Operators 오리지널 버전 지원 종료 발표
<a name="kubernetes-sagemaker-operators-eos-announcement"></a>

이 페이지는 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 오리지널 버전에 대한 지원 종료를 발표하고, 자주 묻는 질문에 대한 답변과 함께 완전히 지원되는 차세대 Kubernetes용 SageMaker AI Operators인 [Amazon SageMaker AI용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)에 대한 마이그레이션 정보를 제공합니다. 새로운 Kubernetes용 SageMaker AI Operators에 대한 일반적인 정보는 [최신 Kubernetes용 SageMaker AI Operator](kubernetes-sagemaker-operators-ack.md) 섹션을 참조하세요.

## 지원 종료 자주 묻는 질문
<a name="kubernetes-sagemaker-operators-eos-faq"></a>

**Topics**
+ [

### Kubernetes용 SageMaker AI Operators 오리지널 버전에 대한 지원을 중단하는 이유는 무엇인가요?
](#kubernetes-sagemaker-operators-eos-faq-why)
+ [

### 새로운 Kubernetes 및 ACK용 SageMaker AI Operators에 대한 자세한 정보는 어디에서 찾을 수 있나요?
](#kubernetes-sagemaker-operators-eos-faq-more)
+ [

### 지원 종료(EOS)란 무엇을 의미하나요?
](#kubernetes-sagemaker-operators-eos-faq-definition)
+ [

### 훈련 및 추론을 위해 워크로드를 새로운 Kubernetes용 SageMaker AI Operators로 마이그레이션하려면 어떻게 해야 하나요?
](#kubernetes-sagemaker-operators-eos-faq-how)
+ [

### 어떤 버전의 ACK로 마이그레이션해야 하나요?
](#kubernetes-sagemaker-operators-eos-faq-version)
+ [

### 초기 Kubernetes용 SageMaker AI Operators와 새로운 운영자(Amazon SageMaker AI용 ACK 서비스 컨트롤러)는 기능적으로 동일한가요?
](#kubernetes-sagemaker-operators-eos-faq-parity)

### Kubernetes용 SageMaker AI Operators 오리지널 버전에 대한 지원을 중단하는 이유는 무엇인가요?
<a name="kubernetes-sagemaker-operators-eos-faq-why"></a>

이제 사용자는 [Amazon SageMaker AI용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)를 활용할 수 있습니다. ACK 서비스 컨트롤러는 프로덕션에 최적화된 커뮤니티 기반 프로젝트인 Kubernetes용 [AWS 컨트롤러(ACK)를 기반으로 하는 Kubernetes용](https://aws-controllers-k8s.github.io/community/) SageMaker AI Operators의 새로운 세대로, Kubernetes 운영자를 통해 AWS 서비스를 노출하는 방법을 표준화합니다. 따라서 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 오리지널 버전(ACK 기반 아님)에 대한 지원 종료(EOS)를 발표합니다. 지원은 [Amazon Elastic Kubernetes Service Kubernetes 1.21](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html#kubernetes-release-calendar)과 함께 **2023년 2월 15일**에 종료됩니다.

ACK에 대한 자세한 내용은 [ACK 기록 및 원칙](https://aws-controllers-k8s.github.io/community/docs/community/background/)을 참조하세요.

### 새로운 Kubernetes 및 ACK용 SageMaker AI Operators에 대한 자세한 정보는 어디에서 찾을 수 있나요?
<a name="kubernetes-sagemaker-operators-eos-faq-more"></a>
+ 새로운 Kubernetes용 SageMaker AI Operators에 대한 자세한 내용은 [Amazon SageMaker AI용 ACK 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller) GitHub 리포지토리를 참조하거나 [AWS Controllers for Kubernetes 설명서](https://aws-controllers-k8s.github.io/community/docs/community/overview/)를 참조하세요.
+ Amazon EKS를 사용하여 Amazon SageMaker AI용 ACK 서비스 컨트롤러로 기계 학습 모델을 훈련하는 방법에 대한 자습서는 [SageMaker AI 예시](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)를 참조하세요.

  오토 스케일링 예시는 [Scale SageMaker AI Workloads with Application Auto Scaling](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)을 참조하세요.
+ Kubernetes용 AWS 컨트롤러(ACK)에 대한 자세한 내용은 [Kubernetes용AWS 컨트롤러](https://aws-controllers-k8s.github.io/community/)(ACK) 설명서를 참조하세요.
+ 지원되는 모든 SageMaker AI 리소스 목록은 [ACK API Reference](https://aws-controllers-k8s.github.io/community/reference/)를 참조하세요.

### 지원 종료(EOS)란 무엇을 의미하나요?
<a name="kubernetes-sagemaker-operators-eos-faq-definition"></a>

사용자는 현재 운영자를 계속 사용할 수 있지만, 당사는 더 이상 운영자를 위한 새로운 기능을 개발하지 않으며 발견된 문제에 대한 패치나 보안 업데이트도 릴리스하지 않습니다. `v1.2.2`가 [Kubernetes용 SageMaker AI Operators](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)의 마지막 릴리스입니다. 사용자는 [Amazon SageMaker AI용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller)를 사용하려면 워크로드를 마이그레이션해야 합니다.

### 훈련 및 추론을 위해 워크로드를 새로운 Kubernetes용 SageMaker AI Operators로 마이그레이션하려면 어떻게 해야 하나요?
<a name="kubernetes-sagemaker-operators-eos-faq-how"></a>

이전 버전에서 새로운 Kubernetes용 SageMaker AI Operators로 리소스를 마이그레이션하는 방법에 대한 자세한 내용은 [리소스를 최신 연산자로 마이그레이션](kubernetes-sagemaker-operators-migrate.md) 섹션을 따르세요.

### 어떤 버전의 ACK로 마이그레이션해야 하나요?
<a name="kubernetes-sagemaker-operators-eos-faq-version"></a>

사용자는 [Amazon SageMaker AI용 ACK 서비스 컨트롤러](https://github.com/aws-controllers-k8s/sagemaker-controller/tags)의 가장 최근에 출시된 버전으로 마이그레이션해야 합니다.

### 초기 Kubernetes용 SageMaker AI Operators와 새로운 운영자(Amazon SageMaker AI용 ACK 서비스 컨트롤러)는 기능적으로 동일한가요?
<a name="kubernetes-sagemaker-operators-eos-faq-parity"></a>

예, 기능은 동일합니다.

두 버전 간의 몇 가지 주요 차이점은 다음과 같습니다.
+ Kubernetes용 ACK 기반 SageMaker AI Operators에서 사용하는 사용자 지정 리소스 정의(CRD)는 AWS API 정의를 따르므로 원래 버전의 Kubernetes용 SageMaker AI Operators의 사용자 지정 리소스 사양과 호환되지 않습니다. 새 컨트롤러의 [CRD](https://github.com/aws-controllers-k8s/sagemaker-controller/tree/main/helm/crds)를 참조하거나 마이그레이션 가이드를 사용하여 리소스를 채택하고 새 컨트롤러를 사용하세요.
+ `Hosting Autoscaling` 정책은 더 이상 새로운 Kubernetes용 SageMaker AI Operators의 일부가 아니며 [애플리케이션 오토 스케일링](https://github.com/aws-controllers-k8s/applicationautoscaling-controller) ACK 컨트롤러로 마이그레이션되었습니다. 애플리케이션 오토 스케일링 컨트롤러를 사용하여 SageMaker AI 엔드포인트에서 오토 스케일링을 구성하는 방법을 알아보려면 이 [오토 스케일링 예시](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)를 따르세요.
+ `HostingDeployment` 리소스는 하나의 CRD에서 모델, 엔드포인트 구성 및 엔드포인트를 생성하는 데 사용되었습니다. 새로운 Kubernetes용 SageMaker AI Operators에는 이러한 리소스 각각에 대해 별도의 CRD가 있습니다.

# Kubeflow Pipelines용 SageMaker AI 구성 요소
<a name="kubernetes-sagemaker-components-for-kubeflow-pipelines"></a>

Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하여 Kubeflow Pipelines에서 네이티브 SageMaker AI 훈련, 조정, 엔드포인트 배포 및 배치 변환 작업을 만들고 모니터링할 수 있습니다. SageMaker AI에서 Kubeflow Pipelines 작업을 실행하면 데이터 처리 및 훈련 작업을 Kubernetes 클러스터에서 SageMaker AI의 기계 학습에 최적화된 관리형 서비스로 이동할 수 있습니다. 이 설명서에서는 Kubernetes와 Kubeflow에 대한 사전 지식이 있다고 가정합니다.

**Topics**
+ [

## Kubeflow 파이프라인이란 무엇인가요?
](#what-is-kubeflow-pipelines)
+ [

## Kubeflow 파이프라인 구성 요소란 무엇인가요?
](#kubeflow-pipeline-components)
+ [

## Kubeflow Pipelines에 SageMaker AI 구성 요소를 사용하는 이유는 무엇인가요?
](#why-use-sagemaker-components)
+ [

## Kubeflow Pipelines용 SageMaker AI 구성 요소 버전
](#sagemaker-components-versions)
+ [

## Kubeflow Pipelines용 SageMaker AI 구성 요소 목록
](#sagemaker-components-list)
+ [

## IAM 권한
](#iam-permissions)
+ [

## SageMaker AI를 사용하도록 파이프라인 변환
](#converting-pipelines-to-use-amazon-sagemaker)
+ [

# Kubeflow 파이프라인 설치
](kubernetes-sagemaker-components-install.md)
+ [

# SageMaker AI 구성 요소 사용
](kubernetes-sagemaker-components-tutorials.md)

## Kubeflow 파이프라인이란 무엇인가요?
<a name="what-is-kubeflow-pipelines"></a>

Kubeflow 파이프라인(KFP)은 도커 컨테이너를 기반으로 이식 가능하고 스케일링 가능한 기계 학습(ML) 워크플로를 구축하고 배포하기 위한 플랫폼입니다. Kubeflow 파이프라인 플랫폼은 다음과 같은 요소로 구성됩니다.
+ 실험, 작업, 실행을 관리하고 추적하기 위한 사용자 인터페이스(UI).
+ 다단계 ML 워크플로를 스케줄링하기 위한 엔진(Argo).
+ 파이프라인과 구성 요소를 정의하고 조작하기 위한 SDK.
+ SDK를 사용하여 시스템과 상호 작용하기 위한 노트북.

파이프라인은 [방향성 비순환 그래프](https://www.kubeflow.org/docs/pipelines/concepts/graph/)로 표현된 ML 워크플로의 설명입니다. 워크플로의 모든 단계는 AWS SDK for Python (Boto3) 모듈인 Kubeflow 파이프라인 [구성 요소로](https://www.kubeflow.org/docs/pipelines/overview/concepts/component/) 표현됩니다.

Kubeflow 파이프라인에 대한 자세한 내용은 [Kubeflow 파이프라인 설명서](https://www.kubeflow.org/docs/pipelines/)를 참조하세요.

## Kubeflow 파이프라인 구성 요소란 무엇인가요?
<a name="kubeflow-pipeline-components"></a>

Kubeflow 파이프라인 구성 요소는 Kubeflow 파이프라인의 한 단계를 실행하는 데 사용되는 코드 세트입니다. 구성 요소는 도커 이미지에 내장된 Python 모듈로 표시됩니다. 파이프라인이 실행되면 Kubeflow를 실행하는 Kubernetes 클러스터의 작업자 노드 중 하나에서 구성 요소의 컨테이너가 인스턴스화되고 로직이 실행됩니다. 파이프라인 구성 요소는 이전 구성 요소의 출력을 읽고 파이프라인의 다음 구성 요소가 사용할 수 있는 출력을 생성할 수 있습니다. 이러한 구성 요소를 사용하면 기본 Kubernetes 인프라와 상호 작용할 필요 없이 실험 및 프로덕션 환경을 위한 파이프라인을 빠르고 쉽게 작성할 수 있습니다.

Kubeflow 파이프라인에서 SageMaker AI 구성 요소를 사용할 수 있습니다. 로직을 사용자 지정 컨테이너에 캡슐화하는 대신 Kubeflow 파이프라인 SDK를 사용하여 구성 요소를 로드하고 파이프라인을 설명하기만 하면 됩니다. 파이프라인이 실행되면 지침이 SageMaker AI 작업 또는 배포로 변환됩니다. 그런 다음 워크로드는 SageMaker AI의 완전관리형 인프라에서 실행됩니다.

## Kubeflow Pipelines에 SageMaker AI 구성 요소를 사용하는 이유는 무엇인가요?
<a name="why-use-sagemaker-components"></a>

Kubeflow Pipelines용 SageMaker AI 구성 요소는 SageMaker AI에서 컴퓨팅 집약적인 작업을 시작하는 대신 사용할 수 있는 대안을 제공합니다. 구성 요소는 SageMaker AI를 Kubeflow Pipelines의 이식성 및 오케스트레이션과 통합합니다. Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하여 Kubeflow Pipelines 워크플로의 일부로 SageMaker AI 리소스를 생성하고 모니터링할 수 있습니다. 파이프라인의 각 작업은 로컬 Kubernetes 클러스터 대신 SageMaker AI에서 실행되므로 데이터 레이블링, 대규모 하이퍼파라미터 조정, 분산 훈련 작업 또는 안전하고 스케일링 가능한 원클릭 모델 배포와 같은 주요 SageMaker AI 기능을 활용할 수 있습니다. SageMaker AI의 작업 파라미터, 상태, 로그 및 출력은 Kubeflow Pipelines UI에서 계속 액세스할 수 있습니다.

SageMaker AI 구성 요소는 데이터 준비부터 ML 모델 구축, 훈련 및 배포에 이르기까지 주요 SageMaker AI 기능을 ML 워크플로에 통합합니다. 이러한 구성 요소를 사용하여 완전히 빌드된 Kubeflow 파이프라인을 만들거나 필요에 따라 개별 구성 요소를 워크플로에 통합할 수 있습니다. 구성 요소는 하나 또는 두 가지 버전으로 제공됩니다. 구성 요소의 각 버전은 서로 다른 백엔드를 활용합니다. 이러한 버전에 대한 자세한 내용은 [Kubeflow Pipelines용 SageMaker AI 구성 요소 버전](#sagemaker-components-versions)섹션을 참조하세요.

Kubeflow Pipelines용 SageMaker AI 구성 요소 사용에 따르는 추가 요금은 없습니다. 이러한 구성 요소를 통해 사용하는 모든 SageMaker AI 리소스에 대해서는 요금이 부과됩니다.

## Kubeflow Pipelines용 SageMaker AI 구성 요소 버전
<a name="sagemaker-components-versions"></a>

Kubeflow Pipelines용 SageMaker AI 구성 요소는 두 가지 버전으로 제공됩니다. 각 버전은 서로 다른 백엔드를 활용하여 SageMaker AI에서 리소스를 생성하고 관리합니다.
+ Kubeflow Pipelines 버전 1(v1.x 이하)용 SageMaker AI 구성 요소는 **[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html)**(AWS SDK for Python (Boto3))를 백엔드로 사용합니다.
+ Kubeflow Pipelines용 SageMaker AI 구성 요소 버전 2(v2.0.0-alpha2 이상)는 [Kubernetes용 SageMaker AI Operators(ACK)](https://github.com/aws-controllers-k8s/sagemaker-controller)를 사용합니다.

  AWS 는 AWS 클라우드 리소스를 관리하는 Kubernetes 네이티브 방법을 용이하게 하기 위해 [ACK](https://aws-controllers-k8s.github.io/community/)를 도입했습니다. ACK에는 AWS 서비스별 컨트롤러 세트가 포함되며, 그 중 하나는 SageMaker AI 컨트롤러입니다. SageMaker AI 컨트롤러를 사용하면 Kubernetes를 컨트롤 플레인으로 사용하는 기계 학습 개발자와 데이터 과학자가 SageMaker AI에서 기계 학습(ML) 모델을 훈련, 조정 및 배포하는 작업을 더 쉽게 수행할 수 있습니다. 자세한 내용은 [SageMaker AI Operators for Kubernetes](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)를 참조하세요.

Kubeflow Pipelines용 SageMaker AI 구성 요소의 두 버전이 모두 지원됩니다. 하지만 버전 2는 몇 가지 추가 이점을 제공합니다. 특히 다음을 제공합니다.

1. Kubeflow 파이프라인을 사용하든 Kubernetes CLI(`kubectl`)를 사용하든 노트북과 같은 다른 Kubeflow 애플리케이션을 사용하든 관계없이 모든 애플리케이션에서 SageMaker AI 리소스를 관리할 수 있는 일관된 경험을 제공합니다.

1. Kubeflow 파이프라인 워크플로 외부에서 SageMaker AI 리소스를 관리하고 모니터링할 수 있는 유연성을 제공합니다.

1. 전체 [Kubeflow on AWS](https://awslabs.github.io/kubeflow-manifests/docs/about/) 릴리스를 배포한 경우 SageMaker AI Operators가 배포의 일부이므로 SageMaker AI 구성 요소를 사용하기 위한 설정에 시간이 전혀 들지 않습니다.

## Kubeflow Pipelines용 SageMaker AI 구성 요소 목록
<a name="sagemaker-components-list"></a>

다음은 Kubeflow Pipelines용 모든 SageMaker AI 구성 요소 및 사용 가능한 버전 목록입니다. 또는 [GitHub에서 Kubeflow Pipelines의 모든 SageMaker AI 구성 요소](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker#versioning)를 찾을 수도 있습니다.

**참고**  
가능한 경우 SageMaker AI 구성 요소 버전 2를 사용하는 것이 좋습니다.

### 실측 정보 구성 요소
<a name="ground-truth-components"></a>
+ **실측 정보**

  Ground Truth 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 직접 SageMaker AI Ground Truth 레이블링 작업을 제출할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **작업 팀**

  작업팀 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 직접 SageMaker AI 프라이빗 작업팀 작업을 생성할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 데이터 처리 구성 요소
<a name="data-processing-components"></a>
+ **처리**

  처리 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 SageMaker AI에 직접 처리 작업을 제출할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 훈련 구성 요소
<a name="training-components"></a>
+ **훈련**

  훈련 구성 요소를 사용하면 Kubeflow 파이프라인 워크플로에서 직접 SageMaker 훈련 작업을 제출할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **하이퍼파라미터 최적화**

  하이퍼파라미터 최적화 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 직접 하이퍼파라미터 조정 작업을 SageMaker AI에 제출할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 추론 구성 요쇼
<a name="inference-components-kfp"></a>
+ **호스팅 배포**

  호스팅 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 SageMaker AI 호스팅 서비스를 사용하여 모델을 배포할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **배치 변환**

  배치 변환 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 SageMaker AI의 전체 데이터세트에 대한 추론 작업을 실행할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **모델 모니터**

  모델 모니터 구성 요소를 사용하면 Kubeflow Pipelines 워크플로에서 프로덕션 중인 SageMaker AI 기계 학습 모델의 품질을 모니터링할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

## IAM 권한
<a name="iam-permissions"></a>

SageMaker AI 구성 요소를 사용하여 Kubeflow Pipelines을 배포하려면 다음과 같은 세 가지 인증 계층이 필요합니다.
+ 게이트웨이 노드(로컬 머신 또는 원격 인스턴스일 수 있음)에 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 대한 액세스 권한을 부여하는 IAM 역할입니다.

  게이트웨이 노드에 액세스하는 사용자는 다음 역할을 맡게 됩니다.
  + Amazon EKS 클러스터 생성 및 KFP 설치
  + IAM 역할 생성
  + 샘플 입력 데이터를 위한 Amazon S3 버킷 생성

  역할에는 다음 권한이 필요합니다.
  + CloudWatchLogsFullAccess 
  + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess) 
  + IAMFullAccess
  + AmazonS3FullAccess
  + AmazonEC2FullAccess
  + AmazonEKSAdminPolicy([Amazon EKS ID 기반 정책 예시](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)의 스키마를 사용하여 이 정책 생성) 
+ Kubernetes IAM 실행 역할은 Kubernetes 파이프라인 포드(**kfp-example-pod-role**) 또는 Kubernetes 컨트롤러 포드가 SageMaker AI에 액세스하기 위해 SageMaker AI Operators가 맡는 역할입니다. 이 역할은 Kubernetes에서 SageMaker AI 작업을 생성하고 모니터링하는 데 사용됩니다.

  역할에는 다음 권한이 필요합니다.
  + AmazonSageMakerFullAccess 

  사용자 지정 정책을 만들고 연결하여 KFP 및 컨트롤러 포드에 대한 권한을 제한할 수 있습니다.
+ Amazon SageMakerAmazon S3 ECR(kfp-example-sagemaker-execution-role)과 같은 AWS 리소스에 액세스하기 위해 SageMaker AI 작업이 수임하는 SageMaker AI IAM 실행 역할입니다.**kfp-example-sagemaker-execution-role**

  SageMaker AI 작업은 이 역할을 사용하여 다음을 수행합니다.
  + SageMaker AI 리소스 액세스
  + Amazon S3에서 데이터 입력
  + 출력 모델을 Amazon S3에 저장

  역할에는 다음 권한이 필요합니다.
  + AmazonSageMakerFullAccess 
  + AmazonS3FullAccess 

## SageMaker AI를 사용하도록 파이프라인 변환
<a name="converting-pipelines-to-use-amazon-sagemaker"></a>

일반 Python [처리 컨테이너](https://docs.aws.amazon.com/sagemaker/latest/dg/amazon-sagemaker-containers.html)와 [훈련 컨테이너](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html)를 이식하여 기존 파이프라인을 SageMaker AI를 사용하도록 변환할 수 있습니다. SageMaker AI를 추론에 사용하는 경우 클러스터에 IAM 권한을 연결하고 아티팩트를 모델로 변환해야 합니다.

# Kubeflow 파이프라인 설치
<a name="kubernetes-sagemaker-components-install"></a>

[Kubeflow 파이프라인(KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/)은 Kubeflow의 파이프라인 오케스트레이션 구성 요소입니다.

기존 Amazon Elastic Kubernetes Service(Amazon EKS)에 Kubeflow 파이프라인(KFP)을 배포하거나 새 Amazon EKS 클러스터를 생성할 수 있습니다. 게이트웨이 노드를 사용하여 클러스터와 상호 작용하세요. 게이트웨이 노드는 로컬 머신 또는 Amazon EC2 인스턴스일 수 있습니다.

다음 섹션에서는 이러한 리소스를 설정하고 구성하는 단계를 안내합니다.

**Topics**
+ [

## 설치 옵션 선택
](#choose-install-option)
+ [

## SageMaker AI에 액세스할 수 있도록 파이프라인 권한을 구성합니다.
](#configure-permissions-for-pipeline)
+ [

## KFP UI(Kubeflow 대시보드) 액세스
](#access-the-kfp-ui)

## 설치 옵션 선택
<a name="choose-install-option"></a>

Kubeflow 파이프라인은 AWS 또는 독립 실행형 설치에서 Kubeflow의 전체 배포의 핵심 구성 요소로 사용할 수 있습니다.

사용 사례에 해당하는 옵션을 선택합니다.

1. [AWS 배포 시 전체 Kubeflow](#full-kubeflow-deployment)

   Kubeflow 파이프라인 외에 다른 Kubeflow 구성 요소를 사용하려면 전체 [Kubeflow의AWS 배포](https://awslabs.github.io/kubeflow-manifests) 배포를 선택합니다.

1. [독립형 Kubeflow 파이프라인 배포](#kubeflow-pipelines-standalone)

   Kubeflow의 다른 구성 요소 없이 Kubeflow 파이프라인을 사용하려면 Kubeflow 파이프라인을 독립형으로 설치해야 합니다.

### AWS 배포 시 전체 Kubeflow
<a name="full-kubeflow-deployment"></a>

에 Kubeflow의 전체 릴리스를 설치하려면 배포 [가이드의 Kubeflow에서 바닐라 AWS](https://awslabs.github.io/kubeflow-manifests/docs/deployment/) 배포 옵션을 선택하거나 다양한 AWS 서비스(Amazon S3, Amazon RDS, Amazon Cognito)와의 통합을 지원하는 기타 배포 옵션을 AWS선택합니다.

### 독립형 Kubeflow 파이프라인 배포
<a name="kubeflow-pipelines-standalone"></a>

이 섹션에서는 사용자에게 역할을 생성하고 역할에 대한 정책을 정의할 권한이 있다고 가정합니다.

#### 게이트웨이 노드 설정
<a name="set-up-a-gateway-node"></a>

로컬 머신 또는 Amazon EC2 인스턴스를 게이트웨이 노드로 사용할 수 있습니다. 게이트웨이 노드는 Amazon EKS 클러스터를 생성하고 Kubeflow 파이프라인 UI에 액세스하는 데 사용됩니다.

노드를 새로 설정하려면 다음 단계를 완료합니다.

1. 

**게이트웨이 노드를 생성합니다.**

   기존 Amazon EC2 인스턴스를 사용하거나 [DLAMI 시작 및 구성](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html)의 단계를 사용하여 최신 Ubuntu 18.04 DLAMI 버전으로 새 인스턴스를 생성할 수 있습니다.

1. 

**게이트웨이 노드에 AWS 리소스에 대한 액세스 권한을 부여하는 IAM 역할을 생성합니다.**

   CloudWatch,, IAM, Amazon EC2 CloudFormation, Amazon S3, Amazon EKS 리소스에 대한 권한이 있는 IAM 역할을 생성합니다.

   다음 정책을 IAM 역할에 연결합니다.
   + CloudWatchLogsFullAccess 
   + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess)
   + IAMFullAccess 
   + AmazonS3FullAccess 
   + AmazonEC2FullAccess 
   + AmazonEKSAdminPolicy([Amazon EKS ID 기반 정책 예시](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)의 스키마를 사용하여 이 정책 생성) 

   IAM 역할에 IAM 권한 추가에 대한 자세한 내용은 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

1. 

**다음 도구 및 클라이언트를 설치합니다.**

   Amazon EKS 클러스터 및 KFP 사용자 인터페이스(UI) 에 액세스할 수 있도록 게이트웨이 노드에 다음 도구 및 리소스를 설치하고 구성합니다.
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html): AWS 서비스 작업을 위한 명령줄 도구입니다. AWS CLI 구성 정보는 [AWS CLI구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)을 참조하세요.
   + [aws-iam-Authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) 버전 0.1.31 이상: AWS IAM 자격 증명을 사용하여 Kubernetes 클러스터에 인증하는 도구입니다.
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) 버전 0.15 이상: Amazon EKS 클러스터 작업을 위한 명령줄 도구입니다.
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl): Kubernetes 클러스터 작업을 위한 명령줄 도구입니다. 버전은 마이너 버전이 하나까지만 차이나는 Kubernetes 버전과 일치해야 합니다.
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### Amazon EKS 클러스터 설정
<a name="set-up-anamazon-eks-cluster"></a>

1. 기존 Amazon EKS 클러스터가 없는 경우 게이트웨이 노드의 명령줄에서 다음 단계를 실행하고, 그렇지 않으면 이 단계를 건너뜁니다.

   1. 다음 명령을 실행하여 버전 1.17 이상의 Amazon EKS 클러스터를 생성합니다. `<clustername>`를 클러스터 이름으로 바꿉니다.

      ```
      eksctl create cluster --name <clustername> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
      ```

   1. 클러스터 생성이 완료되면 클러스터의 노드를 나열하여 클러스터에 액세스할 수 있는지 확인합니다.

      ```
      kubectl get nodes
      ```

1. 다음 명령을 사용하여 현재 `kubectl`컨텍스트가 클러스터를 가리키는지 확인합니다. 현재 컨텍스트는 출력에 별표(\$1)로 표시됩니다.

   ```
   kubectl config get-contexts
   
   CURRENT NAME     CLUSTER
   *   <username>@<clustername>.us-east-1.eksctl.io   <clustername>.us-east-1.eksctl.io
   ```

1. 원하는 클러스터가 현재 기본값으로 구성되지 않은 경우 다음 명령을 사용하여 기본값을 업데이트합니다.

   ```
   aws eks update-kubeconfig --name <clustername> --region us-east-1
   ```

#### Kubeflow 파이프라인 설치
<a name="install-kubeflow-pipelines"></a>

게이트웨이 노드의 터미널에서 다음 단계를 실행하여 클러스터에 Kubeflow 파이프라인을 설치합니다.

1. 모든 [cert-manager 구성 요소](https://cert-manager.io/docs/installation/kubectl/)를 설치합니다.

   ```
   kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
   ```

1. Kubeflow 파이프라인 설치

   ```
   export PIPELINE_VERSION=2.0.0-alpha.5
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION"
   kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
   ```

1. Kubeflow 파이프라인 서비스 및 기타 관련 리소스가 실행 중인지 확인합니다.

   ```
   kubectl -n kubeflow get all | grep pipeline
   ```

   출력은 다음과 같아야 합니다.

   ```
   pod/ml-pipeline-6b88c67994-kdtjv                      1/1     Running            0          2d
   pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk     1/1     Running            0          2d
   pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj    1/1     Running            0          2d
   pod/ml-pipeline-ui-66cc4cffb6-cmsdb                   1/1     Running            0          2d
   pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj            1/1     Running            0          2d
   pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4   1/1     Running            0          2d
   service/ml-pipeline                       ClusterIP   10.100.170.170   <none>        8888/TCP,8887/TCP   2d
   service/ml-pipeline-ui                    ClusterIP   10.100.38.71     <none>        80/TCP              2d
   service/ml-pipeline-visualizationserver   ClusterIP   10.100.61.47     <none>        8888/TCP            2d
   deployment.apps/ml-pipeline                       1/1     1            1           2d
   deployment.apps/ml-pipeline-persistenceagent      1/1     1            1           2d
   deployment.apps/ml-pipeline-scheduledworkflow     1/1     1            1           2d
   deployment.apps/ml-pipeline-ui                    1/1     1            1           2d
   deployment.apps/ml-pipeline-viewer-crd            1/1     1            1           2d
   deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           2d
   replicaset.apps/ml-pipeline-6b88c67994                      1         1         1       2d
   replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf     1         1         1       2d
   replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7    1         1         1       2d
   replicaset.apps/ml-pipeline-ui-66cc4cffb6                   1         1         1       2d
   replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4            1         1         1       2d
   replicaset.apps/ml-pipeline-visualizationserver-9c47576f4   1         1         1       2d
   ```

## SageMaker AI에 액세스할 수 있도록 파이프라인 권한을 구성합니다.
<a name="configure-permissions-for-pipeline"></a>

이 섹션에서는 Kubeflow 파이프라인 포드에 SageMaker AI 서비스에 대한 액세스 권한을 부여하는 IAM 실행 역할을 생성합니다.

### SageMaker AI 구성 요소 버전 2 구성
<a name="permissions-for-SM-v2"></a>

Kubeflow Pipelines용 SageMaker AI 구성 요소 버전 2를 실행하려면 [Kubernetes용 SageMaker AI Operators](https://github.com/aws-controllers-k8s/sagemaker-controller)를 설치하고 Kubeflow Pipelines 포드가 Kubernetes 클러스터에서 SageMaker AI 사용자 지정 리소스를 생성할 수 있도록 하는 역할 기반 액세스 제어(RBAC)를 구성해야 합니다.

**중요**  
Kubeflow 파이프라인 독립 실행형 배포를 사용하는 경우 이 섹션을 따르세요. Kubeflow 버전 1.6.0-aws-b1.0.0 이상의 AWS 배포를 사용하는 경우 SageMaker AI 구성 요소 버전 2가 이미 설정되어 있습니다.

1. Kubernetes용 SageMaker AI Operators를 설치하여 SageMaker AI 구성 요소 버전 2를 사용하세요.

   [Machine Learning with ACK SageMaker AI Controller tutorial](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)의 *Setup* 섹션을 따르세요.

1. Kubeflow 파이프라인 포드에서 사용하는 실행 역할(서비스 계정)에 대한 RBAC 권한을 구성합니다. Kubeflow 파이프라인 독립형 배포에서는 파이프라인 실행이 `pipeline-runner`서비스 계정을 사용하여 네임스페이스 `kubeflow`에서 실행됩니다.

   1. 서비스 계정에 SageMaker AI 사용자 지정 리소스를 관리할 수 있는 권한을 부여하는 [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example)을 생성합니다.

      ```
      cat > manage_sagemaker_cr.yaml <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: manage-sagemaker-cr  
      namespace: kubeflow
      subjects:
      - kind: ServiceAccount
      name: pipeline-runner
      namespace: kubeflow
      roleRef:
      kind: ClusterRole
      name: ack-sagemaker-controller 
      apiGroup: rbac.authorization.k8s.io
      EOF
      ```

      ```
      kubectl apply -f manage_sagemaker_cr.yaml
      ```

   1. 다음을 실행하여 롤바인딩이 생성되었는지 확인합니다.

      ```
      kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
      ```

### SageMaker AI 구성 요소 버전 1 구성
<a name="permissions-for-SM-v1"></a>

Kubeflow Pipelines용 SageMaker AI 구성 요소 버전 1을 실행하려면 Kubeflow 파이프라인 포드에 SageMaker AI에 대한 액세스 권한이 필요합니다.

**중요**  
 AWS 배포 시 전체 Kubeflow를 사용하는지 아니면 Kubeflow Pilepines를 독립적으로 사용하는지이 섹션을 따르세요.

Kubeflow 파이프라인 포드에 SageMaker AI에 대한 액세스 권한을 부여하는 IAM 실행 역할을 생성하려면 다음 단계를 따르세요.

1. 클러스터 이름(예: *my-cluster-name*) 및 클러스터 리전(예: *us-east-1*)을 내보냅니다.

   ```
   export CLUSTER_NAME=my-cluster-name
   export CLUSTER_REGION=us-east-1
   ```

1. 설치에 따라 네임스페이스와 서비스 계정 이름을 내보냅니다.
   +  AWS 설치 시 전체 Kubeflow의 경우 프로파일`namespace`(예: *kubeflow-user-example-com*) 및 *기본 편집기*를 서비스 계정으로 내보냅니다.

     ```
     export NAMESPACE=kubeflow-user-example-com
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
     ```
   + 독립형 파이프라인 배포의 경우 *kubeflow*를 `namespace`로, *pipeline-runner*를 서비스 계정으로 내보냅니다.

     ```
     export NAMESPACE=kubeflow
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
     ```

1. 다음 명령을 사용하여 [Amazon EKS용 IAM OIDC 공급자](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)를 생성합니다.

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
               --region ${CLUSTER_REGION} --approve
   ```

1. KFP 포드가 AWS 서비스에 액세스할 수 있도록 IAM 실행 역할을 생성합니다(SageMaker AI, CloudWatch).

   ```
   eksctl create iamserviceaccount \
   --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \
   --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \
   --region ${CLUSTER_REGION} \
   --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \
   --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
   --override-existing-serviceaccounts \
   --approve
   ```

파이프라인 권한이 SageMaker AI 구성 요소 버전 1에 액세스하도록 구성되면 Kubeflow[ on AWS 설명서의 Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/) 파이프라인용 SageMaker AI 구성 요소 가이드를 따르세요.

## KFP UI(Kubeflow 대시보드) 액세스
<a name="access-the-kfp-ui"></a>

Kubeflow 파이프라인 UI는 클러스터에서 실험, 작업 및 실행을 관리하고 추적하는 데 사용됩니다. 게이트웨이 노드에서 Kubeflow 파이프라인 UI에 액세스하는 방법에 대한 지침은 이 섹션의 배포 옵션에 적용되는 단계를 따르세요.

### AWS 배포 시 전체 Kubeflow
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

[AWS 웹 사이트의 Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) 지침에 따라 Kubeflow 대시보드에 연결하고 파이프라인 탭으로 이동합니다.

### 독립형 Kubeflow 파이프라인 배포
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

포트 포워딩을 사용하면 다음 단계에 따라 게이트웨이 노드에서 Kubeflow 파이프라인 UI에 액세스할 수 있습니다.

#### KFP UI 서비스로의 포트 포워딩 설정
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

게이트웨이 노드의 명령줄에서 다음 명령을 실행합니다.

1. 다음 명령을 사용하여 KFP UI 서비스가 실행 중인지 확인합니다.

   ```
   kubectl -n kubeflow get service ml-pipeline-ui
   
   NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
   ml-pipeline-ui   ClusterIP   10.100.38.71   <none>        80/TCP    2d22h
   ```

1. 다음 명령을 실행하여 KFP UI 서비스에 포트 포워딩을 설정합니다. 그러면 KFP UI가 게이트웨이 노드의 포트 8080으로 전달되고 브라우저에서 KFP UI에 액세스할 수 있습니다.

   ```
   kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
   ```

   활동이 없으면 원격 시스템에서 포워딩되는 포트가 끊깁니다. 대시보드에서 로그나 업데이트를 가져올 수 없는 경우 이 명령을 다시 실행하세요. 명령에서 오류가 반환되는 경우 사용하려는 포트에서 이미 실행 중인 프로세스가 없는지 확인합니다.

#### KFP UI 서비스 액세스
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

KFP UI에 액세스하는 방법은 게이트웨이 노드 유형에 따라 다릅니다.
+ 로컬 머신을 게이트웨이 노드로 사용:

  1. 다음과 같이 브라우저에서 대시보드에 액세스합니다.

     ```
     http://localhost:8080
     ```

  1. **파이프라인**을 선택하여 파이프라인 UI에 액세스합니다.
+ Amazon EC2 인스턴스를 게이트웨이 노드로 사용:

  1. 로컬 머신의 브라우저에서 Kubeflow 대시보드에 액세스하려면 Amazon EC2 인스턴스에 SSH 터널을 설정해야 합니다.

     로컬 머신의 새 터미널 세션에서 다음을 실행합니다. `<public-DNS-of-gateway-node>`를 Amazon EC2 콘솔에 있는 인스턴스의 IP 주소로 바꿉니다. 공개 DNS를 사용할 수도 있습니다. `<path_to_key>`를 게이트웨이 노드에 액세스하는 데 사용되는 pem 키 경로로 바꿉니다.

     ```
     public_DNS_address=<public-DNS-of-gateway-node>
     key=<path_to_key>
     
     on Ubuntu:
     ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address}
     
     or on Amazon Linux:
     ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address}
     ```

  1. 브라우저에서 대시보드에 액세스합니다.

     ```
     http://localhost:9000
     ```

  1. **파이프라인**을 선택하여 KFP UI에 액세스합니다.

#### (선택 사항) SageMaker AI 노트북 인스턴스에 Amazon EKS에 대한 액세스 권한을 부여하고 노트북에서 KFP 파이프라인을 실행합니다.
<a name="add-access-to-additional-iam-users-or-roles"></a>

SageMaker 노트북은 Jupyter Notebook 애플리케이션을 실행하는 완전 관리형 Amazon EC2 컴퓨팅 인스턴스입니다. 노트북 인스턴스를 사용하여 Jupyter notebook을 만들고 관리한 다음 AWS SDK for Python (Boto3) 또는 KFP CLI를 사용하여 KFP 파이프라인을 정의, 컴파일, 배포 및 실행할 수 있습니다.

1. [SageMaker 노트북 인스턴스 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)의 단계에 따라 노트북 인스턴스를 생성한 다음 `S3FullAccess`정책을 해당 IAM 실행 역할에 연결합니다.

1. 게이트웨이 노드의 명령줄에서 다음 명령을 실행하여 생성한 노트북 인스턴스의 IAM 역할 ARN을 검색합니다. `<instance-name>`을 인스턴스의 이름으로 바꿉니다.

   ```
   aws sagemaker describe-notebook-instance --notebook-instance-name <instance-name> --region <region> --output text --query 'RoleArn'
   ```

   이 명령은 IAM 역할 ARN을 `arn:aws:iam::<account-id>:role/<role-name>`형식으로 출력합니다. ARN을 기록해 둡니다.

1. 이 명령을 실행하여 다음 정책(Amazon SageMakerFullAccess, AmazonSWorkerNodePolicy, AmazonS3FullAccess)을 이 IAM 역할에 연결합니다. `<role-name>`을 ARN의 `<role-name>`으로 바꿉니다.

   ```
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
   ```

1. Amazon EKS 클러스터는 IAM 역할을 사용하여 클러스터에 대한 액세스를 제어합니다. 규칙은 `aws-auth`라는 구성 맵에 구현됩니다. `eksctl`은 `aws-auth`구성 맵을 읽고 편집하는 명령을 제공합니다. 클러스터에 액세스할 수 있는 사용자만 이 구성 맵을 편집할 수 있습니다.

   `system:masters`는 클러스터에 대한 수퍼 사용자 권한이 있는 기본 사용자 그룹 중 하나입니다. 이 그룹에 사용자를 추가하거나 더 제한적인 권한을 가진 그룹을 생성합니다.

1. 다음 명령을 실행하여 클러스터에 역할을 바인딩합니다. `<IAM-Role-arn>`을 IAM 역할의 ARN으로 바꿉니다. `<your_username>`은 고유한 사용자 이름이 될 수 있습니다.

   ```
   eksctl create iamidentitymapping \
   --cluster <cluster-name> \
   --arn <IAM-Role-arn> \
   --group system:masters \
   --username <your-username> \
   --region <region>
   ```

1. SageMaker AI 인스턴스에서 Jupyter Notebook을 열고 다음 명령을 실행하여 클러스터에 액세스할 수 있는지 확인합니다.

   ```
   aws eks --region <region> update-kubeconfig --name <cluster-name>
   kubectl -n kubeflow get all | grep pipeline
   ```

# SageMaker AI 구성 요소 사용
<a name="kubernetes-sagemaker-components-tutorials"></a>

이 자습서에서는 Kubeflow Pipelines용 SageMaker AI 구성 요소를 사용하여 파이프라인을 실행하여 SageMaker AI의 MNIST 데이터세트와 함께 Kmeans를 사용하여 분류 모델을 훈련합니다. 워크플로는 Kubeflow Pipelines을 오케스트레이터로 사용하고 SageMaker AI로 워크플로의 각 단계를 실행합니다. 이 예시는 기존 [SageMaker AI 예시](https://github.com/aws/amazon-sagemaker-examples/blob/8279abfcc78bad091608a4a7135e50a0bd0ec8bb/sagemaker-python-sdk/1P_kmeans_highlevel/kmeans_mnist.ipynb)에서 가져와 Kubeflow Pipelines용 SageMaker AI 구성 요소와 함께 작동하도록 수정되었습니다.

를 사용하여 Python에서 파이프라인을 정의 AWS SDK for Python (Boto3) 한 다음 KFP 대시보드, KFP CLI 또는 Boto3를 사용하여 워크플로를 컴파일, 배포 및 실행할 수 있습니다. MNIST 분류 파이프라인 예시의 전체 코드는 [Kubeflow Github 리포지토리](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples/mnist-kmeans-sagemaker#mnist-classification-with-kmeans)에서 확인할 수 있습니다. 이를 사용하려면 Python 파일을 게이트웨이 노드에 복제하세요.

GitHub에서 [SageMaker AI Kubeflow Pipelines 예시](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples)를 추가로 찾을 수 있습니다. 사용되는 구성 요소에 대한 자세한 내용은 [KubeFlow 파이프라인 GitHub](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker) 리포지토리를 참조하세요.

분류 파이프라인 예제를 실행하려면 훈련 작업에 AWS 리소스에 액세스할 수 있는 권한을 부여하는 SageMaker AI IAM 실행 역할을 생성한 다음 배포 옵션에 해당하는 단계를 계속 진행합니다.

## SageMaker AI 실행 역할 생성
<a name="create-an-amazonsagemaker-execution-role"></a>

`kfp-example-sagemaker-execution-role` IAM 역할은 SageMaker AI 작업이 AWS 리소스에 액세스하기 위해 수임하는 런타임 역할입니다. 다음 명령에서는 라는 IAM 실행 역할을 생성하고`kfp-example-sagemaker-execution-role`, 두 개의 관리형 정책(AmazonSageMakerFullAccess, AmazonS3FullAccess)을 연결하고, SageMaker AI와 신뢰 관계를 생성하여 SageMaker AI 작업에 해당 AWS 리소스에 대한 액세스 권한을 부여합니다.

파이프라인을 실행할 때 이 역할을 입력 파라미터로 제공합니다.

다음 명령을 실행해 역할을 생성합니다. 출력에서 반환된 작업 ID를 기록합니다.

```
SAGEMAKER_EXECUTION_ROLE_NAME=kfp-example-sagemaker-execution-role

TRUST="{ \"Version\": \"2012-10-17		 	 	 \", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"sagemaker.amazonaws.com\" }, \"Action\": \"sts:AssumeRole\" } ] }"
aws iam create-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --assume-role-policy-document "$TRUST"
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess

aws iam get-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --output text --query 'Role.Arn'
```

## AWS 배포 시 전체 Kubeflow
<a name="run-pipelines-on-full-kubeflow-deployment"></a>

[K-Means를 사용한 MNIST 분류에 대한 SageMaker 훈련 파이프라인 튜토리얼](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)의 지침을 따릅니다.

## 독립형 Kubeflow 파이프라인 배포
<a name="run-pipelines-on-standalone-kubeflow-pipelines-deployment"></a>

### 데이터세트 준비
<a name="prepare-datasets"></a>

파이프라인을 실행하려면 Amazon S3 버킷에 데이터 추출 사전 처리 스크립트를 업로드해야 합니다. 이 버킷과 이 예시의 모든 리소스는 `us-east-1`리전에 있어야 합니다. 버킷 생성에 대한 자세한 내용은 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)을 참조하세요.

게이트웨이 노드에 복재한 Kubeflow 리포지토리의 `mnist-kmeans-sagemaker`폴더에서 다음 명령을 실행하여 Amazon S3 버킷에 `kmeans_preprocessing.py`파일을 업로드합니다. `<bucket-name>`을 S3 버킷의 이름으로 변경합니다.

```
aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://<bucket-name>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
```

### 파이프라인 컴파일 및 배포
<a name="compile-and-deploy-your-pipeline"></a>

파이프라인을 정의한 후에는 클러스터의 Kubeflow 파이프라인 서비스에 제출하기 전에 중간 표시로 컴파일해야 합니다. 중간 표시는 tar.gz 파일로 압축된 YAML 파일 형식의 워크플로 사양입니다. 파이프라인을 컴파일하려면 KFP SDK가 필요합니다.

#### KFP SDK 설치
<a name="install-kfp-sdk"></a>

게이트웨이 노드의 명령줄에서 다음을 실행합니다.

1. [Kubeflow 파이프라인 설명서](https://www.kubeflow.org/docs/pipelines/sdk/install-sdk/)의 지침에 따라 KFP SDK를 설치합니다.

1. 다음 명령을 사용하여 KFP SDK가 설치되었는지 확인합니다.

   ```
   pip show kfp
   ```

1. 다음과 같이 `dsl-compile`이 올바르게 설치되었는지 확인합니다.

   ```
   which dsl-compile
   ```

#### 파이프라인 컴파일
<a name="compile-your-pipeline"></a>

Kubeflow 파이프라인과 상호 작용하는 데는 KFP UI, KFP CLI 또는 KFP SDK 세 가지 옵션이 있습니다. 다음 섹션에서는 KFP UI 및 CLI를 사용하는 워크플로를 보여줍니다.

게이트웨이 노드에서 다음 단계를 완료합니다.

1. Amazon S3 버킷 이름과 IAM 역할 ARN을 사용하여 Python 파일을 수정합니다.

1. 명령줄의 `dsl-compile`명령을 사용하여 다음과 같이 파이프라인을 컴파일합니다. `<path-to-python-file>`을 파이프라인 경로로, `<path-to-output>`을 tar.gz 파일을 배치할 위치로 바꿉니다.

   ```
   dsl-compile --py <path-to-python-file> --output <path-to-output>
   ```

#### KFP CLI를 사용하여 파이프라인을 업로드하고 실행합니다.
<a name="upload-and-run-the-pipeline-using-the-kfp-cli"></a>

게이트웨이 노드의 명령줄에서 다음 단계를 완료합니다. KFP는 파이프라인 실행을 실험으로 구성합니다. 실험 이름을 지정할 수 있습니다. 지정하지 않으면 해당 실행이 **기본** 실험에 나열됩니다.

1. 다음과 같이 파이프라인을 업로드합니다.

   ```
   kfp pipeline upload --pipeline-name <pipeline-name> <path-to-output-tar.gz>
   ```

   출력은 다음과 같아야 합니다. 파이프라인 `ID`를 기록해 둡니다.

   ```
   Pipeline 29c3ff21-49f5-4dfe-94f6-618c0e2420fe has been submitted
   
   Pipeline Details
   ------------------
   ID           29c3ff21-49f5-4dfe-94f6-618c0e2420fe
   Name         sm-pipeline
   Description
   Uploaded at  2020-04-30T20:22:39+00:00
   ...
   ...
   ```

1. 다음 명령을 사용하여 실행을 생성합니다. KFP CLI 실행 명령은 현재 실행 생성 중 입력 파라미터 지정을 지원하지 않습니다. 컴파일하기 전에 AWS SDK for Python (Boto3) 파이프라인 파일에서 파라미터를 업데이트해야 합니다. `<experiment-name>` 및 `<job-name>`을 원하는 이름으로 바꿉니다. `<pipeline-id>`를 제출한 파이프라인의 ID로 바꿉니다. `<your-role-arn>`을 `kfp-example-pod-role`의 ARN으로 바꿉니다. `<your-bucket-name>`을 생성한 Amazon S3 버킷 이름으로 바꿉니다.

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --pipeline-id <pipeline-id> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

   `dsl-compile` 명령의 출력으로 생성된 컴파일된 파이프라인 패키지를 사용하여 실행을 직접 제출할 수도 있습니다.

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --package-file <path-to-output> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

   출력은 다음과 같아야 합니다.

   ```
   Creating experiment aws.
   Run 95084a2c-f18d-4b77-a9da-eba00bf01e63 is submitted
   +--------------------------------------+--------+----------+---------------------------+
   | run id                               | name   | status   | created at                |
   +======================================+========+==========+===========================+
   | 95084a2c-f18d-4b77-a9da-eba00bf01e63 | sm-job |          | 2020-04-30T20:36:41+00:00 |
   +--------------------------------------+--------+----------+---------------------------+
   ```

1. UI로 이동하여 작업 진행 상황을 확인합니다.

#### KFP UI를 사용하여 파이프라인을 업로드하고 실행합니다.
<a name="upload-and-run-the-pipeline-using-the-kfp-ui"></a>

1. 왼쪽 패널에서 **파이프라인** 탭을 선택합니다.

1. 오른쪽 상단에서 **\$1파이프라인 업로드**를 선택합니다.

1. 파이프라인 이름 및 설명을 입력합니다.

1. **파일 업로드**를 선택하고 CLI 또는 AWS SDK for Python (Boto3)으로 생성한 tar.gz 파일의 경로를 입력합니다.

1. 왼쪽 패널에서 **파이프라인** 탭을 선택합니다.

1. 생성한 파이프라인을 찾습니다.

1. **\$1실행 생성**을 선택합니다.

1. 입력 파라미터를 입력합니다.

1. **실행**을 선택합니다.

### 예측 실행
<a name="running-predictions"></a>

분류 파이프라인이 배포되면 배포 구성 요소에서 생성된 엔드포인트에 대해 분류 예측을 실행할 수 있습니다. KFP UI를 사용하여 `sagemaker-deploy-model-endpoint_name`에 대한 출력 아티팩트를 확인할 수 있습니다. .tgz 파일을 다운로드하여 엔드포인트 이름을 추출하거나 사용한 리전의 SageMaker AI 콘솔을 확인합니다.

#### 예측을 실행할 수 있는 권한을 구성합니다.
<a name="configure-permissions-to-run-predictions"></a>

게이트웨이 노드에서 예측을 실행하려면 이 섹션을 건너뜁니다.

**다른 머신을 사용하여 예측을 실행하려면 클라이언트 머신이 사용하는 IAM 역할에 `sagemaker:InvokeEndpoint`권한을 할당합니다.**

1. 게이트웨이 노드에서 다음을 실행하여 IAM 정책 파일을 생성합니다.

   ```
   cat <<EoF > ./sagemaker-invoke.json
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:InvokeEndpoint"
               ],
               "Resource": "*"
           }
       ]
   }
   EoF
   ```

1. 정책을 클라이언트 노드의 IAM 역할에 연결합니다.

   다음 명령을 실행합니다. `<your-instance-IAM-role>`을 IAM 역할의 이름으로 바꿉니다. `<path-to-sagemaker-invoke-json>`을 생성한 정책 파일의 경로로 바꿉니다.

   ```
   aws iam put-role-policy --role-name <your-instance-IAM-role> --policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>
   ```

#### 예측 실행
<a name="run-predictions"></a>

1. 클라이언트 머신에서 다음 콘텐츠`mnist-predictions.py`로 라는 AWS SDK for Python (Boto3) 파일을 생성합니다. `ENDPOINT_NAME` 변수를 바꿉니다. 스크립트는 MNIST 데이터세트를 로드하고 해당 숫자로 CSV를 만든 다음 예측을 위해 엔드포인트로 CSV를 보내고 결과를 인쇄합니다.

   ```
   import boto3
   import gzip
   import io
   import json
   import numpy
   import pickle
   
   ENDPOINT_NAME='<endpoint-name>'
   region = boto3.Session().region_name
   
   # S3 bucket where the original mnist data is downloaded and stored
   downloaded_data_bucket = f"jumpstart-cache-prod-{region}"
   downloaded_data_prefix = "1p-notebooks-datasets/mnist"
   
   # Download the dataset
   s3 = boto3.client("s3")
   s3.download_file(downloaded_data_bucket, f"{downloaded_data_prefix}/mnist.pkl.gz", "mnist.pkl.gz")
   
   # Load the dataset
   with gzip.open('mnist.pkl.gz', 'rb') as f:
       train_set, valid_set, test_set = pickle.load(f, encoding='latin1')
   
   # Simple function to create a csv from our numpy array
   def np2csv(arr):
       csv = io.BytesIO()
       numpy.savetxt(csv, arr, delimiter=',', fmt='%g')
       return csv.getvalue().decode().rstrip()
   
   runtime = boto3.Session(region).client('sagemaker-runtime')
   
   payload = np2csv(train_set[0][30:31])
   
   response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                      ContentType='text/csv',
                                      Body=payload)
   result = json.loads(response['Body'].read().decode())
   print(result)
   ```

1. 다음과 같이 AWS SDK for Python (Boto3) 파일을 실행합니다.

   ```
   python mnist-predictions.py
   ```

### 결과 및 로그 보기
<a name="view-results-and-logs"></a>

파이프라인이 실행 중일 때 구성 요소를 선택하여 입력 및 출력과 같은 실행 세부 정보를 확인할 수 있습니다. 여기에는 생성된 리소스의 이름이 나열됩니다.

KFP 요청이 성공적으로 처리되고 SageMaker AI 작업이 생성되면 KFP UI의 구성 요소 로그는 SageMaker AI에서 생성된 작업에 대한 링크를 제공합니다. 작업이 성공적으로 생성된 경우 CloudWatch 로그도 제공됩니다.

동일한 클러스터에서 너무 많은 파이프라인 작업을 실행하면 사용 가능한 포드가 충분하지 않다는 오류 메시지가 표시될 수 있습니다. 이 문제를 해결하려면 게이트웨이 노드에 로그인하고 사용하지 않는 파이프라인에서 생성된 파드를 삭제합니다.

```
kubectl get pods -n kubeflow
kubectl delete pods -n kubeflow <name-of-pipeline-pod>
```

### 정리
<a name="cleanup"></a>

파이프라인 사용을 마치면 리소스를 정리해야 합니다.

1. KFP 대시보드에서 제대로 종료되지 않는 경우 **종료**를 선택하여 파이프라인 실행을 종료합니다.

1. **종료** 옵션이 작동하지 않는 경우, 게이트웨이 노드에 로그인하고 다음과 같이 파이프라인 실행으로 생성된 모든 포드를 수동으로 종료합니다.

   ```
   kubectl get pods -n kubeflow
   kubectl delete pods -n kubeflow <name-of-pipeline-pod>
   ```

1.  AWS 계정을 사용하여 SageMaker AI 서비스에 로그인합니다. 모든 훈련, 배치 변환 및 HPO 작업을 수동으로 중지합니다. 모델, 데이터 버킷, 엔드포인트를 삭제하여 추가 비용이 발생하지 않도록 합니다. 파이프라인 실행을 종료해도 SageMaker AI의 작업은 중지되지 않습니다.

# SageMaker 노트북
<a name="notebook-auto-run"></a>

Amazon SageMaker AI를 사용하면 모든 JupyterLab 환경의 Jupyter Notebook에서 기계 학습 모델을 대화형 방식으로 구축, 훈련 및 배포할 수 있습니다. 하지만 노트북을 비대화형 예약 작업으로 실행해야 하는 다양한 시나리오가 있을 수 있습니다. 예를 들어, 특정 기간 동안 실행되는 모든 훈련 작업을 분석하고 이러한 모델을 프로덕션에 배포하는 데 따른 비즈니스 가치를 분석하는 정기 감사 보고서를 만들고자 할 수 있습니다. 또는 소량의 데이터에서 데이터 변환 로직을 테스트한 후 기능 엔지니어링 작업을 조정하고 싶을 수도 있습니다. 일반적인 사용 사례는 다음과 같습니다.
+ 모델 드리프트 모니터링을 위한 작업 스케줄링
+ 더 나은 모델을 위한 파라미터 공간 탐색

이러한 시나리오에서 SageMaker AI 노트북 작업을 사용하여 요청 시 또는 일정에 따라 실행되는 비대화형 작업(SageMaker가 기본 훈련 작업으로 실행함)을 만들 수 있습니다. SageMaker 노트북 작업은 직관적인 사용자 인터페이스를 제공하므로 노트북의 노트북 작업 위젯(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/notebook-schedule.png))을 선택하여 JupyterLab에서 바로 작업을 예약할 수 있습니다. 파이프라인 워크플로에서 여러 노트북 작업을 예약할 수 있는 유연성을 제공하는 SageMaker AI Python SDK를 사용하여 작업을 예약할 수도 있습니다. 여러 노트북을 병렬로 실행하고 노트북의 셀을 파라미터화하여 입력 파라미터를 사용자 지정할 수 있습니다.

이 기능은 Amazon EventBridge, SageMaker 훈련 및 Pipelines 서비스를 활용하며 다음과 같은 환경의 Jupyter Notebook에서 사용할 수 있습니다.
+ Studio, Studio Lab, Studio Classic 또는 노트북 인스턴스
+ 로컬 설정(예: JupyterLab을 실행하는 로컬 머신)

**사전 조건**

Notebook 작업을 예약하려면 다음 기준을 충족하는지 확인하세요.
+ Jupyter notebook과 모든 초기화 또는 시작 스크립트가 코드 및 소프트웨어 패키지와 관련하여 독립적인지 확인합니다. 그렇지 않으면 비대화형 작업에서 오류가 발생할 수 있습니다.
+ Jupyter notebook, 네트워크 설정 및 컨테이너 설정을 올바르게 구성했는지 [제약 조건 및 고려 사항](notebook-auto-run-constraints.md)을 검토합니다.
+ 노트북이 Amazon EMR 클러스터와 같은 필요한 외부 리소스에 액세스할 수 있는지 확인합니다.
+ 로컬 Jupyter notebook에서 노트북 작업을 설정하는 경우 설치를 완료합니다. 지침은 [설치 가이드](scheduled-notebook-installation.md)섹션을 참조하세요.
+ 노트북의 Amazon EMR 클러스터에 연결하고 Amazon EMR 연결 명령을 파라미터화하려는 경우 환경 변수를 사용하여 파라미터를 전달하는 차선책을 적용해야 합니다. 자세한 내용은 [노트북에서 Amazon EMR 클러스터에 연결](scheduled-notebook-connect-emr.md)을 참조하세요.
+ Kerberos, LDAP 또는 HTTP Basic Auth 인증을 사용하여 Amazon EMR 클러스터에 연결하는 경우 AWS Secrets Manager 를 사용하여 보안 자격 증명을 Amazon EMR 연결 명령에 전달해야 합니다. 자세한 내용은 [노트북에서 Amazon EMR 클러스터에 연결](scheduled-notebook-connect-emr.md)을 참조하세요.
+ (선택 사항) 노트북을 시작할 때 UI가 스크립트를 미리 로드하여 실행되도록 하려면 관리자가 수명 주기 구성(LCC)을 사용하여 스크립트를 설치해야 합니다. LCC 스크립트 사용 방법에 대한 자세한 내용은 [수명 주기 구성 스크립트를 사용한 노트북 인스턴스 사용자 지정](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)을 참조하세요.

# 설치 가이드
<a name="scheduled-notebook-installation"></a>

다음은 JupyterLab 환경에서 노트북 작업을 사용하기 위해 설치해야 하는 사항에 대한 정보를 제공합니다.

**Amazon SageMaker 스튜디오 및 Amazon SageMaker 스튜디오 랩의 경우**

노트북이 Amazon SageMaker 스튜디오 또는 Amazon SageMaker 스튜디오 랩에 있는 경우 추가 설치를 수행할 필요가 없습니다.SageMaker 노트북 작업은 플랫폼에 내장되어 있습니다. 스튜디오에 필요한 권한을 설정하려면 [Studio에 대한 정책 및 권한을 설정](scheduled-notebook-policies-studio.md)섹션을 참조하세요.

**로컬 Jupyter notebook의 경우**

로컬 JupyterLab 환경에서 SageMaker 노트북 작업을 사용하려면 추가 설치를 수행해야 합니다.

SageMaker Moniter의 노트북 작업을 설치하려면 다음 단계를 완료합니다.

1. Python 3를 설치합니다. 자세한 내용은 [Python 3 및 Python 패키지 설치](https://www.codecademy.com/article/install-python3)를 참조하세요.

1. JupyterLab 버전 4 이상을 설치합니다. 자세한 내용은 [JupyterLab SDK 설명서](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)를 참조하세요.

1. 를 설치합니다 AWS CLI. 자세한 내용은 [최신 버전의 AWS CLI설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

1. 두 가지 권한 세트를 설치합니다. IAM 사용자는 SageMaker AI에 작업을 제출할 수 있는 권한이 필요하며, 일단 제출되면 노트북 작업 자체가 작업에 따라 리소스에 액세스할 수 있는 권한이 필요한 IAM 역할을 맡습니다.

   1. 아직 IAM 사용자를 생성하지 않은 경우 [AWS 계정에서 IAM 사용자 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)을 참조하세요.

   1. 노트북 작업 역할을 아직 생성하지 않은 경우 [IAM 사용자에게 권한을 위임하기 위한 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

   1. 사용자 및 역할에 연결하는 데 필요한 권한 및 신뢰 정책을 연결합니다. 단계별 지침 및 권한 세부 정보는 [로컬 Jupyter 환경용 정책 및 권한 설치](scheduled-notebook-policies-other.md)섹션을 참조하세요.

1. 새로 생성된 IAM 사용자의 AWS 자격 증명을 생성하여 JupyterLab 환경의 자격 증명 파일(\$1/.aws/credentials)에 저장합니다. CLI 명령 `aws configure`를 사용하여 제거할 수 있습니다. 지침은 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)의 *명령을 사용하여 구성 설정 설정 및 보기* 섹션을 참조하세요.

1. (선택 사항) 기본적으로 스케줄러 확장 프로그램은 Python 2.0과 함께 사전 구축된 SageMaker AI Docker 이미지를 사용합니다. 노트북에서 사용되는 기본이 아닌 커널은 모두 컨테이너에 설치해야 합니다. 컨테이너 또는 도커 이미지에서 노트북을 실행하려면 Amazon Elastic Container Registry(Amazon ECR) 이미지를 생성해야 합니다. 도커 이미지를 Amazon ECR로 푸시하는 방법에 대한 자세한 내용은 [도커 이미지 푸시](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)를 참조하세요.

1. SageMaker 노트북 작업을 위한 JupyterLab 확장 프로그램을 추가합니다. `pip install amazon_sagemaker_jupyter_scheduler` 명령을 사용하여 JupyterLab 환경에 추가할 수 있습니다. `sudo systemctl restart jupyter-server` 명령을 사용하여 Jupyter 서버를 다시 시작해야 할 수 있습니다.

1. `jupyter lab` 명령으로 JupyterLab을 시작합니다.

1. Jupyter notebook 작업 표시줄에 노트북 작업 위젯(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/notebook-schedule.png))이 나타나는지 확인합니다.

# Studio에 대한 정책 및 권한을 설정
<a name="scheduled-notebook-policies-studio"></a>

첫 노트북 실행을 예약하기 전에 적절한 정책과 권한을 설치해야 합니다. 다음은 다음 권한을 설정하는 지침을 제공합니다.
+ 작업 실행 역할 신뢰 관계
+ 작업 실행 역할에 추가된 IAM 권한
+ (선택 사항) 사용자 지정 KMS 키를 사용하기 위한 AWS KMS 권한 정책

**중요**  
 AWS 계정이 서비스 제어 정책(SCP)이 있는 조직에 속한 경우 유효 권한은 SCPs가 허용하는 것과 IAM 역할 및 사용자 정책이 허용하는 것 사이의 논리적 교집합입니다. 예를 들어, 조직의 SCP에서는 사용자가 `us-east-1`및 `us-west-1`내의 리소스에만 액세스할 수 있도록 지정하고, 정책에서는 `us-west-1`및 `us-west-2`내의 리소스에만 액세스할 수 있도록 허용하는 경우, 궁극적으로는 `us-west-1`내의 리소스에만 액세스할 수 있습니다. 역할 및 사용자 정책에 허용되는 모든 권한을 행사하려면 조직의 SCP가 자체 IAM 사용자 및 역할 정책과 동일한 권한 세트를 부여해야 합니다. 허용된 요청을 결정하는 방법에 대한 자세한 내용은 [계정 내 요청 허용 여부 결정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)을 참조하세요.

**신뢰 관계**

신뢰 관계를 수정하려면 다음 단계를 완료합니다.

1. [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽 패널에서 **역할**을 선택합니다.

1. 노트북 작업에 대한 작업 실행 역할을 찾고 역할 이름을 선택합니다.

1. **신뢰 관계** 탭을 선택합니다.

1. **신뢰 정책 편집**을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

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

------

1. **정책 업데이트(Update policy)**를 선택합니다.

## 추가 IAM 권한
<a name="scheduled-notebook-policies-add"></a>

다음과 같은 상황에서는 추가 IAM 권한을 포함해야 할 수 있습니다.
+ 스튜디오 실행 및 노트북 작업 역할이 서로 다른 경우
+ S3 VPC 엔드포인트를 통해 Amazon S3 리소스에 액세스해야 하는 경우
+ 사용자 지정 KMS 키를 사용하여 입력 및 출력 Amazon S3 버킷을 암호화하려는 경우

다음 설명에서는 각 사례에 필요한 정책을 제공합니다.

### 스튜디오 실행 및 노트북 작업 역할이 서로 다른 경우 필요한 권한
<a name="scheduled-notebook-policies-add-diffrole"></a>

다음 JSON 스니펫은 스튜디오 실행 역할을 노트북 작업 역할로 사용하지 않는 경우 스튜디오 실행 및 노트북 작업 역할에 추가해야 하는 예시 정책입니다. 권한을 추가로 제한해야 하는 경우 이 정책을 검토하고 수정하세요.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"iam:PassRole",
         "Resource":"arn:aws:iam::*:role/*",
         "Condition":{
            "StringLike":{
               "iam:PassedToService":[
                  "sagemaker.amazonaws.com",
                  "events.amazonaws.com"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "events:TagResource",
            "events:DeleteRule",
            "events:PutTargets",
            "events:DescribeRule",
            "events:PutRule",
            "events:RemoveTargets",
            "events:DisableRule",
            "events:EnableRule"
         ],
         "Resource":"*",
         "Condition":{
            "StringEquals":{
               "aws:ResourceTag/sagemaker:is-scheduling-notebook-job":"true"
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:CreateBucket",
            "s3:PutBucketVersioning",
            "s3:PutEncryptionConfiguration"
         ],
         "Resource":"arn:aws:s3:::sagemaker-automated-execution-*"
      },
      {
            "Sid": "S3DriverAccess",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::sagemakerheadlessexecution-*"
            ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:ListTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:user-profile/*",
            "arn:aws:sagemaker:*:*:space/*",
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:AddTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcEndpoints",
            "ec2:DescribeVpcs",
            "ecr:BatchCheckLayerAvailability",
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetAuthorizationToken",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:GetEncryptionConfiguration",
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:GetObject",
            "sagemaker:DescribeApp",
            "sagemaker:DescribeDomain",
            "sagemaker:DescribeUserProfile",
            "sagemaker:DescribeSpace",
            "sagemaker:DescribeStudioLifecycleConfig",
            "sagemaker:DescribeImageVersion",
            "sagemaker:DescribeAppImageConfig",
            "sagemaker:CreateTrainingJob",
            "sagemaker:DescribeTrainingJob",
            "sagemaker:StopTrainingJob",
            "sagemaker:Search",
            "sagemaker:CreatePipeline",
            "sagemaker:DescribePipeline",
            "sagemaker:DeletePipeline",
            "sagemaker:StartPipelineExecution"
         ],
         "Resource":"*"
      }
   ]
}
```

------

### S3 VPC 엔드포인트를 통해 Amazon S3 리소스에 액세스해야 하는 경우 필요한 권한
<a name="scheduled-notebook-policies-add-vpc"></a>

SageMaker 스튜디오를 프라이빗 VPC 모드에서 실행하고 S3 VPC 엔드포인트를 통해 S3에 액세스하는 경우 VPC 엔드포인트 정책에 권한을 추가하여 VPC 엔드포인트를 통해 액세스할 수 있는 S3 리소스를 제어할 수 있습니다. VPC 엔드포인트 정책에 다음 권한을 추가합니다. 권한을 추가로 제한해야 하는 경우 정책을 수정할 수 있습니다.예를 들어 `Principal`필드에 더 좁은 사양을 제공할 수 있습니다.

```
{
    "Sid": "S3DriverAccess",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::sagemakerheadlessexecution-*"
}
```

S3 VPC 엔드포인트 정책을 설정하는 방법에 대한 자세한 내용은 [VPC 엔드포인트 정책 편집](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#edit-vpc-endpoint-policy-s3)을 참조하세요.

### 사용자 지정 KMS 키를 사용하는 데 필요한 권한(선택 사항)
<a name="scheduled-notebook-policies-add-kms"></a>

기본적으로 입력 및 출력 Amazon S3 버킷은 서버 측 암호화를 사용하여 암호화되지만, 출력 Amazon S3 버킷과 노트북 작업에 연결된 스토리지 볼륨의 데이터를 암호화하는 사용자 지정 KMS 키를 지정할 수 있습니다.

사용자 지정 KMS 키를 사용하려면 다음 정책을 연결하고 자체 KMS 키 ARN을 제공하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

# 로컬 Jupyter 환경용 정책 및 권한 설치
<a name="scheduled-notebook-policies-other"></a>

로컬 Jupyter 환경에서 노트북 작업을 예약하기 위해 권한 및 정책이 필요합니다. IAM 사용자는 SageMaker AI에 작업을 제출할 수 있는 권한이 필요하며, 노트북 작업 자체가 수임하는 IAM 역할에는 작업에 따라 리소스에 액세스할 수 있는 권한이 필요합니다. 다음은 필요한 권한 및 정책을 설정하는 방법에 대한 지침을 제공합니다.

두 세트의 권한을 설치해야 합니다. 다음 다이어그램은 로컬 Jupyter 환경에서 노트북 작업을 예약하는 권한 구조를 보여줍니다. IAM 사용자가 SageMaker AI에 작업을 제출하려면 IAM 권한을 설정해야 합니다. 사용자가 노트북 작업을 제출하면 작업 자체가 작업에 따라 리소스에 액세스할 수 있는 권한을 가진 IAM 역할을 맡습니다.

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


다음 섹션은 IAM 사용자와 작업 실행 역할 모두에 필요한 정책과 권한을 설치하는 데 도움이 됩니다.

## IAM 사용자 권한
<a name="scheduled-notebook-policies-other-user"></a>

**SageMaker AI에 작업을 제출할 수 있는 권한**

작업을 제출할 수 있는 권한을 추가하려면 다음 단계를 완료합니다.

1. [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽 패널에서 **사용자**를 선택합니다.

1. 노트북 작업에 사용할 IAM 사용자를 찾아 사용자 이름을 선택합니다.

1. **권한 추가**를 선택하고 드롭다운 메뉴에서 **인라인 정책 생성**을 선택합니다.

1. **JSON** 탭을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EventBridgeSchedule",
               "Effect": "Allow",
               "Action": [
                   "events:TagResource",
                   "events:DeleteRule",
                   "events:PutTargets",
                   "events:DescribeRule",
                   "events:EnableRule",
                   "events:PutRule",
                   "events:RemoveTargets",
                   "events:DisableRule"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "IAMPassrole",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "sagemaker.amazonaws.com",
                           "events.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "IAMListRoles",
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "*"
           },
           {
               "Sid": "S3ArtifactsAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:PutEncryptionConfiguration",
                   "s3:CreateBucket",
                   "s3:PutBucketVersioning",
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetEncryptionConfiguration",
                   "s3:DeleteObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemaker-automated-execution-*"
               ]
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:DescribeTrainingJob",
                   "sagemaker:StopTrainingJob",
                   "sagemaker:DescribePipeline",
                   "sagemaker:CreateTrainingJob",
                   "sagemaker:DeletePipeline",
                   "sagemaker:CreatePipeline"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "AllowSearch",
               "Effect": "Allow",
               "Action": "sagemaker:Search",
               "Resource": "*"
           },
           {
               "Sid": "SagemakerTags",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:ListTags",
                   "sagemaker:AddTags"
               ],
               "Resource": [
                   "arn:aws:sagemaker:*:*:pipeline/*",
                   "arn:aws:sagemaker:*:*:space/*",
                   "arn:aws:sagemaker:*:*:training-job/*",
                   "arn:aws:sagemaker:*:*:user-profile/*"
               ]
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchGetImage"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

**AWS KMS 권한 정책(선택 사항)**

기본적으로 입력 및 출력 Amazon S3 버킷은 서버 측 암호화를 사용하여 암호화되지만, 출력 Amazon S3 버킷과 노트북 작업에 연결된 스토리지 볼륨의 데이터를 암호화하는 사용자 지정 KMS 키를 지정할 수 있습니다.

사용자 지정 KMS 키를 사용하려면 이전 정책을 반복하여 다음 정책을 연결하고 자체 KMS 키 ARN을 제공하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

## 작업 실행 역할 권한
<a name="scheduled-notebook-policies-other-job"></a>

**신뢰 관계**

작업 실행 역할 신뢰 관계를 수정하려면 다음 단계를 완료합니다.

1. [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽 패널에서 **역할**을 선택합니다.

1. 노트북 작업에 대한 작업 실행 역할을 찾고 역할 이름을 선택합니다.

1. **신뢰 관계** 탭을 선택합니다.

1. **신뢰 정책 편집**을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

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

------

**추가 권한**

노트북 작업을 제출한 후에는 리소스에 액세스할 수 있는 권한이 필요합니다. 다음 지침은 최소 권한 세트를 추가하는 방법을 보여줍니다. 필요한 경우 노트북 작업 요구 사항에 따라 권한을 더 추가하세요. 작업 실행 역할에 권한을 추가하려면 다음 단계를 완료하세요.

1. [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽 패널에서 **역할**을 선택합니다.

1. 노트북 작업에 대한 작업 실행 역할을 찾고 역할 이름을 선택합니다.

1. **권한 추가**를 선택하고 드롭다운 메뉴에서 **인라인 정책 생성**을 선택합니다.

1. **JSON** 탭을 선택합니다.

1. 다음 정책을 복사하여 붙여 넣습니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PassroleForJobCreation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": "sagemaker.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "S3ForStoringArtifacts",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::sagemaker-automated-execution-*"
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:StartPipelineExecution",
                   "sagemaker:CreateTrainingJob"
               ],
               "Resource": "*"
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetDownloadUrlForLayer",
                   "ecr:BatchGetImage",
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchCheckLayerAvailability"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 노트북 작업에서 액세스하는 다른 리소스에 권한을 추가합니다.

1. **정책 검토**를 선택합니다.

1. 정책의 이름을 입력합니다.

1. **정책 생성**을 선택합니다.

# 노트북 작업을 만들 수 있는 위치
<a name="create-notebook-auto-run"></a>

노트북 작업을 만들려면 여러 옵션이 있습니다. 다음은 SageMaker AI에 노트북 작업을 만들 수 있는 옵션을 제공합니다.

Studio UI의 JupyterLab 노트북에서 작업을 만들거나 SageMaker Python SDK를 사용하여 프로그래밍 방식으로 작업을 만들 수 있습니다.
+ Studio UI에서 노트북 작업을 만드는 경우 이미지 및 커널, 보안 구성, 사용자 지정 변수 또는 스크립트에 대한 세부 정보를 제공하고 작업이 예약됩니다. SageMaker 노트북 작업을 사용하여 작업을 예약하는 방법에 대한 자세한 내용은 [Studio에서 노트북 작업 만들기](create-notebook-auto-run-studio.md) 섹션을 참조하세요.
+ SageMaker Python SDK를 사용하여 노트북 작업을 만들려면 노트북 작업 단계를 사용하여 파이프라인을 만들고 온디맨드 실행을 시작하거나 선택적으로 파이프라인 예약 기능을 사용하여 향후 실행을 예약합니다. SageMaker SDK는 파이프라인을 사용자 지정할 수 있는 유연성을 제공합니다. 여러 노트북 작업 단계를 통해 파이프라인을 워크플로로 확장할 수 있습니다. SageMaker 노트북 작업 단계와 파이프라인을 모두 만들기 때문에 SageMaker 노트북 작업 대시보드에서 파이프라인 실행 상태를 추적하고 Studio에서 파이프라인 그래프를 볼 수도 있습니다. SageMaker Python SDK을 사용하여 작업을 예약하는 방법에 대한 자세한 내용과 및 예시 노트북 링크는 [SageMaker AI Python SDK를 사용한 노트북 작업 생성 예시](create-notebook-auto-run-sdk.md) 섹션을 참조하세요.

# SageMaker AI Python SDK를 사용한 노트북 작업 생성 예시
<a name="create-notebook-auto-run-sdk"></a>

SageMaker Python SDK를 사용하여 독립 실행형 노트북을 실행하려면 노트북 작업 단계를 만들고 파이프라인에 연결한 다음 Pipelines에서 제공하는 유틸리티를 사용하여 온디맨드로 작업을 실행하거나 선택적으로 하나 이상의 향후 작업을 예약해야 합니다. 다음 섹션에서는 온디맨드 또는 예약된 노트북 작업을 만들고 실행을 추적하는 기본 단계를 설명합니다. 또한 파라미터를 노트북 작업에 전달하거나 노트북의 Amazon EMR에 연결해야 하는 경우 다음 논의를 참조하세요. 이러한 경우 Jupyter Notebook을 추가로 준비해야 합니다. `NotebookJobStep` 인수의 하위 집합에 기본값을 적용할 수도 있으므로 노트북 작업 단계를 만들 때마다 기본값을 지정할 필요가 없습니다.

SageMaker AI Python SDK를 사용하여 노트북 작업을 예약하는 방법을 보여주는 샘플 노트북을 보려면 [노트북 작업 샘플 예시](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/notebook-job-step)를 참조하세요.

**Topics**
+ [

## 노트북 작업을 만드는 단계
](#create-notebook-auto-run-overall)
+ [

## Studio UI 대시보드에서 노트북 작업 보기
](#create-notebook-auto-run-dash)
+ [

## Studio에서 파이프라인 그래프 보기
](#create-notebook-auto-run-graph)
+ [

## 노트북에 파라미터 전달
](#create-notebook-auto-run-passparam)
+ [

## 입력 노트북에서 Amazon EMR 클러스터에 연결
](#create-notebook-auto-run-emr)
+ [

## 기본 옵션 설정
](#create-notebook-auto-run-intdefaults)

## 노트북 작업을 만드는 단계
<a name="create-notebook-auto-run-overall"></a>

즉시 또는 일정에 따라 실행되는 노트북 작업을 만들 수 있습니다. 다음 지침은 두 방법을 모두 설명합니다.

**노트북 작업을 예약하려면 다음의 기본 단계를 완료하세요.**

1. `NotebookJobStep` 인스턴스를 만듭니다. `NotebookJobStep` 파라미터에 대한 자세한 내용은 [sagemaker.workflow.steps.NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep)을 참조하세요. 최소한 다음 코드 조각에 표시된 대로 다음 인수를 제공할 수 있습니다.
**중요**  
SageMaker Python SDK를 사용하여 노트북 작업을 예약하는 경우 노트북 작업을 실행할 특정 이미지만 지정할 수 있습니다. 자세한 내용은 [SageMaker AI Python SDK 노트북 작업에 대한 이미지 제약 조건](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk) 단원을 참조하십시오.

   ```
   notebook_job_step = NotebookJobStep(
       input_notebook=input-notebook,
       image_uri=image-uri,
       kernel_name=kernel-name
   )
   ```

1. 다음 코드 조각과 같이 `NotebookJobStep`을 단일 단계로 사용하여 파이프라인을 만듭니다.

   ```
   pipeline = Pipeline(
       name=pipeline-name,
       steps=[notebook_job_step],
       sagemaker_session=sagemaker-session,
   )
   ```

1. 온디맨드로 파이프라인을 실행하거나 선택적으로 향후 파이프라인 실행을 예약합니다. 즉시 실행을 시작하려면 다음 명령을 사용합니다.

   ```
   execution = pipeline.start(
       parameters={...}
   )
   ```

   선택적으로 향후 파이프라인 실행을 하나만 예약하거나 미리 정해진 간격으로 여러 번의 실행을 예약할 수 있습니다. `PipelineSchedule`에서 일정을 지정한 다음 `put_triggers`를 사용하여 일정 객체를 파이프라인에 전달합니다. 파이프라인 예약에 대한 자세한 내용은 [SageMaker Python SDK를 사용하여 파이프라인 예약](pipeline-eventbridge.md#build-and-manage-scheduling) 섹션을 참조하세요.

   다음 예시에서는 파이프라인이 2023년 12월 12일 10:31:32(UTC)에 한 번 실행되도록 예약합니다.

   ```
   my_schedule = PipelineSchedule(  
       name="my-schedule“,  
       at=datetime(year=2023, month=12, date=25, hour=10, minute=31, second=32) 
   )  
   pipeline.put_triggers(triggers=[my_schedule])
   ```

   다음 예시에서는 2022년부터 2023년까지 매월 마지막 금요일 오전 10시 15분(UTC)에 실행되도록 파이프라인을 예약합니다. Cron 기반 예약에 대한 자세한 내용은 [Cron-based schedules](https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html#cron-based)을 참조하세요.

   ```
   my_schedule = PipelineSchedule(  
       name="my-schedule“,  
       cron="15 10 ? * 6L 2022-2023"
   )  
   pipeline.put_triggers(triggers=[my_schedule])
   ```

1. (선택 사항) SageMaker 노트북 작업 대시보드에서 노트북 작업을 봅니다. 노트북 작업 단계의 `tags` 인수에 제공하는 값은 Studio UI가 작업을 캡처하고 표시하는 방법을 제어합니다. 자세한 내용은 [Studio UI 대시보드에서 노트북 작업 보기](#create-notebook-auto-run-dash) 단원을 참조하십시오.

## Studio UI 대시보드에서 노트북 작업 보기
<a name="create-notebook-auto-run-dash"></a>

특정 태그를 지정하면 파이프라인 단계로 만든 노트북 작업이 Studio 노트북 작업 대시보드에 표시됩니다.

**참고**  
Studio 또는 로컬 JupyterLab 환경에서 만든 노트북 작업만 작업 정의를 만듭니다. 따라서 SageMaker Python SDK로 노트북 작업을 만드는 경우 노트북 작업 대시보드에 작업 정의가 표시되지 않습니다. 하지만 [노트북 작업 보기](view-notebook-jobs.md)에 설명된 대로 노트북 작업을 볼 수 있습니다.

다음 태그를 사용하여 노트북 작업을 볼 수 있는 팀원을 제어할 수 있습니다.
+ 도메인의 모든 사용자 프로필 또는 [공간](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl-user-guide.html)에 노트북을 표시하려면 도메인 이름과 함께 도메인 태그를 추가합니다. 예를 들면 다음과 같습니다.
  + 키: `sagemaker:domain-name`, 값: `d-abcdefghij5k`
+ 도메인의 특정 사용자 프로필에 노트북 작업을 표시하려면 사용자 프로필과 도메인 태그를 모두 추가합니다. 사용자 프로필 태그의 예는 다음과 같습니다.
  + 키: `sagemaker:user-profile-name`, 값: `studio-user`
+ 노트북 작업을 [공간](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl-user-guide.html)에 표시하려면 공간과 도메인 태그를 모두 추가합니다. 공간 태그의 예는 다음과 같습니다.
  + 키: `sagemaker:shared-space-name`, 값: `my-space-name`
+ 도메인 또는 사용자 프로필 또는 공간 태그를 연결하지 않으면 Studio UI에 파이프라인 단계에서 만든 노트북 작업이 표시되지 않습니다. 이 경우 훈련 작업 콘솔에서 기본 훈련 작업을 보거나 [파이프라인 실행 목록](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-studio-view-execution.html)에서 상태를 볼 수 있습니다.

대시보드에서 작업을 보는 데 필요한 태그를 설정한 후 작업을 보고 출력을 다운로드하는 방법에 대한 지침은 [노트북 작업 보기](view-notebook-jobs.md) 섹션을 참조하세요.

## Studio에서 파이프라인 그래프 보기
<a name="create-notebook-auto-run-graph"></a>

노트북 작업 단계는 파이프라인의 일부이므로 Studio에서 파이프라인 그래프(DAG)를 볼 수 있습니다. 파이프라인 그래프에서 파이프라인 실행 상태를 보고 계보를 추적할 수 있습니다. 자세한 내용은 [파이프라인 실행 세부 정보 보기](pipelines-studio-view-execution.md)을 참조하세요.

## 노트북에 파라미터 전달
<a name="create-notebook-auto-run-passparam"></a>

파라미터를 노트북 작업에 전달하려면(`NotebookJobStep`의 `parameters` 인수 사용) 파라미터를 수신할 수 있도록 입력 노트북을 준비해야 합니다.

Papermill 기반 노트북 작업 실행기는 `parameters` 태그가 지정된 Jupyter 셀을 검색하고 이 셀 바로 뒤에 새 파라미터 또는 파라미터 재정의를 적용합니다. 자세한 내용은 [노트북 파라미터화](notebook-auto-run-troubleshoot-override.md)을 참조하세요.

이 단계를 수행했으면 다음 예시와 같이 파라미터를 `NotebookJobStep`에 전달합니다.

```
notebook_job_parameters = {
    "company": "Amazon"
}

notebook_job_step = NotebookJobStep(
    image_uri=image-uri,
    kernel_name=kernel-name,
    role=role-name,
    input_notebook=input-notebook,
    parameters=notebook_job_parameters,
    ...
)
```

## 입력 노트북에서 Amazon EMR 클러스터에 연결
<a name="create-notebook-auto-run-emr"></a>

Studio의 Jupyter Notebook에서 Amazon EMR 클러스터에 연결하는 경우 Jupyter Notebook을 추가로 수정해야 할 수 있습니다. 노트북에서 다음 작업 중 하나를 수행해야 하는지 [노트북에서 Amazon EMR 클러스터에 연결](scheduled-notebook-connect-emr.md) 섹션을 확인하세요.
+ **Amazon EMR 연결 명령에 파라미터를 전달합니다.** Studio는 Papermill을 사용하여 노트북을 실행합니다. SparkMagic 커널에서는 Papermill이 SparkMagic에 정보를 전달하는 방식 때문에 Amazon EMR 연결 명령에 전달하는 파라미터가 예상대로 작동하지 않을 수 있습니다.
+ **사용자 자격 증명을 Kerberos, LDAP 또는 HTTP 기본 인증 Amazon EMR 클러스터에 전달** AWS Secrets Manager를 통해 사용자 자격 증명을 전달해야 합니다.

## 기본 옵션 설정
<a name="create-notebook-auto-run-intdefaults"></a>

SageMaker SDK는 `NotebookJobStep` 인스턴스를 만들 때마다 이러한 파라미터를 지정할 필요가 없도록 파라미터의 하위 집합에 대한 기본값을 설정하는 옵션을 제공합니다. 이러한 파라미터는 `role`, `s3_root_uri`, `s3_kms_key`, `volume_kms_key`, `subnets` 및 `security_group_ids`입니다. 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)를 참조하세요.

노트북 작업 기본값을 설정하려면 다음 코드 조각과 같이 구성 파일의 노트북 작업 섹션에 새 기본값을 적용합니다.

```
SageMaker:
  PythonSDK:
    Modules:
      NotebookJob:
        RoleArn: 'arn:aws:iam::555555555555:role/IMRole'
        S3RootUri: 's3://amzn-s3-demo-bucket/my-project'
        S3KmsKeyId: 's3kmskeyid'
        VolumeKmsKeyId: 'volumekmskeyid1'
        VpcConfig:
          SecurityGroupIds:
            - 'sg123'
          Subnets:
            - 'subnet-1234'
```

# Studio에서 노트북 작업 만들기
<a name="create-notebook-auto-run-studio"></a>

**참고**  
노트북 스케줄러는 Amazon EventBridge, SageMaker 훈련 및 Pipelines 서비스를 기반으로 구축되었습니다. 노트북 작업이 실패할 경우 이러한 서비스와 관련된 오류가 표시될 수 있습니다. 다음은 Studio UI에서 노트북 작업을 만드는 방법에 대한 정보를 제공합니다.

SageMaker 노트북 작업은 노트북 작업 위젯을 사용하여 비대화형 노트북 작업을 만들고 관리할 수 있는 도구를 제공합니다. 작업을 생성하고, 생성한 작업을 보고, 기존 작업을 일시 중지, 중지 또는 재개할 수 있습니다. 노트북 일정을 수정할 수도 있습니다.

위젯을 사용하여 예약된 노트북 작업을 만들면 스케줄러가 선택한 기본 옵션을 추론하여 양식을 자동으로 채워 빠르게 시작할 수 있도록 도와줍니다. Studio를 사용하는 경우 최소한 옵션을 설정하지 않고도 온디맨드 작업을 제출할 수 있습니다. 시간별 일정 정보만 제공하는 (예약된) 노트북 작업 정의를 제출할 수도 있습니다. 하지만 예약된 작업에 특수 설정이 필요한 경우 다른 필드를 사용자 지정할 수 있습니다. 로컬 Jupyter notebook을 실행 중인 경우 스케줄러 확장이 옵션 서브셋의 기본값을 직접 지정할 수 있는 기능을 제공하므로 매번 같은 값을 수동으로 삽입하지 않아도 됩니다.

노트북 작업을 만들 때 데이터세트, 이미지 및 로컬 스크립트와 같은 추가 파일을 포함할 수 있습니다. 이렇게 하려면 **입력 폴더를 사용하여 작업 실행**을 선택합니다. 이제 노트북 작업은 입력 파일의 폴더에 있는 모든 파일에 액세스할 수 있습니다. 노트북 작업이 실행되는 동안 디렉터리의 파일 구조는 변경되지 않습니다.

노트북 작업을 예약하려면 다음 단계를 완료하세요.

1. **작업 생성** 양식을 엽니다.

   로컬 JupyterLab 환경에서는 작업 표시줄에서 **노트북 작업 생성** 아이콘(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/notebook-schedule.png))을 선택합니다. 아이콘이 보이지 않는 경우 [설치 가이드](scheduled-notebook-installation.md)의 지침에 따라 설치합니다.

   Studio에서 다음 두 가지 방법으로 양식을 엽니다.
   + **파일 브라우저** 사용

     1. 왼쪽 패널의 **파일 브라우저**에서 예약된 작업으로 실행하려는 노트북을 마우스 오른쪽 버튼으로 클릭합니다.

     1. **노트북 작업 생성**을 선택합니다.
   + Studio 노트북 내
     + 예약된 작업으로 실행하려는 Studio 노트북 내에서 Studio 도구 모음의 **노트북 작업 생성** 아이콘(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/notebook-schedule.png))을 선택합니다.

1. 팝업 양식을 작성합니다. 양식에는 다음 필드가 표시됩니다.
   + **작업 이름**: 작업에 대해 지정하는 알기 쉬운 이름입니다.
   + **입력 파일**: 비대화형 모드에서 실행하도록 예약한 노트북의 이름입니다.
   + **컴퓨팅 유형**: 노트북을 실행하려는 Amazon EC2 인스턴스의 유형입니다.
   + **파라미터**: 노트북의 입력으로 선택적으로 지정할 수 있는 사용자 지정 파라미터입니다. 이 기능을 사용하려면 선택적으로 Jupyter Notebook의 특정 셀에 **parameters** 태그를 지정하여 파라미터가 적용되는 위치를 제어할 수 있습니다. 자세한 내용은 [노트북 파라미터화](notebook-auto-run-troubleshoot-override.md) 섹션을 참조하세요.
   + (선택 사항) **입력 폴더를 사용하여 작업 실행**: 이 옵션을 선택하면 예약된 작업이 **입력 파일**과 동일한 폴더에 있는 모든 파일에 액세스할 수 있습니다.
   + **추가 옵션**: 작업에 대한 추가 사용자 지정을 지정할 수 있습니다. 예를 들어 이미지 또는 커널, 입력 및 출력 폴더, 작업 재시도 및 제한 시간 옵션, 암호화 세부 정보, 사용자 지정 초기화 스크립트를 지정할 수 있습니다. 적용할 수 있는 사용자 지정의 전체 목록은 [사용 가능한 옵션](create-notebook-auto-execution-advanced.md)섹션을 참조하세요.

1. 작업을 예약합니다. 온디맨드 방식 또는 정해진 일정에 따라 노트북을 실행할 수 있습니다.
   + 온디맨드 방식에 따라 노트북을 실행하려면 다음 단계를 완료합니다.
     + **지금 실행**을 선택합니다.
     + **생성(Create)**을 선택합니다.
     + **노트북 작업** 탭이 나타납니다. **다시 로드**를 선택하여 작업을 대시보드에 로드합니다.
   + 정해진 일정에 따라 노트북을 실행하려면 다음 단계를 완료합니다.
     + **일정에 따라 실행**을 선택합니다.
     + **간격** 드롭다운 목록을 선택하고 간격을 선택합니다. 간격은 1분에서 1개월까지입니다. **사용자 지정 일정**을 선택할 수도 있습니다.
     + 선택한 간격에 따라 원하는 실행 날짜 및 시간을 추가로 지정하는 데 도움이 되는 추가 필드가 나타납니다. 예를 들어, 일일 실행으로 **요일**을 선택하면 원하는 시간을 지정할 수 있는 추가 필드가 나타납니다. 지정하는 모든 시간은 UTC 형식입니다. 또한 1분 등의 짧은 간격을 선택하는 경우, 다음 작업이 시작될 때 이전 작업이 완료되지 않으면 작업이 겹치게 됩니다.

       사용자 지정 일정을 선택하는 경우 표현식 상자에 CRON 구문을 사용하여 정확한 실행 날짜 및 시간을 지정합니다. CRON 구문은 공백으로 구분된 숫자 목록으로, 각 숫자는 초에서 연까지의 시간 단위를 나타냅니다. CRON 구문에 대한 도움이 필요하면 표현식 상자 아래에서 **CRON 구문에 대한 도움 받기**를 선택할 수 있습니다.
     + **생성(Create)**을 선택합니다.
     + **노트북 작업 정의** 탭이 나타납니다. **다시 로드**를 선택하여 작업 정의를 대시보드에 로드합니다.

# 로컬 노트북 기본 옵션 설정
<a name="create-notebook-auto-execution-advanced-default"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 명명되었습니다. 다음 섹션은 Studio Classic 애플리케이션 사용에 관해 다룹니다. 업데이트된 Studio 환경 사용에 대한 자세한 내용은 [Amazon SageMaker Studio](studio-updated.md) 섹션을 참조하세요.  
Studio Classic은 기존 워크로드에 대해 유지 관리되지만 더 이상 온보딩에 사용할 수 없습니다. 기존 Studio Classic 애플리케이션만 중지하거나 삭제할 수 있으며 새 애플리케이션을 생성할 수 없습니다. [워크로드를 새 Studio 환경으로 마이그레이션하는](studio-updated-migrate.md) 것이 좋습니다.

노트북 작업을 만들 때 기본 옵션을 설정할 수 있습니다. 이렇게 하면 제공된 기본값과 다른 옵션으로 여러 노트북 작업을 만들 계획인 경우 시간을 절약할 수 있습니다. 다음은 로컬 노트북의 기본 옵션을 설정하는 방법에 대한 정보를 제공합니다.

**작업 생성** 양식에서 사용자 지정 값을 수동으로 입력 또는 붙여넣기해야 하는 경우 새 기본값을 저장할 수 있으며 스케줄러 확장 프로그램은 새 작업 정의를 만들 때마다 새 값을 삽입합니다. 이 기능은 다음 리전에서 사용 가능합니다.
+ **역할 ARN**
+ **S3 입력 폴더**
+ **S3 출력 폴더**
+ **출력 암호화 KMS 키**(**작업 구성 암호화**를 켜는 경우)
+ **작업 인스턴스 볼륨 암호화 KMS 키**(**작업 구성 암호화**를 켜는 경우)

이 기능을 사용하면 제공된 기본값과 다른 값을 삽입하고 향후 작업 실행 시 해당 값을 계속 사용할 경우 시간을 절약할 수 있습니다. 선택한 사용자 설정은 JupyterLab 서버를 실행하는 컴퓨터에 저장되며 기본 API를 사용하여 검색됩니다. 다섯 가지 옵션 모두가 아닌 하나 이상의 새 기본값을 제공하는 경우 사용자 지정하지 않은 옵션에 이전 기본값이 적용됩니다.

다음 지침은 노트북 작업에 대해 기존 기본값을 미리 보고, 새 기본값을 설정하고, 기본값을 재설정하는 방법을 보여줍니다.

**노트북 작업의 기존 기본값을 미리 보려면 다음 단계를 완료하세요.**

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

1. 왼쪽 패널의 **파일 브라우저**에서 예약된 작업으로 실행하려는 노트북을 마우스 오른쪽 버튼으로 클릭합니다.

1. **노트북 작업 생성**을 선택합니다.

1. 노트북 작업 설정 탭을 확장하려면 **추가 옵션**을 선택합니다. 여기에서 기본 설정을 볼 수 있습니다.

**향후 노트북 작업에 대한 새 기본값을 설정하려면 다음 단계를 완료하세요.**

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

1. Studio Classic 최상위 메뉴에서 **설정**을 선택한 다음 **고급 설정 편집기**를 선택합니다.

1. **설정** 아래의 목록에서 **Amazon SageMaker 스케줄러**를 선택합니다. 기본적으로 이미 열려 있을 수 있습니다.

1. 이 UI 페이지에서 직접 또는 JSON 편집기를 사용하여 기본 설정을 업데이트할 수 있습니다.
   + UI에서 **역할 ARN**, **S3 입력 폴더**, **S3 출력 폴더**, **출력 암호화 KMS 키** 또는 **작업 인스턴스 볼륨 암호화 KMS 키**에 대한 새 값을 삽입할 수 있습니다. 이 값을 변경하면 다음 노트북 작업을 만들 때 **추가 옵션**에서 해당 필드의 새 기본값이 표시됩니다.
   + (선택 사항) **JSON 설정 편집기**를 사용하여 사용자 기본값을 업데이트하려면 다음 단계를 완료하세요.

     1. 오른쪽 상단에서 **JSON 설정 편집기**를 선택합니다.

     1. **설정** 왼쪽 사이드바에서 **Amazon SageMaker AI 스케줄러**를 선택합니다. 기본적으로 이미 열려 있을 수 있습니다.

        **사용자 기본 설정** 패널에서 현재 기본값을 확인할 수 있습니다.

        **시스템 기본값** 패널에서 시스템 기본값을 확인할 수 있습니다.

     1. 기본값을 업데이트하려면 **시스템 기본값** 패널의 JSON 스니펫을 복사하여 **사용자 기본 설정** 패널에 붙여넣고 필드를 업데이트합니다.

     1. 기본값을 업데이트한 경우 오른쪽 상단의 **사용자 설정 저장** 아이콘(![\[Icon of a cloud with an arrow pointing upward, representing cloud upload functionality.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Notebook_save.png))을 선택합니다. 편집기를 닫으면 변경 내용이 저장되지 않습니다.

**이전에 변경한 후 사용자 지정 기본값을 재설정하려면 다음 단계를 완료하세요.**

1. Studio Classic 최상위 메뉴에서 **설정**을 선택한 다음 **고급 설정 편집기**를 선택합니다.

1. **설정** 아래의 목록에서 **Amazon SageMaker 스케줄러**를 선택합니다. 기본적으로 이미 열려 있을 수 있습니다.

1. 이 UI 페이지를 직접 사용하거나 JSON 편집기를 사용하여 기본값을 복원할 수 있습니다.
   + UI의 오른쪽 상단 모서리에서 **기본값으로 복원**을 선택할 수 있습니다. 기본값은 비어 있는 문자열로 복원됩니다. 이전에 기본값을 변경한 경우에만 이 옵션이 표시됩니다.
   + (선택 사항) **JSON 설정 편집기**를 사용하여 기본 설정을 다시 시작하려면 다음 단계를 완료하세요.

     1. 오른쪽 상단에서 **JSON 설정 편집기**를 선택합니다.

     1. **설정** 왼쪽 사이드바에서 **Amazon SageMaker AI 스케줄러**를 선택합니다. 기본적으로 이미 열려 있을 수 있습니다.

        **사용자 기본 설정** 패널에서 현재 기본값을 확인할 수 있습니다.

        **시스템 기본값** 패널에서 시스템 기본값을 확인할 수 있습니다.

     1. 현재 기본 설정을 복원하려면 **시스템 기본값** 패널의 콘텐츠를 **사용자 기본 설정** 패널로 복사합니다.

     1. 오른쪽 상단 모서리에서 **사용자 설정 저장** 아이콘(![\[Icon of a cloud with an arrow pointing upward, representing cloud upload functionality.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Notebook_save.png))을 선택합니다. 편집기를 닫으면 변경 내용이 저장되지 않습니다.

# 노트북 작업 워크플로
<a name="create-notebook-auto-run-dag"></a>

노트북 작업은 사용자 지정 코드를 실행하므로 하나 이상의 노트북 작업 단계가 포함된 파이프라인을 만들 수 있습니다. ML 워크플로에는 데이터를 사전 처리하는 처리 단계, 모델을 빌드하는 훈련 단계, 모델 평가 단계 등 여러 단계가 포함되는 경우가 많습니다. 노트북 작업은 사전 처리를 다루는 데 사용할 수 있습니다. 데이터 변환 또는 수집을 수행하는 노트북, 데이터 정리를 수행하는 EMR 단계, 훈련 단계를 시작하기 전에 입력의 특성화를 수행하는 다른 노트북 작업이 있을 수 있습니다. 노트북 작업에는 파이프라인의 이전 단계 또는 입력 노트북의 파라미터로 사용자 지정 정보가 필요할 수 있습니다. 환경 변수와 파라미터를 노트북에 전달하고 이전 단계에서 정보를 검색하는 방법을 보여주는 예시는 [노트북 단계와 정보 주고받기](create-notebook-auto-run-dag-seq.md) 섹션을 참조하세요.

또 다른 사용 사례에서는 노트북 작업 중 하나가 노트북 실행 중에 다른 노트북을 직접 호출하여 일부 작업을 수행하도록 할 수 있습니다. 이 시나리오에서는 이러한 소싱된 노트북을 노트북 작업 단계의 종속 항목으로 지정해야 합니다. 다른 노트북을 직접 호출하는 방법에 대한 자세한 내용은 [노트북 작업에서 다른 노트북 호출](create-notebook-auto-run-dag-call.md) 섹션을 참조하세요.

SageMaker AI Python SDK를 사용하여 노트북 작업을 예약하는 방법을 보여주는 샘플 노트북을 보려면 [노트북 작업 샘플 예시](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/notebook-job-step)를 참조하세요.

# 노트북 단계와 정보 주고받기
<a name="create-notebook-auto-run-dag-seq"></a>

다음 섹션에서는 정보를 노트북에 환경 변수 및 파라미터로 전달하는 방법을 설명합니다.

## 환경 변수 전달
<a name="create-notebook-auto-run-dag-seq-env-var"></a>

다음 예시와 같이 환경 변수를 `NotebookJobStep`의 `environment_variable` 인수에 딕셔너리로 전달합니다.

```
environment_variables = {"RATE": 0.0001, "BATCH_SIZE": 1000}

notebook_job_step = NotebookJobStep(
    ...
    environment_variables=environment_variables,
    ...
)
```

다음 예시와 같이 `os.getenv()`를 사용하여 노트북의 환경 변수를 사용할 수 있습니다.

```
# inside your notebook
import os
print(f"ParentNotebook: env_key={os.getenv('env_key')}")
```

## 파라미터 전달
<a name="create-notebook-auto-run-dag-seq-param"></a>

`NotebookJobStep` 인스턴스의 첫 번째 노트북 작업 단계에 파라미터를 전달할 때 Jupyter Notebook의 셀에 태그를 지정하여 새 파라미터 또는 파라미터 재정의를 적용할 위치를 표시할 수도 있습니다. Jupyter Notebook에서 셀에 태그를 지정하는 방법에 대한 지침은 [노트북 파라미터화](notebook-auto-run-troubleshoot-override.md) 섹션을 참조하세요.

다음 코드 조각과 같이 노트북 작업 단계의 `parameters` 파라미터를 통해 파라미터를 전달합니다.

```
notebook_job_parameters = {
    "company": "Amazon",
}

notebook_job_step = NotebookJobStep(
    ...
    parameters=notebook_job_parameters,
    ...
)
```

입력 노트북 내에서 파라미터는 `parameters` 태그가 지정된 셀 뒤에 또는 태그가 지정된 셀이 없는 경우 노트북의 시작 부분에 적용됩니다.

```
# this cell is in your input notebook and is tagged with 'parameters'
# your parameters and parameter overrides are applied after this cell
company='default'
```

```
# in this cell, your parameters are applied
# prints "company is Amazon"
print(f'company is {company}')
```

## 이전 단계에서 정보 검색
<a name="create-notebook-auto-run-dag-seq-interstep"></a>

다음 논의에서는 이전 단계에서 데이터를 추출하여 노트북 작업 단계로 전달하는 방법을 설명합니다.

**`properties` 속성 사용**

이전 단계의 `properties` 속성과 함께 다음 속성을 사용할 수 있습니다.
+ `ComputingJobName` - 훈련 작업 이름
+ `ComputingJobStatus` - 훈련 작업 상태
+ `NotebookJobInputLocation` - 입력 Amazon S3 위치
+ `NotebookJobOutputLocationPrefix` - 훈련 작업 출력의 경로. 구체적으로 `{NotebookJobOutputLocationPrefix}/{training-job-name}/output/output.tar.gz`. 출력 포함
+ `InputNotebookName` - 입력 노트북 파일 이름
+ `OutputNotebookName` - 출력 노트북 파일 이름(작업이 실패할 경우 훈련 작업 출력 폴더에 없을 수 있음)

다음 코드 조각은 속성 속성에서 파라미터를 추출하는 방법을 보여줍니다.

```
notebook_job_step2 = NotebookJobStep(
    ....
    parameters={
        "step1_JobName": notebook_job_step1.properties.ComputingJobName,
        "step1_JobStatus": notebook_job_step1.properties.ComputingJobStatus,
        "step1_NotebookJobInput": notebook_job_step1.properties.NotebookJobInputLocation,
        "step1_NotebookJobOutput": notebook_job_step1.properties.NotebookJobOutputLocationPrefix,
    }
```

**JsonGet 사용**

앞서 언급한 파라미터 이외의 파라미터를 전달하고 이전 단계의 JSON 출력이 Amazon S3에 있는 경우 `JsonGet`을 사용합니다. `JsonGet`은 Amazon S3의 JSON 파일에서 데이터를 직접 추출할 수 있는 일반적인 메커니즘입니다.

`JsonGet`을 사용하여 Amazon S3에서 JSON 파일을 추출하려면 다음 단계를 완료하세요.

1. Amazon S3에 JSON 파일을 업로드합니다. 데이터가 이미 Amazon S3에 업로드된 경우 이 단계를 건너뜁니다. 다음 예시에서는 Amazon S3에 JSON 파일을 업로드하는 방법을 보여줍니다.

   ```
   import json
   from sagemaker.s3 import S3Uploader
   
   output = {
       "key1": "value1", 
       "key2": [0,5,10]
   }
               
   json_output = json.dumps(output)
   
   with open("notebook_job_params.json", "w") as file:
       file.write(json_output)
   
   S3Uploader.upload(
       local_path="notebook_job_params.json",
       desired_s3_uri="s3://path/to/bucket"
   )
   ```

1. 추출하려는 값에 대한 S3 URI 및 JSON 경로를 제공합니다. 다음 예시에서 `JsonGet`은 키 `key2`(`10`)와 연결된 값의 인덱스 2를 나타내는 객체를 반환합니다.

   ```
   NotebookJobStep(
       ....
       parameters={
           # the key job_key1 returns an object representing the value 10
           "job_key1": JsonGet(
               s3_uri=Join(on="/", values=["s3:/", ..]),
               json_path="key2[2]" # value to reference in that json file
           ), 
           "job_key2": "Amazon" 
       }
   )
   ```

# 노트북 작업에서 다른 노트북 호출
<a name="create-notebook-auto-run-dag-call"></a>

한 노트북 작업이 다른 노트북을 호출하는 파이프라인을 설정할 수 있습니다. 다음은 노트북이 다른 두 노트북을 호출하는 노트북 작업 단계가 있는 파이프라인의 예를 설정합니다. 입력 노트북에는 다음 줄이 포함되어 있습니다.

```
%run 'subfolder/notebook_to_call_in_subfolder.ipynb'
%run 'notebook_to_call.ipynb'
```

다음 코드 조각과 같이 `additional_dependencies`를 사용하여 이러한 노트북을 `NotebookJobStep` 인스턴스에 전달합니다. `additional_dependencies`의 노트북에 제공된 경로는 루트 위치에서 제공됩니다. 종속 항목에 대한 경로를 올바르게 제공할 수 있도록 SageMaker AI가 종속 파일 및 폴더를 Amazon S3에 업로드하는 방법에 대한 자세한 내용은 [NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep)에서 `additional_dependencies`의 설명을 참조하세요.

```
input_notebook = "inputs/input_notebook.ipynb"
simple_notebook_path = "inputs/notebook_to_call.ipynb"
folder_with_sub_notebook = "inputs/subfolder"

notebook_job_step = NotebookJobStep(
    image_uri=image-uri,
    kernel_name=kernel-name,
    role=role-name,
    input_notebook=input_notebook,
    additional_dependencies=[simple_notebook_path, folder_with_sub_notebook],
    tags=tags,
)
```

# 사용 가능한 옵션
<a name="create-notebook-auto-execution-advanced"></a>

다음 표에는 Studio, 로컬 Jupyter 환경, SageMaker Python SDK 중 무엇을 사용하여 에서 노트북 작업을 실행하든 관계없이 노트북 작업을 사용자 지정하는 데 사용할 수 있는 모든 옵션이 표시됩니다. 표에는 사용자 지정 옵션 유형, 설명, 옵션 사용 방법에 대한 추가 지침, Studio의 옵션 필드 이름(사용 가능한 경우) 및 SageMaker Python SDK의 노트북 작업 단계 파라미터 이름(사용 가능한 경우)이 포함되어 있습니다.

일부 옵션의 경우 노트북 작업을 설정할 때마다 사용자 지정 기본값을 지정할 필요가 없도록 사용자 지정 기본값을 미리 설정할 수도 있습니다. Studio의 경우 이러한 옵션은 **역할**, **입력 폴더**, **출력 폴더** 및 **KMS 키 ID**이며 다음 표에 명시되어 있습니다. 이러한 옵션에 대한 사용자 지정 기본값을 미리 설정한 경우 노트북 작업을 만들 때 **작업 만들기** 양식에 이러한 필드가 미리 채워집니다. Studio 및 로컬 Jupyter 환경에서 사용자 지정 기본값을 만드는 방법에 대한 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md) 섹션을 참조하세요.

또한 SageMaker SDK는 `NotebookJobStep`을 만들 때 이러한 파라미터를 지정할 필요가 없도록 지능형 기본값을 설정하는 옵션을 제공합니다. 이러한 파라미터는 `role`, `s3_root_uri`, `s3_kms_key`, `volume_kms_key`, `subnets`, `security_group_ids`이며 다음 표에 명시되어 있습니다. 지능형 기본값을 설정하는 방법에 대한 자세한 내용은 [기본 옵션 설정](create-notebook-auto-run-sdk.md#create-notebook-auto-run-intdefaults) 섹션을 참조하세요.


| 사용자 지정 옵션 | 설명 | 스튜디오별 가이드라인 | 로컬 Jupyter 환경 가이드라인 | SageMaker Python SDK 지침 | 
| --- | --- | --- | --- | --- | 
| 작업 이름 | 노트북 작업 대시보드에 표시될 작업 이름입니다. | 필드 작업 이름. | Studio와 동일합니다. | 파라미터 notebook\$1job\$1name. 기본값은 None입니다. | 
| 이미지 | 선택한 컴퓨팅 유형에서 노트북을 비대화형 방식으로 실행하는 데 사용되는 컨테이너 이미지입니다. | 필드 이미지. 이 필드의 기본값은 노트북의 현재 이미지입니다. 필요한 경우 이 필드를 기본값에서 사용자 지정 값으로 변경하세요. Studio에서 이 값을 추론할 수 없는 경우 양식에 유효성 검사 오류가 표시되어 값을 지정해야 합니다. 이 이미지는 [나만의 사용자 지정 이미지](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)나 사용 가능한 Amazon SageMaker 이미지일 수 있습니다. 노트북 스케줄러가 지원하는 사용 가능한 SageMaker 이미지 목록은 [Studio Classic 노트북에 사용할 수 있는 Amazon SageMaker 이미지](notebooks-available-images.md)섹션을 참조하세요. | 필드 이미지. 이 필드에는 선택한 컴퓨팅 유형에서 제공된 노트북을 실행할 수 있는 도커 이미지의 ECR URI가 필요합니다. 기본적으로 스케줄러 확장은 Python 2.0 기반의 사전 구축된 SageMaker AI Docker 이미지를 사용합니다. boto3 AWS CLI및 Python 3 커널이 포함된 DockerHub의 공식 Python 3.8 이미지입니다. 노트북 사용자 지정 이미지 사양을 충족하는 모든 ECR URI를 제공할 수도 있습니다. 자세한 내용은 [Amazon SageMaker Studio Classic의 사용자 지정 SageMaker 이미지 사양](studio-byoi-specs.md)섹션을 참조하세요. 이 이미지에는 노트북 실행에 필요한 모든 커널과 라이브러리가 있어야 합니다. | 필수 여부. 파라미터 image\$1uri. ECR에서 Docker 이미지의 URI 위치. 특정 SageMaker Distribution 이미지 또는 해당 이미지를 기반으로 한 사용자 지정 이미지 또는 추가 요구 사항을 충족하는 노트북 작업 종속성이 사전 설치된 자체 이미지를 사용할 수 있습니다. 자세한 내용은 [SageMaker AI Python SDK 노트북 작업에 대한 이미지 제약 조건](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk)을 참조하세요. | 
| 인스턴스 유형 | 노트북 작업을 실행하는 데 사용할 EC2 인스턴스 유형. 노트북 작업은 SageMaker 훈련 작업을 컴퓨팅 계층으로 사용하므로 지정된 인스턴스 유형은 SageMaker 훈련 지원 인스턴스 유형이어야 합니다. | 필드 컴퓨팅 유형. 기본값은 ml.m5.large입니다. | Studio와 동일합니다. | 파라미터 instance\$1type. 기본값은 ml.m5.large입니다. | 
| 커널 | 노트북 작업을 실행하는 데 사용되는 Jupyter 커널입니다. | 필드 커널. 이 필드의 기본값은 노트북의 현재 커널입니다. 필요한 경우 이 필드를 기본값에서 사용자 지정 값으로 변경하세요. Studio에서 이 값을 추론할 수 없는 경우 양식에 유효성 검사 오류가 표시되어 값을 지정해야 합니다. | 필드 커널. 이 커널은 이미지에 나타나야 하며 Jupyter 커널 사양을 따라야 합니다. 이 필드는 기본 Python 2.0 SageMaker 이미지에 있는 Python3 커널을 기본값으로 사용합니다. 필요한 경우 이 필드를 사용자 지정 값으로 변경하세요. | 필수 여부. 파라미터 kernel\$1name. 이 커널은 이미지에 나타나야 하며 Jupyter 커널 사양을 따라야 합니다. 이미지의 커널 식별자를 보려면 (LINK) 페이지를 참조하세요. | 
| SageMaker AI 세션 | SageMaker AI 서비스 직접 호출이 위임되는 기본 SageMaker AI 세션 | 해당 사항 없음 | 해당 사항 없음 | 파라미터 sagemaker\$1session. 지정되지 않은 경우 기본 구성 체인을 사용하여 만들어집니다. | 
| 역할 ARN | 노트북 작업에 사용되는 역할의 Amazon 리소스 이름(ARN)입니다. | 필드 역할 ARN. 이 필드의 기본값은 Studio 실행 역할입니다. 필요한 경우 이 필드를 사용자 지정 값으로 변경하세요. Studio에서 이 값을 추론할 수 없는 경우 **역할 ARN** 필드는 비어 있습니다. 이 경우 사용하려는 ARN을 삽입하세요.  | 필드 역할 ARN. 이 필드의 기본값은 SagemakerJupyterScheduler접두사가 붙은 모든 역할입니다. 접두사가 붙은 역할이 여러 개 있는 경우 확장 프로그램은 하나를 선택합니다. 필요한 경우 이 필드를 사용자 지정 값으로 변경하세요. 이 필드에는 새 작업 정의를 만들 때마다 미리 채워지는 사용자 기본값을 설정할 수 있습니다. 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md)을 참조하세요. | 파라미터 role. SDK가 SageMaker 노트북 또는 SageMaker Studio 노트북에서 실행 중인 경우 SageMaker AI 기본 IAM 역할로 기본 설정됩니다. 그렇지 않으면 ValueError가 발생합니다. 지능형 기본값을 허용합니다. | 
| 입력 노트북 | 실행을 예약하는 노트북의 이름. | 필수 여부. 필드 입력 파일. | Studio와 동일합니다. | 필수. 파라미터 input\$1notebook. | 
| 입력 폴더 | 입력이 포함된 폴더입니다. 입력 노트북과 선택적 시작 또는 초기화 스크립트를 포함한 작업 입력이 이 폴더에 저장됩니다. | 필드 입력 폴더. 폴더를 제공하지 않으면 스케줄러가 입력에 대한 기본 Amazon S3 버킷을 생성합니다. | Studio와 동일합니다. 이 필드에는 새 작업 정의를 만들 때마다 미리 채워지는 사용자 기본값을 설정할 수 있습니다. 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md)을 참조하세요. | 해당 없음. 입력 폴더는 파라미터 s3\$1root\$1uri에 지정된 위치 안에 배치됩니다. | 
| 출력 폴더 | 출력이 포함된 폴더입니다. 출력 노트북과 로그를 포함한 작업 출력이 이 폴더에 저장됩니다. | 필드 출력 폴더. 폴더를 지정하지 않으면 스케줄러가 출력에 대한 기본 Amazon S3 버킷을 생성합니다. | Studio와 동일합니다. 이 필드에는 새 작업 정의를 만들 때마다 미리 채워지는 사용자 기본값을 설정할 수 있습니다. 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md)을 참조하세요. | 해당 없음. 출력 폴더는 파라미터 s3\$1root\$1uri에 지정된 위치 내에 배치됩니다. | 
| 파라미터 | 노트북 작업에 전달할 변수 및 값의 딕셔너리. | 필드 파라미터. 파라미터를 수락하려면 [노트북을 파라미터화](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-auto-run-troubleshoot-override.html)해야 합니다. | Studio와 동일합니다. | 파라미터 parameters. 파라미터를 수락하려면 [노트북을 파라미터화](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-auto-run-troubleshoot-override.html)해야 합니다. | 
| 추가 (파일 또는 폴더) 종속성 | 노트북 작업이 s3 스테이징된 폴더에 업로드하는 파일 또는 폴더 종속성 목록. | 지원되지 않음. | 지원되지 않음. | 파라미터 additional\$1dependencies. 노트북 작업은 이러한 종속성을 S3 스테이징된 폴더에 업로드하여 실행 중에 사용할 수 있도록 합니다. | 
| S3 루트 URI | 입력이 포함된 폴더입니다. 입력 노트북과 선택적 시작 또는 초기화 스크립트를 포함한 작업 입력이 이 폴더에 저장됩니다. 이 S3 버킷은 노트북 작업을 실행하는 데 사용하는 것과 동일한 AWS 계정 에 있어야 합니다. | 해당 없음. 입력 폴더 및 출력 폴더를 사용합니다. | Studio와 동일합니다. | 파라미터 s3\$1root\$1uri. 기본값은 기본 S3 버킷입니다. 지능형 기본값을 허용합니다. | 
| 환경 변수 | 재정의하려는 기존 환경 변수 또는 노트북에 도입하여 사용하려는 새 환경 변수입니다. | 필드 환경 변수. | Studio와 동일합니다. | 파라미터 environment\$1variables. 기본값은 None입니다. | 
| Tags | 작업에 연결할 태그의 목록. | 해당 사항 없음 | 해당 사항 없음 | 파라미터 tags. 기본값은 None입니다. 태그는 Studio UI가 파이프라인에서 만든 작업을 캡처하고 표시하는 방법을 제어합니다. 자세한 내용은 [Studio UI 대시보드에서 노트북 작업 보기](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)을 참조하세요. | 
| 시작 스크립트 | 노트북 시작 메뉴에 미리 로드된 스크립트로, 노트북을 실행하기 전에 실행하도록 선택할 수 있습니다. | 필드 시작 스크립트. 시작 시 이미지에서 실행되는 LCC(수명 주기 구성) 스크립트를 선택합니다. 시작 스크립트는 Studio 환경 외부의 쉘에서 실행됩니다. 따라서 이 스크립트는 Studio 로컬 스토리지, 환경 변수 또는 앱 메타데이터(`/opt/ml/metadata` 내)에 종속될 수 없습니다. 또한 시작 스크립트와 초기화 스크립트를 사용하는 경우 시작 스크립트가 먼저 실행됩니다.   | 지원되지 않음. | 지원되지 않음. | 
| 초기화 스크립트 | 노트북을 시작할 때 실행할 수 있는 로컬 스크립트 경로입니다. | 필드 초기화 스크립트. 로컬 스크립트 또는 LCC(수명 주기 구성) 스크립트가 있는 EFS 파일 경로를 입력합니다. 시작 스크립트와 초기화 스크립트를 사용하는 경우 시작 스크립트가 먼저 실행됩니다. 초기화 스크립트는 노트북 작업과 동일한 쉘에서 제공됩니다. 앞서 설명한 시작 스크립트에는 해당되지 않습니다. 또한 시작 스크립트와 초기화 스크립트를 사용하는 경우 시작 스크립트가 먼저 실행됩니다.   | 필드 초기화 스크립트. 로컬 스크립트 또는 LCC(수명 주기 구성) 스크립트가 있는 로컬 파일 경로를 입력합니다. | 파라미터 initialization\$1script. 기본값은 None입니다. | 
| 최대 재시도 횟수 | Studio가 실패한 작업 실행을 다시 실행하려고 시도하는 횟수입니다. | 필드 최대 재시도 횟수. 기본값은 1입니다. | Studio와 동일합니다. | 파라미터 max\$1retry\$1attempts. 기본값은 1입니다. | 
| 최대 실행 시간(초) | 중지되기 전까지 노트북 작업을 실행할 수 있는 최대 시간(초)입니다. 최대 실행 시간과 최대 재시도 횟수를 모두 구성한 경우 실행 시간이 각 재시도에 적용됩니다. 이 시간에 작업이 완료되지 않으면 Failed상태로 설정됩니다. | 필드 최대 실행 시간(초). 기본값은 172800 seconds (2 days)입니다. | Studio와 동일합니다. | 파라미터 max\$1runtime\$1in\$1seconds. 기본값은 172800 seconds (2 days)입니다. | 
| 재시도 정책 | 실패 시 취해야 할 작업을 관리하는 재시도 정책 목록입니다. | 지원되지 않음. | 지원되지 않음. | 파라미터 retry\$1policies. 기본값은 None입니다. | 
| Step 또는 StepCollection 종속성 추가 | 작업이 종속되는 Step 또는 StepCollection 이름 또는 인스턴스의 목록. | 지원되지 않음. | 지원되지 않음. | 파라미터 depends\$1on. 기본값은 None입니다. 이를 사용하여 파이프라인 그래프의 단계 간에 명시적 종속성을 정의합니다. | 
| 볼륨 크기 | 훈련 중에 입력 및 출력 데이터를 저장하기 위한 스토리지 볼륨의 GB 단위 크기. | 지원되지 않음. | 지원되지 않음. | 파라미터 volume\$1size. 기본값은 30GB입니다. | 
| 컨테이너 간 트래픽 암호화 | 훈련 컨테이너 간의 트래픽이 훈련 작업에 대해 암호화되는지를 지정하는 플래그입니다. | 해당 없음. 기본적으로 활성화됩니다. | 해당 없음. 기본적으로 활성화됩니다. | 파라미터 encrypt\$1inter\$1container\$1traffic. 기본값은 True입니다. | 
| 작업 구성 암호화 | 노트북 작업 출력, 작업 인스턴스 볼륨 또는 둘 다를 암호화하려는 표시기입니다. | 필드 작업 구성 암호화. 암호화를 선택하려면 이 확인란을 선택하세요. 선택하지 않으면 작업 출력이 계정의 기본 KMS 키로 암호화되며 작업 인스턴스 볼륨은 암호화되지 않습니다. | Studio와 동일합니다. | 지원되지 않음. | 
| 출력 암호화 KMS 키 | 노트북 작업 출력에 사용되는 암호화 키를 사용자 지정하려는 경우 사용할 KMS 키입니다. 이 필드는 작업 구성 암호화를 선택한 경우에만 적용됩니다. | 필드 출력 암호화 KMS 키. 이 필드를 지정하지 않으면 노트북 작업 출력이 기본 Amazon S3 KMS 키를 사용하여 SSE-KMS로 암호화됩니다. 또한 Amazon S3 버킷을 직접 생성하고 암호화를 사용하는 경우 암호화 방법이 보존됩니다. | Studio와 동일합니다. 이 필드에는 새 작업 정의를 만들 때마다 미리 채워지는 사용자 기본값을 설정할 수 있습니다. 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md)을 참조하세요. | 파라미터 s3\$1kms\$1key. 기본값은 None입니다. 지능형 기본값을 허용합니다. | 
| 작업 인스턴스 볼륨 암호화 KMS 키 | 작업 인스턴스 볼륨을 암호화하려는 경우 사용할 KMS 키입니다. 이 필드는 작업 구성 암호화를 선택한 경우에만 적용됩니다. | 필드 작업 인스턴스 볼륨 암호화 KMS 키. | 필드 작업 인스턴스 볼륨 암호화 KMS 키. 이 필드에는 새 작업 정의를 만들 때마다 미리 채워지는 사용자 기본값을 설정할 수 있습니다. 자세한 내용은 [로컬 노트북 기본 옵션 설정](create-notebook-auto-execution-advanced-default.md)을 참조하세요. | 파라미터 volume\$1kms\$1key. 기본값은 None입니다. 지능형 기본값을 허용합니다. | 
| 이 작업을 실행을 위해 가상 사설 클라우드 사용(VPC 사용자용) | 가상 사설 클라우드(VPC)에서 이 작업을 실행하려는 표시기입니다. 보안을 강화하려면 프라이빗 VPC를 사용하는 것이 좋습니다. | 필드 이 작업을 실행을 위해 가상 프라이빗 클라우드 사용. VPC를 사용하려면 이 확인란을 선택하세요. 최소한 다음 VPC 엔드포인트를 생성하여 노트북 작업이 해당 AWS 리소스에 비공개로 연결할 수 있도록 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/create-notebook-auto-execution-advanced.html)VPC를 사용하기로 선택한 경우 다음 옵션에서 하나 이상의 프라이빗 서브넷과 하나 이상의 보안 그룹을 지정해야 합니다. 프라이빗 서브넷을 사용하지 않는 경우 다른 구성 옵션을 고려해야 합니다. 자세한 내용은 [제약 조건 및 고려 사항](notebook-auto-run-constraints.md)에서 지원되지 않는 퍼블릭 VPC 서브넷을 참조하세요. | Studio와 동일합니다. | 해당 사항 없음 | 
| 서브넷(VPC 사용자용) | 사용자 서브넷입니다. 이 필드는 최소 1개에서 최대 5개를 포함해야 하며 제공하는 모든 서브넷은 사설이어야 합니다. 자세한 내용은 [제약 조건 및 고려 사항](notebook-auto-run-constraints.md)에서 지원되지 않는 퍼블릭 VPC 서브넷을 참조하세요. | 필드 서브넷. 이 필드는 기본적으로 Studio 도메인과 연결된 서브넷으로 설정되지만 필요한 경우 이 필드를 변경할 수 있습니다. | 필드 서브넷. 스케줄러는 서브넷을 감지할 수 없으므로 VPC에 구성한 서브넷을 입력해야 합니다. | 파라미터 subnets. 기본값은 None입니다. 지능형 기본값을 허용합니다. | 
| 보안 그룹(VPC 사용자용) | 사용자 보안 그룹입니다. 이 필드는 최소 1개, 최대 15개를 포함해야 합니다. 자세한 내용은 [제약 조건 및 고려 사항](notebook-auto-run-constraints.md)에서 지원되지 않는 퍼블릭 VPC 서브넷을 참조하세요. | 필드 보안 그룹. 이 필드는 기본적으로 도메인 VPC와 연결된 보안 그룹을 사용하지만 필요한 경우 이 필드를 변경할 수 있습니다. | 필드 보안 그룹. 스케줄러는 보안 그룹을 탐지할 수 없으므로 VPC에 구성한 보안 그룹을 입력해야 합니다. | 파라미터 security\$1group\$1ids. 기본값은 None입니다. 지능형 기본값을 허용합니다. | 
| 이름 | 노트북 작업 단계의 이름. | 해당 사항 없음 | 해당 사항 없음 | 파라미터 name. 지정되지 않은 경우 노트북 파일 이름에서 파생됩니다. | 
| 표시 명칭 | 파이프라인 실행 목록에 표시될 작업 이름. | 해당 사항 없음 | 해당 사항 없음 | 파라미터 display\$1name. 기본값은 None입니다. | 
| 설명 | 작업에 대한 설명. | 해당 사항 없음 | 해당 사항 없음 | 파라미터 description. | 

# 노트북 파라미터화
<a name="notebook-auto-run-troubleshoot-override"></a>

새 파라미터 또는 파라미터 재정의를 예약된 노트북 작업에 전달하려면 셀 이후에 새 파라미터 값을 적용하려는 경우 Jupyter Notebook을 선택적으로 수정할 수 있습니다. 파라미터를 전달하면 노트북 작업 실행기는 Papermill에서 적용하는 방법론을 사용합니다. 노트북 작업 실행기는 `parameters` 태그가 지정된 Jupyter 셀을 검색하고 이 셀 바로 뒤에 새 파라미터 또는 파라미터 재정의를 적용합니다. `parameters` 태그가 지정된 셀이 없는 경우 노트북의 시작 부분에 파라미터가 적용됩니다. `parameters` 태그가 지정된 셀이 두 개 이상인 경우 `parameters` 태그가 지정된 첫 번째 셀 다음에 파라미터가 적용됩니다.

노트북의 셀에 `parameters`태그를 지정하려면 다음 단계를 완료하세요.

1. 파라미터화할 셀을 선택합니다.

1. 오른쪽 사이드바에서 **속성 검사기** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/gears.png))을 선택합니다.

1. **태그 추가** 상자에 **parameters**를 입력합니다.

1. **\$1** 기호를 선택합니다.

1. `parameters` 태그가 **셀 태그** 아래에 체크 표시와 함께 나타납니다.이는 태그가 셀에 적용되었음을 의미합니다.

# 노트북에서 Amazon EMR 클러스터에 연결
<a name="scheduled-notebook-connect-emr"></a>

Studio의 Jupyter notebook에서 Amazon EMR 클러스터에 연결하는 경우 추가 설정을 수행해야 할 수 있습니다. 특히 다음 논의에서는 두 가지 문제를 다룹니다.
+ **Amazon EMR 연결 명령에 파라미터 전달** SparkMagic 커널에서는 Papermill이 파라미터를 전달하는 방식과 SparkMagic이 파라미터를 수신하는 방식이 다르기 때문에 Amazon EMR 연결 명령에 전달하는 파라미터가 예상대로 작동하지 않을 수 있습니다. 이 제한을 해결하기 위한 차선책은 파라미터를 환경 변수로 전달하는 것입니다. 이 문제와 차선책에 대한 자세한 내용은 [EMR 연결 명령에 파라미터 전달](#scheduled-notebook-connect-emr-pass-param)섹션을 참조하세요.
+ **사용자 자격 증명을 Kerberos, LDAP 또는 HTTP 기본 인증 Amazon EMR 클러스터에 전달** 대화형 모드에서 Studio는 로그인 자격 증명을 입력할 수 있는 팝업 양식을 통해 자격 증명을 요청합니다. 예약된 비대화형 노트북에서는 AWS Secrets Manager을 통해 전달해야 합니다. 예약된 노트북 작업 AWS Secrets Manager 에서를 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[사용자 자격 증명을 Kerberos, LDAP 또는 HTTP 기본 인증 Amazon EMR 클러스터에 전달](#scheduled-notebook-connect-emr-credentials).

## EMR 연결 명령에 파라미터 전달
<a name="scheduled-notebook-connect-emr-pass-param"></a>

SparkMagic PySpark 및 Spark 커널이 포함된 이미지를 사용하고 있고 EMR 연결 명령을 파라미터화하려면, **추가 옵션** 드롭다운 메뉴의 작업 생성 양식에서 파라미터 필드 대신 **환경 변수** 필드에 파라미터를 입력하세요. Jupyter notebook의 EMR 연결 명령이 이러한 파라미터를 환경 변수로 전달해야 합니다. 예를 들어 작업을 생성할 때 `cluster-id`를 환경 변수로 전달한다고 가정해 보겠습니다. EMR 연결 명령은 다음 예시와 같은 형식이어야 합니다.

```
%%local
import os
```

```
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None
```

SparkMagic과 Papermill의 요구 사항을 충족하려면 이 차선책이 필요합니다. 배경 컨텍스트의 경우 SparkMagic 커널은 사용자가 정의한 모든 로컬 변수와 함께 `%%local`매직 명령이 함께 제공될 것으로 예상합니다. 하지만 Papermill은 재정의와 함께 `%%local`매직 명령을 전달하지 않습니다. 이 Papermill 제한을 해결하려면 **환경 변수** 필드에 파라미터를 환경 변수로 입력해야 합니다.

## 사용자 자격 증명을 Kerberos, LDAP 또는 HTTP 기본 인증 Amazon EMR 클러스터에 전달
<a name="scheduled-notebook-connect-emr-credentials"></a>

Kerberos, LDAP 또는 HTTP 기본 인증 인증을 사용하는 Amazon EMR 클러스터에 대한 보안 연결을 설정하려면를 사용하여 연결 명령 AWS Secrets Manager 에 사용자 자격 증명을 전달합니다. Secrets Manager 보안 암호를 생성하는 방법에 대한 자세한 내용은 [AWS Secrets Manager 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)을 참조하세요. 보안 암호에는 사용자 이름과 암호가 포함되어야 합니다. 다음 예시와 같이 `--secrets`인수와 함께 암호를 전달합니다.

```
%sm_analytics emr connect --cluster-id j_abcde12345 
    --auth Kerberos 
    --secret aws_secret_id_123
```

관리자는 특수 태그를 기반으로 액세스를 할당하는 ABAC(속성 기반 액세스 제어) 방법을 사용하여 유연한 액세스 정책을 설정할 수 있습니다. 유연한 액세스를 설정하여 계정의 모든 사용자에 대한 단일 암호 또는 각 사용자에 대한 암호를 만들 수 있습니다. 다음 코드 샘플은 이러한 시나리오를 보여줍니다.

**계정 내 모든 사용자를 위한 단일 비밀번호를 생성합니다.**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------

**각 사용자마다 다른 비밀번호를 생성합니다.**

다음 예시와 같이 `PrincipleTag`태그를 사용하여 사용자별로 다른 보안 암호를 생성할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"
            },
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/user-identity": "${aws:PrincipalTag/user-identity}"
                }
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------

# Amazon SageMaker Studio의 노트북 작업 세부 정보
<a name="track-jobs-jobdefs"></a>

SageMaker 노트북 작업 대시보드는 예약한 작업 정의를 구성하고 작업 정의에서 실행되는 실제 작업을 추적하는 데 도움이 됩니다. 노트북 작업을 예약할 때 이해해야 할 두 가지 중요한 개념은 작업 정의와 작업 실행입니다.**** 작업 정의는 특정 노트북을 실행하도록 설정하는 일정입니다. 예를 들어, 수요일마다 노트북 XYZ.iPynb를 실행하는 작업 정의를 생성할 수 있습니다. 이 작업 정의는 이번 주 수요일, 다음 주 수요일, 그 다음 수요일 등에 발생하는 실제 작업 실행을 시작합니다.

**참고**  
SageMaker Python SDK 노트북 작업 단계는 작업 정의를 만들지 않습니다. 하지만 노트북 작업 대시보드에서 작업을 볼 수 있습니다. JupyterLab 환경에서 작업을 예약하는 경우 작업 및 작업 정의를 모두 사용할 수 있습니다.

인터페이스에는 기존 작업 정의와 작업 실행을 추적하는 데 도움이 되는 두 개의 기본 탭이 있습니다.
+ **노트북 작업** 탭: 이 탭에는 온디맨드 작업 및 작업 정의에서 실행한 모든 작업 목록이 표시됩니다. 이 탭에서 단일 작업 실행의 세부 정보에 직접 액세스할 수 있습니다. 예를 들어, 두 번의 수요일 전에 발생한 단일 작업 실행을 볼 수 있습니다.
+ **노트북 작업 정의** 탭: 이 탭에는 모든 작업 정의 목록이 표시됩니다. 이 탭에서 단일 작업 정의의 세부 정보에 직접 액세스할 수 있습니다. 예를 들어 매주 수요일에 XYZ.iPynb를 실행하기 위해 만든 일정을 볼 수 있습니다.

**노트북 작업** 탭에 대한 자세한 내용은 [노트북 작업 보기](view-notebook-jobs.md)섹션을 참조하세요.

**노트북 작업 정의** 탭에 대한 자세한 내용은 [노트북 작업 정의 보기](view-def-detail-notebook-auto-run.md)섹션을 참조하세요.

# 노트북 작업 보기
<a name="view-notebook-jobs"></a>

**참고**  
Studio UI에서 노트북 작업을 예약한 경우 노트북 작업을 자동으로 볼 수 있습니다. SageMaker Python SDK를 사용하여 노트북 작업을 예약하는 경우 노트북 작업 단계를 만들 때 추가 태그를 제공해야 합니다. 자세한 내용은 [Studio UI 대시보드에서 노트북 작업 보기](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)을 참조하세요.

다음 주제에서는 **노트북 작업** 탭과 단일 노트북 작업의 세부 정보를 보는 방법에 대한 정보를 제공합니다. **노트북 작업** 탭(Studio 도구 모음에서 **노트북 작업 만들기** 아이콘(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/notebook-schedule.png))을 선택하여 액세스)에는 온디맨드 작업의 기록과 만든 작업 정의에서 실행되는 모든 작업이 표시됩니다. 이 탭은 온디맨드 작업을 생성한 후에 열리거나, 이 탭에서 직접 과거 및 현재 작업의 기록을 볼 수도 있습니다. 작업에 대해 **작업 이름**을 선택하면 해당 **작업 세부 정보** 페이지에서 단일 작업에 대한 세부 정보를 볼 수 있습니다. **작업 세부 정보보** 페이지에 대한 자세한 내용은 다음 [단일 작업 보기](#view-jobs-detail-notebook-auto-run)섹션을 참조하세요.

**노트북 작업** 탭에는 각 작업에 대한 다음 정보가 포함됩니다.
+ **출력 파일**: 출력 파일의 가용성을 표시합니다. 이 열에는 다음 중 하나가 포함될 수 있습니다.
  + 다운로드 아이콘(![\[Cloud icon with downward arrow, representing download or cloud storage functionality.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/File_download.png)): 출력 노트북과 로그를 다운로드할 수 있습니다. 다운로드하려면 이 버튼을 선택합니다. 파일을 만든 후 오류가 발생한 경우에도 실패한 작업이 여전히 출력 파일을 생성할 수 있습니다. 이 경우 출력 노트북을 보고 실패 지점을 식별하는 것이 좋습니다.
  + **노트북** 및 **출력 로그** 링크: 노트북과 출력 로그가 다운로드됩니다. 링크를 선택하여 콘텐츠를 확인합니다.
  + (공백): 사용자가 작업을 중지했거나 출력 파일을 생성하기 전에 작업 실행 중 오류가 발생했습니다. 예를 들어, 네트워크 장애로 인해 작업이 시작되지 않을 수 있습니다.

  출력 노트북은 노트북의 모든 셀을 실행한 결과이며, 추가한 새 파라미터나 재정의한 파라미터 또는 환경 변수도 모두 포함합니다. 출력 로그는 실패한 작업의 문제를 해결하는 데 도움이 되도록 작업 실행의 세부 정보를 캡처합니다.
+ **생성 시간**: 온디맨드 작업 또는 예약된 작업이 생성된 시간입니다.
+ **상태**: 작업의 현재 상태로, 다음 중 하나에 해당합니다.
  + **진행 중**: 작업이 실행 중입니다.
  + **실패**: 구성 또는 노트북 로직 오류로 인해 작업이 실패했습니다.
  + **중지됨**: 사용자가 작업을 중지했습니다.
  + **완료**: 작업이 완료되었습니다.
+ **작업**: 이 열에서는 인터페이스에서 직접 작업을 중지하거나 제거하는 데 도움이 되는 단축키를 제공합니다.

## 단일 작업 보기
<a name="view-jobs-detail-notebook-auto-run"></a>

**노트북 작업** 탭에서 작업 이름을 선택하여 특정 작업에 대한 **작업 세부 정보** 페이지를 볼 수 있습니다. **작업 세부 정보** 페이지에는 **작업 생성** 양식에 제공한 모든 세부 정보가 포함되어 있습니다. 이 페이지에서는 작업 정의를 생성할 때 지정한 설정을 확인할 수 있습니다.

또한 페이지 자체에서 다음 작업을 수행하는 데 도움이 되는 단축키에 액세스할 수 있습니다.
+ **작업 삭제**: **노트북 작업** 탭에서 작업을 제거합니다.
+ **작업 중지**: 실행 중인 작업을 중지합니다.

# 노트북 작업 정의 보기
<a name="view-def-detail-notebook-auto-run"></a>

**참고**  
SageMaker Python SDK로 노트북 작업을 예약한 경우 이 섹션을 건너뛰세요. Studio 또는 로컬 JupyterLab 환경에서 만든 노트북 작업만 작업 정의를 만듭니다. 따라서 SageMaker Python SDK로 노트북 작업을 만든 경우 노트북 작업 대시보드에 작업 정의가 표시되지 않습니다. 하지만 [노트북 작업 보기](view-notebook-jobs.md)에 설명된 대로 노트북 작업을 볼 수 있습니다.

작업 정의를 생성할 때 작업에 대한 일정을 생성합니다. **노트북 작업 정의** 탭에는 이러한 일정과 특정 노트북 작업 정의에 대한 정보가 나열됩니다. 예를 들어 1분마다 특정 노트북을 실행하는 작업 정의를 생성할 수 있습니다. 이 작업 정의가 활성화되면 **노트북 작업** 탭에 1분마다 새 작업이 표시됩니다. 다음 페이지에서는 **노트북 작업 정의** 탭과 노트북 작업 정의를 보는 방법에 대한 정보를 제공합니다.

**노트북 작업 정의** 탭에는 모든 작업 정의가 포함된 대시보드가 표시되며 입력 노트북, 작성 시간, 일정 및 각 작업 정의의 상태가 포함됩니다. **상태** 열에는 다음 값 중 하나가 포함됩니다.
+ **일시 중지됨**: 작업 정의를 일시 중지했습니다. 정의를 다시 시작할 때까지 Studio는 작업을 시작하지 않습니다.
+ **활성**: 일정이 켜져 있으며 Studio는 지정된 일정에 따라 노트북을 실행할 수 있습니다.

또한 **작업** 열에는 인터페이스에서 직접 다음 작업을 수행하는 데 도움이 되는 단축키가 제공됩니다.
+ 일시 중지: 작업 정의를 일시 중지합니다. 정의를 다시 시작할 때까지 Studio는 작업을 시작하지 않습니다.
+ 삭제: **노트북 작업 정의** 탭에서 작업 정의를 제거합니다.
+ 재개: 일시 중지된 작업 정의를 계속하여 작업을 시작할 수 있도록 합니다.

작업 정의를 생성했지만 작업이 시작되지 않는 경우 [문제 해결 가이드](notebook-auto-run-troubleshoot.md)의 [작업 정의가 작업을 생성하지 않음](notebook-auto-run-troubleshoot.md#notebook-auto-run-troubleshoot-no-jobs)섹션을 참조하세요.

## 단일 작업 정의 보기
<a name="view-job-definition-detail-page"></a>

**노트북 작업 정의** 탭에서 작업 정의 이름을 선택하면 작업 정의에 대한 특정 세부 정보를 볼 수 있는 **작업 정의** 페이지가 나타납니다. 이 페이지에서는 작업 정의를 생성할 때 지정한 설정을 확인할 수 있습니다. 작업 정의에서 생성된 작업이 보이지 않는 경우 [문제 해결 가이드](notebook-auto-run-troubleshoot.md)의 [작업 정의가 작업을 생성하지 않음](notebook-auto-run-troubleshoot.md#notebook-auto-run-troubleshoot-no-jobs)섹션을 참조하세요.

이 페이지에는 이 작업 정의에서 실행되는 작업을 나열하는 섹션도 있습니다. 모든 작업 정의의 모든 작업을 조합한 **노트북 작업** 탭에서 작업을 보는 것보다 **작업 정의** 페이지에서 작업을 보는 것이 작업을 구성하는 데 더 생산적인 방법일 수 있습니다.

또한 이 페이지는 다음 작업에 대한 단축키를 제공합니다.
+ **일시 중지/재개**: 작업 정의를 일시 중지하거나 일시 중지된 정의를 다시 시작합니다. 참고로 이 정의에 대한 작업이 현재 실행 중인 경우 Studio는 작업을 중지하지 않습니다.
+ **실행**: 이 작업 정의에서 단일 온디맨드 작업을 실행합니다. 또한 이 옵션을 사용하면 작업을 시작하기 전에 노트북에 다른 입력 파라미터를 지정할 수 있습니다.
+ **작업 정의 편집**: 작업 정의의 일정을 변경합니다. 다른 시간 간격을 선택하거나 CRON 구문을 사용하여 사용자 지정 일정을 선택할 수 있습니다.
+ **작업 정의 삭제**: **노트북 작업 정의** 탭에서 작업 정의를 제거합니다. 참고로 이 정의에 대한 작업이 현재 실행 중인 경우 Studio는 작업을 중지하지 않습니다.

# 문제 해결 가이드
<a name="notebook-auto-run-troubleshoot"></a>

예약된 노트북 작업이 실행될 때 발생할 수 있는 오류를 디버깅하려면 이 문제 해결 가이드를 참조하세요.

## 작업 정의가 작업을 생성하지 않음
<a name="notebook-auto-run-troubleshoot-no-jobs"></a>

작업 정의가 작업을 시작하지 않으면 Amazon SageMaker Studio의 왼쪽 탐색 모음에 있는 **작업** 섹션에 노트북 또는 훈련 작업이 표시되지 않을 수 있습니다. 이 경우 Studio의 왼쪽 탐색 모음에 있는 **Pipelines** 섹션에서 오류 메시지를 찾을 수 있습니다. 각 노트북 또는 훈련 작업 정의는 실행 파이프라인에 속합니다. 다음은 노트북 작업을 시작하지 못하는 일반적인 원인입니다.

**권한 누락**
+ 작업 정의에 할당된 역할이 Amazon Eventbridge와 신뢰 관계를 갖지 않습니다. 즉, EventBridge가 역할을 맡을 수 없습니다.
+ 작업 정의에 할당된 역할에 `SageMaker AI:StartPipelineExecution`호출 권한이 없습니다.
+ 작업 정의에 할당된 역할에 `SageMaker AI:CreateTrainingJob`호출 권한이 없습니다.

**EventBridge 할당량 초과**

다음 예시와 같은 `Put*`오류가 표시되면 EventBridge 할당량을 초과한 것입니다. 이를 해결하기 위해 사용하지 않는 EventBridge 실행 AWS Support 을 정리하거나 할당량 증가를 요청할 수 있습니다.

```
LimitExceededException) when calling the PutRule operation: 
The requested resource exceeds the maximum number allowed
```

EventBridge 할당량에 대한 자세한 내용은 [Amazon EventBridge 할당량](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html)을 참조하세요.

**파이프라인 할당량 한도 초과**

다음 예시와 같은 오류가 표시되면 실행할 수 있는 파이프라인 수를 초과한 것입니다. 이 문제를 해결하려면 계정에서 사용하지 않는 파이프라인을 정리하거나 할당량을 늘리도록 AWS Support 을 요청할 수 있습니다.

```
ResourceLimitExceeded: The account-level service limit 
'Maximum number of pipelines allowed per account' is XXX Pipelines, 
with current utilization of XXX Pipelines and a request delta of 1 Pipelines.
```

파이프라인 할당량에 대한 자세한 내용은 [Amazon SageMaker 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)을 참조하세요.

**훈련 작업 한도 초과**

다음 예시와 같은 오류가 표시되면 실행할 수 있는 훈련 작업 수를 초과한 것입니다. 이 문제를 해결하려면 계정의 훈련 작업 수를 줄이거나 할당량 AWS Support 증가를 요청하세요.

```
ResourceLimitExceeded: The account-level service limit 
'ml.m5.2xlarge for training job usage' is 0 Instances, with current 
utilization of 0 Instances and a request delta of 1 Instances. 
Please contact AWS support to request an increase for this limit.
```

훈련 작업 할당량에 대한 자세한 내용은 [Amazon SageMaker 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)을 참조하세요.

## SparkMagic 노트북에서 자동 시각화가 비활성화됨
<a name="notebook-auto-run-troubleshoot-visualization"></a>

노트북에서 SparkMagic PySpark 커널을 사용하고 노트북을 노트북 작업으로 실행하는 경우 출력에서 자동 시각화가 비활성화되어 있는 것을 확인할 수 있습니다. 자동 시각화를 켜면 커널이 중단되므로 노트북 작업 실행기는 이 문제의 해결 방법으로 현재 자동 시각화를 비활성화합니다.

# 제약 조건 및 고려 사항
<a name="notebook-auto-run-constraints"></a>

노트북 작업을 성공적으로 완료하려면 다음 제약 조건을 검토하세요. Studio는 Papermill을 사용하여 노트북을 실행합니다. Papermill의 요구 사항에 맞게 Jupyter notebook을 업데이트해야 할 수도 있습니다. 또한 LCC 스크립트의 내용에는 제한이 있으며 VPC 구성과 관련하여 이해해야 할 중요한 세부 정보가 있습니다.

## JupyterLab 버전
<a name="notebook-auto-run-constraints-jpt"></a>

JupyterLab 버전 4.0이 지원됩니다.

## 커널 재시작이 필요한 패키지 설치
<a name="notebook-auto-run-constraints-pmill-pkg"></a>

Papermill은 커널 재시작이 필요한 패키지를 설치하기 위한 `pip install`호출을 지원하지 않습니다. 이 경우 초기화 스크립트에서 `pip install`을 사용하세요. 커널을 다시 시작할 필요가 없는 패키지 설치의 경우에도 `pip install`노트북에 포함시킬 수 있습니다.

## Jupyter에 등록된 커널 및 언어 이름
<a name="notebook-auto-run-constraints-pmill-names"></a>

Papermill은 특정 커널 및 언어의 번역기를 등록합니다. 자체 인스턴스 가져오는 경우(BYOI) 다음 스니펫에 표시된 대로 표준 커널 이름을 사용합니다.

```
papermill_translators.register("python", PythonTranslator)
papermill_translators.register("R", RTranslator)
papermill_translators.register("scala", ScalaTranslator)
papermill_translators.register("julia", JuliaTranslator)
papermill_translators.register("matlab", MatlabTranslator)
papermill_translators.register(".net-csharp", CSharpTranslator)
papermill_translators.register(".net-fsharp", FSharpTranslator)
papermill_translators.register(".net-powershell", PowershellTranslator)
papermill_translators.register("pysparkkernel", PythonTranslator)
papermill_translators.register("sparkkernel", ScalaTranslator)
papermill_translators.register("sparkrkernel", RTranslator)
papermill_translators.register("bash", BashTranslator)
```

## 파라미터 및 환경 변수 한도
<a name="notebook-auto-run-constraints-var-limits"></a>

**파라미터 및 환경 변수 한도.** 노트북 작업을 생성하면 지정한 파라미터와 환경 변수가 전달됩니다. 최대 100개의 파라미터를 전달할 수 있습니다. 각 파라미터 이름은 최대 256자까지 가능하며 관련 값은 최대 2500자까지 입력할 수 있습니다. 환경 변수를 전달하는 경우 최대 28개의 변수를 전달할 수 있습니다. 변수 이름과 관련 값은 최대 512자까지 입력할 수 있습니다. 29개 이상의 환경 변수가 필요한 경우 사용할 수 있는 환경 변수 수에 제한이 없는 초기화 스크립트에 추가 환경 변수를 사용하세요.

## 작업 및 작업 정의 보기
<a name="notebook-auto-run-constraints-view-job"></a>

**작업 및 작업 정의 보기.** JupyterLab 노트북의 Studio UI에서 노트북 작업을 예약하는 경우 Studio UI에서 [노트북 작업](https://docs.aws.amazon.com/sagemaker/latest/dg/view-notebook-jobs.html)과 [노트북 작업 정의를 볼](https://docs.aws.amazon.com/sagemaker/latest/dg/view-def-detail-notebook-auto-run.html) 수 있습니다. SageMaker Python SDK를 사용하여 노트북 작업을 예약한 경우 작업만 볼 수 있습니다. SageMaker Python SDK 노트북 작업 단계는 작업 정의를 만들지 않습니다. 작업을 보려면 노트북 작업 단계 인스턴스에 추가 태그를 제공해야 합니다. 자세한 내용은 [Studio UI 대시보드에서 노트북 작업 보기](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)을 참조하세요.

## 이미지
<a name="notebook-auto-run-constraints-image"></a>

Studio에서 노트북 작업을 실행하는지 파이프라인에서 SageMaker Python SDK 노트북 작업 단계를 실행하는지에 따라 이미지 제약 조건을 관리해야 합니다.

### SageMaker AI 노트북 작업에 대한 이미지 제약 조건(Studio)
<a name="notebook-auto-run-constraints-image-studio"></a>

**이미지 및 커널 지원.** 노트북 작업을 시작하는 드라이버는 다음을 가정합니다.
+ 기본 Python 런타임 환경은 Studio 또는 나만의 이미지 가져오기(BYOI)에 설치되며 쉘의 기본값입니다.
+ 기본 Python 런타임 환경에는 커널 사양이 올바르게 구성된 Jupyter 클라이언트가 포함되어 있습니다.
+ 기본 Python 런타임 환경에는 노트북 작업이 시스템 종속성을 설치할 수 있도록 하는 `pip`함수가 포함되어 있습니다.
+ 여러 환경이 있는 이미지의 경우 노트북별 패키지를 설치하기 전에 초기화 스크립트를 적절한 커널별 환경으로 전환해야 합니다. 커널 Python 런타임 환경을 구성한 후 커널 런타임 환경과 다른 경우 기본 Python 런타임 환경으로 다시 전환해야 합니다.

노트북 작업을 시작하는 드라이버는 Bash 스크립트이며, Bash v4는 /bin/bash에서 사용할 수 있어야 합니다.

**나만의 이미지 가져오기(BYOI)에 대한 루트 권한.** 나만의 Studio 이미지에 대해 루트 사용자 또는 `sudo`액세스를 통해 루트 권한이 있어야 합니다. 루트 사용자는 아니지만 `sudo`를 통해 루트 권한에 액세스하는 경우 **1000/100**을 `UID/GID`로 사용하세요.

### SageMaker AI Python SDK 노트북 작업에 대한 이미지 제약 조건
<a name="notebook-auto-run-constraints-image-sdk"></a>

노트북 작업 단계는 다음 이미지를 지원합니다.
+ [Studio Classic 노트북에 사용할 수 있는 Amazon SageMaker 이미지](notebooks-available-images.md)에 나열된 SageMaker Distribution 이미지
+ 이전 목록의 SageMaker Distribution 이미지를 기반으로 하는 사용자 지정 이미지. [SageMaker Distribution 이미지](https://github.com/aws/sagemaker-distribution)를 기본으로 사용합니다.
+ 노트북 작업 종속성(예: [sagemaker-headless-execution-driver](https://pypi.org/project/sagemaker-headless-execution-driver/))이 사전 설치된 사용자 지정 이미지(BYOI) 이미지는 다음 요구 사항을 충족해야 합니다.
  + 이미지에는 노트북 작업 종속성이 사전 설치되어 있어야 합니다.
  + 기본 Python 런타임 환경이 설치되어 있으며 쉘 환경에서 기본값이어야 합니다.
  + 기본 Python 런타임 환경에는 커널 사양이 올바르게 구성된 Jupyter 클라이언트가 포함되어 있습니다.
  + 루트 사용자 또는 `sudo` 액세스를 통해 루트 권한이 있어야 합니다. 루트 사용자는 아니지만 `sudo`를 통해 루트 권한에 액세스하는 경우 **1000/100**을 `UID/GID`로 사용하세요.

## 작업 생성 시 사용되는 VPC 서브넷
<a name="notebook-auto-run-constraints-vpc"></a>

VPC를 사용하는 경우 Studio는 프라이빗 서브넷을 사용하여 작업을 생성합니다. 1\$15개의 프라이빗 서브넷 및 1\$115개의 보안 그룹을 지정합니다.

프라이빗 서브넷이 있는 VPC를 사용하는 경우 노트북 작업을 종속 서비스 또는 리소스에 연결할 수 있도록 다음 옵션 중 하나를 선택해야 합니다.
+ 작업에 인터페이스 VPC 엔드포인트를 지원하는 AWS 서비스에 대한 액세스 권한이 필요한 경우 서비스에 연결할 엔드포인트를 생성합니다. 인터페이스 엔드포인트를 지원하는 서비스 목록은 [AWS 와 통합되는 서비스를 AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) 참조하세요. 인터페이스 VPC 엔드포인트 생성에 대한 자세한 내용은 [인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스 액세스를 참조하세요](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). 최소한 Amazon S3 VPC 엔드포인트 게이트웨이가 제공되어야 합니다.
+ 노트북 작업이 인터페이스 VPC 엔드포인트를 지원하지 않는 AWS 서비스 또는 외부 리소스에 액세스해야 하는 경우 NAT 게이트웨이를 AWS생성하고 아웃바운드 연결을 허용하도록 보안 그룹을 구성합니다. VPC용 NAT 게이트웨이 설정에 대한 자세한 내용은 [Amazon 가상 사설 클라우드 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)의 퍼블릭 및 프라이빗 서브넷이 있는 VPC(NAT)를 참조하세요.**

## 서비스 한도
<a name="notebook-auto-run-constraints-service-limit"></a>

노트북 작업 스케줄러는 Pipelines, SageMaker 훈련 및 Amazon EventBridge 서비스를 기반으로 구축되므로 노트북 작업에는 서비스별 할당량이 적용됩니다. 이 할당량을 초과하면 해당 서비스와 관련된 오류 메시지가 표시될 수 있습니다. 예를 들어 한 번에 실행할 수 있는 파이프라인 수와 단일 이벤트 버스에 설정할 수 있는 규칙 수에는 제한이 있습니다. SageMaker AI 할당량에 대한 자세한 내용은 [Amazon SageMaker 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)을 참조하세요. EventBridge 할당량에 대한 자세한 내용은 [Amazon EventBridge 할당량](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html)을 참조하세요.

# SageMaker 노트북 작업 요금
<a name="notebook-auto-run-pricing"></a>

노트북 작업을 예약하면 Jupyter notebook이 SageMaker 훈련 인스턴스에서 실행됩니다. **작업 생성** 양식에서 **이미지**와 **커널**을 선택하면 양식에 사용 가능한 컴퓨팅 유형 목록이 제공됩니다. 작업 정의에서 실행되는 모든 노트북 작업의 사용 기간을 합산하여 선택한 컴퓨팅 유형에 대한 요금이 부과됩니다. 컴퓨팅 유형을 지정하지 않는 경우 SageMaker AI는 사용자에게 `ml.m5.large`의 기본 Amazon EC2 인스턴스 유형을 할당합니다. 컴퓨팅 유형별 SageMaker AI 요금 내역은 [Amazon SageMaker AI Pricing](https://aws.amazon.com/sagemaker/pricing)을 참조하세요.

# ML 워크플로 예약
<a name="workflow-scheduling"></a>

Amazon SageMaker AI를 사용하면 데이터세트를 만들고, 데이터 변환을 수행하고, 데이터에서 모델을 구축하고, 추론을 위해 모델을 엔드포인트에 배포할 때 전체 ML 워크플로를 관리할 수 있습니다. 워크플로 단계의 하위 집합을 주기적으로 수행하는 경우 일정에 따라 이러한 단계를 실행하도록 선택할 수도 있습니다. 예를 들어 SageMaker Canvas에서 매시간 새 데이터에 대한 변환을 실행하도록 작업을 예약할 수 있습니다. 또 다른 시나리오에서는 배포된 모델의 모델 드리프트를 모니터링하기 위해 주간 작업을 예약할 수 있습니다. 시간 간격과 관계없이 반복 일정을 지정할 수 있습니다. 초, 분, 일, 주, 월마다 또는 매월 세 번째 금요일 오후 3시에 반복할 수 있습니다.

**다음 시나리오에는 사용 사례에 따라 사용할 수 있는 옵션이 요약되어 있습니다.**
+ 사용 사례 1: **노코드 환경에서 ML 워크플로를 빌드하고 예약합니다**. 초보자 또는 SageMaker AI를 처음 사용하는 사람의 경우 Amazon SageMaker Canvas를 사용하여 ML 워크플로를 구축하고 Canvas UI 기반 스케줄러를 사용하여 예약된 실행을 만들 수 있습니다.
+ 사용 사례 2: **단일 Jupyter Notebook에서 워크플로를 빌드하고 노코드 스케줄러를 사용합니다**. 숙련된 ML 실무자는 코드를 사용하여 Jupyter Notebook에서 ML 워크플로를 빌드하고 노트북 작업 위젯에서 사용할 수 있는 노코드 예약 옵션을 사용할 수 있습니다. ML 워크플로가 여러 Jupyter Notebook으로 구성된 경우 사용 사례 3에 설명된 Pipelines Python SDK의 예약 기능을 사용할 수 있습니다.
+ 사용 사례 3: **Pipelines을 사용하여 ML 워크플로를 빌드하고 예약합니다**. 고급 사용자는 Pipelines에서 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable), Amazon SageMaker Pipelines 시각적 편집기 또는 Amazon EventBridge 예약 옵션을 사용할 수 있습니다. Amazon EMR과 같은 다양한 SageMaker AI 기능 및 AWS 서비스를 사용하는 작업을 포함하는 단계로 구성된 ML 워크플로를 구축할 수 있습니다.


| 설명자 | 사용 사례 1 | 사용 사례 2 | 사용 사례 3 | 
| --- | --- | --- | --- | 
| SageMaker AI 기능 | Amazon SageMaker Canvas 데이터 처리 및 ML 워크플로 예약 | 노트북 작업 일정 위젯(UI) | Pipelines Python SDK 예약 옵션 | 
| 설명 | Amazon SageMaker Canvas를 사용하면 데이터 처리 단계의 자동 실행을 예약할 수 있고 별도의 절차에서 자동 데이터세트 업데이트를 예약할 수 있습니다. 특정 데이터세트가 업데이트될 때마다 배치 예측을 실행하는 구성을 설정하여 전체 ML 워크플로를 간접적으로 예약할 수도 있습니다. 자동 데이터 처리 및 데이터세트 업데이트 모두에 대해 SageMaker Canvas는 시작 시간과 날짜 및 실행 간 시간 간격(또는 데이터 처리 단계를 예약하는 경우 cron 표현식)을 선택하는 기본 양식을 제공합니다. 데이터 처리 단계를 예약하는 방법에 대한 자세한 내용은 [새 데이터를 자동으로 처리하는 일정 만들기](canvas-data-export-schedule-job.md) 섹션을 참조하세요. 데이터세트 및 배치 예측 업데이트를 예약하는 방법에 대한 자세한 내용은 [자동화를 관리하는 방법](canvas-manage-automations.md) 섹션을 참조하세요. | 단일 Jupyter Notebook에서 데이터 처리 및 파이프라인 워크플로를 빌드한 경우 노트북 작업 위젯을 사용하여 필요에 따라 또는 일정에 따라 노트북을 실행할 수 있습니다. 노트북 작업 위젯에는 컴퓨팅 유형, 실행 일정 및 선택적 사용자 지정 설정을 지정하는 기본 양식이 표시됩니다. 시간 기반 간격을 선택하거나 cron 표현식을 삽입하여 실행 일정을 정의합니다. 위젯은 Studio에 자동으로 설치되거나 추가 설치를 수행하여 로컬 JupyterLab 환경에서 이 기능을 사용할 수 있습니다. 노트북 작업에 대한 자세한 정보는 [SageMaker 노트북](notebook-auto-run.md)에서 확인하세요. | Pipelines으로 ML 워크플로를 구현한 경우 SageMaker SDK의 예약 기능을 사용할 수 있습니다. 파이프라인에는 미세 조정, 데이터 처리 및 배포와 같은 단계가 포함될 수 있습니다. Pipelines은 파이프라인을 예약하는 두 가지 방법을 지원합니다. Amazon EventBridge 규칙을 만들거나 SageMaker SDK [PipelineSchedule](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.triggers.PipelineSchedule) 구성기 또는 Amazon SageMaker Pipelines 시각적 편집기를 사용하여 일정을 정의할 수 있습니다. Pipelines에서 사용 가능한 예약 옵션에 대한 자세한 내용은 [파이프라인 실행 예약](pipeline-eventbridge.md) 섹션을 참조하세요. | 
| 최적화 대상 | SageMaker Canvas ML 워크플로에 대한 예약 옵션을 제공합니다. | Jupyter Notebook 기반 ML 워크플로에 대한 UI 기반 예약 옵션을 제공합니다. | ML 워크플로에 대한 SageMaker SDK 또는 EventBridge 예약 옵션을 제공합니다. | 
| 고려 사항 | Canvas 노코드 프레임워크를 사용하여 워크플로를 예약할 수 있지만 데이터세트 업데이트 및 배치 변환 업데이트는 최대 5GB의 데이터를 처리할 수 있습니다. | 동일한 작업에서 UI 기반 예약 양식을 사용하여 하나의 노트북을 예약할 수 있지만 여러 노트북을 예약할 수는 없습니다. 여러 노트북을 예약하려면 사용 사례 3에 설명된 Pipelines SDK 코드 기반 솔루션을 사용합니다. | Pipelines에서 제공하는 고급(SDK 기반) 예약 기능을 사용할 수 있지만 UI 기반 옵션 메뉴에서 선택하는 대신 API 설명서를 참조하여 올바른 옵션을 지정해야 합니다. | 
| 권장 환경 | Amazon SageMaker Canvas | Studio, 로컬 JupyterLab 환경 | Studio, 로컬 JupyterLab 환경, 코드 편집기 | 

## 추가 리소스
<a name="workflow-scheduling-addit"></a>

**SageMaker AI는 워크플로 예약을 위해 다음과 같은 추가 옵션을 제공합니다.**
+ [What is Amazon EventBridge Scheduler?](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html). 이 섹션에서 설명하는 예약 옵션에는 SageMaker Canvas, Studio 및 SageMaker AI Python SDK에서 사용할 수 있는 사전 구축된 옵션이 포함되어 있습니다. 모든 옵션은 Amazon EventBridge의 기능을 확장하며 EventBridge를 사용하여 사용자 지정 예약 솔루션을 만들 수도 있습니다.
+ [특성 프로세서 파이프라인의 일정 예약 및 이벤트 기반 실행](feature-store-feature-processor-schedule-pipeline.md). Amazon SageMaker 특성 저장소 특성 처리를 사용하면 일정대로 또는 다른 AWS 서비스 이벤트의 결과로 특성 처리 파이프라인을 실행하도록 구성할 수 있습니다.

# AWS Batch SageMaker AI 훈련 작업에 대한 지원
<a name="training-job-queues"></a>

[AWS Batch 작업 대기열](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html)은 컴퓨팅 리소스에서 실행되기 전에 제출된 작업을 저장하고 우선순위를 지정합니다. SageMaker AI 훈련 작업을 작업 대기열에 제출하여에서 제공하는 서버리스 작업 예약 및 우선순위 지정 도구를 활용할 수 있습니다 AWS Batch.

## 작동 방식
<a name="training-job-queues-how-it-works"></a>

다음 단계에서는 SageMaker AI 훈련 작업에서 AWS Batch 작업 대기열을 사용하는 방법의 워크플로를 설명합니다. 자세한 자습서 및 예시 노트북은 [시작하기](#training-job-queues-get-started) 섹션을 참조하세요.
+  AWS Batch 및 필요한 권한을 설정합니다. 자세한 내용은 *AWS Batch 사용 설명서*에서 [AWS Batch설정](https://docs.aws.amazon.com/batch/latest/userguide/get-set-up-for-aws-batch.html)을 참조하세요.
+ 콘솔에서 또는를 사용하여 AWS CLI다음 AWS Batch 리소스를 생성합니다.
  + [서비스 환경](https://docs.aws.amazon.com/batch/latest/userguide/service-environments.html) - SageMaker AI와 통합하기 위한 구성 파라미터를 포함합니다.
  + [SageMaker AI 훈련 작업 대기열](https://docs.aws.amazon.com/batch/latest/userguide/create-sagemaker-job-queue.html) - SageMaker AI와 통합하여 훈련 작업을 제출합니다.
+ SageMaker AI 훈련 작업에 대해 훈련 컨테이너 이미지와 같은 세부 정보 및 요청을 구성합니다. 훈련 작업을 AWS Batch 대기열에 제출하려면 AWS CLI AWS SDK for Python (Boto3)또는 SageMaker AI Python SDK를 사용할 수 있습니다.
+ 훈련 작업을 작업 대기열에 제출합니다. 다음 옵션을 사용하여 작업을 제출할 수 있습니다.
  +  AWS Batch [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API를 사용합니다.
  + SageMaker AI Python SDK에서 [`aws_batch` 모듈](https://github.com/aws/sagemaker-python-sdk/tree/master/src/sagemaker/aws_batch)을 가져옵니다. TrainingQueue 객체와 모델 훈련 객체(예: 예측기 또는 ModelTrainer)를 생성한 후 `queue.submit()` 메서드를 사용하여 훈련 작업을 TrainingQueue에 제출할 수 있습니다.
+ 작업을 제출한 후 콘솔, AWS Batch [DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) API 또는 SageMaker AI [DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) API를 AWS Batch 사용하여 작업 대기열 및 작업 상태를 확인합니다.

## 비용 및 가용성
<a name="training-job-queues-cost-availability"></a>

훈련 작업 요금에 대한 자세한 내용은 [Amazon SageMaker AI Pricing](https://aws.amazon.com/sagemaker-ai/pricing/)을 참조하세요. AWS Batch를 사용하면 Amazon EC2 인스턴스와 같이 사용된 모든 AWS 리소스에 대해서만 비용을 지불합니다. 자세한 내용은 [AWS Batch 요금](https://aws.amazon.com/batch/pricing/)을 참조하십시오.

훈련 작업을 사용할 수 AWS 리전 있는 모든에서 AWS Batch SageMaker AI 훈련 작업에를 사용할 수 있습니다. 자세한 내용은 [Amazon SageMaker 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)을 참조하세요.

필요할 때 필요한 용량을 확보하려면 SageMaker AI Flexible Training Plans(FTP)을 사용할 수 있습니다. 이러한 계획을 통해 훈련 작업의 용량을 예약할 수 있습니다. AWS Batch의 대기열 기능과 결합하면 플랜 기간 동안 사용률을 극대화할 수 있습니다. 자세한 내용은 [Reserve training plans for you training jobs or HyperPod clusters](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html)를 참조하세요.

## 시작하기
<a name="training-job-queues-get-started"></a>

 AWS Batch 작업 대기열을 설정하고 SageMaker AI 훈련 작업을 제출하는 방법에 대한 자습서는 *AWS Batch 사용 설명서*[AWS Batch 의 SageMaker AI에서 시작하기](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-sagemaker.html)를 참조하세요.

SageMaker AI Python SDK에서 `aws_batch` 모듈을 사용하는 방법을 보여주는 Jupyter Notebook의 경우 [amazon-sagemaker-examples GitHub 리포지토리의 SageMaker AI 훈련 작업의AWS Batch 노트북 예시](https://github.com/aws/amazon-sagemaker-examples/tree/default/%20%20%20%20%20%20build_and_train_models/sm-training-queues)를 참조하세요.

# Amazon SageMaker ML 계보 추적
<a name="lineage-tracking"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 명명되었습니다. 다음 섹션은 Studio Classic 애플리케이션 사용에 관해 다룹니다. 업데이트된 Studio 환경 사용에 대한 자세한 내용은 [Amazon SageMaker Studio](studio-updated.md) 섹션을 참조하세요.  
Studio Classic은 기존 워크로드에 대해 유지 관리되지만 더 이상 온보딩에 사용할 수 없습니다. 기존 Studio Classic 애플리케이션만 중지하거나 삭제할 수 있으며 새 애플리케이션을 생성할 수 없습니다. [워크로드를 새 Studio 환경으로 마이그레이션하는](studio-updated-migrate.md) 것이 좋습니다.

Amazon SageMaker ML 계보 추적은 데이터 준비부터 모델 배포까지 기계 학습(ML) 워크플로의 단계에 대한 정보를 생성하고 저장합니다. 추적 정보를 사용하여 워크플로 단계를 재현하고, 모델 및 데이터세트 계보를 추적하고, 모델 거버넌스 및 감사 표준을 설정할 수 있습니다.

SageMaker AI의 계보 추적 기능은 백엔드에서 작동하여 모델 훈련 및 배포 워크플로와 관련된 모든 메타데이터를 추적합니다. 여기에는 훈련 작업, 사용된 데이터세트, 파이프라인, 엔드포인트, 실제 모델이 포함됩니다. 언제든지 계보 서비스를 쿼리하여 모델 훈련에 사용된 정확한 아티팩트를 찾을 수 있습니다. 사용된 데이터세트와 정확히 일치하는 데이터세트에 액세스할 수 있는 한, 이러한 아티팩트를 사용하여 동일한 ML 워크플로를 다시 만들어 모델을 재현할 수 있습니다. 시험 구성 요소는 훈련 작업을 추적합니다. 이 시험 구성 요소에는 훈련 작업의 일부로 사용되는 모든 파라미터가 있습니다. 전체 워크플로를 다시 실행할 필요가 없는 경우 훈련 작업을 재현하여 동일한 모델을 도출할 수 있습니다.

SageMaker AI 계보 추적을 사용하면 데이터 과학자와 모델 빌더는 다음 작업을 수행할 수 있습니다.
+ 모델 발견 실험의 실행 기록을 보관합니다.
+ 감사 및 규정 준수 검증을 위해 모델 계보 아티팩트를 추적하여 모델 거버넌스를 확립합니다.

다음 다이어그램은 Amazon SageMaker AI가 엔드투엔드 모델 훈련 및 배포 ML 워크플로에서 자동으로 생성하는 계보 그래프의 예시를 보여줍니다.

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


**Topics**
+ [

# 계보 추적 엔터티
](lineage-tracking-entities.md)
+ [

# Amazon SageMaker AI에서 생성한 추적 엔터티
](lineage-tracking-auto-creation.md)
+ [

# 추적 엔터티 수동 생성
](lineage-tracking-manual-creation.md)
+ [

# 계보 엔터티 쿼리
](querying-lineage-entities.md)
+ [

# 교차 계정 계보 추적
](xaccount-lineage-tracking.md)

# 계보 추적 엔터티
<a name="lineage-tracking-entities"></a>

추적 엔터티는 엔드 투 엔드 기계 학습 워크플로의 모든 요소를 나타냅니다. 이 표현을 사용하여 모델 거버넌스를 설정하고, 워크플로를 재현하고, 작업 기록을 유지할 수 있습니다.

Amazon SageMaker AI는 처리 작업, 훈련 작업, 배치 변환 작업 등과 같은 SageMaker AI 작업을 생성할 때 시험 구성 요소 및 관련 시험 및 실험에 대한 추적 엔터티를 자동으로 생성합니다. 자동 추적 외에도 [추적 엔터티 수동 생성](lineage-tracking-manual-creation.md)을 통해 워크플로의 사용자 지정 단계를 모델링할 수 있습니다. 자세한 내용은 [Studio Classic의 Amazon SageMaker Experiments](experiments.md) 단원을 참조하십시오.

또한 SageMaker AI는 워크플로의 다른 단계에 대한 추적 엔터티를 자동으로 생성하므로 워크플로를 처음부터 끝까지 추적할 수 있습니다. 자세한 내용은 [Amazon SageMaker AI에서 생성한 추적 엔터티](lineage-tracking-auto-creation.md) 단원을 참조하십시오.

SageMaker AI에서 생성한 엔터티를 보완하기 위해 추가 엔터티를 생성할 수 있습니다. 자세한 내용은 [추적 엔터티 수동 생성](lineage-tracking-manual-creation.md) 단원을 참조하십시오.

SageMaker AI는 새 엔터티를 생성하는 대신 기존 엔터티를 재사용합니다. 예를 들어 고유한 `SourceUri`가 있는 아티팩트는 하나일 수 있습니다.

**계보 쿼리의 주요 개념**
+ **계보** - ML 워크플로의 다양한 엔터티 간 관계를 추적하는 메타데이터입니다.
+ **계보 쿼리** - 계보를 검사하고 엔터티 간 관계를 발견하는 작업입니다.
+ **계보 엔터티 - **계보를 구성하는 메타데이터 요소입니다.
+ **교차 계정 계보** - ML 워크플로는 두 개 이상의 계정에 걸쳐 있을 수 있습니다. 교차 계정 계보를 사용하면 공유 엔터티 리소스 간에 계보 연결을 자동으로 생성하도록 여러 계정을 구성할 수 있습니다. 그러면 계보 쿼리는 이러한 공유 계정에서도 엔터티를 반환할 수 있습니다.

다음과 같은 추적 엔터티가 정의됩니다.

**실험 엔터티**
+ [시험 구성 요소](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrialComponent.html) - 기계 학습 시험의 한 단계입니다. 처리 작업, 훈련 작업 및 배치 변환 작업이 포함됩니다.
+ [시험](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrial.html) - 일반적으로 모델을 생성하는 시험 구성 요소의 조합입니다.
+ [실험](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateExperiment.html) - 일반적으로 특정 사용 사례를 해결하는 데 초점을 맞춘 시험 그룹입니다.

**계보 엔터티**
+ [시험 구성 요소](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrialComponent.html) - 계보의 처리, 훈련 및 변환 작업을 나타냅니다. 또한 실험 관리의 일부이기도 합니다.
+ [컨텍스트](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateContext.html) - 다른 추적 또는 실험 엔터티를 논리적으로 그룹화합니다. 개념적으로 보면 실험과 시험은 컨텍스트입니다. 엔드포인트와 모델 패키지를 예로 들 수 있습니다.
+ [작업](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAction.html) - 작업 또는 활동을 나타냅니다. 일반적으로 작업에는 하나 이상의 입력 아티팩트 또는 출력 아티팩트가 포함됩니다. 몇 가지 예로는 워크플로 단계와 모델 배포가 있습니다.
+ [아티팩트](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateArtifact.html) - URI 주소 지정이 가능한 객체 또는 데이터를 나타냅니다. 아티팩트는 일반적으로 시험 구성 요소나 작업에 대한 입력 또는 출력입니다. 일부 예시로는 데이터세트(S3 버킷 URI) 또는 이미지(Amazon ECR 레지스트리 경로)가 있습니다.
+ [연결](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddAssociation.html) - 다른 추적 또는 실험 엔터티(예: 훈련 데이터 위치와 훈련 작업 간의 연결)를 연결합니다.

  연결에는 선택적 `AssociationType`속성이 있습니다. 각 유형의 권장 용도와 함께 다음 값을 사용할 수 있습니다. SageMaker AI는 사용에 제한을 두지 않습니다.
  + `ContributedTo` - 소스가 대상에 기여했거나 대상을 활성화하는 데 기여했습니다. 예를 들어, 훈련 데이터가 훈련 작업에 기여했습니다.
  + `AssociatedWith` - 소스가 대상에 연결되어 있습니다. 예를 들어, 승인 워크플로는 모델 배포와 연결됩니다.
  + `DerivedFrom` - 대상은 소스 수정입니다. 예를 들어, 처리 작업에 대한 채널 입력의 다이제스트 출력은 원래 입력에서 파생됩니다.
  + `Produced` - 소스가 대상을 생성했습니다. 예를 들어, 훈련 작업에서 모델 아티팩트가 생성되었습니다.
  + `SameAs` - 동일한 계보 엔터티가 서로 다른 계정에서 사용된 경우입니다.

**공통 속성**
+ **유형 속성**

  작업, 아티팩트 및 컨텍스트 엔터티에는 각각 유형 속성, `ActionType`, `ArtifactType`, `ContextType`이 있습니다.** 이 속성은 의미 있는 정보를 엔터티와 연결하고 List API에서 필터로 사용할 수 있는 사용자 지정 문자열입니다.
+ **소스 속성**

  작업, 아티팩트 및 컨텍스트 엔터티에는 `Source`속성이 있습니다. 이 속성은 엔터티가 나타내는 기본 URI를 제공합니다. 다음은 몇 가지 예시입니다.
  + 소스가 `EndpointArn`인 `UpdateEndpoint`작업입니다.
  + 소스가 `ImageUri`인 처리 작업의 이미지 아티팩트입니다.
  + 소스가 `EndpointArn`인 `Endpoint`컨텍스트입니다.
+ **메타데이터 속성**

  작업 및 아티팩트 엔터티에는 다음 정보를 제공할 수 있는 선택적 `Metadata`속성이 있습니다.
  + `ProjectId` - 모델이 속한 SageMaker AI MLOps 프로젝트의 ID를 예로 들 수 있습니다.
  + `GeneratedBy` - 모델 패키지 버전을 등록한 SageMaker AI 파이프라인 실행을 예로 들 수 있습니다.
  + `Repository` - 알고리즘이 포함된 리포지토리를 예로 들 수 있습니다.
  + `CommitId` - 알고리즘 버전의 커밋 ID를 예로 들 수 있습니다.

# Amazon SageMaker AI에서 생성한 추적 엔터티
<a name="lineage-tracking-auto-creation"></a>

Amazon SageMaker AI는 SageMaker AI 작업, 모델, 모델 패키지 및 엔드포인트(데이터를 사용할 수 있는 경우)에 대한 추적 엔터티를 자동으로 생성합니다. SageMaker AI에서 생성하는 계보 엔터티 수에는 제한이 없습니다.

추적 엔터티를 수동으로 생성하는 방법에 대한 자세한 내용은 [추적 엔터티 수동 생성](lineage-tracking-manual-creation.md)섹션을 참조하세요.

**Topics**
+ [

## SageMaker AI 작업을 위한 추적 엔터티
](#lineage-tracking-auto-creation-jobs)
+ [

## 모델 패키지의 추적 엔터티
](#lineage-tracking-auto-creation-model-package)
+ [

## 엔드포인트의 추적 엔터티
](#lineage-tracking-auto-creation-endpoint)

## SageMaker AI 작업을 위한 추적 엔터티
<a name="lineage-tracking-auto-creation-jobs"></a>

SageMaker AI는 각 SageMaker AI 작업에 대한 시험 구성 요소를 생성합니다. SageMaker AI는 아티팩트를 생성하여 작업 메타데이터 및 각 아티팩트와 작업 간의 연결을 추적합니다.

아티팩트는 다음 작업 속성에 대해 생성되며 SageMaker AI 작업의 Amazon 리소스 이름(ARN)에 연결됩니다. 아티팩트 `SourceUri`는 괄호로 나열됩니다.

**훈련 작업**
+ 훈련 알고리즘을 포함하는 이미지입니다(`TrainingImage`).
+ 각 입력 채널의 데이터 소스입니다(`S3Uri`).
+ 모델의 위치입니다(`S3OutputPath)`).
+ 관리형 스팟 체크포인트 데이터의 위치입니다(`S3Uri`).

**처리 작업**
+ 처리 작업에서 실행할 컨테이너입니다(`ImageUri`).
+ 각 처리 입력 및 처리 출력의 데이터 위치입니다(`S3Uri`).

**변환 작업**
+ 변환할 입력 데이터 소스입니다(`S3Uri`).
+ 변환 결과입니다(`S3OutputPath`).

**참고**  
Amazon Simple Storage Service(S3) 아티팩트는 Amazon S3 키와 각 파일의 해시 또는 etag 값이 아니라 API 생성에 제공된 Amazon S3 URI 값(예: [훈련 작업 생성](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html))을 기반으로 추적됩니다.

## 모델 패키지의 추적 엔터티
<a name="lineage-tracking-auto-creation-model-package"></a>

다음과 같은 엔터티가 생성됩니다.

**모델 패키지**
+ 각 모델 패키지 그룹의 컨텍스트입니다.
+ 각 모델 패키지의 아티팩트입니다.
+ 각 모델 패키지 아티팩트와 패키지가 속한 각 모델 패키지 그룹의 컨텍스트 간의 연결입니다.
+ 모델 패키지 버전을 생성하기 위한 작업입니다.
+ 모델 패키지 아티팩트와 생성 작업 간의 연결입니다.
+ 각 모델 패키지 아티팩트와 패키지가 속한 각 모델 패키지 그룹의 컨텍스트 간의 연결입니다.
+ 추론 컨테이너
  + 모델 패키지에 정의된 각 컨테이너에 사용되는 이미지의 아티팩트입니다.
  + 각 컨테이너에 사용된 모델의 아티팩트입니다.
  + 각 아티팩트와 모델 패키지 아티팩트 간의 연결입니다.
+ 알고리즘
  + 모델 패키지에 정의된 각 알고리즘의 아티팩트입니다.
  + 각 알고리즘으로 만든 모델의 아티팩트입니다.
  + 각 아티팩트와 모델 패키지 아티팩트 간의 연결입니다.

## 엔드포인트의 추적 엔터티
<a name="lineage-tracking-auto-creation-endpoint"></a>

Amazon SageMaker AI에서 생성한 엔터티는 다음과 같습니다.

**엔드포인트**
+ 각 엔드포인트에 대한 컨텍스트
+ 각 엔드포인트를 생성한 모델 배포를 위한 작업
+ 엔드포인트에 배포된 각 모델의 아티팩트
+ 모델에 사용된 이미지의 아티팩트
+ 모델의 모델 패키지에 대한 아티팩트
+ 엔드포인트에 배포된 각 모델의 아티팩트
+ 각 아티팩트와 모델 배포 작업 간의 연결

# 추적 엔터티 수동 생성
<a name="lineage-tracking-manual-creation"></a>

원하는 속성에 대해 수동으로 추적 엔터티를 만들어 모델 거버넌스를 설정하고, 워크플로를 재현하고, 작업 기록을 유지할 수 있습니다. Amazon SageMaker AI가 자동으로 생성하는 추적 엔터티에 대한 자세한 내용은 [Amazon SageMaker AI에서 생성한 추적 엔터티](lineage-tracking-auto-creation.md) 섹션을 참조하세요. 다음 자습서에서는 SageMaker 훈련 작업과 엔드포인트 간에 아티팩트를 수동으로 만들고 연결한 다음 워크플로를 추적하는 데 필요한 단계를 보여줍니다.

연결을 제외한 모든 엔터티에 태그를 추가할 수 있습니다. 태그는 사용자 지정 정보를 제공하는 임의의 키-값 쌍입니다. 목록 또는 검색 쿼리를 태그별로 필터링하거나 정렬할 수 있습니다. 자세한 내용은의 [AWS 리소스 태그 지정](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)을 참조하세요*AWS 일반 참조*.

계보 엔터티를 생성하는 방법을 보여주는 샘플 노트북은 [Amazon SageMaker AI 예시 GitHub 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples)에서 [Amazon SageMaker AI Lineage](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-lineage) 노트북을 참조하세요.

**Topics**
+ [

## 엔터티 수동 생성
](#lineage-tracking-manual-create)
+ [

## 워크플로 수동 추적
](#lineage-tracking-manual-track)
+ [

## 한도
](#lineage-tracking-manual-track-limits)

## 엔터티 수동 생성
<a name="lineage-tracking-manual-create"></a>

다음 절차에서는 SageMaker AI 훈련 작업과 엔드포인트 간에 아티팩트를 생성하고 연결하는 방법을 보여줍니다. 다음 절차를 수행합니다.

**추적 엔터티 및 연결 가져오기**

1. 계보 추적 엔터티를 가져옵니다.

   ```
   import sys
   !{sys.executable} -m pip install -q sagemaker
   
   from sagemaker import get_execution_role
   from sagemaker.session import Session
   from sagemaker.lineage import context, artifact, association, action
   
   import boto3
   boto_session = boto3.Session(region_name=region)
   sagemaker_client = boto_session.client("sagemaker")
   ```

1. 입력 및 출력 아티팩트 생성

   ```
   code_location_arn = artifact.Artifact.create(
       artifact_name='source-code-location',
       source_uri='s3://...',
       artifact_type='code-location'
   ).artifact_arn
   
   # Similar constructs for train_data_location_arn and test_data_location_arn
   
   model_location_arn = artifact.Artifact.create(
       artifact_name='model-location',
       source_uri='s3://...',
       artifact_type='model-location'
   ).artifact_arn
   ```

1. 모델을 훈련시키고 훈련 작업을 나타내는 `trial_component_arn`을 가져옵니다.

1. 입력 아티팩트와 출력 아티팩트를 훈련 작업(시험 구성 요소)에 연결합니다.

   ```
   input_artifacts = [code_location_arn, train_data_location_arn, test_data_location_arn]
   for artifact_arn in input_artifacts:
       try:
           association.Association.create(
               source_arn=artifact_arn,
               destination_arn=trial_component_arn,
               association_type='ContributedTo'
           )
       except:
           logging.info('association between {} and {} already exists', artifact_arn, trial_component_arn)
   
   output_artifacts = [model_location_arn]
   for artifact_arn in output_artifacts:
       try:
            association.Association.create(
               source_arn=trial_component_arn,
               destination_arn=artifact_arn,
               association_type='Produced'
           )
       except:
           logging.info('association between {} and {} already exists', artifact_arn, trial_component_arn)
   ```

1. 추론 엔드포인트를 생성합니다.

   ```
   predictor = mnist_estimator.deploy(initial_instance_count=1,
                                        instance_type='ml.m4.xlarge')
   ```

1. 엔드포인트 컨텍스트를 생성합니다.

   ```
   from sagemaker.lineage import context
   
   endpoint = sagemaker_client.describe_endpoint(EndpointName=predictor.endpoint_name)
   endpoint_arn = endpoint['EndpointArn']
   
   endpoint_context_arn = context.Context.create(
       context_name=predictor.endpoint_name,
       context_type='Endpoint',
       source_uri=endpoint_arn
   ).context_arn
   ```

1. 훈련 작업(시험 구성 요소)과 엔드포인트 컨텍스트를 연결합니다.

   ```
   association.Association.create(
       source_arn=trial_component_arn,
       destination_arn=endpoint_context_arn
   )
   ```

## 워크플로 수동 추적
<a name="lineage-tracking-manual-track"></a>

이전 섹션에서 생성한 워크플로를 수동으로 추적할 수 있습니다.

이전 예시의 엔드포인트 Amazon 리소스 이름(ARN)을 고려하여 다음 절차는 엔드포인트에 배포된 모델을 훈련시키는 데 사용된 데이터세트로 워크플로를 추적하는 방법을 보여줍니다. 다음 절차를 수행합니다.

**엔드포인트에서 훈련 데이터 원본까지의 워크플로를 추적하려면**

1. 추적 엔터티를 가져옵니다.

   ```
   import sys
   !{sys.executable} -m pip install -q sagemaker
   
   from sagemaker import get_execution_role
   from sagemaker.session import Session
   from sagemaker.lineage import context, artifact, association, action
   
   import boto3
   boto_session = boto3.Session(region_name=region)
   sagemaker_client = boto_session.client("sagemaker")
   ```

1. 엔드포인트 ARN에서 엔드포인트 컨텍스트를 가져옵니다.

   ```
   endpoint_context_arn = sagemaker_client.list_contexts(
       SourceUri=endpoint_arn)['ContextSummaries'][0]['ContextArn']
   ```

1. 시험 구성 요소와 엔드포인트 컨텍스트 간의 연결을 통해 시험 구성 요소를 가져옵니다.

   ```
   trial_component_arn = sagemaker_client.list_associations(
       DestinationArn=endpoint_context_arn)['AssociationSummaries'][0]['SourceArn']
   ```

1. 시험 구성 요소와 엔드포인트 컨텍스트 간의 연결에서 훈련 데이터 위치 아티팩트를 가져옵니다.

   ```
   train_data_location_artifact_arn = sagemaker_client.list_associations(
       DestinationArn=trial_component_arn, SourceType='Model')['AssociationSummaries'][0]['SourceArn']
   ```

1. 훈련 데이터 위치 아티팩트에서 훈련 데이터 위치를 가져옵니다.

   ```
   train_data_location = sagemaker_client.describe_artifact(
       ArtifactArn=train_data_location_artifact_arn)['Source']['SourceUri']
       print(train_data_location)
   ```

   응답:

   ```
   s3://sagemaker-sample-data-us-east-2/mxnet/mnist/train
   ```

## 한도
<a name="lineage-tracking-manual-track-limits"></a>

다음을 제외한 모든 엔터티, 실험 및 계보 간에 연결을 만들 수 있습니다.
+ 두 실험 엔터티 간에는 연결을 만들 수 없습니다. 실험 엔터티는 실험, 시험 및 시험 구성 요소로 구성됩니다.
+ 다른 연결을 사용하여 연결을 만들 수 있습니다.

이미 존재하는 엔터티를 생성하려고 하면 오류가 발생합니다.

**수동으로 생성된 계보 엔터티의 최대 수**
+ 작업: 3000
+ 아티팩트: 6000
+ 연결: 6000
+ 컨텍스트: 500

Amazon SageMaker AI에서 자동으로 생성하는 계보 엔터티 수에는 제한이 없습니다.

# 계보 엔터티 쿼리
<a name="querying-lineage-entities"></a>

Amazon SageMaker AI는 계보 엔터티를 사용할 때 자동으로 계보 엔터티의 그래프를 생성합니다. 이 데이터를 쿼리하여 다양한 질문에 답할 수 있습니다. 다음은 SDK for Python에서 이 데이터를 쿼리하는 방법에 대한 지침을 제공합니다.

Amazon SageMaker Studio에서 등록된 모델 계보를 보는 방법에 대한 자세한 내용은 [Studio에서 모델 계보 세부 정보 보기](model-registry-lineage-view-studio.md) 섹션을 참조하세요.

계보 엔터티를 쿼리하여 다음을 수행할 수 있습니다.
+ 모델 생성에 사용된 모든 데이터세트를 검색합니다.
+ 엔드포인트 생성에 들어간 모든 작업을 검색합니다.
+ 데이터세트를 사용하는 모든 모델을 검색합니다.
+ 모델을 사용하는 모든 엔드포인트를 검색합니다.
+ 특정 데이터세트에서 파생된 엔드포인트를 검색합니다.
+ 훈련 작업을 생성한 파이프라인 실행을 검색합니다.
+ 조사, 거버넌스 및 재현성을 위해 엔터티 간의 관계를 검색합니다.
+ 아티팩트를 사용하는 모든 다운스트림 시험을 검색합니다.
+ 아티팩트를 사용하는 모든 업스트림 시험을 검색합니다.
+ 제공된 S3 uri를 사용하는 아티팩트 목록을 검색합니다.
+ 데이터세트 아티팩트를 사용하는 업스트림 아티팩트를 검색합니다.
+ 데이터세트 아티팩트를 사용하는 다운스트림 아티팩트를 검색합니다.
+ 이미지 아티팩트를 사용하는 데이터세트를 검색합니다.
+ 컨텍스트를 사용하는 작업을 검색합니다.
+ 엔드포인트를 사용하는 처리 작업을 검색합니다.
+ 엔드포인트를 사용하는 변환 작업을 검색합니다.
+ 엔드포인트를 사용하는 시험 구성 요소를 검색합니다.
+ 모델 패키지 그룹과 연결된 파이프라인 실행의 ARN을 검색합니다.
+ 작업을 사용하는 모든 아티팩트를 검색합니다.
+ 모델 패키지 승인 작업을 사용하는 모든 업스트림 데이터세트를 검색합니다.
+ 모델 패키지 승인 작업에서 모델 패키지를 검색합니다.
+ 엔드포인트를 사용하는 다운스트림 엔드포인트 컨텍스트를 검색합니다.
+ 시험 구성 요소와 관련된 파이프라인 실행에 대한 ARN을 검색합니다.
+ 시험 구성 요소를 사용하는 데이터세트를 검색합니다.
+ 시험 구성 요소를 사용하는 모델을 검색합니다.
+ 시각화를 위해 계보를 탐색합니다.

**제한 사항**
+ 다음 리전에서 계보 쿼리를 사용할 수 없습니다.
  + 아프리카(케이프타운) – af-south
  + 아시아 태평양(자카르타) – ap-southeast-3
  + 아시아 태평양(오사카) – ap-northeast-3
  + 유럽(밀라노) – eu-south-1
  + 유럽(스페인) – eu-south-2
  + 이스라엘(텔아비브) – il-central-1
+ 현재 검색할 수 있는 관계의 최대 깊이는 10으로 제한됩니다.
+ 필터링은 마지막 수정 날짜, 생성 날짜, 유형 및 계보 엔터티 유형과 같은 속성으로 제한됩니다.

**Topics**
+ [

## 계보 엔터티 쿼리 시작하기
](#querying-lineage-entities-getting-started)

## 계보 엔터티 쿼리 시작하기
<a name="querying-lineage-entities-getting-started"></a>

가장 쉬운 방법은 다음 중 하나를 이용하는 것입니다.
+ [Amazon SageMaker AI SDK for Python](https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/lineage/artifact.py#L397)에는 많은 일반 사용 사례가 정의되어 있습니다.
+ SageMaker AI 계보 API를 사용하여 계보 그래프에서 관계를 쿼리하는 방법을 보여주는 노트북은 [sagemaker-lineage-multihop-queries.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-lineage/sagemaker-lineage-multihop-queries.ipynb)를 참조하세요.

다음 예시는 `LineageQuery`및 `LineageFilter`API를 사용하여 계보 그래프에 대한 질문에 답하는 쿼리를 구성하고 몇 가지 사용 사례에서 엔터티 관계를 추출하는 방법을 보여줍니다.

**Example `LineageQuery` API를 사용하여 엔터티 연결 찾기**  

```
from sagemaker.lineage.context import Context, EndpointContext
from sagemaker.lineage.action import Action
from sagemaker.lineage.association import Association
from sagemaker.lineage.artifact import Artifact, ModelArtifact, DatasetArtifact

from sagemaker.lineage.query import (
    LineageQuery,
    LineageFilter,
    LineageSourceEnum,
    LineageEntityEnum,
    LineageQueryDirectionEnum,
)
# Find the endpoint context and model artifact that should be used for the lineage queries.

contexts = Context.list(source_uri=endpoint_arn)
context_name = list(contexts)[0].context_name
endpoint_context = EndpointContext.load(context_name=context_name)
```

**Example 엔드포인트와 관련된 모든 데이터세트 찾기**  

```
# Define the LineageFilter to look for entities of type `ARTIFACT` and the source of type `DATASET`.

query_filter = LineageFilter(
    entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.DATASET]
)

# Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context`
# and find all datasets.

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[endpoint_context.context_arn],
    query_filter=query_filter,
    direction=LineageQueryDirectionEnum.ASCENDANTS,
    include_edges=False,
)

# Parse through the query results to get the lineage objects corresponding to the datasets
dataset_artifacts = []
for vertex in query_result.vertices:
    dataset_artifacts.append(vertex.to_lineage_object().source.source_uri)

pp.pprint(dataset_artifacts)
```

**Example 엔드포인트와 관련된 모델 찾기**  

```
# Define the LineageFilter to look for entities of type `ARTIFACT` and the source of type `MODEL`.

query_filter = LineageFilter(
    entities=[LineageEntityEnum.ARTIFACT], sources=[LineageSourceEnum.MODEL]
)

# Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context`
# and find all datasets.

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[endpoint_context.context_arn],
    query_filter=query_filter,
    direction=LineageQueryDirectionEnum.ASCENDANTS,
    include_edges=False,
)

# Parse through the query results to get the lineage objects corresponding to the model
model_artifacts = []
for vertex in query_result.vertices:
    model_artifacts.append(vertex.to_lineage_object().source.source_uri)

# The results of the `LineageQuery` API call return the ARN of the model deployed to the endpoint along with
# the S3 URI to the model.tar.gz file associated with the model
pp.pprint(model_artifacts)
```

**Example 엔드포인트와 관련된 시험 구성 요소 찾기**  

```
# Define the LineageFilter to look for entities of type `TRIAL_COMPONENT` and the source of type `TRAINING_JOB`.

query_filter = LineageFilter(
    entities=[LineageEntityEnum.TRIAL_COMPONENT],
    sources=[LineageSourceEnum.TRAINING_JOB],
)

# Providing this `LineageFilter` to the `LineageQuery` constructs a query that traverses through the given context `endpoint_context`
# and find all datasets.

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[endpoint_context.context_arn],
    query_filter=query_filter,
    direction=LineageQueryDirectionEnum.ASCENDANTS,
    include_edges=False,
)

# Parse through the query results to get the ARNs of the training jobs associated with this Endpoint
trial_components = []
for vertex in query_result.vertices:
    trial_components.append(vertex.arn)

pp.pprint(trial_components)
```

**Example 계보의 초점 변경**  
계보의 초점이 바뀌는 다른 `start_arns`을 포함하도록 `LineageQuery`를 수정할 수 있습니다. 또한 `LineageFilter`는 여러 소스와 엔터티를 사용하여 쿼리 범위를 확장할 수 있습니다.  
다음에서는 모델을 계보 초점으로 사용하여 관련 엔드포인트와 데이터세트를 찾습니다.  

```
# Get the ModelArtifact

model_artifact_summary = list(Artifact.list(source_uri=model_package_arn))[0]
model_artifact = ModelArtifact.load(artifact_arn=model_artifact_summary.artifact_arn)
query_filter = LineageFilter(
    entities=[LineageEntityEnum.ARTIFACT],
    sources=[LineageSourceEnum.ENDPOINT, LineageSourceEnum.DATASET],
)

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[model_artifact.artifact_arn],  # Model is the starting artifact
    query_filter=query_filter,
    # Find all the entities that descend from the model, i.e. the endpoint
    direction=LineageQueryDirectionEnum.DESCENDANTS,
    include_edges=False,
)

associations = []
for vertex in query_result.vertices:
    associations.append(vertex.to_lineage_object().source.source_uri)

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[model_artifact.artifact_arn],  # Model is the starting artifact
    query_filter=query_filter,
    # Find all the entities that ascend from the model, i.e. the datasets
    direction=LineageQueryDirectionEnum.ASCENDANTS,
    include_edges=False,
)

for vertex in query_result.vertices:
    associations.append(vertex.to_lineage_object().source.source_uri)

pp.pprint(associations)
```

**Example `LineageQueryDirectionEnum.BOTH`를 사용하여 상위 및 하위 관계 찾기**  
방향이 `BOTH`로 설정된 경우 쿼리는 그래프를 탐색하여 상위 및 하위 관계를 찾습니다. 이 순회는 시작 노드뿐만 아니라 방문한 각 노드에서도 발생합니다. 예를 들어, 훈련 작업을 두 번 실행하고 훈련 작업에서 생성된 두 모델을 모두 엔드포인트에 배포한 경우 방향이 `BOTH`로 설정된 쿼리 결과에 두 엔드포인트가 모두 표시됩니다. 이는 동일한 이미지가 모델 훈련 및 배포에 사용되기 때문입니다. 이미지는 모델에 공통적이므로, `start_arn`과 양쪽 엔드포인트가 쿼리 결과에 나타납니다.  

```
query_filter = LineageFilter(
    entities=[LineageEntityEnum.ARTIFACT],
    sources=[LineageSourceEnum.ENDPOINT, LineageSourceEnum.DATASET],
)

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[model_artifact.artifact_arn],  # Model is the starting artifact
    query_filter=query_filter,
    # This specifies that the query should look for associations both ascending and descending for the start
    direction=LineageQueryDirectionEnum.BOTH,
    include_edges=False,
)

associations = []
for vertex in query_result.vertices:
    associations.append(vertex.to_lineage_object().source.source_uri)

pp.pprint(associations)
```

**Example `LineageQuery` - `ASCENDANTS`vs. `DESCENDANTS`방향**  
계보 그래프의 방향을 이해하려면 다음 엔터티 관계 그래프(데이터세트 -> 훈련 작업 -> 모델 -> 엔드포인트)를 참고하세요.  
엔드포인트는 모델의 하위이고, 모델은 데이터세트의 하위입니다. 마찬가지로, 모델은 엔드포인트의 상위입니다. `direction` 파라미터를 사용하여 `start_arns`에서 엔터티의 하위 항목이나 상위 항목인 엔터티를 반환할지 여부를 지정할 수 있습니다. `start_arns`에 모델이 포함되어 있고 방향이 `DESCENDANTS`인 경우 쿼리는 엔드포인트를 반환합니다. 방향이 `ASCENDANTS`인 경우 쿼리는 데이터세트를 반환합니다.  

```
# In this example, we'll look at the impact of specifying the direction as ASCENDANT or DESCENDANT in a `LineageQuery`.

query_filter = LineageFilter(
    entities=[LineageEntityEnum.ARTIFACT],
    sources=[
        LineageSourceEnum.ENDPOINT,
        LineageSourceEnum.MODEL,
        LineageSourceEnum.DATASET,
        LineageSourceEnum.TRAINING_JOB,
    ],
)

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[model_artifact.artifact_arn],
    query_filter=query_filter,
    direction=LineageQueryDirectionEnum.ASCENDANTS,
    include_edges=False,
)

ascendant_artifacts = []

# The lineage entity returned for the Training Job is a TrialComponent which can't be converted to a
# lineage object using the method `to_lineage_object()` so we extract the TrialComponent ARN.
for vertex in query_result.vertices:
    try:
        ascendant_artifacts.append(vertex.to_lineage_object().source.source_uri)
    except:
        ascendant_artifacts.append(vertex.arn)

print("Ascendant artifacts : ")
pp.pprint(ascendant_artifacts)

query_result = LineageQuery(sagemaker_session).query(
    start_arns=[model_artifact.artifact_arn],
    query_filter=query_filter,
    direction=LineageQueryDirectionEnum.DESCENDANTS,
    include_edges=False,
)

descendant_artifacts = []
for vertex in query_result.vertices:
    try:
        descendant_artifacts.append(vertex.to_lineage_object().source.source_uri)
    except:
        # Handling TrialComponents.
        descendant_artifacts.append(vertex.arn)

print("Descendant artifacts : ")
pp.pprint(descendant_artifacts)
```

**Example 계보 쿼리를 더 쉽게 만드는 SDK 도우미 함수**  
클래스 `EndpointContext`, `ModelArtifact`, 및 `DatasetArtifact`에는 특정 계보 쿼리를 더 쉽게 활용할 수 있도록 `LineageQuery`API에 래퍼 역할을 하는 도우미 함수가 포함되어 있습니다. 다음 예시에서는 이러한 도우미 함수를 사용하는 방법을 보여 줍니다.  

```
# Find all the datasets associated with this endpoint

datasets = []
dataset_artifacts = endpoint_context.dataset_artifacts()
for dataset in dataset_artifacts:
    datasets.append(dataset.source.source_uri)
print("Datasets : ", datasets)

# Find the training jobs associated with the endpoint
training_job_artifacts = endpoint_context.training_job_arns()
training_jobs = []
for training_job in training_job_artifacts:
    training_jobs.append(training_job)
print("Training Jobs : ", training_jobs)

# Get the ARN for the pipeline execution associated with this endpoint (if any)
pipeline_executions = endpoint_context.pipeline_execution_arn()
if pipeline_executions:
    for pipeline in pipelines_executions:
        print(pipeline)

# Here we use the `ModelArtifact` class to find all the datasets and endpoints associated with the model

dataset_artifacts = model_artifact.dataset_artifacts()
endpoint_contexts = model_artifact.endpoint_contexts()

datasets = [dataset.source.source_uri for dataset in dataset_artifacts]
endpoints = [endpoint.source.source_uri for endpoint in endpoint_contexts]

print("Datasets associated with this model : ")
pp.pprint(datasets)

print("Endpoints associated with this model : ")
pp.pprint(endpoints)

# Here we use the `DatasetArtifact` class to find all the endpoints hosting models that were trained with a particular dataset
# Find the artifact associated with the dataset

dataset_artifact_arn = list(Artifact.list(source_uri=training_data))[0].artifact_arn
dataset_artifact = DatasetArtifact.load(artifact_arn=dataset_artifact_arn)

# Find the endpoints that used this training dataset
endpoint_contexts = dataset_artifact.endpoint_contexts()
endpoints = [endpoint.source.source_uri for endpoint in endpoint_contexts]

print("Endpoints associated with the training dataset {}".format(training_data))
pp.pprint(endpoints)
```

**Example 계보 그래프 시각화 가져오기**  
샘플 노트북 [visualizer.py](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-lineage/visualizer.py)에는 계보 그래프를 그리는 데 도움이 되는 도우미 클래스 `Visualizer`가 제공됩니다. 쿼리 응답이 렌더링되면 `StartArns`의 계보 관계가 표시된 그래프가 표시됩니다. `StartArns`에서 시각화는 `query_lineage`API 작업에서 반환된 다른 계보 엔터티와의 관계를 보여줍니다.  

```
# Graph APIs
# Here we use the boto3 `query_lineage` API to generate the query response to plot.

from visualizer import Visualizer

query_response = sm_client.query_lineage(
    StartArns=[endpoint_context.context_arn], Direction="Ascendants", IncludeEdges=True
)

viz = Visualizer()
viz.render(query_response, "Endpoint")
        
        query_response = sm_client.query_lineage(
    StartArns=[model_artifact.artifact_arn], Direction="Ascendants", IncludeEdges=True
)
viz.render(query_response, "Model")
```

# 교차 계정 계보 추적
<a name="xaccount-lineage-tracking"></a>

Amazon SageMaker AI는 다른 AWS 계정의 계보 개체 추적을 지원합니다. 기타 AWS 계정은 해당 계보 엔터티를 사용자와 공유할 수 있으며 사용자는 직접 API 직접 호출 또는 SageMaker AI 계보 쿼리를 통해 이러한 계보 엔터티에 액세스할 수 있습니다.

SageMaker AI는 계보 리소스를 안전하게 공유하는 데 도움을 주기 위해 [AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)를 사용합니다. [AWS RAM 콘솔](https://console.aws.amazon.com/ram/home)을 통해 리소스를 공유할 수 있습니다.



## 교차 계정 계보 추적 설정
<a name="setup-xaccount-lineage-tracking"></a>

Amazon SageMaker AI의 계보 그룹을 통해 [계보 추적 엔터티](lineage-tracking-entities.md)를 그룹화하고 공유할 수 있습니다. SageMaker AI는 계정당 하나의 기본 계보 그룹만 지원합니다. SageMaker AI는 계정에서 계보 엔터티가 생성될 때마다 기본 계보 그룹을 생성합니다. 계정이 소유한 모든 계보 엔터티는 이 기본 계보 그룹에 할당됩니다. 계보 엔터티를 다른 계정과 공유하려면 이 기본 계보 그룹을 해당 계정과 공유해야 합니다.

**참고**  
계보 그룹의 모든 계보 추적 엔터티를 공유하거나 공유하지 않을 수 있습니다.

 AWS Resource Access Manager 콘솔을 사용하여 계보 엔터티에 대한 리소스 공유를 생성합니다. 자세한 내용은AWS Resource Access Manager 사용 설명서의 [AWS 리소스 공유](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)를 참조하세요.**

**참고**  
리소스 공유가 생성된 후에는 리소스 및 보안 주체 연결이 완료되는 데 몇 분 정도 걸릴 수 있습니다. 연결이 설정되면 공유 계정에서 리소스 공유에 가입하라는 초대가 발송됩니다. 공유 리소스에 대한 액세스 권한을 얻으려면 공유 계정이 초대를 수락해야 합니다. 리소스 공유 초대 수락에 대한 자세한 내용은 *AWS Resource Access Manager 사용 설명서*의 [공유 AWS 리소스 사용을 ](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html) AWS RAM참조하세요.

### 교차 계정 계보 리소스 추적 정책
<a name="setup-xaccount-lineage-tracking-resource-policy"></a>

Amazon SageMaker AI는 한 가지 유형의 리소스 정책만 지원합니다. SageMaker AI 리소스 정책은 다음 작업을 모두 허용해야 합니다.

```
"sagemaker:DescribeAction"
"sagemaker:DescribeArtifact"
"sagemaker:DescribeContext"
"sagemaker:DescribeTrialComponent"
"sagemaker:AddAssociation"
"sagemaker:DeleteAssociation"
"sagemaker:QueryLineage"
```

**Example 다음은 계정 계보 그룹에 대한 리소스 공유를 생성하기 AWS Resource Access Manager 위해를 사용하여 생성된 SageMaker AI 리소스 정책입니다.**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullLineageAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": [
        "sagemaker:DescribeAction",
        "sagemaker:DescribeArtifact",
        "sagemaker:DescribeContext",
        "sagemaker:DescribeTrialComponent",
        "sagemaker:AddAssociation",
        "sagemaker:DeleteAssociation",
        "sagemaker:QueryLineage"
      ],
      "Resource": "arn:aws:sagemaker:us-west-2:111111111111:lineage-group/sagemaker-default-lineage-group"
    }
  ]
}
```

## 교차 계정 계보 엔터티 추적
<a name="tracking-lineage-xaccount"></a>

교차 계정 계보 추적을 사용하면 동일한 `AddAssociation`API 작업을 사용하여 여러 계정의 계보 엔터티를 연결할 수 있습니다. 두 계보 엔터티를 연결할 때 SageMaker AI는 두 계보 엔터티에 대해 `AddAssociation` API 작업을 수행할 권한이 있는지 확인합니다. 그런 다음 SageMaker AI가 연결을 설정합니다. 권한이 없는 경우 SageMaker AI는 연결을 생성하지 *않습니다*. 교차 계정 연결이 설정되면 `QueryLineage`API 작업을 통해 다른 계보 엔터티에서 둘 중 하나에 액세스할 수 있습니다. 자세한 내용은 [계보 엔터티 쿼리](querying-lineage-entities.md) 단원을 참조하십시오.

SageMaker AI는 계보 엔터티를 자동으로 생성하는 것 외에도 교차 계정 액세스 권한이 있는 경우 동일한 엔터티 또는 데이터를 참조하는 아티팩트를 연결합니다. 한 계정의 데이터를 다른 계정에서 계보 추적에 사용하는 경우 SageMaker AI는 각 계정에서 아티팩트를 생성하여 해당 데이터를 추적합니다. 교차 계정 계보를 사용하면 SageMaker AI가 새 아티팩트를 생성할 때마다 SageMaker AI는 동일한 데이터에 대해 생성된 다른 아티팩트가 사용자와 공유되어 있는지 확인합니다. 그런 다음 SageMaker AI는 새로 만든 아티팩트와 `SameAs`로 설정된 `AssociationType`으로 사용자와 공유된 각 아티팩트 사이에 연결을 설정합니다. 그런 다음 `[QueryLineage](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_QueryLineage.html)`API 작업을 사용하여 사용자 계정의 계보 엔터티를 탐색하여 자신과 공유되지만 다른 AWS 계정에서 소유한 계보 엔터티로 이동할 수 있습니다. 자세한 내용은 [계보 엔터티 쿼리](querying-lineage-entities.md) 섹션을 참조하세요.

**Topics**
+ [

### 다른 계정의 계보 리소스에 액세스
](#tracking-lineage-xaccount-accessing-resources)
+ [

### 교차 계정 계보 엔터티를 쿼리할 수 있는 권한
](#tracking-lineage-xaccount-authorization)

### 다른 계정의 계보 리소스에 액세스
<a name="tracking-lineage-xaccount-accessing-resources"></a>

계보 공유를 위한 교차 계정 액세스가 설정되면 ARN에서 직접 다음 SageMaker API 작업을 호출하여 다른 계정의 공유 계보 엔터티를 설명할 수 있습니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAction.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAction.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeArtifact.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeArtifact.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeContext.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeContext.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrialComponent.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrialComponent.html)

또한 다음과 같은 SageMaker API 작업을 사용하여 공유된 다른 계정이 소유한 계보 엔터티에 대한 [연결](https://docs.aws.amazon.com/sagemaker/latest/dg/lineage-tracking-entities.html)을 관리할 수 있습니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddAssociation.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddAssociation.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteAssociation.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteAssociation.html)

SageMaker AI 계보 API를 사용하여 교차 계정 계보를 쿼리하는 방법을 보여주는 노트북은 [sagemaker-lineage-cross-account-with-ram.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-lineage/sagemaker-lineage-cross-account-with-ram.ipynb)를 참조하세요.

### 교차 계정 계보 엔터티를 쿼리할 수 있는 권한
<a name="tracking-lineage-xaccount-authorization"></a>

Amazon SageMaker AI는 `StartArns`에서 `QueryLineage` API 작업을 수행할 권한이 있는지 확인해야 합니다. 이는 `LineageGroup`에 연결된 리소스 정책을 통해 적용됩니다. 이 작업의 결과에는 사용자 계정에서 소유했든 다른 계정에서 공유했든 관계없이 액세스할 수 있는 모든 계보 엔터티가 포함됩니다. 자세한 내용은 [계보 엔터티 쿼리](querying-lineage-entities.md) 단원을 참조하십시오.

# Model Registry를 사용한 모델 등록 배포
<a name="model-registry"></a>

Amazon SageMaker Model Registry를 사용하여 다음 작업을 할 수 있습니다.
+ 프로덕션용 모델을 카탈로그화합니다.
+ 모델 버전을 관리합니다.
+ 훈련 지표와 같은 메타데이터를 모델과 연결합니다.
+ 등록된 모델의 Amazon SageMaker Model Cards에서 정보를 봅니다.
+ 모델 계보에서 추적성 및 재현성을 확인합니다.
+ 모델 수명 주기 동안 모델이 진행할 수 있는 스테이징 구조를 정의합니다.
+ 모델의 승인 상태를 관리합니다.
+ 모델을 프로덕션에 배포합니다.
+ CI/CD를 사용하여 모델 배포를 자동화합니다.
+ 다른 사용자와 모델을 공유합니다.

다양한 버전의 모델을 포함하는 SageMaker 모델 레지스트리 모델(패키지) 그룹을 생성하여 모델을 카탈로그화합니다. 특정 문제를 해결하기 위해 훈련시킨 모든 모델을 추적하는 모델 그룹을 생성할 수 있습니다. 그런 다음 훈련시킨 각 모델을 등록하면 모델 레지스트리가 해당 모델을 모델 그룹에 새 모델 버전으로 추가할 수 있습니다. 마지막으로, 모델 그룹을 SageMaker 모델 레지스트리 컬렉션으로 추가로 구성하여 모델 그룹 카테고리를 생성할 수 있습니다. 일반적인 워크플로는 다음과 같을 수 있습니다.
+ 모델 그룹을 생성합니다.
+ 모델을 학습시키는 ML 파이프라인을 만듭니다. SageMaker Pipelines에 대한 자세한 내용은 [Pipelines 작업](pipelines-build.md)섹션을 참조하세요.
+ ML 파이프라인을 실행할 때마다 모델 버전을 생성하여 첫 단계에서 만든 모델 그룹에 등록합니다.
+ 모델 그룹을 하나 이상의 모델 레지스트리 컬렉션에 추가합니다.

모델, 모델 버전 및 모델 그룹을 생성하고 사용하는 방법에 대한 자세한 내용은 [모델 레지스트리 모델, 모델 버전, 모델 그룹](model-registry-models.md)섹션을 참조하세요. 선택적으로 모델 그룹을 컬렉션으로 추가로 그룹화하려면 [모델 레지스트리 컬렉션](modelcollections.md)섹션을 참조하세요.

# 모델 레지스트리 모델, 모델 버전, 모델 그룹
<a name="model-registry-models"></a>

SageMaker 모델 레지스트리는 각 그룹에 모델 패키지가 있는 여러 모델(패키지) 그룹으로 구성되어 있습니다. 이러한 모델 그룹은 하나 이상의 컬렉션에 선택적으로 추가할 수 있습니다. 모델 그룹의 각 모델 패키지는 훈련된 모델에 해당합니다. 각 모델 패키지의 버전은 1부터 시작하는 숫자 값이며, 새 모델 패키지가 모델 그룹에 추가될 때마다 증가합니다. 예를 들어, 모델 그룹에 5개의 모델 패키지를 추가한 경우 모델 패키지 버전은 1, 2, 3, 4, 5가 됩니다.

 모델 패키지는 모델 레지스트리에 버전이 지정된 엔터티로 등록된 실제 모델입니다. SageMaker AI에는 두 가지 유형의 모델 패키지가 있습니다. 하나는 AWS 마켓플레이스에서 사용되고 다른 유형은 모델 레지스트리에서 사용됩니다. AWS 마켓플레이스에서 사용되는 모델 패키지는 버전 관리가 가능한 엔터티가 아니며 모델 레지스트리의 모델 그룹과 연결되지 않습니다. 모델 레지스트리는 재훈련한 모든 새 모델을 받아 버전을 제공하고 모델 레지스트리 내의 모델 그룹에 할당합니다. 다음 이미지는 25개의 연속적으로 버전 관리된 모델을 포함하는 모델 그룹의 예를 보여 줍니다. AWS Marketplace에서 사용되는 모델 패키지에 대한 자세한 내용은 섹션을 참조하세요[의 알고리즘 및 패키지 AWS Marketplace](sagemaker-marketplace.md).

모델 레지스트리에서 사용되는 모델 패키지는 버전이 지정되며 모델 그룹과 **연결되어야 합니다**. 이 모델 패키지 유형의 ARN은 `'arn:aws:sagemaker:region:account:model-package-group/version'`와 같은 구조를 가집니다.

다음 항목에서는 모델 레지스트리에서 모델, 모델 버전 및 모델 그룹을 생성하고 사용하는 방법을 보여줍니다.

**Topics**
+ [

# 모델 그룹 생성
](model-registry-model-group.md)
+ [

# 모델 그룹 삭제
](model-registry-delete-model-group.md)
+ [

# 모델 버전 등록
](model-registry-version.md)
+ [

# 모델 그룹 및 버전 보기
](model-registry-view.md)
+ [

# 모델 버전 세부 정보 업데이트
](model-registry-details.md)
+ [

# 모델 버전 비교
](model-registry-version-compare.md)
+ [

# 모델 그룹과 모델 버전 태그 확인 및 관리
](model-registry-tags.md)
+ [

# 모델 버전 삭제
](model-registry-delete-model-version.md)
+ [

# 모델 수명 주기에 맞는 스테이징 구조
](model-registry-staging-construct.md)
+ [

# 모델 승인 상태 업데이트
](model-registry-approve.md)
+ [

# Python을 사용하여 레지스트리에서 모델 배포
](model-registry-deploy.md)
+ [

# Studio에서 모델 배포
](model-registry-deploy-studio.md)
+ [

# 교차 계정 검색 가능성
](model-registry-ram.md)
+ [

# 모델 배포 기록 보기
](model-registry-deploy-history.md)
+ [

# Studio에서 모델 계보 세부 정보 보기
](model-registry-lineage-view-studio.md)

# 모델 그룹 생성
<a name="model-registry-model-group"></a>

모델 그룹에는 모델의 각기 다른 버전이 포함되어 있습니다. 특정 문제를 해결하기 위해 훈련시킨 모든 모델을 추적하는 모델 그룹을 생성할 수 있습니다. AWS SDK for Python (Boto3) 또는 Amazon SageMaker Studio 콘솔을 사용하여 모델 그룹을 생성합니다.

## 모델 그룹 생성(Boto3)
<a name="model-registry-package-group-api"></a>

**중요**  
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 [SageMaker AI 리소스 태그 지정을 위한 권한 제공](security_iam_id-based-policy-examples.md#grant-tagging-permissions) 섹션을 참조하세요.  
SageMaker 리소스를 만들 수 있는 권한을 부여하는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md)에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

Boto3를 사용하여 모델 그룹을 만들려면 `create_model_package_group` API 작업을 직접 호출하고 이름과 설명을 파라미터로 지정합니다. 다음 예시에서는 모델 그룹을 생성하는 방법을 보여 줍니다. `create_model_package_group` 호출에 대한 응답은 새 모델 그룹의 Amazon 리소스 이름(ARN)입니다.

먼저 필요한 패키지를 가져와서 SageMaker AI Boto3 클라이언트를 설정합니다.

```
import time
import os
from sagemaker import get_execution_role, session
import boto3

region = boto3.Session().region_name

role = get_execution_role()

sm_client = boto3.client('sagemaker', region_name=region)
```

이제 모델 그룹을 생성합니다.

```
import time
model_package_group_name = "scikit-iris-detector-" + str(round(time.time()))
model_package_group_input_dict = {
 "ModelPackageGroupName" : model_package_group_name,
 "ModelPackageGroupDescription" : "Sample model package group"
}

create_model_package_group_response = sm_client.create_model_package_group(**model_package_group_input_dict)
print('ModelPackageGroup Arn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))
```

## 모델 그룹 만들기(Studio 또는 Studio Classic)
<a name="model-registry-package-group-studio"></a>

Amazon SageMaker Studio 콘솔에서 모델 그룹을 만들려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. **등록**을 선택한 다음 **모델 그룹**을 선택합니다.

1. **모델 그룹 등록** 대화 상자에서 다음 정보를 입력합니다.
   + **모델 그룹 이름** 필드에 새 모델 그룹의 이름을 입력합니다.
   + (선택 사항) **설명** 필드에 모델 그룹 설명을 입력합니다.
   + (선택 사항) **태그** 필드에 모델 그룹과 연결할 키-값 쌍을 입력합니다. 태그 사용에 대한 자세한 내용은AWS 일반 참조의 [AWS 리소스 태깅](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)을 참조하세요.**

1. **모델 그룹 등록**을 선택합니다.

1. (선택 사항) **모델** 페이지에서 **등록된 모델** 탭을 선택한 다음 **모델 그룹**을 선택합니다. 새로 만든 모델 그룹이 모델 그룹 목록에 나타나는지 확인합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **작업**을 선택한 후 **모델 그룹 생성**을 선택합니다.

1. **모델 그룹 생성** 대화 상자에서 다음 정보를 입력합니다.
   + **모델 그룹 이름** 필드에 새 모델 그룹의 이름을 입력합니다.
   + (선택 사항) **설명** 필드에 모델 그룹 설명을 입력합니다.
   + (선택 사항) **태그** 필드에 모델 그룹과 연결할 키-값 쌍을 입력합니다. 태그 사용에 대한 자세한 내용은AWS 일반 참조의 [AWS 리소스 태깅](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)을 참조하세요.**
   + (선택 사항) **프로젝트** 필드에서 모델 그룹을 연결할 프로젝트를 선택합니다. 프로젝트에 대한 자세한 내용은 [SageMaker 프로젝트를 통한 MLOps 자동화](sagemaker-projects.md)섹션을 참조하세요.

1. **모델 그룹 생성**을 선택합니다.

------

# 모델 그룹 삭제
<a name="model-registry-delete-model-group"></a>

이 절차는 Amazon SageMaker Studio Classic에서 모델 그룹을 삭제하는 방법을 보여줍니다. 모델 그룹을 삭제하면 모델 그룹에 있는 모델 버전에 대한 액세스 권한이 상실됩니다.

## 모델 그룹 삭제(Studio 또는 Studio Classic)
<a name="model-registry-delete-model-group-studio"></a>

**중요**  
빈 모델 그룹만 삭제할 수 있습니다. 모델 그룹을 삭제하기 전에 모델 버전이 있는 경우 제거하세요.

Amazon SageMaker Studio 콘솔에서 모델 그룹을 삭제하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 삭제하려는 모델 그룹 이름 옆의 확인란을 선택합니다.

1. 모델 그룹 목록의 오른쪽 상단 모서리 위에 있는 세로 줄임표를 선택하고 **삭제**를 선택합니다.

1. **모델 그룹 삭제** 대화 상자에서 **예, 모델 그룹 삭제**를 선택합니다.

1. **삭제**를 선택합니다.

1. 삭제된 모델 그룹이 더 이상 모델 그룹 목록에 나타나지 않는지 확인합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다. 모델 그룹 목록이 나타납니다.

1. 모델 그룹 목록에서 삭제하려는 모델 그룹 이름을 선택합니다.

1. 오른쪽 상단에서 **제거**를 선택합니다.

1. 확인 대화 상자에서 `REMOVE`를 입력합니다.

1. **제거**를 선택합니다.

------

# 모델 버전 등록
<a name="model-registry-version"></a>

모델이 속한 모델 그룹을 지정하는 모델 버전을 생성하여 Amazon SageMaker AI 모델을 등록할 수 있습니다. 모델 버전에는 모델 아티팩트(모델의 훈련된 가중치)을 포함해야 하고 선택적으로 모델의 추론 코드를 포함할 수 있습니다.

*추론 파이프라인*은 추론 요청을 처리하는 2\$115개의 컨테이너로 이루어진 선형 시퀀스로 구성된 SageMaker AI 모델입니다. 컨테이너와 관련 환경 변수를 지정하여 추론 파이프라인을 등록합니다. 추론 형식에 대한 자세한 정보는 [Amazon SageMaker AI의 추론 파이프라인](inference-pipelines.md)섹션을 참조하세요.

컨테이너와 관련 환경 변수를 지정하여 추론 파이프라인이 있는 모델을 등록합니다. AWS SDK for Python (Boto3) Amazon SageMaker Studio 콘솔을 사용하거나 SageMaker AI 모델 구축 파이프라인에서 단계를 생성하여 추론 파이프라인으로 모델 버전을 생성하려면 다음 단계를 사용합니다.

**Topics**
+ [

## 모델 버전 등록(SageMaker AI Pipelines)
](#model-registry-pipeline)
+ [

## 모델 버전 등록(Boto3)
](#model-registry-version-api)
+ [

## 모델 버전 등록(Studio 또는 Studio Classic)
](#model-registry-studio)
+ [

## 다른 계정에서 모델 버전 등록
](#model-registry-version-xaccount)

## 모델 버전 등록(SageMaker AI Pipelines)
<a name="model-registry-pipeline"></a>

SageMaker AI 모델 구축 파이프라인을 사용하여 모델 버전을 등록하려면 파이프라인에서 `RegisterModel` 단계를 생성하세요. 파이프라인의 일부로 `RegisterModel`단계 생성에 대한 자세한 내용은 [8단계: 모델 패키지를 만들기 위한 모델 등록 단계 정의](define-pipeline.md#define-pipeline-register)섹션을 참조하세요.

## 모델 버전 등록(Boto3)
<a name="model-registry-version-api"></a>

Boto3를 사용하여 모델 버전을 등록하려면 `create_model_package` API 작업을 직접 호출합니다.

먼저 `create_model_package` API 작업에 전달할 파라미터 딕셔너리를 설정합니다.

```
# Specify the model source
model_url = "s3://your-bucket-name/model.tar.gz"

modelpackage_inference_specification =  {
    "InferenceSpecification": {
      "Containers": [
         {
            "Image": image_uri,
	    "ModelDataUrl": model_url
         }
      ],
      "SupportedContentTypes": [ "text/csv" ],
      "SupportedResponseMIMETypes": [ "text/csv" ],
   }
 }

# Alternatively, you can specify the model source like this:
# modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url

create_model_package_input_dict = {
    "ModelPackageGroupName" : model_package_group_name,
    "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)",
    "ModelApprovalStatus" : "PendingManualApproval"
}
create_model_package_input_dict.update(modelpackage_inference_specification)
```

그런 다음 방금 설정한 파라미터 딕셔너리를 전달하여 `create_model_package` API 작업을 직접 호출합니다.

```
create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict)
model_package_arn = create_model_package_response["ModelPackageArn"]
print('ModelPackage Version ARN : {}'.format(model_package_arn))
```

## 모델 버전 등록(Studio 또는 Studio Classic)
<a name="model-registry-studio"></a>

Amazon SageMaker Studio 콘솔에서 모델 버전을 등록하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창의 메뉴에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**과 **내 모델**을 선택합니다.

1. **등록**을 선택합니다. 그러면 **모델 등록** 페이지가 열립니다.

1. **모델 등록** 페이지에 제공된 지침을 따릅니다.

1. 선택한 사항을 검토한 후 **등록**을 선택합니다. 완료되면 모델 버전 **개요** 페이지로 이동합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **버전 등록** 양식을 엽니다. 이 작업을 두 가지 방법으로 수행할 수 있습니다.
   + **작업**을 선택한 후 **모델 버전 생성**을 선택합니다.
   + 모델 버전을 생성하려는 모델 그룹의 이름을 선택한 다음 **모델 버전 생성**을 선택합니다.

1. **모델 버전 등록** 양식에 다음 정보를 입력합니다.
   + **모델 패키지 그룹 이름** 드롭다운에서 모델 그룹 이름을 선택합니다.
   + (선택 사항) 모델 버전에 대한 설명을 입력합니다.
   + **모델 승인 상태** 드롭다운에서 버전 승인 상태를 선택합니다.
   + (선택 사항) **사용자 지정 메타데이터** 필드에서 사용자 지정 태그를 키-값 쌍으로 추가합니다.

1. **다음**을 선택합니다.

1. **추론 사양** 양식에 다음 정보를 입력합니다.
   + 추론 이미지 위치를 입력합니다.
   + 모델 데이터 아티팩트 위치를 입력합니다.
   + (선택 사항) 변환 및 실시간 추론 작업에 사용할 이미지와 지원되는 입력 및 출력 MIME 유형에 대한 정보를 입력합니다.

1. **다음**을 선택합니다.

1. (선택 사항) 엔드포인트 권장 사항에 도움이 되는 세부 정보를 제공합니다.

1. **다음**을 선택합니다.

1. (선택 사항) 포함하려는 모델 지표를 선택합니다.

1. **다음**을 선택합니다.

1. 표시된 설정이 올바른지 확인하고 **모델 버전 등록**을 선택합니다. 이후에 오류 메시지가 있는 모드 창이 표시되면 **보기**(메시지 옆)를 선택하여 오류의 원인을 확인합니다.

1. 상위 모델 그룹 페이지에 새 모델 버전이 나타나는지 확인합니다.

------

## 다른 계정에서 모델 버전 등록
<a name="model-registry-version-xaccount"></a>

다른 AWS 계정에서 생성한 모델 그룹에 모델 버전을 등록하려면 교차 계정 AWS Identity and Access Management 리소스 정책을 추가하여 해당 계정을 활성화해야 합니다. 예를 들어 조직의 한 AWS 계정은 모델 훈련을 담당하고 다른 계정은 모델 관리, 배포 및 업데이트를 담당합니다. IAM 리소스 정책을 생성하여 이 사례에 대한 액세스 권한을 부여하려는 특정 계정 리소스에 정책을 적용합니다. 의 교차 계정 리소스 정책에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [교차 계정 정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)을 AWS참조하세요.

다른 계정이 리소스 소유자 계정의 모델 패키지 그룹을 볼 수 있도록 하는 교차 계정 검색 기능을 활성화하려면 [교차 계정 검색 가능성](model-registry-ram.md) 섹션을 참조하세요.

**참고**  
또한 계정 간 모델 배포를 위한 훈련 중에 KMS 키를 사용하여 [출력 데이터 구성](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) 작업을 암호화해야 합니다.

SageMaker AI에서 교차 계정 모델 레지스트리를 활성화하려면 모델 버전이 포함된 모델 그룹에 교차 계정 리소스 정책을 제공해야 합니다. 다음은 모델 그룹을 위한 교차 계정 정책을 생성하고 이러한 정책을 해당 특정 리소스에 적용하는 예시입니다.

모델 그룹에 모델 교차 계정을 등록하는 소스 계정에서 다음 구성을 설정해야 합니다. 이 예시에서 소스 계정은 모델 훈련 계정이며, 이 계정은 모델 교차 계정을 훈련한 다음 모델 레지스트리 계정의 모델 레지스트리에 등록합니다.

이 예시에서는 이전에 다음 변수를 정의했다고 가정합니다.
+ `sm_client` - SageMaker AI Boto3 클라이언트입니다.
+ `model_package_group_name` - 액세스를 허용하려는 모델 그룹입니다.
+ `model_package_group_arn` - 교차 계정 액세스를 허용하려는 모델 그룹 ARN입니다.
+ `bucket` - 모델 훈련 아티팩트가 저장되는 Amazon S3 버킷입니다.

다른 계정에서 생성한 모델을 배포하려면 사용자에게 SageMaker AI 작업에 액세스할 수 있는 역할(예: `AmazonSageMakerFullAccess` 관리형 정책이 있는 역할)이 있어야 합니다. SageMaker AI 관리형 정책에 대한 자세한 정보는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md) 섹션을 참조하세요.

### 필수 IAM 리소스 정책
<a name="model-registry-version-xaccount-policies"></a>

다음 다이어그램은 교차 계정 모델 등록을 허용하는 데 필요한 정책을 보여줍니다. 그림과 같이 모델을 모델 레지스트리 계정에 제대로 등록하려면 모델 훈련 중에 이러한 정책을 활성화해야 합니다.

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


Amazon ECR, Amazon S3 및 AWS KMS 정책은 다음 코드 샘플에 나와 있습니다.

**샘플 Amazon ECR 정책**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:Describe*"
            ]
        }
    ]
}
```

------

**샘플 Amazon S3 정책**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetObjectAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

**샘플 AWS KMS 정책**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### 계정에 리소스 정책 적용
<a name="model-registry-version-xaccount-policy-usage"></a>

다음 정책 구성은 이전 섹션에서 설명한 정책을 적용하며 모델 훈련 계정에 입력해야 합니다.

```
import json

# The Model Registry account id of the Model Group 
model_registry_account = "111111111111"

# The model training account id where training happens
model_training_account = "222222222222"

# 1. Create a policy for access to the ECR repository 
# in the model training account for the Model Registry account Model Group
ecr_repository_policy = {"Version": "2012-10-17",		 	 	 
    "Statement": [{"Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": {
          "AWS": f"arn:aws:iam::{model_registry_account}:root"
        },
        "Action": [
          "ecr:BatchGetImage",
          "ecr:Describe*"
        ]
    }]
}

# Convert the ECR policy from JSON dict to string
ecr_repository_policy = json.dumps(ecr_repository_policy)

# Set the new ECR policy
ecr = boto3.client('ecr')
response = ecr.set_repository_policy(
    registryId = model_training_account,
    repositoryName = "decision-trees-sample",
    policyText = ecr_repository_policy
)

# 2. Create a policy in the model training account for access to the S3 bucket 
# where the model is present in the Model Registry account Model Group
bucket_policy = {"Version": "2012-10-17",		 	 	 
    "Statement": [{"Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": {"AWS": f"arn:aws:iam::{model_registry_account}:root"
        },
        "Action": [
          "s3:GetObject",
          "s3:GetBucketAcl",
          "s3:GetObjectAcl"
        ],
        "Resource": [
          "arn:aws:s3:::{bucket}/*",
	  "Resource: arn:aws:s3:::{bucket}"
        ]
    }]
}

# Convert the S3 policy from JSON dict to string
bucket_policy = json.dumps(bucket_policy)

# Set the new bucket policy
s3 = boto3.client("s3")
response = s3.put_bucket_policy(
    Bucket = bucket,
    Policy = bucket_policy)

# 3. Create the KMS grant for the key used during training for encryption
# in the model training account to the Model Registry account Model Group
client = boto3.client("kms")

response = client.create_grant(
    GranteePrincipal=model_registry_account,
    KeyId=kms_key_id
    Operations=[
        "Decrypt",
        "GenerateDataKey",
    ],
)
```

모델 그룹이 있는 모델 레지스트리 계정에 다음 구성을 넣어야 합니다.

```
# The Model Registry account id of the Model Group 
model_registry_account = "111111111111"

# 1. Create policy to allow the model training account to access the ModelPackageGroup
model_package_group_policy = {"Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPermModelPackageVersion",
            "Effect": "Allow",
            "Principal": {"AWS": f"arn:aws:iam::{model_training_account}:root"},
            "Action": ["sagemaker:CreateModelPackage"],
            "Resource": f"arn:aws:sagemaker:{region}:{model_registry_account}:model-package/{model_package_group_name}/*"
        }
    ]
}

# Convert the policy from JSON dict to string
model_package_group_policy = json.dumps(model_package_group_policy)

# Set the new policy
response = sm_client.put_model_package_group_policy(
    ModelPackageGroupName = model_package_group_name,
    ResourcePolicy = model_package_group_policy)
```

마지막으로, 모델 훈련 계정의 `create_model_package`작업을 사용하여 교차 계정에 모델 패키지를 등록합니다.

```
# Specify the model source
model_url = "s3://{bucket}/model.tar.gz"

#Set up the parameter dictionary to pass to the create_model_package API operation
modelpackage_inference_specification =  {
    "InferenceSpecification": {
        "Containers": [
            {
                "Image": f"{model_training_account}.dkr.ecr.us-east-2.amazonaws.com/decision-trees-sample:latest",
                "ModelDataUrl": model_url
            }
        ],
        "SupportedContentTypes": [ "text/csv" ],
        "SupportedResponseMIMETypes": [ "text/csv" ],
    }
}

# Alternatively, you can specify the model source like this:
# modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url

create_model_package_input_dict = {
    "ModelPackageGroupName" : model_package_group_arn,
    "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)",
    "ModelApprovalStatus" : "PendingManualApproval"
}
create_model_package_input_dict.update(modelpackage_inference_specification)

# Create the model package in the Model Registry account
create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict)
model_package_arn = create_model_package_response["ModelPackageArn"]
print('ModelPackage Version ARN : {}'.format(model_package_arn))
```

# 모델 그룹 및 버전 보기
<a name="model-registry-view"></a>

모델 그룹 및 버전은 모델을 구성하는 데 도움이 됩니다. AWS SDK for Python (Boto3) (Boto3) 또는 Amazon SageMaker Studio 콘솔을 사용하여 모델 그룹의 모델 버전 목록을 볼 수 있습니다.

## 그룹 내 모델 버전 목록 보기
<a name="model-registry-view-list"></a>

모델 그룹과 관련된 모든 모델 버전을 볼 수 있습니다. 모델 그룹이 특정 ML 문제를 해결하기 위해 훈련한 모든 모델을 대표하는 경우 해당 관련 모델을 모두 볼 수 있습니다.

### 그룹 내 모델 버전 목록 보기(Boto3)
<a name="model-registry-view-list-api"></a>

Boto3를 사용하여 모델 그룹과 관련된 모델 버전을 보려면 `list_model_packages` API 작업을 직접 호출하고 모델 그룹의 이름을 `ModelPackageGroupName` 파라미터 값으로 전달합니다. 다음 코드는 [모델 그룹 생성(Boto3)](model-registry-model-group.md#model-registry-package-group-api)에서 생성한 모델 그룹과 관련된 모델 버전을 나열합니다.

```
sm_client.list_model_packages(ModelPackageGroupName=model_package_group_name)
```

### 그룹의 모델 버전 목록 보기(Studio 또는 Studio Classic)
<a name="model-registry-view-list-studio"></a>

Amazon SageMaker Studio 콘솔에서 모델 그룹의 모델 버전 목록을 보려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창의 메뉴에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹의 왼쪽에 있는 꺾쇠괄호를 선택합니다.

1. 모델 그룹의 모델 버전 목록이 표시됩니다.

1. (선택 사항) 표시된 경우 **모두 보기**를 선택하여 추가 모델 버전을 봅니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹의 모델 버전 목록이 있는 새 탭이 나타납니다.

------

# 모델 버전 세부 정보 업데이트
<a name="model-registry-details"></a>

 AWS SDK for Python (Boto3) 또는 Amazon SageMaker Studio 콘솔을 사용하여 특정 모델 버전의 세부 정보를 보고 업데이트할 수 있습니다.

**중요**  
Amazon SageMaker AI는 Model Cards를 Model Registry에 통합합니다. Model Registry에 등록된 모델 패키지에는 모델 패키지의 구성 요소로 간소화된 Model Card가 포함됩니다. 자세한 내용은 [모델 패키지 모델 카드 스키마(Studio)](#model-card-schema) 단원을 참조하십시오.

## 모델 버전 세부 정보 확인 및 업데이트(Boto3)
<a name="model-registry-details-api"></a>

Boto3를 사용하여 모델 버전의 세부 정보를 보려면 다음 단계를 수행합니다.

1. `list_model_packages` API 작업을 직접 호출하여 모델 그룹의 모델 버전을 확인합니다.

   ```
   sm_client.list_model_packages(ModelPackageGroupName="ModelGroup1")
   ```

   응답은 모델 패키지 요약 목록입니다. 이 목록에서 모델 버전의 Amazon 리소스 이름(ARN)을 가져올 수 있습니다.

   ```
   {'ModelPackageSummaryList': [{'ModelPackageGroupName': 'AbaloneMPG-16039329888329896',
      'ModelPackageVersion': 1,
      'ModelPackageArn': 'arn:aws:sagemaker:us-east-2:123456789012:model-package/ModelGroup1/1',
      'ModelPackageDescription': 'TestMe',
      'CreationTime': datetime.datetime(2020, 10, 29, 1, 27, 46, 46000, tzinfo=tzlocal()),
      'ModelPackageStatus': 'Completed',
      'ModelApprovalStatus': 'Approved'}],
    'ResponseMetadata': {'RequestId': '12345678-abcd-1234-abcd-aabbccddeeff',
     'HTTPStatusCode': 200,
     'HTTPHeaders': {'x-amzn-requestid': '12345678-abcd-1234-abcd-aabbccddeeff',
      'content-type': 'application/x-amz-json-1.1',
      'content-length': '349',
      'date': 'Mon, 23 Nov 2020 04:56:50 GMT'},
     'RetryAttempts': 0}}
   ```

1. 모델 버전의 세부 정보를 보려면 `describe_model_package`를 호출합니다. `list_model_packages` 호출 출력에서 가져온 모델 버전의 ARN을 전달합니다.

   ```
   sm_client.describe_model_package(ModelPackageName="arn:aws:sagemaker:us-east-2:123456789012:model-package/ModelGroup1/1")
   ```

   이 호출의 출력은 모델 버전 세부 정보가 포함된 JSON 객체입니다.

   ```
   {'ModelPackageGroupName': 'ModelGroup1',
    'ModelPackageVersion': 1,
    'ModelPackageArn': 'arn:aws:sagemaker:us-east-2:123456789012:model-package/ModelGroup/1',
    'ModelPackageDescription': 'Test Model',
    'CreationTime': datetime.datetime(2020, 10, 29, 1, 27, 46, 46000, tzinfo=tzlocal()),
    'InferenceSpecification': {'Containers': [{'Image': '257758044811.dkr.ecr.us-east-2.amazonaws.com/sagemaker-xgboost:1.0-1-cpu-py3',
       'ImageDigest': 'sha256:99fa602cff19aee33297a5926f8497ca7bcd2a391b7d600300204eef803bca66',
       'ModelDataUrl': 's3://sagemaker-us-east-2-123456789012/ModelGroup1/pipelines-0gdonccek7o9-AbaloneTrain-stmiylhtIR/output/model.tar.gz'}],
     'SupportedTransformInstanceTypes': ['ml.m5.xlarge'],
     'SupportedRealtimeInferenceInstanceTypes': ['ml.t2.medium', 'ml.m5.xlarge'],
     'SupportedContentTypes': ['text/csv'],
     'SupportedResponseMIMETypes': ['text/csv']},
    'ModelPackageStatus': 'Completed',
    'ModelPackageStatusDetails': {'ValidationStatuses': [],
     'ImageScanStatuses': []},
    'CertifyForMarketplace': False,
    'ModelApprovalStatus': 'PendingManualApproval',
    'LastModifiedTime': datetime.datetime(2020, 10, 29, 1, 28, 0, 438000, tzinfo=tzlocal()),
    'ResponseMetadata': {'RequestId': '12345678-abcd-1234-abcd-aabbccddeeff',
     'HTTPStatusCode': 200,
     'HTTPHeaders': {'x-amzn-requestid': '212345678-abcd-1234-abcd-aabbccddeeff',
      'content-type': 'application/x-amz-json-1.1',
      'content-length': '1038',
      'date': 'Mon, 23 Nov 2020 04:59:38 GMT'},
     'RetryAttempts': 0}}
   ```

### 모델 패키지 모델 카드 스키마(Studio)
<a name="model-card-schema"></a>

모델 버전과 관련된 모든 세부 정보는 모델 패키지의 모델 카드에 캡슐화됩니다. 모델 패키지의 모델 카드는 Amazon SageMaker Model Card의 특수 용도이며 스키마가 간소화되어 있습니다. 모델 패키지 모델 카드 스키마는 다음 확장 가능한 드롭다운에 표시됩니다.

#### 모델 패키지 모델 카드 스키마
<a name="collapsible-section-model-package-model-card-schema"></a>

```
{
  "title": "SageMakerModelCardSchema",
  "description": "Schema of a model package’s model card.",
  "version": "0.1.0",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "model_overview": {
      "description": "Overview about the model.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "model_creator": {
          "description": "Creator of model.",
          "type": "string",
          "maxLength": 1024
        },
        "model_artifact": {
          "description": "Location of the model artifact.",
          "type": "array",
          "maxContains": 15,
          "items": {
            "type": "string",
            "maxLength": 1024
          }
        }
      }
    },
    "intended_uses": {
      "description": "Intended usage of model.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "purpose_of_model": {
          "description": "Reason the model was developed.",
          "type": "string",
          "maxLength": 2048
        },
        "intended_uses": {
          "description": "Intended use cases.",
          "type": "string",
          "maxLength": 2048
        },
        "factors_affecting_model_efficiency": {
          "type": "string",
          "maxLength": 2048
        },
        "risk_rating": {
          "description": "Risk rating for model card.",
          "$ref": "#/definitions/risk_rating"
        },
        "explanations_for_risk_rating": {
          "type": "string",
          "maxLength": 2048
        }
      }
    },
    "business_details": {
      "description": "Business details of model.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "business_problem": {
          "description": "Business problem solved by the model.",
          "type": "string",
          "maxLength": 2048
        },
        "business_stakeholders": {
          "description": "Business stakeholders.",
          "type": "string",
          "maxLength": 2048
        },
        "line_of_business": {
          "type": "string",
          "maxLength": 2048
        }
      }
    },
    "training_details": {
      "description": "Overview about the training.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "objective_function": {
          "description": "The objective function for which the model is optimized.",
          "function": {
            "$ref": "#/definitions/objective_function"
          },
          "notes": {
            "type": "string",
            "maxLength": 1024
          }
        },
        "training_observations": {
          "type": "string",
          "maxLength": 1024
        },
        "training_job_details": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "training_arn": {
              "description": "SageMaker Training job ARN.",
              "type": "string",
              "maxLength": 1024
            },
            "training_datasets": {
              "description": "Location of the model datasets.",
              "type": "array",
              "maxContains": 15,
              "items": {
                "type": "string",
                "maxLength": 1024
              }
            },
            "training_environment": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "container_image": {
                  "description": "SageMaker training image URI.",
                  "type": "array",
                  "maxContains": 15,
                  "items": {
                    "type": "string",
                    "maxLength": 1024
                  }
                }
              }
            },
            "training_metrics": {
              "type": "array",
              "items": {
                "maxItems": 50,
                "$ref": "#/definitions/training_metric"
              }
            },
            "user_provided_training_metrics": {
              "type": "array",
              "items": {
                "maxItems": 50,
                "$ref": "#/definitions/training_metric"
              }
            },
            "hyper_parameters": {
              "type": "array",
              "items": {
                "maxItems": 100,
                "$ref": "#/definitions/training_hyper_parameter"
              }
            },
            "user_provided_hyper_parameters": {
              "type": "array",
              "items": {
                "maxItems": 100,
                "$ref": "#/definitions/training_hyper_parameter"
              }
            }
          }
        }
      }
    },
    "evaluation_details": {
      "type": "array",
      "default": [],
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "pattern": ".{1,63}"
          },
          "evaluation_observation": {
            "type": "string",
            "maxLength": 2096
          },
          "evaluation_job_arn": {
            "type": "string",
            "maxLength": 256
          },
          "datasets": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 1024
            },
            "maxItems": 10
          },
          "metadata": {
            "description": "Additional attributes associated with the evaluation results.",
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "maxLength": 1024
            }
          },
          "metric_groups": {
            "type": "array",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "name",
                "metric_data"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "pattern": ".{1,63}"
                },
                "metric_data": {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      {
                        "$ref": "#/definitions/simple_metric"
                      },
                      {
                        "$ref": "#/definitions/linear_graph_metric"
                      },
                      {
                        "$ref": "#/definitions/bar_chart_metric"
                      },
                      {
                        "$ref": "#/definitions/matrix_metric"
                      }
                    ]

                  }
                }
              }
            }
          }
        }
      }
    },
    "additional_information": {
      "additionalProperties": false,
      "type": "object",
      "properties": {
        "ethical_considerations": {
          "description": "Ethical considerations for model users.",
          "type": "string",
          "maxLength": 2048
        },
        "caveats_and_recommendations": {
          "description": "Caveats and recommendations for model users.",
          "type": "string",
          "maxLength": 2048
        },
        "custom_details": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/custom_property"
          }
        }
      }
    }
  },
  "definitions": {
    "source_algorithms": {
      "type": "array",
      "minContains": 1,
      "maxContains": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "algorithm_name"
        ],
        "properties": {
          "algorithm_name": {
            "description": "The name of the algorithm used to create the model package. The algorithm must be either an algorithm resource in your SageMaker AI account or an algorithm in AWS Marketplace that you are subscribed to.",
            "type": "string",
            "maxLength": 170
          },
          "model_data_url": {
            "description": "Amazon S3 path where the model artifacts, which result from model training, are stored.",
            "type": "string",
            "maxLength": 1024
          }
        }
      }
    },
    "inference_specification": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "containers"
      ],
      "properties": {
        "containers": {
          "description": "Contains inference related information used to create model package.",
          "type": "array",
          "minContains": 1,
          "maxContains": 15,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "image"
            ],
            "properties": {
              "model_data_url": {
                "description": "Amazon S3 path where the model artifacts, which result from model training, are stored.",
                "type": "string",
                "maxLength": 1024
              },
              "image": {
                "description": "Inference environment path. The Amazon Elastic Container Registry (Amazon ECR) path where inference code is stored.",
                "type": "string",
                "maxLength": 255
              },
              "nearest_model_name": {
                "description": "The name of a pre-trained machine learning benchmarked by an Amazon SageMaker Inference Recommender model that matches your model.",
                "type": "string"
              }
            }
          }
        }
      }
    },
    "risk_rating": {
      "description": "Risk rating of model.",
      "type": "string",
      "enum": [
        "High",
        "Medium",
        "Low",
        "Unknown"
      ]
    },
    "custom_property": {
      "description": "Additional property.",
      "type": "string",
      "maxLength": 1024
    },
    "objective_function": {
      "description": "Objective function for which the training job is optimized.",
      "additionalProperties": false,
      "properties": {
        "function": {
          "type": "string",
          "enum": [
            "Maximize",
            "Minimize"
          ]
        },
        "facet": {
          "type": "string",
          "maxLength": 63
        },
        "condition": {
          "type": "string",
          "maxLength": 63
        }
      }
    },
    "training_metric": {
      "description": "Training metric data.",
      "type": "object",
      "required": [
        "name",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "notes": {
          "type": "string",
          "maxLength": 1024
        },
        "value": {
          "type": "number"
        }
      }
    },
    "training_hyper_parameter": {
      "description": "Training hyperparameter.",
      "type": "object",
      "required": [
        "name",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "value": {
          "type": "string",
          "pattern": ".{1,255}"
        }
      }
    },
    "linear_graph_metric": {
      "type": "object",
      "required": [
        "name",
        "type",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "notes": {
          "type": "string",
          "maxLength": 1024
        },
        "type": {
          "type": "string",
          "enum": [
            "linear_graph"
          ]
        },
        "value": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "array",
                "items": {
                  "type": "number"
                },
                "minItems": 2,
                "maxItems": 2
              },
              "minItems": 1
            }
          ]
        },
        "x_axis_name": {
          "$ref": "#/definitions/axis_name_string"
        },
        "y_axis_name": {
          "$ref": "#/definitions/axis_name_string"
        }
      }
    },
    "bar_chart_metric": {
      "type": "object",
      "required": [
        "name",
        "type",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "notes": {
          "type": "string",
          "maxLength": 1024
        },
        "type": {
          "type": "string",
          "enum": [
            "bar_chart"
          ]
        },
        "value": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 1
            }
          ]
        },
        "x_axis_name": {
          "$ref": "#/definitions/axis_name_array"
        },
        "y_axis_name": {
          "$ref": "#/definitions/axis_name_string"
        }
      }
    },
    "matrix_metric": {
      "type": "object",
      "required": [
        "name",
        "type",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "notes": {
          "type": "string",
          "maxLength": 1024
        },
        "type": {
          "type": "string",
          "enum": [
            "matrix"
          ]
        },
        "value": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "array",
                "items": {
                  "type": "number"
                },
                "minItems": 1,
                "maxItems": 20
              },
              "minItems": 1,
              "maxItems": 20
            }
          ]
        },
        "x_axis_name": {
          "$ref": "#/definitions/axis_name_array"
        },
        "y_axis_name": {
          "$ref": "#/definitions/axis_name_array"
        }
      }
    },
    "simple_metric": {
      "description": "Metric data.",
      "type": "object",
      "required": [
        "name",
        "type",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "pattern": ".{1,255}"
        },
        "notes": {
          "type": "string",
          "maxLength": 1024
        },
        "type": {
          "type": "string",
          "enum": [
            "number",
            "string",
            "boolean"
          ]
        },
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 63
            },
            {
              "type": "boolean"
            }
          ]
        },
        "x_axis_name": {
          "$ref": "#/definitions/axis_name_string"
        },
        "y_axis_name": {
          "$ref": "#/definitions/axis_name_string"
        }
      }
    },
    "axis_name_array": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 63
      }
    },
    "axis_name_string": {
      "type": "string",
      "maxLength": 63
    }
  }
}
```

## 모델 버전 세부 정보 보기 및 업데이트(Studio 또는 Studio Classic)
<a name="model-registry-details-studio"></a>

모델 버전의 세부 정보를 보고 업데이트하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요. Studio Classic에서는 모델 버전의 승인 상태를 업데이트할 수 있습니다. 자세한 내용은 [모델 승인 상태 업데이트](model-registry-approve.md)을 참조하세요. 한편 Studio에서는 SageMaker AI가 모델 패키지에 대한 모델 카드를 만들고 모델 버전 UI는 모델 카드의 세부 정보를 업데이트하는 옵션을 제공합니다.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창의 메뉴에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 보려는 모델 버전이 포함된 모델 그룹의 이름을 선택합니다.

1. 모델 버전 목록에서 보려는 모델 버전의 이름을 선택합니다.

1. 다음 탭 중 하나를 선택합니다.
   + **훈련**: 성능 지표, 아티팩트, IAM 역할 및 암호화, 컨테이너를 포함하여 훈련 작업과 관련된 세부 정보를 보거나 편집합니다. 자세한 내용은 [훈련 작업 추가(Studio)](model-registry-details-studio-training.md) 단원을 참조하십시오.
   + **평가:** 성능 지표, 평가 데이터세트 및 보안과 같은 훈련 작업과 관련된 세부 정보를 보거나 편집합니다. 자세한 내용은 [평가 작업 추가(Studio)](model-registry-details-studio-evaluate.md) 단원을 참조하십시오.
   + **감사**: 모델의 비즈니스 목적, 사용량, 위험, 알고리즘 및 성능 제한과 같은 기술적 세부 정보와 관련된 개괄적인 수준의 세부 정보를 보거나 편집합니다. 자세한 내용은 [감사(정부) 정보 업데이트(Studio)](model-registry-details-studio-audit.md) 단원을 참조하십시오.
   + **배포**: 엔드포인트를 구성하는 추론 이미지 컨테이너 및 인스턴스의 위치를 보거나 편집합니다. 자세한 내용은 [배포 정보 업데이트(Studio)](model-registry-details-studio-deploy.md) 단원을 참조하십시오.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹의 모델 버전 목록이 있는 새 탭이 나타납니다.

1. 모델 버전 목록에서 세부 정보를 보려는 모델 버전의 이름을 선택합니다.

1. 모델 버전 탭이 열리면 다음 중 하나를 선택하여 모델 버전에 대한 세부 정보를 확인합니다.
   + **활동**: 승인 상태 업데이트와 같은 모델 버전의 이벤트를 표시합니다.
   + **모델 품질**: 모델 예측을 Ground Truth와 비교하는 모델 모니터 모델 품질 검사와 관련된 지표를 보고합니다. 모델 모니터 모델 품질 검사에 대한 자세한 내용은 [모델 품질](model-monitor-model-quality.md)섹션을 참조하세요.
   + **설명 가능성**: 훈련 데이터와 라이브 데이터에 있는 기능의 상대적 순위를 비교하는 모델 모니터 기능 속성 검사와 관련된 지표를 보고합니다. 모델 모니터 설명 가능성 검사에 대한 자세한 내용은 [프로덕션 환경의 모델에 대한 특성 어트리뷰션 드리프트](clarify-model-monitor-feature-attribution-drift.md)섹션을 참조하세요.
   + **바이어스**: 실시간 데이터의 분포를 훈련 데이터와 비교하는 모델 모니터 바이어스 드리프트 검사와 관련된 지표을 보고합니다. 모델 모니터 바이어스 드리프트 검사에 대한 자세한 내용은 [프로덕션 환경의 모델에 대한 바이어스 드리프트](clarify-model-monitor-bias-drift.md)섹션을 참조하세요.
   + **추론 추천**: 모델 및 샘플 페이로드를 기반으로 최적의 성능을 위한 초기 인스턴스 권장 사항을 제공합니다.
   + **부하 테스트**: 지연 시간 및 처리량 제한과 같은 특정 프로덕션 요구 사항을 제공할 때 선택한 인스턴스 유형에서 부하 테스트를 실행합니다.
   + **추론 사양**: 실시간 추론 및 변환 작업의 인스턴스 유형과 Amazon ECR 컨테이너에 대한 정보를 표시합니다.
   + **정보**: 모델 버전이 연결된 프로젝트, 모델을 생성한 파이프라인, 모델 그룹, Amazon S3에서의 모델 위치 등의 정보를 표시합니다.

------

# 훈련 작업 추가(Studio)
<a name="model-registry-details-studio-training"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 지정되었습니다. 다음 섹션은 업데이트된 Studio 환경 사용에 해당합니다. Studio Classic 애플리케이션 사용에 대한 자세한 내용은 [Amazon SageMaker Studio Classic](studio.md) 섹션을 참조하세요.

외부에서 만들거나 SageMaker AI를 사용하여 만든 훈련 작업 하나를 모델에 추가할 수 있습니다. SageMaker AI 훈련 작업을 추가하면 SageMaker는 **훈련** 탭의 모든 하위 페이지에 대한 필드를 미리 채웁니다. 외부에서 만든 훈련 작업을 추가하는 경우 훈련 작업과 관련된 세부 정보를 수동으로 추가해야 합니다.

**모델 패키지에 훈련 작업을 추가하려면 다음 단계를 완료하세요.**

1. **훈련** 탭을 선택합니다.

1. **추가**를 선택합니다. 이 옵션이 표시되지 않으면 이미 훈련 작업이 연결되어 있을 수 있습니다. 이 훈련 작업을 제거하려면 다음 지침을 완료하여 훈련 작업을 제거합니다.

1. SageMaker AI에서 만든 훈련 작업 또는 외부에서 만든 훈련 작업을 추가할 수 있습니다.

   1. SageMaker AI에서 만든 훈련 작업을 추가하려면 다음 단계를 완료하세요.

      1. **SageMaker AI**를 선택합니다.

      1. 추가하려는 훈련 작업 옆의 라디오 상자를 선택합니다.

      1. **추가**를 선택합니다.

   1. 외부에서 만든 훈련 작업을 추가하려면 다음 단계를 완료하세요.

      1. **사용자 지정**을 선택합니다.

      1. **이름** 필드에 사용자 지정 훈련 작업의 이름을 입력합니다.

      1. **추가**를 선택합니다.

# 훈련 작업 제거(Studio)
<a name="model-registry-details-studio-training-remove"></a>

다음 단계를 완료하여 모델에서 외부에서 만들거나 SageMaker AI를 사용하여 만든 훈련 작업을 제거할 수 있습니다.

**모델 패키지에서 훈련 작업을 제거하려면 다음 단계를 완료하세요.**

1. **학습**을 선택합니다.

1. **훈련** 탭에서 **기어** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Settings_squid.png))을 선택합니다.

1. 훈련 작업 옆의 **제거**를 선택합니다.

1. **예, <훈련 작업 이름>을(를) 제거하겠습니다**를 선택합니다.

1. **완료**를 선택합니다.

# 훈련 작업 세부 정보 업데이트(Studio)
<a name="model-registry-details-studio-training-update"></a>

다음 단계를 완료하여 외부에서 만들거나 SageMaker AI를 사용하여 만든 모델과 연결된 훈련 작업의 세부 정보를 업데이트합니다.

**훈련 작업과 관련된 세부 정보를 업데이트하고 보는 방법:**

1. **훈련** 탭에서 훈련 작업의 상태를 확인합니다. 상태는 모델 패키지에 훈련 작업을 추가한 경우 `Complete`이며, 추가하지 않은 경우 `Undefined`입니다.

1. 성능, 하이퍼파라미터, 식별 세부 정보 등 훈련 작업과 관련된 세부 정보를 보려면 **훈련** 탭을 선택합니다.

1. 모델 성능과 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **훈련** 탭의 왼쪽 사이드바에서 **성능**을 선택합니다.

   1. 훈련 작업과 관련된 **지표**를 봅니다. **성능** 페이지에는 이름, 값 및 지표와 관련하여 추가한 참고 사항별로 지표가 나열됩니다.

   1. (선택 사항) 기존 지표에 참고 사항을 추가하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. 나열된 지표에 참고 사항을 추가합니다.

      1. 모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

   1. 훈련 작업과 관련된 **사용자 지정 지표**를 봅니다. 사용자 지정 지표는 지표와 유사하게 형식이 지정됩니다.

   1. (선택 사항) 사용자 지정 지표를 추가하려면 다음 단계를 완료하세요.

      1. **추가**를 선택합니다.

      1. 새 지표의 이름, 값 및 선택적으로 참고 사항을 삽입합니다.

   1. (선택 사항) 사용자 지정 지표를 제거하려면 제거하려는 지표 옆에 있는 **휴지통** 아이콘을 선택합니다.

   1. **관찰** 상자에서 훈련 작업의 성능과 관련하여 추가한 참고 사항을 확인합니다.

   1. (선택 사항) 관찰을 추가하거나 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. **관찰** 텍스트 상자에 참고 사항을 추가하거나 업데이트합니다.

      1. 모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 모델 아티팩트와 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **훈련** 탭의 왼쪽 사이드바에서 **아티팩트**를 선택합니다.

   1. **위치(S3 URI)** 필드에서 훈련 데이터세트의 Amazon S3 위치를 확인합니다.

   1. **모델** 필드에서 훈련 작업에 포함한 다른 모델의 모델 아티팩트 이름과 Amazon S3 위치를 확인합니다.

   1. **아티팩트** 페이지의 필드를 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. 필드에 새 값을 입력합니다.

      1. 모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 하이퍼파라미터와 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **훈련** 탭의 왼쪽 사이드바에서 **하이퍼파라미터**를 선택합니다.

   1. SageMaker AI에서 제공한 하이퍼파라미터와 정의한 사용자 지정 하이퍼파라미터를 확인합니다. 각 하이퍼파라미터는 이름과 값으로 나열됩니다.

   1. 추가한 사용자 지정 하이퍼파라미터를 확인합니다.

   1. (선택 사항) 사용자 지정 하이퍼파라미터를 더 추가하려면 다음 단계를 완료하세요.

      1. **사용자 지정 하이퍼파라미터** 테이블의 오른쪽 상단 모서리 위에서 **추가**를 선택합니다. 비어 있는 새 필드 한 쌍이 나타납니다.

      1. 새 사용자 지정 하이퍼파라미터의 이름과 값을 입력합니다. 이러한 값은 자동으로 저장됩니다.

   1. (선택 사항) 사용자 지정 하이퍼파라미터를 제거하려면 하이퍼파라미터 오른쪽에 있는 **휴지통** 아이콘을 선택합니다.

1. 훈련 작업 환경과 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **훈련** 탭의 왼쪽 사이드바에서 **환경**을 선택합니다.

   1. SageMaker AI(SageMaker 훈련 작업의 경우) 또는 사용자(사용자 지정 훈련 작업의 경우)가 추가한 훈련 작업 컨테이너의 Amazon ECR URI 위치를 봅니다.

   1. (선택 사항) 훈련 작업 컨테이너를 더 추가하려면 **추가**를 선택한 다음 새 훈련 컨테이너의 URI를 입력합니다.

1. 훈련 작업의 훈련 작업 이름과 Amazon 리소스 이름(ARN)을 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **훈련** 탭의 왼쪽 사이드바에서 **세부 정보**를 선택합니다.

   1. 훈련 작업의 훈련 작업 이름과 ARN을 봅니다.

# 평가 작업 추가(Studio)
<a name="model-registry-details-studio-evaluate"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 지정되었습니다. 다음 섹션은 업데이트된 Studio 환경 사용에 해당합니다. Studio Classic 애플리케이션 사용에 대한 자세한 내용은 [Amazon SageMaker Studio Classic](studio.md) 섹션을 참조하세요.

모델을 등록한 후 하나 이상의 데이터세트로 모델을 테스트하여 성능을 평가할 수 있습니다. Amazon S3에서 하나 이상의 평가 작업을 추가하거나 모든 세부 정보를 수동으로 입력하여 자체 평가 작업을 정의할 수 있습니다. Amazon S3에서 작업을 추가하면 SageMaker AI는 **평가** 탭의 모든 하위 페이지에 대한 필드를 미리 채웁니다. 자체 평가 작업을 정의하는 경우 평가 작업과 관련된 세부 정보를 수동으로 추가해야 합니다.

**모델 패키지에 첫 번째 평가 작업을 추가하려면 다음 단계를 완료하세요.**

1. **평가** 탭을 선택합니다.

1. **추가**를 선택합니다.

1. Amazon S3 또는 사용자 지정 평가 작업에서 평가 작업을 추가할 수 있습니다.

   1. Amazon S3의 자료를 사용하여 평가 작업을 추가하려면 다음 단계를 완료하세요.

      1. **S3**를 선택합니다.

      1. 평가 작업의 이름을 입력합니다.

      1. 평가 작업의 출력 자료에 Amazon S3 위치를 입력합니다.

      1. **추가**를 선택합니다.

   1. 사용자 지정 평가 작업을 추가하려면 다음 단계를 완료하세요.

      1. **사용자 지정**을 선택합니다.

      1. 평가 작업의 이름을 입력합니다.

      1. **추가**를 선택합니다.

**모델 패키지에 평가 작업을 더 추가하려면 다음 단계를 완료하세요.**

1. **평가** 탭을 선택합니다.

1. **훈련** 탭에서 **기어** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Settings_squid.png))을 선택합니다.

1. 대화 상자에서 **추가**를 선택합니다.

1. Amazon S3 또는 사용자 지정 평가 작업에서 평가 작업을 추가할 수 있습니다.

   1. Amazon S3의 자료를 사용하여 평가 작업을 추가하려면 다음 단계를 완료하세요.

      1. **S3**를 선택합니다.

      1. 평가 작업의 이름을 입력합니다.

      1. 평가 작업의 출력 자료에 Amazon S3 위치를 입력합니다.

      1. **추가**를 선택합니다.

   1. 사용자 지정 평가 작업을 추가하려면 다음 단계를 완료하세요.

      1. **사용자 지정**을 선택합니다.

      1. 평가 작업의 이름을 입력합니다.

      1. **추가**를 선택합니다.

# 평가 작업 제거(Studio)
<a name="model-registry-details-studio-evaluate-remove"></a>

다음 단계를 완료하여 모델에서 외부에서 만들거나 SageMaker AI를 사용하여 만든 평가 작업을 제거할 수 있습니다.

**모델 패키지에서 평가 작업을 제거하려면 다음 단계를 완료하세요.**

1. **평가** 탭을 선택합니다.

1. **훈련** 탭에서 **기어** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/icons/Settings_squid.png))을 선택합니다.

1. (선택 사항) 목록에서 평가 작업을 찾으려면 검색 상자에 검색어를 입력하여 선택 목록의 범위를 좁힙니다.

1. 평가 작업 옆의 라디오 버튼을 선택합니다.

1. **** 제거를 선택합니다.

1. **예, <평가 작업 이름>을(를) 제거하겠습니다**를 선택합니다.

1. **완료**를 선택합니다.

# 평가 작업 업데이트(Studio)
<a name="model-registry-details-studio-evaluate-update"></a>

다음 단계를 완료하여 외부에서 만들거나 SageMaker AI를 사용하여 만든 모델과 연결된 평가 작업의 세부 정보를 업데이트합니다.

**평가 작업과 관련된 세부 정보를 업데이트하고 보는 방법:**

1. **평가** 탭에서 평가 작업의 상태를 확인합니다. 상태는 모델 패키지에 평가 작업을 추가한 경우 `Complete`이며, 추가하지 않은 경우 `Undefined`입니다.

1. 성능 및 아티팩트 위치와 같은 평가 작업과 관련된 세부 정보를 보려면 **평가** 탭을 선택합니다.

1. 평가 중에 모델 성능과 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **평가** 탭 사이드바에서 **성능**을 선택합니다.

   1. **지표** 목록에서 평가 작업과 관련된 지표를 봅니다. **지표** 목록에는 이름, 값 및 지표와 관련하여 추가한 참고 사항별로 개별 지표가 표시됩니다.

   1. **관찰** 상자에서 평가 작업의 성능과 관련하여 추가한 참고 사항을 확인합니다.

   1. 지표에 대한 **참고 사항** 필드 또는 **관찰** 필드를 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. **관찰** 텍스트 상자에 지표에 대한 메모를 입력합니다.

      1. 모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 평가 작업 데이터세트와 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **평가** 페이지의 왼쪽 사이드바에서 **아티팩트**를 선택합니다.

   1. 평가 작업에 사용된 데이터세트를 봅니다.

   1. (선택 사항) 데이터세트를 추가하려면 **추가**를 선택하고 데이터세트에 Amazon S3 URI를 입력합니다.

   1. (선택 사항) 데이터세트를 제거하려면 제거하려는 데이터세트 옆에 있는 **휴지통** 아이콘을 선택합니다.

1. 작업 이름 및 평가 작업 ARN을 보려면 **세부 정보**를 선택합니다.

# 감사(정부) 정보 업데이트(Studio)
<a name="model-registry-details-studio-audit"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 지정되었습니다. 다음 섹션은 업데이트된 Studio 환경 사용에 해당합니다. Studio Classic 애플리케이션 사용에 대한 자세한 내용은 [Amazon SageMaker Studio Classic](studio.md) 섹션을 참조하세요.

중요한 모델 세부 정보를 문서화하여 조직이 모델 거버넌스의 강력한 프레임워크를 수립하는 데 도움을 줍니다. 사용자와 팀원은 이러한 세부 정보를 참조하여 적절한 사용 사례에 모델을 사용하고, 모델의 비즈니스 도메인과 소유자를 알고, 모델 위험을 이해할 수 있습니다. 또한 모델에 기대되는 작동 방식과 성능 제한 사유에 대한 세부 정보를 저장할 수 있습니다.

**모델 거버넌스와 관련된 세부 정보를 보거나 업데이트하려면 다음 단계를 완료하세요.**

1. **감사** 탭에서 모델 카드의 승인 상태를 확인합니다. 상태는 다음과 같을 수 있습니다.
   + **초안**: 모델 카드가 여전히 초안입니다.
   + **승인 대기 중**: 모델 카드가 승인을 기다리고 있습니다.
   + **승인됨**: 모델 카드가 승인되었습니다.

1. 모델 카드의 승인 상태를 업데이트하려면 승인 상태 옆의 풀다운 메뉴를 선택하고 업데이트된 승인 상태를 선택합니다.

1. 모델 패키지 위험과 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **감사** 탭의 왼쪽 사이드바에서 **위험**을 선택합니다.

   1. 현재 위험 등급과 위험 등급에 대한 설명을 봅니다.

   1. 등급 또는 설명을 업데이트하려면 다음 단계를 완료하세요.

      1. **감사** 페이지의 오른쪽 상단 모서리에 있는 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. (선택 사항) 업데이트된 위험 등급을 선택합니다.

      1. (선택 사항) 위험 등급 설명을 업데이트합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 모델 패키지 사용과 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **감사** 탭의 왼쪽 사이드바에서 **사용**을 선택합니다.

   1. 다음 필드에 추가한 텍스트를 봅니다.
      + **문제 유형**: 모델을 빌드하는 데 사용되는 기계 학습 알고리즘의 범주입니다.
      + **알고리즘 유형:** 모델을 만드는 데 사용되는 특정 알고리즘입니다.
      + **용도:** 비즈니스 문제에서 모델의 현재 적용 방식입니다.
      + **모델 유효성에 영향을 미치는 요인:** 모델의 성능 제한 사항에 대한 참고 사항입니다.
      + **권장 용도**: 모델로 만들 수 있는 애플리케이션 유형, 합리적인 성능을 기대할 수 있는 시나리오 또는 모델에 사용할 데이터 유형입니다.
      + **윤리적 고려 사항**: 모델이 연령 또는 성별과 같은 요인에 따라 어떻게 차별할 수 있는지에 대한 설명입니다.

   1. 이전에 나열된 필드를 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. (선택 사항) **문제 유형** 및 **알고리즘 유형**에 대한 드롭다운 메뉴를 사용하여 필요한 경우 새 값을 선택합니다.

      1. (선택 사항) 나머지 필드의 텍스트 설명을 업데이트합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 모델 패키지의 이해관계자와 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **감사** 탭의 왼쪽 사이드바에서 **이해관계자**를 선택합니다.

   1. 현재 모델 소유자 및 만든 사람이 있는 경우 해당 소유자 및 만든 사람을 확인합니다.

   1. 모델 소유자 또는 만든 사람을 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. 모델 소유자 또는 모델 만든 사람 필드를 업데이트합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 모델 패키지가 해결하는 비즈니스 문제와 관련된 세부 정보를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **감사** 탭의 왼쪽 사이드바에서 **비즈니스**를 선택합니다.

   1. 모델이 해결하는 비즈니스 문제, 비즈니스 문제 이해관계자 및 사업부에 대한 현재 설명을 봅니다.

   1. **비즈니스** 탭의 필드를 업데이트하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. 필드의 설명을 업데이트합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

1. 모델의 기존 설명서(키-값 쌍으로 표시됨)를 업데이트하고 보려면 다음 단계를 완료하세요.

   1. **감사** 페이지의 왼쪽 사이드바에서 **설명서**를 선택합니다.

   1. 기존 키-값 쌍을 봅니다.

   1. 키-값 쌍을 추가하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. **추가**를 선택합니다.

      1. 새 키와 관련 값을 입력합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

   1. 키-값 쌍을 제거하려면 다음 단계를 완료하세요.

      1. 모델 버전 페이지의 오른쪽 상단 모서리에서 세로 줄임표를 선택하고 **편집**을 선택합니다.

      1. 제거할 키-값 쌍 옆의 **휴지통** 아이콘을 선택합니다.

      1.  모델 버전 페이지 상단의 **모델 버전 편집...** 배너에서 **저장**을 선택합니다.

# 배포 정보 업데이트(Studio)
<a name="model-registry-details-studio-deploy"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 지정되었습니다. 다음 섹션은 업데이트된 Studio 환경 사용에 해당합니다. Studio Classic 애플리케이션 사용에 대한 자세한 내용은 [Amazon SageMaker Studio Classic](studio.md) 섹션을 참조하세요.

모델 성능을 평가하고 프로덕션 워크로드에 사용할 준비가 되었는지 확인한 후 모델의 승인 상태를 변경하여 CI/CD 배포를 시작할 수 있습니다. 승인 상태 정의에 대한 자세한 내용은 [모델 승인 상태 업데이트](model-registry-approve.md) 섹션을 참조하세요.

**모델 패키지 배포와 관련된 세부 정보를 보거나 업데이트하려면 다음 단계를 완료하세요.**

1. **배포** 탭에서 모델 패키지 승인 상태를 확인합니다. 가능한 값은 다음과 같습니다.
   + **승인 대기 중**: 모델이 등록되었지만 아직 배포가 승인 또는 거부되지 않았습니다.
   + **승인됨**: 모델의 CI/CD 배포가 승인되었습니다. 모델 승인 이벤트 시 모델 배포를 시작하는 EventBridge 규칙이 있는 경우 SageMaker AI 프로젝트 템플릿에서 구축된 모델의 경우와 마찬가지로 SageMaker AI가 모델을 배포합니다.
   + **거부됨**: 모델의 배포가 거부되었습니다.

   승인 상태를 변경해야 하는 경우 상태 옆의 드롭다운 메뉴를 선택하고 업데이트된 상태를 선택합니다.

1. 모델 패키지 승인 상태를 업데이트하려면 승인 상태 옆의 드롭다운을 선택하고 업데이트된 승인 상태를 선택합니다.

1. **컨테이너** 목록에서 추론 이미지 컨테이너를 봅니다.

1. **인스턴스** 목록에서 배포 엔드포인트를 구성하는 인스턴스를 확인합니다.

# 모델 버전 비교
<a name="model-registry-version-compare"></a>

모델 버전을 생성할 때 관련 모델 품질 지표를 나란히 보면서 모델 버전을 비교하고자 할 수 있습니다. 예를 들어, 평균 제곱 오차(MSE) 값을 비교하여 정확도를 추적하거나 선택한 측정값에서 성능이 떨어지는 모델을 제거하기로 결정할 수 있습니다. 다음 절차는 Amazon SageMaker Studio Classic 콘솔을 사용하여 Model Registry에서 모델 버전 비교를 설정하는 방법을 보여줍니다.

## 모델 버전 비교(Amazon SageMaker Studio Classic)
<a name="model-registry-version-compare-studio"></a>

**참고**  
Amazon SageMaker Studio Classic 콘솔에서만 모델 버전을 비교할 수 있습니다.

모델 그룹 내의 모델 버전을 비교하려면 다음 단계를 완료하세요.

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다. 모델 그룹의 모델 버전 목록이 있는 새 탭이 열립니다.

1. 모델 버전 목록에서 비교하려는 모델 버전 옆의 확인란을 선택합니다.

1. **작업** 드롭다운을 선택한 다음, **비교**를 선택합니다. 선택한 모델에 대한 모델 품질 지표 목록이 나타납니다.

# 모델 그룹과 모델 버전 태그 확인 및 관리
<a name="model-registry-tags"></a>

Model Registry는 모델 그룹과 관련된 태그를 확인하고 관리하는 데 도움이 됩니다. 태그를 사용하여 용도, 소유자, 환경 또는 기타 기준으로 모델 그룹을 분류할 수 있습니다. 다음 지침은 Amazon SageMaker Studio 콘솔에서 태그를 확인, 추가, 삭제 및 편집하는 방법을 보여줍니다.

**참고**  
SageMaker 모델 레지스트리의 모델 패키지는 태그를 지원하지 않습니다.이는 버전이 지정된 모델 패키지입니다. 대신 `CustomerMetadataProperties`를 사용하여 키 값 쌍을 추가할 수 있습니다. 모델 레지스트리의 모델 패키지 그룹은 태그 지정을 지원합니다.

## 모델 그룹 태그 확인 및 관리
<a name="model-registry-tags-model-group"></a>

------
#### [ Studio ]

**모델 그룹 태그를 확인하려면 다음 단계를 완료하세요.**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹 페이지에서 **태그** 탭을 선택합니다. 모델 그룹과 연결된 태그를 확인합니다.

**모델 그룹 태그를 추가하려면 다음 단계를 완료합니다.**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹 페이지에서 **태그** 탭을 선택합니다.

1. **태그 추가/편집**을 선택합니다.

1. **\$1 새 태그 추가** 위의 빈 **키** 필드에 새 키를 입력합니다.

1. (선택 사항) 빈 **값** 필드에 새 값을 입력합니다.

1. **변경 확인**을 선택합니다.

1. **정보** 페이지의 **태그** 섹션에 새 태그가 나타나는지 확인합니다.

**모델 그룹 태그를 삭제하려면 다음 단계를 완료합니다.**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹 페이지에서 **태그** 탭을 선택합니다.

1. **태그 추가/편집**을 선택합니다.

1. 제거하려는 키-값 쌍 옆의 **휴지통** 아이콘을 선택합니다.

1. **변경 확인**을 선택합니다.

**모델 그룹 태그를 편집하려면 다음 단계를 완료합니다.**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹 페이지에서 **태그** 탭을 선택합니다.

1. **태그 추가/편집**을 선택합니다.

1. 편집하려는 키 쌍의 **값** 필드에 새 값을 입력합니다.

1. **변경 확인**을 선택합니다.

------
#### [ Studio Classic ]

**모델 그룹 태그를 확인하려면 다음 단계를 완료하세요.**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. **정보**를 선택합니다.

1. **정보** 페이지의 **태그** 섹션에서 태그를 확인합니다.

**모델 그룹 태그를 추가하려면 다음 단계를 완료합니다.**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. **정보**를 선택합니다.

1. 태그가 없는 경우 **태그 추가**를 선택합니다.

1. 기존 태그가 있는 경우 **태그** 섹션에서 **태그 관리**를 선택합니다. 모델 그룹 태그 목록은 키-값 쌍으로 표시됩니다.

1. **새 태그 추가** 위의 빈 **키** 필드에 새 키를 입력합니다.

1. (선택 사항) 빈 **값** 필드에 새 값을 입력합니다.

1. **변경 확인**을 선택합니다.

1. **정보** 페이지의 **태그** 섹션에 새 태그가 나타나는지 확인합니다.

**모델 그룹 태그를 삭제하려면 다음 단계를 완료합니다.**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. **정보**를 선택합니다.

1. **태그** 섹션에서 **태그 관리**를 선택합니다. 모델 그룹 태그 목록은 키-값 쌍으로 표시됩니다.

1. 제거하려는 태그 오른쪽에 있는 **휴지통** 아이콘을 선택합니다.

1. **변경 확인**을 선택합니다.

1. **정보** 페이지의 **태그** 섹션에 제거된 태그가 나타나지 않는지 확인합니다.

**모델 그룹 태그를 편집하려면 다음 단계를 완료합니다.**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 편집하려는 모델 그룹 이름을 선택합니다.

1. **정보**를 선택합니다.

1. **태그** 섹션에서 **태그 관리**를 선택합니다. 모델 그룹 태그 목록은 키-값 쌍으로 표시됩니다.

1. 키나 값을 편집합니다.

1. **변경 확인**을 선택합니다.

1. **정보** 페이지의 **태그** 섹션에 태그 편집 사항이 반영되었는지 확인합니다.

**프로젝트에 모델 그룹을 할당하거나 태그를 추가하려면 다음 단계를 완료하세요.**

1. [ListTags](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListTags.html) API를 사용하여 SageMaker AI 프로젝트의 `sagemaker:project-name` 키 및 `sagemaker:project-id`로 태그를 가져옵니다.

1. 모델 패키지 그룹에 태그를 적용하려면 다음 방법 중 하나를 선택합니다.
   + 새 모델 패키지 그룹을 만들고 태그를 추가하려면 1단계의 태그를 [CreateModelPackageGroup](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html) API로 전달합니다.
   + 기존 모델 패키지 그룹에 태그를 추가하려면 [AddTags](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html) API를 사용합니다.
   + Pipelines을 통해 모델 패키지 그룹을 만드는 경우 `pipeline.create()` 또는 `pipeline.upsert()` 메서드를 사용하거나 태그를 [RegisterModel](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-register-model) 단계에 전달합니다.

------

# 모델 버전 삭제
<a name="model-registry-delete-model-version"></a>

이 절차는 Amazon SageMaker Studio 콘솔에서 모델 버전을 삭제하는 방법을 보여줍니다.

## 모델 버전 삭제(Studio 또는 Studio Classic)
<a name="model-registry-delete-model-version-studio"></a>

Amazon SageMaker Studio 콘솔에서 모델 버전을 삭제하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹의 왼쪽에 있는 꺾쇠괄호를 선택합니다.

1. 모델 그룹의 모델 버전 목록이 표시됩니다. 삭제하려는 모델 버전이 표시되지 않으면 **모두 보기**를 선택합니다.

1. 삭제하려는 모델 버전 옆의 확인란을 선택합니다.

1. 테이블의 오른쪽 상단 모서리 위에 있는 세로 줄임표를 선택하고 **삭제**(또는 모델 그룹 세부 정보 페이지에 있는 경우 **모델 버전 삭제**)를 선택합니다.

1. **모델 버전 삭제** 대화 상자에서 **예, 모델 버전 삭제**를 선택합니다.

1. **삭제**를 선택합니다.

1. 삭제된 모델 버전이 더 이상 모델 그룹에 나타나지 않는지 확인합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다. 모델 그룹 목록이 나타납니다.

1. 모델 그룹 목록에서 삭제하려는 모델 버전의 모델 그룹 이름을 선택합니다.

1. 모델 버전 목록에서 삭제하려는 모델 버전의 이름을 선택합니다.

1. **작업** 드롭다운 메뉴를 선택한 다음 **삭제**를 선택합니다.

1. 확인 대화 상자에서 `REMOVE`를 입력합니다.

1. **제거**를 선택합니다.

1. 제거한 모델 버전이 모델 그룹의 모델 버전 목록에 나타나지 않는지 확인합니다.

------

# 모델 수명 주기에 맞는 스테이징 구조
<a name="model-registry-staging-construct"></a>

Model Registry 스테이징 구조를 사용하여 모델 워크플로 및 수명 주기에 대해 모델이 진행할 수 있는 일련의 단계를 정의할 수 있습니다. 이렇게 하면 모델이 개발, 테스트 및 프로덕션 단계로 전환될 때 모델 추적 및 관리가 간소화됩니다. 다음은 스테이징 구조와 이를 모델 거버넌스에 사용하는 방법에 대한 정보를 제공합니다.

스테이징 구조를 사용하면 모델이 진행하는 일련의 단계와 상태를 정의할 수 있습니다. 각 단계에서 관련 권한이 있는 특정 페르소나는 단계 상태를 업데이트할 수 있습니다. 모델이 단계를 진행하면 메타데이터가 전달되어 모델의 수명 주기에 대한 포괄적인 뷰를 제공합니다. 이 메타데이터는 각 단계에서 승인된 페르소나가 액세스하고 검토할 수 있으므로 정보에 입각한 의사 결정을 내릴 수 있습니다. 여기에는 다음과 같은 이점이 있습니다.
+ 모델 수명 주기 권한 - 지정된 페르소나에 대한 권한을 설정하여 모델 단계 상태를 업데이트하고 중요한 전환 지점에 승인 게이트를 적용합니다. 관리자는 API와 함께 IAM 정책 및 조건 키를 사용하여 권한을 할당할 수 있습니다. 예를 들어 데이터 과학자가 모델 수명 주기 단계를 '개발'에서 '프로덕션'으로 업데이트하지 못하도록 제한할 수 있습니다. 예시는 [스테이징 구조 설정 예시](model-registry-staging-construct-set-up.md) 섹션을 참조하세요.
+ Amazon EventBridge를 통한 모델 수명 주기 이벤트 - EventBridge를 사용하여 수명 주기 단계 이벤트를 사용할 수 있습니다. 이렇게 하면 모델이 승인 또는 스테이징 상태를 변경할 때 이벤트 알림을 수신하도록 설정하여 타사 거버넌스 도구와 통합할 수 있습니다. 예제는 [ModelLifeCycle에 대한 이벤트 알림 받기](model-registry-staging-construct-event-bridge.md) 섹션을 참조하세요.
+ 모델 수명 주기 필드를 기반으로 검색 - [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html) API를 사용하여 단계 및 단계 상태를 검색하고 필터링할 수 있습니다.
+ 모델 수명 주기 이벤트에 대한 감사 추적 - 모델 수명 주기 전환에 대한 모델 승인 및 스테이징 이벤트 기록을 볼 수 있습니다.

다음 주제에서는 관리자 측에서 스테이징 구조를 설정하는 방법과 사용자 측에서 단계 상태를 업데이트하는 방법을 안내합니다.

**Topics**
+ [

# 스테이징 구조 설정 예시
](model-registry-staging-construct-set-up.md)
+ [

# Studio에서 모델 패키지 단계 및 상태 업데이트
](model-registry-staging-construct-update-studio.md)
+ [

# 모델 패키지 단계 및 상태 업데이트 예시(boto3)
](model-registry-staging-construct-update-boto3.md)
+ [

# AWS CLI 예제를 사용하여 ModelLifeCycle 간접 호출
](model-registry-staging-construct-cli.md)
+ [

# ModelLifeCycle에 대한 이벤트 알림 받기
](model-registry-staging-construct-event-bridge.md)

# 스테이징 구조 설정 예시
<a name="model-registry-staging-construct-set-up"></a>

Amazon SageMaker Model Registry에 대한 스테이징 구조를 설정하려면 의도한 역할에 관리자가 관련 권한을 부여해야 합니다. 다음은 다양한 역할별로 스테이징 구조를 설정하는 방법에 대한 예시입니다.

**참고**  
Amazon SageMaker AI 도메인 내의 사용자는 도메인 내에 정의된 모든 단계를 볼 수 있지만 권한이 있는 단계만 사용할 수 있습니다.

단계는 `ModelLifeCycle` 파라미터로 정의되며 다음과 같은 구조를 갖습니다. 관리자는 어떤 역할이 `stage` 및 `stageStatus`에 액세스할 수 있는지 권한을 설정합니다. 역할을 수임하는 사용자는 관련 `stage` 및 `stageStatus`를 사용하고 자신의 `stageDescription`을 포함할 수 있습니다.

```
ModelLifeCycle {
    stage: String # Required (e.g., Development/QA/Production)
    stageStatus: String # Required (e.g., PendingApproval/Approved/Rejected)  
    stageDescription: String # Optional
}
```

다음 표에는 Model Registry 사전 정의된 스테이징 구조 템플릿이 포함되어 있습니다. 사용 사례에 따라 자체 스테이징 구조를 정의할 수 있습니다. 사용자가 관련 권한을 사용하려면 먼저 관련 권한을 설정해야 합니다.


| 단계 | 스테이지 상태 | 
| --- | --- | 
|  제안  |  PendingApproval  | 
|  개발  |  InProgress  | 
|  QA  |  OnHold  | 
|  PreProduction  |  Approved  | 
|  프로덕션  |  거부됨  | 
|  보관됨  |  Retired  | 

`ModelLifeCycle` 파라미터는 다음 API로 간접적으로 호출될 수 있습니다.
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeModelPackage.html)

------
#### [ Policy for a data scientist role ]

다음은 모델 수명 주기 조건 키를 사용하는 IAM 정책의 예입니다. 자체 요구 사항에 따라 수정할 수 있습니다. 이 예시에서 역할의 권한은 다음과 같이 모델 수명 주기 단계를 설정하거나 정의하도록 제한됩니다.
+ `"Development"` 단계 및 `"Approved"` 상태로 모델을 생성하거나 업데이트합니다.
+ 단계 품질 보증, `"QA"` 및 `"PendingApproval"` 상태로 모델 패키지를 업데이트합니다.

```
{
    "Action" : [
        "sagemaker:UpdateModelPackage",
        "sagemaker:CreateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage" : "Development"
            "sagemaker:ModelLifeCycle:stageStatus" : "Approved"       
        }
    }
},
{
    "Action" : [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage" : "Staging"
            "sagemaker:ModelLifeCycle:stageStatus" : "PendingApproval"       
        }
    }
}
```

------
#### [ Policy for a quality assurance specialist ]

다음은 모델 수명 주기 조건 키를 사용하는 IAM 정책의 예입니다. 자체 요구 사항에 따라 수정할 수 있습니다. 이 예시에서 역할의 권한은 다음과 같이 모델 수명 주기 단계를 설정하거나 정의하도록 제한됩니다.
+ 다음으로 패키지 업데이트:
  + `"QA"` 단계 및 `"Approved"` 또는 `"Rejected"` 상태
  + `"Production"` 단계 및 `"PendingApproval"` 상태

```
{
    "Action": [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage": "Staging",
            "sagemaker:ModelLifeCycle:stageStatus": "Approved"
        }
    }
}, {
    "Action": [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage": "Staging",
            "sagemaker:ModelLifeCycle:stageStatus": "Rejected"
        }
    }
}, {
    "Action": [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage": "Production",
            "sagemaker:ModelLifeCycle:stageStatus": "PendingApproval"
        }
    }
}
```

------
#### [ Policy for lead engineer role ]

다음은 모델 수명 주기 조건 키를 사용하는 IAM 정책의 예입니다. 자체 요구 사항에 따라 수정할 수 있습니다. 이 예시에서 역할의 권한은 다음과 같이 모델 수명 주기 단계를 설정하거나 정의하도록 제한됩니다.
+ 다음으로 패키지 업데이트:
  + `"Production"` 단계 및 `"Approved"` 또는 `"Rejected"` 상태
  + `"Development"` 단계 및 `"PendingApproval"` 상태

```
{
    "Action" : [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "ForAnyvalue:StringEquals" : {
            "sagemaker:ModelLifeCycle:stage" : "Production",
            "sagemaker:ModelLifeCycle:stageStatus" : "Approved"
        }
    }
},
{
    "Action" : [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals:" {
            "sagemaker:ModelLifeCycle:stage" : "Production"
            "sagemaker:ModelLifeCycle:stageStatus" : "Rejected"
        }
    }
},
{
    "Action" : [
        "sagemaker:UpdateModelPackage"
    ],
    "Resource": [
        "*"
    ],
    "Condition": {
        "StringEquals": {
            "sagemaker:ModelLifeCycle:stage" : "Development"
            "sagemaker:ModelLifeCycle:stageStatus" : "PendingApproval"
        }
    }
}
```

------

모델 상태 업데이트에 대한 Amazon EventBridge 알림을 받으려면 [ModelLifeCycle에 대한 이벤트 알림 받기](model-registry-staging-construct-event-bridge.md)의 예시를 참조하세요. 받을 수 있는 EventBridge 페이로드 예시는 [SageMaker 모델 패키지 상태 변경](automating-sagemaker-with-eventbridge.md#eventbridge-model-package) 섹션을 참조하세요.

# Studio에서 모델 패키지 단계 및 상태 업데이트
<a name="model-registry-staging-construct-update-studio"></a>

모델 패키지 스테이징 구조를 사용하려면 관련 권한이 있는 실행 역할을 수임해야 합니다. 다음 페이지에서는 Amazon SageMaker Studio를 사용하여 단계 상태를 업데이트하는 방법에 대한 정보를 제공합니다.

도메인에 정의된 모든 스테이징 구조는 모든 사용자가 볼 수 있습니다. 단계를 업데이트하려면 관리자에게 요청하여 해당 단계에 액세스할 수 있는 관련 권한을 설정해야 합니다. 방법에 대한 자세한 내용은 [스테이징 구조 설정 예시](model-registry-staging-construct-set-up.md) 섹션을 참조하세요.

다음 절차에서는 모델 패키지 단계를 업데이트할 수 있는 Studio UI로 이동합니다.

1. Amazon SageMaker Studio에 로그인합니다. 자세한 내용은 [Amazon SageMaker Studio 출시](studio-updated-launch.md) 단원을 참조하십시오.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 모델을 찾습니다.
   + 탭을 사용하여 모델을 찾을 수 있습니다. 예를 들어 **등록된 모델** 또는 **배포 가능 모델** 탭을 선택합니다.
   + **내 모델** 및 **나와 공유됨** 옵션을 사용하여 내가 생성하거나 공유한 모델을 찾을 수 있습니다.

1. 업데이트하려는 모델 옆의 확인란을 선택합니다.

1. **추가 옵션** 아이콘을 선택합니다.

1. **모델 수명 주기 업데이트**를 선택합니다. 그러면 **모델 수명 주기 업데이트** 섹션으로 이동합니다.

1. 작업을 완료하여 단계를 업데이트합니다.

   단계를 업데이트할 수 없는 경우 오류가 발생합니다. 관리자가 권한을 설정해야 합니다. 권한을 설정하는 방법에 대한 자세한 내용은 [스테이징 구조 설정 예시](model-registry-staging-construct-set-up.md) 섹션을 참조하세요.

# 모델 패키지 단계 및 상태 업데이트 예시(boto3)
<a name="model-registry-staging-construct-update-boto3"></a>

모델 패키지 단계 및 상태를 업데이트하려면 관련 권한이 있는 실행 역할을 수임해야 합니다. 다음은 AWS SDK for Python (Boto3)을 사용하여 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html) API를 통해 단계 상태를 업데이트하는 방법에 대한 예시입니다.

이 예시에서 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateModelPackage.html) API 작업에 대한 `"Development"`라는 `ModelLifeCycle` 단계 및 `"Approved"` 단계 상태 조건 키가 실행 역할에 부여되었습니다. `stage-description`에 설명을 포함할 수 있습니다. 자세한 정보는 [스테이징 구조 설정 예시](model-registry-staging-construct-set-up.md)을 참조하세요.

```
from sagemaker import get_execution_role, session 
import boto3 

region = boto3.Session().region_name role = get_execution_role() 
sm_client = boto3.client('sagemaker', region_name=region)

model_package_update_input_dict = {
    "ModelLifeCycle" : { 
        "stage" : "Development",
        "stageStatus" : "Approved",
        "stageDescription" : "stage-description"
    }
} 
model_package_update_response = sm_client.update_model_package(**model_package_update_input_dict)
```

# AWS CLI 예제를 사용하여 ModelLifeCycle 간접 호출
<a name="model-registry-staging-construct-cli"></a>

 AWS CLI 도구를 사용하여 AWS 리소스를 관리할 수 있습니다. AWS CLI 명령에는 [search](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudsearchdomain/search.html) 및 [list-actions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/fis/list-actions.html)이 포함됩니다. 다음 페이지에서는 이러한 명령을 사용하는 동안 `ModelPackage`를 사용하는 방법에 대한 예를 제공합니다. 스테이징 구조 설정에 대한 자세한 내용과 예시는 [스테이징 구조 설정 예시](model-registry-staging-construct-set-up.md) 섹션을 참조하세요.

이 페이지의 예에서는 다음 변수를 사용합니다.
+ `region`은 모델 패키지가 있는 리전입니다.
+ `stage-name`은 정의된 단계의 이름입니다.
+ `stage-status`는 정의된 단계 상태의 이름입니다.

다음은 ModelLifeCycle을 사용하는 AWS CLI 명령의 예입니다.

이미 정의한 *stage-name*으로 모델 패키지를 검색합니다.

```
aws sagemaker search --region 'region' --resource ModelPackage --search-expression '{"Filters": [{"Name": "ModelLifeCycle.Stage","Value": "stage-name"}]}'
```

`ModelLifeCycle`과 연결된 작업을 나열합니다.

```
aws sagemaker list-actions --region 'region' --action-type ModelLifeCycle
```

ModelLifeCycle을 사용하여 모델 패키지를 생성합니다.

```
aws sagemaker create-model-package --model-package-group-name 'model-package-group-name' --source-uri 'source-uri' --region 'region' --model-life-cycle '{"Stage":"stage-name", "StageStatus":"stage-status", "StageDescription":"Your Staging Comment"}' 
```

ModelLifeCycle을 사용하여 모델 패키지를 업데이트합니다.

```
aws sagemaker update-model-package --model-package 'model-package-arn' --region 'region' --model-life-cycle '{"Stage":"stage-name", "StageStatus":"stage-status"}' 
```

ModelLifeCycle 필드를 통해 검색합니다.

```
aws sagemaker search --region 'region' --resource ModelPackage --search-expression '{"Filters": [{"Name": "ModelLifeCycle.Stage","Value": "stage-name"}]}'
```

[Amazon SageMaker ML 계보 추적](lineage-tracking.md) API를 통해 ModelLifeField 업데이트에 대한 감사 레코드를 가져옵니다.

```
aws sagemaker list-actions --region 'region' --action-type ModelLifeCycle
```

```
aws sagemaker describe-action --region 'region' --action-name 'action-arn or action-name'
```

# ModelLifeCycle에 대한 이벤트 알림 받기
<a name="model-registry-staging-construct-event-bridge"></a>

계정에서 EventBridge를 사용하여 ModelLifeCycle 업데이트 알림 및 이벤트를 가져올 수 있습니다. 다음은 ModelLifeCycle 이벤트 알림을 받기 위해 계정에서 구성할 EventBridge 규칙의 예입니다.

```
{
  "source": ["aws.sagemaker"],
  "detail-type": ["SageMaker Model Package State Change"]
}
```

받을 수 있는 EventBridge 페이로드 예시는 [SageMaker 모델 패키지 상태 변경](automating-sagemaker-with-eventbridge.md#eventbridge-model-package) 섹션을 참조하세요.

# 모델 승인 상태 업데이트
<a name="model-registry-approve"></a>

모델 버전을 생성한 후에는 일반적으로 프로덕션 엔드포인트에 배포하기 전에 성능을 평가하는 것이 좋습니다. 성능이 요구 사항에 맞는 경우 승인 상태를 `Approved`로 업데이트할 수 있습니다. 상태를 `Approved`로 설정하면 모델의 CI/CD 배포를 시작할 수 있습니다. 모델 버전이 요구 사항에 맞지 않는 경우 승인 상태를 `Rejected`로 업데이트할 수 있습니다.

모델 버전을 등록한 후 수동으로 모델 버전의 승인 상태를 업데이트하거나 SageMaker AI 파이프라인을 생성할 때 모델을 평가하는 조건 단계를 생성할 수 있습니다. SageMaker AI 파이프라인에서 조건 단계를 생성하는 방법에 대한 자세한 내용은 [Pipelines 단계](build-and-manage-steps.md) 섹션을 참조하세요.

SageMaker AI에서 제공하는 프로젝트 템플릿 중 하나를 사용하고 모델 버전의 승인 상태가 변경되면 다음 동작이 발생합니다. 유효한 전환만 표시됩니다.
+ `PendingManualApproval` > `Approved`– 승인된 모델 버전의 CI/CD 배포 시작
+ `PendingManualApproval` > `Rejected`– 작업 없음
+ `Rejected` > `Approved`– 승인된 모델 버전의 CI/CD 배포 시작
+ `Rejected` > `Approved`– `Approved`상태의 최신 모델 버전 배포를 위해 CI/CD 시작

 AWS SDK for Python (Boto3) 을 사용하거나 Amazon SageMaker Studio 콘솔을 사용하여 모델 버전의 승인 상태를 업데이트할 수 있습니다. SageMaker AI 파이프라인의 조건 단계의 일부로 모델 버전의 승인 상태를 업데이트할 수도 있습니다. SageMaker AI 파이프라인의 모델 승인 단계 사용에 대한 자세한 내용은 [Pipelines 개요](pipelines-overview.md) 섹션을 참조하세요.

## 모델 승인 상태 업데이트(Boto3)
<a name="model-registry-approve-api"></a>

[모델 버전 등록](model-registry-version.md)에서 모델 버전을 생성할 때 `ModelApprovalStatus`를 `PendingManualApproval`로 설정했습니다. `update_model_package`를 호출하여 모델의 승인 상태를 업데이트합니다. 참고로, 모델 성능의 일부 측정치를 평가한 결과에 따라 모델의 승인 상태를 설정하는 코드를 작성하면 이 프로세스를 자동화할 수 있습니다. 승인되면 새 모델 버전을 자동으로 배포하는 단계를 파이프라인에 생성할 수도 있습니다. 다음 코드 스니펫은 수동으로 승인 상태를 `Approved`로 변경하는 방법을 보여줍니다.

```
model_package_update_input_dict = {
    "ModelPackageArn" : model_package_arn,
    "ModelApprovalStatus" : "Approved"
}
model_package_update_response = sm_client.update_model_package(**model_package_update_input_dict)
```

## 모델의 승인 상태 업데이트(Studio 또는 Studio Classic)
<a name="model-registry-approve-studio"></a>

Amazon SageMaker Studio 콘솔에서 승인 상태를 수동으로 변경하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹의 왼쪽에 있는 꺾쇠괄호를 선택합니다.

1. 모델 그룹의 모델 버전 목록이 표시됩니다. 삭제하려는 모델 버전이 표시되지 않으면 **모두 보기**를 선택하여 모델 그룹 세부 정보 페이지에 모델 버전의 전체 목록을 표시합니다.

1. 업데이트할 모델 버전의 이름을 선택합니다.

1. **배포** 탭에 현재 승인 상태가 표시됩니다. 현재 승인 상태 옆의 드롭다운 메뉴를 선택하고 업데이트된 승인 상태를 선택합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다. 모델 그룹의 모델 버전 목록이 있는 새 탭이 열립니다.

1. 모델 버전 목록에서 업데이트하려는 모델 버전의 이름을 선택합니다.

1. **작업** 드롭다운 메뉴에서 두 가지 메뉴 옵션 중 하나를 선택하여 모델 버전 상태를 업데이트할 수 있습니다.
   + **업데이트 상태 옵션** 사용

     1. **작업** 드롭다운 메뉴에서 **업데이트 상태** 드롭다운 메뉴를 선택하고 새 모델 버전 상태를 선택합니다.

     1. (선택 사항) **코멘트** 필드에 세부 정보를 추가합니다.

     1. **저장 및 업데이트**를 선택합니다.
   + **편집** 옵션 사용

     1. **작업** 드롭다운 메뉴에서 **편집**을 선택합니다.

     1. (선택 사항) **코멘트** 필드에 세부 정보를 추가합니다.

     1. **변경 사항 저장**을 선택합니다.

1. 모델 버전 페이지에서 모델 버전 상태가 올바른 값으로 업데이트되었는지 확인합니다.

------

`us-east-1`, , `ap-northeast-1`및 `eu-west-1` 리전의 경우 다음 지침을 사용하여 로깅 및 등록된 모델 버전의 `us-west-2`계보 세부 정보에 액세스할 수 있습니다.

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택하지 않은 경우 로깅된 **모델** 탭을 선택한 다음 **등록된 모델을** 선택합니다.

1. 모델을 선택하고 **최신 버전 보기를** 선택합니다.

1. **거버넌스** 탭을 선택합니다.

1. **거버넌스 개요** 아래의 **배포** 섹션에 현재 승인 상태가 표시됩니다. 드롭다운 메뉴에서 업데이트된 승인 상태를 선택합니다.

# Python을 사용하여 레지스트리에서 모델 배포
<a name="model-registry-deploy"></a>

모델 버전을 등록하고 배포를 승인한 후에는 실시간 추론을 위해 SageMaker AI 엔드포인트에 배포합니다. SageMaker AI SDK 또는 AWS SDK for Python (Boto3)을 사용하여 모델을 배포할 수 있습니다.

기계 학습 작업(MLOps) 프로젝트를 만들고 모델 배포가 포함된 MLOps 프로젝트 템플릿을 선택하면 모델 레지스트리의 승인된 모델 버전이 프로덕션에 자동으로 배포됩니다. SageMaker AI MLOps 프로젝트 사용에 대한 자세한 내용은 [SageMaker 프로젝트를 통한 MLOps 자동화](sagemaker-projects.md) 섹션을 참조하세요.

교차 AWS 계정 리소스 정책을 추가하여 다른 계정에서 생성된 모델 버전을 배포하도록 계정을 활성화할 수도 있습니다. 예를 들어 조직의 한 팀은 모델 훈련을 담당하고 다른 팀은 모델 배포 및 업데이트를 담당할 수 있습니다.

**Topics**
+ [

## 레지스트리에서 모델 배포(SageMaker SDK)
](#model-registry-deploy-smsdk)
+ [

## 레지스트리에서 모델 배포(Boto3)
](#model-registry-deploy-api)
+ [

## 다른 계정에서 모델 버전 배포
](#model-registry-deploy-xaccount)

## 레지스트리에서 모델 배포(SageMaker SDK)
<a name="model-registry-deploy-smsdk"></a>

[Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) SDK를 사용하여 모델 버전을 배포하려면 다음 코드 스니펫을 사용하세요.

```
from sagemaker import ModelPackage
from time import gmtime, strftime

model_package_arn = 'arn:aws:sagemaker:us-east-2:12345678901:model-package/modeltest/1'
model = ModelPackage(role=role, 
                     model_package_arn=model_package_arn, 
                     sagemaker_session=sagemaker_session)
model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')
```

## 레지스트리에서 모델 배포(Boto3)
<a name="model-registry-deploy-api"></a>

를 사용하여 모델 버전을 배포하려면 다음 단계를 AWS SDK for Python (Boto3)완료합니다.

1. 다음 코드 조각은 SageMaker AI Boto3 클라이언트 `sm_client`와 ARN이 변수 `model_version_arn`에 저장된 모델 버전을 이미 만들었다고 가정합니다.

   [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) API 작업을 직접 호출하여 모델 버전으로부터 모델 객체를 만듭니다. 모델 버전의 Amazon 리소스 이름(ARN)을 모델 객체의 `Containers`의 일부로 전달합니다.

   ```
   model_name = 'DEMO-modelregistry-model-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
   print("Model name : {}".format(model_name))
   container_list = [{'ModelPackageName': model_version_arn}]
   
   create_model_response = sm_client.create_model(
       ModelName = model_name,
       ExecutionRoleArn = role,
       Containers = container_list
   )
   print("Model arn : {}".format(create_model_response["ModelArn"]))
   ```

1. `create_endpoint_config`를 호출하여 엔드포인트 구성을 생성합니다. 엔드포인트 구성은 엔드포인트에 사용할 Amazon EC2 인스턴스의 수와 유형을 지정합니다.

   ```
   endpoint_config_name = 'DEMO-modelregistry-EndpointConfig-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
   print(endpoint_config_name)
   create_endpoint_config_response = sm_client.create_endpoint_config(
       EndpointConfigName = endpoint_config_name,
       ProductionVariants=[{
           'InstanceType':'ml.m4.xlarge',
           'InitialVariantWeight':1,
           'InitialInstanceCount':1,
           'ModelName':model_name,
           'VariantName':'AllTraffic'}])
   ```

1. `create_endpoint`를 호출하여 엔드포인트를 생성합니다.

   ```
   endpoint_name = 'DEMO-modelregistry-endpoint-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
   print("EndpointName={}".format(endpoint_name))
   
   create_endpoint_response = sm_client.create_endpoint(
       EndpointName=endpoint_name,
       EndpointConfigName=endpoint_config_name)
   print(create_endpoint_response['EndpointArn'])
   ```

## 다른 계정에서 모델 버전 배포
<a name="model-registry-deploy-xaccount"></a>

교차 AWS 계정 리소스 정책을 추가하여 계정이 다른 계정에서 생성된 모델 버전을 배포하도록 허용할 수 있습니다. 예를 들어 조직의 한 팀은 모델 훈련을 담당하고 다른 팀은 모델 배포 및 업데이트를 담당할 수 있습니다. 이러한 리소스 정책을 만들 때는 액세스 권한을 부여하려는 특정 리소스에 정책을 적용합니다. 의 교차 계정 리소스 정책에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [교차 계정 정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)을 AWS참조하세요.

**참고**  
계정 간 모델 배포를 위한 훈련 중에 KMS 키를 사용하여 [출력 데이터 구성](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) 작업을 암호화해야 합니다.

SageMaker AI에서 계정 간 모델 배포를 활성화하려면 배포하려는 모델 버전이 포함된 모델 그룹, 모델 그룹의 추론 이미지가 있는 Amazon ECR 리포지토리, 모델 버전이 저장되는 Amazon S3 버킷에 대한 교차 계정 리소스 정책을 제공해야 합니다.

다른 계정에서 생성된 모델을 배포하려면 사용자에게 SageMaker AI 작업에 액세스할 수 있는 역할(예: `AmazonSageMakerFullAccess` 관리형 정책이 있는 역할)이 있어야 합니다. SageMaker AI 관리형 정책에 대한 자세한 정보는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md) 섹션을 참조하세요.

다음 예시에서는 이러한 세 가지 리소스 모두에 대한 교차 계정 정책을 만들고 해당 정책을 리소스에 적용합니다. 이 예시에서는 이전에 다음 변수도 정의했다고 가정합니다.
+ `bucket` - 모델 버전이 저장되는 Amazon S3 버킷입니다.
+ `kms_key_id` - 훈련 출력을 암호화하는 데 사용되는 KMS 키입니다.
+ `sm_client` - SageMaker AI Boto3 클라이언트입니다.
+ `model_package_group_name` - 교차 계정 액세스를 허용하려는 모델 그룹입니다.
+ `model_package_group_arn` - 교차 계정 액세스를 허용하려는 모델 그룹 ARN입니다.

```
import json

# The cross-account id to grant access to
cross_account_id = "123456789012"

# Create the policy for access to the ECR repository
ecr_repository_policy = {
    'Version': '2012-10-17		 	 	 ',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': {
            'AWS': f'arn:aws:iam::{cross_account_id}:root'
        },
        'Action': ['ecr:*']
    }]
}

# Convert the ECR policy from JSON dict to string
ecr_repository_policy = json.dumps(ecr_repository_policy)

# Set the new ECR policy
ecr = boto3.client('ecr')
response = ecr.set_repository_policy(
    registryId = account,
    repositoryName = 'decision-trees-sample',
    policyText = ecr_repository_policy
)

# Create a policy for accessing the S3 bucket
bucket_policy = {
    'Version': '2012-10-17		 	 	 ',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': {
            'AWS': f'arn:aws:iam::{cross_account_id}:root'
        },
        'Action': 's3:*',
        'Resource': f'arn:aws:s3:::{bucket}/*'
    }]
}

# Convert the policy from JSON dict to string
bucket_policy = json.dumps(bucket_policy)

# Set the new policy
s3 = boto3.client('s3')
response = s3.put_bucket_policy(
    Bucket = bucket,
    Policy = bucket_policy)

# Create the KMS grant for encryption in the source account to the
# Model Registry account Model Group
client = boto3.client('kms')

response = client.create_grant(
    GranteePrincipal=cross_account_id,
    KeyId=kms_key_id
    Operations=[
        'Decrypt',
        'GenerateDataKey',
    ],
)

# 3. Create a policy for access to the Model Group.
model_package_group_policy = {
    'Version': '2012-10-17		 	 	 ',
    'Statement': [{
        'Sid': 'AddPermModelPackageGroup',
        'Effect': 'Allow',
        'Principal': {
            'AWS': f'arn:aws:iam::{cross_account_id}:root'
        },
        'Action': ['sagemaker:DescribeModelPackageGroup'],
        'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package-group/{model_package_group_name}'
    },{
        'Sid': 'AddPermModelPackageVersion',
        'Effect': 'Allow',
        'Principal': {
            'AWS': f'arn:aws:iam::{cross_account_id}:root'
        },
        'Action': ["sagemaker:DescribeModelPackage",
                   "sagemaker:ListModelPackages",
                   "sagemaker:UpdateModelPackage",
                   "sagemaker:CreateModel"],
        'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package/{model_package_group_name}/*'
    }]
}

# Convert the policy from JSON dict to string
model_package_group_policy = json.dumps(model_package_group_policy)

# Set the policy to the Model Group
response = sm_client.put_model_package_group_policy(
    ModelPackageGroupName = model_package_group_name,
    ResourcePolicy = model_package_group_policy)

print('ModelPackageGroupArn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))
print("First Versioned ModelPackageArn: " + model_package_arn)
print("Second Versioned ModelPackageArn: " + model_package_arn2)

print("Success! You are all set to proceed for cross-account deployment.")
```

# Studio에서 모델 배포
<a name="model-registry-deploy-studio"></a>

모델 버전을 등록하고 배포를 승인한 후에는 실시간 추론을 위해 Amazon SageMaker AI 엔드포인트에 배포합니다. [Python을 사용하여 레지스트리에서 모델 배포](model-registry-deploy.md) 또는 Amazon SageMaker Studio에서 모델을 배포할 수 있습니다. 다음은 Studio에서 모델을 배포하는 방법에 대한 지침을 제공합니다.

Amazon SageMaker Studio Classic에서는 이 기능을 사용할 수 없습니다.
+ Studio가 기본 환경인 경우 UI는 [Amazon SageMaker Studio UI 개요](studio-updated-ui.md)에 있는 이미지와 유사합니다.
+ Studio Classic이 기본 환경인 경우 UI는 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md)에 있는 이미지와 유사합니다.

모델 패키지를 배포하려면 먼저 모델 패키지에 대해 다음 요구 사항을 충족해야 합니다.
+ 유효한 추론 사양을 사용할 수 있어야 합니다. 자세한 내용은 [InferenceSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-InferenceSpecification)을 참조하세요.
+ 승인된 상태의 모델이어야 합니다. 자세한 정보는 [모델 승인 상태 업데이트](model-registry-approve.md)을 참조하세요.

다음은 Studio에서 모델을 배포하는 방법에 대한 지침을 제공합니다.

**Studio에서 모델 배포**

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. (선택 사항) 공유된 모델이 있는 경우 **내 모델** 또는 **나와 공유됨** 중에서 선택할 수 있습니다.

1. 등록된 모델의 확인란을 선택합니다. 위의 요구 사항이 충족되면 **배포** 버튼이 선택할 수 있도록 표시됩니다.

1. **배포**를 선택하여 **엔드포인트에 모델 배포** 페이지를 엽니다.

1. **엔드포인트 설정**에서 배포 리소스를 구성합니다.

1. 설정을 확인한 후 **배포**를 선택합니다. 그러면 모델은 **서비스 중** 상태로 엔드포인트에 배포됩니다.

`us-east-1`, `us-west-2``ap-northeast-1`, 및 `eu-west-1` 리전의 경우 다음 지침을 사용하여 모델을 배포할 수 있습니다.

**Studio에서 모델 배포**

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. **내 모델** 탭을 선택합니다.

1. 아직 선택하지 않은 경우 로깅된 **모델** 탭을 선택합니다.

1. 모델을 선택하고 **최신 버전 보기를** 선택합니다.

1. **배포**를 선택하고 SageMaker AI 또는 Amazon Bedrock 중에서 선택합니다.

1. 설정을 확인한 후 **배포**를 선택합니다. 그러면 모델은 **서비스 중** 상태로 엔드포인트에 배포됩니다.

# 교차 계정 검색 가능성
<a name="model-registry-ram"></a>

데이터 과학자와 데이터 엔지니어는 다른 계정에 등록된 모델 패키지 그룹을 탐색하고 액세스하여 데이터 일관성을 높이고 협업을 간소화하며 중복 작업을 줄일 수 있습니다. Amazon SageMaker Model Registry를 사용하면 계정 간에 모델 패키지 그룹을 공유할 수 있습니다. 리소스 공유와 관련된 권한에는 두 가지 범주가 있습니다.
+ **검색 가능성**: *검색 가능성*은 리소스 소비자 계정이 하나 이상의 리소스 소유자 계정에서 공유하는 모델 패키지 그룹을 볼 수 있는 기능입니다. 검색 가능성은 리소스 소유자가 필요한 리소스 정책을 공유된 모델 패키지 그룹에 연결하는 경우에만 가능합니다. 리소스 소비자는 AWS RAM UI 및에서 모든 공유 모델 패키지 그룹을 볼 수 있습니다 AWS CLI.
+ **액세스 가능성**: *액세스 가능성*은 리소스 소비자 계정이 공유된 모델 패키지 그룹을 사용할 수 있는지를 의미합니다. 예를 들어 리소스 소비자가 필요한 권한이 있는 경우 다른 계정에서 모델 패키지를 등록하거나 배포할 수 있습니다.

**Topics**
+ [

# Studio에서 모델 그룹 공유
](model-registry-ram-studio-share.md)
+ [

# Studio에서 공유된 모델 그룹 보기
](model-registry-ram-studio-view.md)
+ [

# 접근성
](model-registry-ram-accessibility.md)
+ [

# 검색 가능성 설정
](model-registry-ram-discover.md)
+ [

# 공유된 모델 패키지 그룹 보기
](model-registry-ram-view-shared.md)
+ [

# 리소스 공유에서 위탁자 연결 해제 및 리소스 공유 제거
](model-registry-ram-dissociate.md)
+ [

# 권한 및 리소스 공유 승격
](model-registry-ram-promote.md)

# Studio에서 모델 그룹 공유
<a name="model-registry-ram-studio-share"></a>

Studio UI를 사용하여 모델 그룹을 다른 AWS 보안 주체(AWS 계정 또는 AWS Organizations)와 공유할 수 있습니다. 이 간소화된 공유 프로세스를 사용하면 팀 간 협업이 가능하고, 모범 사례를 따를 수 있으며, 팀 전체에서 모델 재사용이 용이해집니다. 다음은 Studio에서 모델 그룹을 공유하는 방법에 대한 지침을 제공합니다.

Amazon SageMaker Studio Classic에서는 이 기능을 사용할 수 없습니다.
+ Studio가 기본 환경인 경우 UI는 [Amazon SageMaker Studio UI 개요](studio-updated-ui.md)에 있는 이미지와 유사합니다.
+ Studio Classic이 기본 환경인 경우 UI는 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md)에 있는 이미지와 유사합니다.

모델 그룹을 공유하려면 먼저 리소스를 공유하는 실행 역할에 다음 권한이 추가되었는지 확인해야 합니다.

1. [실행 역할을 가져옵니다](sagemaker-roles.md#sagemaker-roles-get-execution-role).

1. 다음을 사용하여 [역할 권한을 업데이트](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ram:ListPermissions",
                   "ram:GetPermission",
                   "ram:GetResourceShareAssociations",
                   "ram:ListResourceSharePermissions",
                   "ram:DeleteResourceShare",
                   "ram:GetResourceShareInvitations",
                   "ram:AcceptResourceShareInvitation"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

다음은 모델 그룹을 다른 AWS 위탁자와 공유하는 방법에 대한 지침을 제공합니다.

**모델 그룹을 다른 AWS 보안 주체와 공유하려면**

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 등록된 모델을 선택합니다.

1. 오른쪽 상단에서 **제거**를 선택합니다. 그러면 **모델 그룹 공유** 섹션이 열립니다.

   화면 하단에 오류 메시지가 표시되면 실행 역할에 적절한 권한을 추가해야 합니다. 자세한 내용은 위 권한을 참조하세요.

1. **리소스 공유**에서 리소스 공유를 선택하여 업데이트하거나 새 리소스 공유를 만듭니다.

1. **관리형 권한**에서 관리형 권한을 선택하여 모델의 액세스 수준을 제어합니다.

   볼 수 있는 옵션에는 AWS RAM에서 사용자를 위해 이미 만들어진 권한 또는 에서 사용자 지정한 권한이 포함됩니다. *AWS Resource Access Manager* 사용 설명서의 [Creating and using customer managed permissions](https://docs.aws.amazon.com/ram/latest/userguide/create-customer-managed-permissions.html)을 참조하세요.

1. **AWS 보안 주체**에서 공유하려는 AWS Organizations ARN 또는 AWS 계정 IDs를 입력한 다음 **추가**를 선택합니다. 이러한 방식으로 여러 AWS 보안 주체를 추가할 수 있습니다.

1. 최소 요구 사항이 충족되면 **공유** 버튼에 액세스할 수 있습니다. 설정을 확인한 후 **공유**를 선택합니다.

   공유가 성공하면 화면 하단에 녹색 배너 메시지가 표시됩니다.

# Studio에서 공유된 모델 그룹 보기
<a name="model-registry-ram-studio-view"></a>

사용자 또는 동일한 AWS Organizations에 속한 계정과 공유된 모델 그룹을 볼 수 있습니다. 모델 그룹이 동일한에 속한 계정과 공유되는 경우 AWS Organizations공유 모델 그룹이 자동으로 승인되고 Studio에서 볼 수 있습니다. 그렇지 않은 경우 Studio에서 공유된 모델 그룹을 보려면 보류 중인 초대를 승인해야 합니다. 다음은 Studio에서 공유된 모델 그룹을 보고 모델 그룹 공유 초대를 수락하는 방법에 대한 지침을 제공합니다.

Amazon SageMaker Studio Classic에서는 이 기능을 사용할 수 없습니다.
+ Studio가 기본 환경인 경우 UI는 [Amazon SageMaker Studio UI 개요](studio-updated-ui.md)에 있는 이미지와 유사합니다.
+ Studio Classic이 기본 환경인 경우 UI는 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md)에 있는 이미지와 유사합니다.

다음은 사용자와 공유된 모델 그룹을 보고 수락하는 방법에 대한 지침을 제공합니다.

**공유된 모델 그룹 보기 및 수락**

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. **나와 공유됨**을 선택하여 사용자와 공유된 모델 그룹을 봅니다.

1. 보류 중인 모델 그룹 초대를 수락하는 방법:

   1. **보류 중인 승인 보기**를 선택하여 **보류 중인 초대** 목록을 엽니다.

   1. 초대를 수락하려면 **수락**을 선택합니다.

# 접근성
<a name="model-registry-ram-accessibility"></a>

리소스 소비자가 공유된 모델 패키지 그룹을 사용할 수 있는 액세스 권한이 있는 경우 모델 패키지 그룹의 버전을 등록하거나 배포할 수 있습니다. 리소스 소비자가 공유된 모델 패키지 그룹을 등록할 수 있는 방법에 대한 자세한 내용은 [다른 계정에서 모델 버전 등록](model-registry-version.md#model-registry-version-xaccount) 섹션을 참조하세요. 리소스 소비자가 공유된 모델 패키지 그룹을 배포할 수 있는 방법에 대한 자세한 내용은 [다른 계정에서 모델 버전 배포](model-registry-deploy.md#model-registry-deploy-xaccount) 섹션을 참조하세요.

# 검색 가능성 설정
<a name="model-registry-ram-discover"></a>

리소스 소유자는 리소스 공유를 만들고 엔터티에 리소스 정책을 연결하여 모델 패키지 그룹 검색 가능성을 설정할 수 있습니다. 에서 일반 리소스 공유를 생성하는 방법에 대한 자세한 단계는 [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 설명서의 [리소스 공유 생성을](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create) AWS RAM참조하세요.

 AWS RAM 콘솔 또는 모델 레지스트리 리소스 정책 APIs.

------
#### [ AWS CLI ]

1. 모델 소유자 계정에서 리소스 공유를 만듭니다.

   1. 모델 소유자는 다음 명령에 설명된 대로 SageMaker AI 리소스 정책 API [put-model-package-group-policy](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/put-model-package-group-policy.html)를 사용하여 모델 패키지 그룹에 리소스 정책을 연결합니다.

      ```
      aws sagemaker put-model-package-group-policy
      --model-package-group-name <model-package-group-name>
      --resource-policy "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Sid\":
      \"ExampleResourcePolicy\",\"Effect\":\"Allow\",\"Principal\":<principal>,
      \"Action\":[\"sagemaker:DescribeModelPackage\",
      \"sagemaker:ListModelPackages\",\"sagemaker:DescribeModelPackageGroup\"],
      \"Resource\":[\"<model-package-group-arn>,\"
      \"arn:aws:sagemaker:<region>:<owner-account-id>:model-package/
      <model-package-group-name>/*\"]}]}"
      ```
**참고**  
다양한 작업 조합을 리소스 정책에 연결할 수 있습니다. 사용자 지정 정책의 경우 만든 권한은 모델 패키지 그룹 소유자가 승격해야 하며 승격된 권한이 연결된 엔터티만 검색할 수 있습니다. 승격할 수 없는 리소스 공유는 AWS RAM을 통해 검색하거나 관리할 수 없습니다.

   1. 이 리소스 공유 ARN을 AWS RAM 생성했는지 확인하려면 다음 명령을 사용합니다.

      ```
      aws ram get-resource-share-associations --association-type resource --resource-arn <model-package-group-arn>
      ```

      응답에는 엔터티에 대한 *resource-share-arn*이 포함됩니다.

   1. 연결된 정책 권한이 관리형 정책인지 또는 사용자 지정 정책인지 확인하려면 다음 명령을 사용합니다.

      ```
      aws ram list-resource-share-permissions --resource-share-arn <resource-share-arn>
      ```

      `featureSet` 필드에는 다음과 같이 정의된 `CREATED_FROM_POLICY` 또는 `STANDARD` 값이 지정될 수 있습니다.
      + `STANDARD`: 권한이 이미 있습니다.
      + `CREATED_FROM_POLICY`: 엔터티를 검색하려면 권한을 승격해야 합니다. 자세한 내용은 [권한 및 리소스 공유 승격](model-registry-ram-promote.md) 단원을 참조하십시오.

1. 모델 소비자 계정에서 리소스 공유 초대를 수락합니다.

   1. 모델 패키지 그룹 소비자는 리소스 공유 초대를 수락합니다. 모든 리소스 초대를 보려면 다음 명령을 실행합니다.

      ```
      aws ram get-resource-share-invitations
      ```

      상태가 `PENDING`인 요청을 식별하고 소유자 계정의 계정 ID를 포함합니다.

   1. 다음 명령을 사용하여 모델 소유자의 리소스 공유 초대를 수락합니다.

      ```
      aws ram accept-resource-share-invitation --resource-share-invitation-arn <resource-share-invitation-arn>
      ```

------
#### [ AWS RAM console ]

1. [AWS RAM 콘솔](https://console.aws.amazon.com/ram/home)에 로그인합니다.

1. 다음 단계를 완료하여 모델 패키지 그룹 소유자 계정에서 리소스 공유를 만듭니다.

   1. 리소스 공유 세부 정보 지정을 위한 다음 단계를 완료합니다.

      1. **이름** 필드에 리소스의 고유한 이름을 추가합니다.

      1. **리소스** 카드에서 드롭다운 메뉴를 선택하고 **SageMaker AI 모델 패키지 그룹**을 선택합니다.

      1. 모델 패키지 그룹 리소스 공유의 ARN 확인란을 선택합니다.

      1. **리소스 선택** 카드에서 모델 패키지 그룹 리소스 공유의 확인란을 선택합니다.

      1. **태그** 카드에서 리소스 공유에 추가할 태그의 키-값 쌍을 추가합니다.

      1. **다음**을 선택합니다.

   1. 다음 단계를 완료하여 관리형 권한을 리소스 공유에 연결합니다.

      1. 관리형 권한을 사용하는 경우 **관리형 권한** 드롭다운 메뉴에서 관리형 권한을 선택합니다.

      1. 사용자 지정 권한을 사용하는 경우 **고객 관리형 권한**을 선택합니다. 이 경우 모델 패키지 그룹을 즉시 검색할 수 없습니다. 리소스 공유를 만든 후 권한과 리소스 정책을 승격해야 합니다. 권한 및 리소스 공유를 승격하는 방법에 대한 자세한 내용은 [권한 및 리소스 공유 승격](model-registry-ram-promote.md) 섹션을 참조하세요. 사용자 지정 권한을 연결하는 방법에 대한 자세한 내용은 [Creating and using customer managed permissions in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/create-customer-managed-permissions.html)을 참조하세요.

      1. **다음**을 선택합니다.

   1. 위탁자에 대한 액세스 권한을 부여하려면 다음 단계를 완료하세요.

      1. 조직 외부의 계정과 공유할 수 있도록 **누구에게나 공유 허용**을 선택하거나 **조직 내에서만 공유 허용**을 선택합니다.

      1. **위탁자 유형 선택** 드롭다운 메뉴에서 추가하려는 위탁자의 위탁자 유형과 ID를 추가합니다.

      1. 공유에 대해 선택한 위탁자를 추가하고 선택합니다.

      1. **다음**을 선택합니다.

   1. 표시된 공유 구성을 검토한 다음 **리소스 공유 만들기**를 선택합니다.

1. 소비자 계정에서 리소스 공유 초대를 수락합니다. 모델 소유자가 리소스 공유와 위탁자 연결을 만들면 지정된 리소스 소비자 계정에 리소스 공유에 참여하라는 초대가 발송됩니다. 리소스 소비자 계정은 AWS RAM 콘솔에서 [나와 공유됨: 리소스 공유](https://console.aws.amazon.com/ram/home#SharedResourceShares:) 페이지에서 초대를 보고 수락할 수 있습니다. 에서 리소스를 수락하고 보는 방법에 대한 자세한 내용은 공유된 리소스 액세스를 AWS RAM참조하세요. [AWS](https://docs.aws.amazon.com//ram/latest/userguide/working-with-shared.html) 

------

# 공유된 모델 패키지 그룹 보기
<a name="model-registry-ram-view-shared"></a>

리소스 소유자가 리소스 공유를 생성하기 위한 이전 단계를 완료하고 소비자가 공유 초대를 수락하면 소비자는 콘솔에서 AWS CLI 또는를 사용하여 공유 모델 패키지 그룹을 볼 수 있습니다 AWS RAM .

## AWS CLI
<a name="model-registry-ram-view-shared-cli"></a>

공유된 모델 패키지 그룹을 보려면 모델 소비자 계정에서 다음 명령을 사용합니다.

```
aws sagemaker list-model-package-groups --cross-account-filter-option CrossAccount
```

## AWS RAM 콘솔
<a name="model-registry-ram-view-shared-ram"></a>

 AWS RAM 콘솔에서 리소스 소유자와 소비자는 공유 모델 패키지 그룹을 볼 수 있습니다. 리소스 소유자는 [Viewing resource shares you created in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-view-rs.html)의 단계에 따라 소비자와 공유된 모델 패키지 그룹을 볼 수 있습니다. 리소스 소비자는 공유된 [Viewing resource shares shared with you](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-view-rs.html)의 단계에 따라 소유자가 공유한 모델 패키지 그룹을 볼 수 있습니다.

# 리소스 공유에서 위탁자 연결 해제 및 리소스 공유 제거
<a name="model-registry-ram-dissociate"></a>

리소스 소유자는 AWS CLI 또는 콘솔을 사용하여 권한 집합에 대해 리소스 공유에서 보안 주체를 연결 해제하거나 전체 리소스 공유를 삭제할 수 있습니다 AWS RAM . 리소스 공유에서 위탁자를 연결 해제하는 방법에 대한 자세한 내용은 [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 설명서의 [Update a Resource Share](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html)를 참조하세요. 리소스 공유를 삭제하는 방법에 대한 자세한 내용은 [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 설명서의 [Deleting a resource share](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-delete.html)를 참조하세요.

## AWS CLI
<a name="model-registry-ram-dissociate-cli"></a>

리소스 공유에서 위탁자를 연결 해제하려면 다음과 같이 [dissociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html) 명령을 사용합니다.

```
aws ram disassociate-resource-share --resource-share-arn <resource-share-arn> --principals <principal>
```

리소스 공유를 삭제하려면 다음과 같이 [delete-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/delete-resource-share.html) 명령을 사용합니다.

```
aws ram delete-resource-share --resource-share-arn <resource-share-arn>
```

## AWS RAM 콘솔
<a name="model-registry-ram-dissociate-ram"></a>

리소스 공유에서 위탁자를 연결 해제하는 방법에 대한 자세한 내용은 [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 설명서의 [Update a Resource Share](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html)를 참조하세요. 리소스 공유를 삭제하는 방법에 대한 자세한 내용은 [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 설명서의 [Deleting a resource share](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-delete.html)를 참조하세요.

# 권한 및 리소스 공유 승격
<a name="model-registry-ram-promote"></a>

사용자 지정(고객 관리형) 권한을 사용하는 경우 모델 패키지 그룹이 검색 가능하려면 권한과 관련 리소스 공유를 승격해야 합니다. 권한 및 리소스 공유를 승격하려면 다음 단계를 완료하세요.

1. 사용자 지정 권한을에서 액세스할 수 있도록 승격하려면 다음 명령을 AWS RAM사용합니다.

   ```
   aws ram promote-permission-created-from-policy —permission-arn <permission-arn>
   ```

1. 다음 명령을 사용하여 리소스 공유를 승격합니다.

   ```
   aws ram promote-resource-share-created-from-policy --resource-share-arn <resource-share-arn>
   ```

이전 단계를 수행하는 동안 `OperationNotPermittedException` 오류가 표시되면 엔터티를 검색할 수는 없지만 액세스할 수는 있습니다. 예를 들어 리소스 소유자가 `“Principal”: {“AWS”: “arn:aws:iam::3333333333:role/Role-1”}`과 같은 수임 역할 위탁자와 함께 리소스 정책을 연결하거나 리소스 정책이 `“Action”: “*”`을 허용하는 경우 연결된 모델 패키지 그룹은 승격하거나 검색할 수 없습니다.

# 모델 배포 기록 보기
<a name="model-registry-deploy-history"></a>

Amazon SageMaker Studio 콘솔에서 모델 버전에 대한 배포를 보려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

**모델 버전 배포 기록 보기**

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택하여 모델 그룹 목록을 표시합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹의 왼쪽에 있는 꺾쇠괄호를 선택합니다.

1. 모델 그룹의 모델 버전 목록이 표시됩니다. 삭제하려는 모델 버전이 표시되지 않으면 **모두 보기**를 선택합니다.

1. 보려는 모델 버전의 이름을 선택합니다.

1. **활동** 탭을 선택합니다. 모델 버전의 배포는 활동 목록에 **이벤트 유형**이 **모델 배포**인 이벤트로 표시됩니다.

------
#### [ Studio Classic ]

**모델 버전 배포 기록 보기**

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. 모델 그룹 목록에서 보려는 모델 그룹 이름을 선택합니다.

1. 모델 그룹의 모델 버전 목록이 있는 새 탭이 나타납니다.

1. 모델 버전 목록에서 세부 정보를 보려는 모델 버전의 이름을 선택합니다.

1. 열리는 모델 버전 탭에서 **활동**을 선택합니다. 모델 버전의 배포는 활동 목록에 **이벤트 유형**이 **모델 배포**인 이벤트로 표시됩니다.

------

# Studio에서 모델 계보 세부 정보 보기
<a name="model-registry-lineage-view-studio"></a>

Amazon SageMaker Studio에서 등록된 모델의 계보 세부 정보를 볼 수 있습니다. 다음은 Studio에서 계보 보기에 액세스하는 방법에 대한 지침을 제공합니다. Amazon SageMaker Studio의 계보 추적에 대한 자세한 내용은 [Amazon SageMaker ML 계보 추적](lineage-tracking.md) 섹션을 참조하세요.

Amazon SageMaker Studio Classic에서는 이 기능을 사용할 수 없습니다.
+ Studio가 기본 환경인 경우 UI는 [Amazon SageMaker Studio UI 개요](studio-updated-ui.md)에 있는 이미지와 유사합니다.
+ Studio Classic이 기본 환경인 경우 UI는 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md)에 있는 이미지와 유사합니다.

계보 보기는 등록된 모델과 연결된 리소스의 대화형 시각화입니다. 이러한 리소스에는 데이터세트, 훈련 작업, 승인, 모델 및 엔드포인트가 포함됩니다. 계보에서는 소스 URI, 만든 시점의 타임스탬프 및 기타 메타데이터를 비롯한 관련 리소스 세부 정보도 볼 수 있습니다.

`us-east-1`, `us-west-2``ap-northeast-1`, 및 `eu-west-1` 리전에서 사용할 수 있는 기능은 다음과 같습니다.

로깅 및 등록된 모델의 계보를 추적할 수 있습니다. 또한 모델 리소스의 계보에는 데이터세트, 평가자, 훈련 작업, 승인, 모델, 추론 구성 요소 및 엔드포인트가 포함됩니다. 계보에서는 소스 URI, 만든 시점의 타임스탬프 및 기타 메타데이터를 비롯한 관련 리소스 세부 정보도 볼 수 있습니다.

다음은 등록된 모델 버전의 계보 세부 정보에 액세스하는 방법에 대한 지침을 제공합니다.

**등록된 모델 버전의 계보 세부 정보에 액세스하는 방법**

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. (선택 사항) 공유된 모델이 있는 경우 **내 모델** 또는 **나와 공유됨** 중에서 선택할 수 있습니다.

1. 등록된 모델을 선택합니다.

1. 아직 선택되지 않은 경우 **버전** 탭을 선택합니다.

1. **버전** 목록에서 특정 모델 버전을 선택합니다.

1. **Lineage(계보)** 탭을 선택합니다.

**계보** 탭에서 해당 모델 버전과 연결된 리소스를 탐색할 수 있습니다. 리소스를 선택하여 리소스 세부 정보를 볼 수도 있습니다.

계보 보기는 시각화 목적으로만 사용됩니다. 이 보기에서 구성 요소를 재배열하거나 이동해도 실제 등록된 모델 리소스에는 영향을 주지 않습니다.

`us-east-1`, , `ap-northeast-1`및 `eu-west-1` 리전의 경우 다음 지침을 사용하여 로깅 및 등록된 모델 버전의 `us-west-2`계보 세부 정보에 액세스할 수 있습니다.

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

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. **내 모델** 탭을 선택합니다.

1. (선택 사항) 사용자와 공유되는 모델이 있는 경우 나에 **의해 생성됨 또는 나와 공유됨** **중에서 선택할 수 있습니다**.

1. 모델을 선택하고 **최신 버전 보기를** 선택합니다.

1. **Lineage(계보)** 탭을 선택합니다.

# 모델 레지스트리 컬렉션
<a name="modelcollections"></a>

컬렉션을 사용하여 서로 관련된 등록된 모델을 그룹화하고 계층 구조로 구성하여 대규모 모델 검색 가능성을 개선할 수 있습니다. 컬렉션을 사용하면 서로 연관되어 있는 등록된 모델을 구성할 수 있습니다. 예를 들어, 모델이 해결하는 문제의 도메인을 기준으로 모델을 NLP 모델, CV 모델 또는 음성 인식 모델이라는 제목의 컬렉션으로 분류할 수 있습니다.****** 등록된 모델을 트리 구조로 구성하려면 컬렉션을 서로 중첩하면 됩니다. 컬렉션에 대해 수행하는 모든 작업(예: 생성, 읽기, 업데이트 또는 삭제)은 등록된 모델을 변경하지 않습니다. Amazon SageMaker Studio UI 또는 Python SDK를 사용하여 컬렉션을 관리할 수 있습니다.

모델 레지스트리의 **컬렉션** 탭에는 계정의 모든 컬렉션 목록이 표시됩니다. 다음 섹션에서는 **컬렉션** 탭의 옵션을 사용하여 다음 작업을 수행하는 방법을 설명합니다.
+ 컬렉션 생성
+ 컬렉션에 모델 그룹 추가
+ 컬렉션 간 모델 그룹 이동
+ 다른 컬렉션에서 모델 그룹 또는 컬렉션 제거

컬렉션에서 수행하는 작업은 컬렉션에 포함된 개별 모델 그룹의 무결성에 영향을 주지 않으므로, Amazon S3 및 Amazon ECR의 기본 모델 그룹 아티팩트는 수정되지 않습니다.

컬렉션을 사용하면 모델을 훨씬 더 유연하게 구성할 수 있지만 내부 표현은 계층 구조의 크기에 몇 가지 제약을 가합니다. 이러한 제약조건에 대한 요약은 [제약 조건](modelcollections-limitations.md)섹션을 참조하세요.

다음 항목에서는 모델 레지스트리에서 컬렉션을 생성하고 사용하는 방법을 보여줍니다.

**Topics**
+ [

# 사전 조건 권한 설정
](modelcollections-permissions.md)
+ [

# 컬렉션 생성
](modelcollections-create.md)
+ [

# 컬렉션에 모델 그룹 추가
](modelcollections-add-models.md)
+ [

# 컬렉션에서 모델 그룹 또는 컬렉션 제거
](modelcollections-remove-models.md)
+ [

# 컬렉션 간 모델 그룹 이동
](modelcollections-move-models.md)
+ [

# 모델 그룹의 상위 컬렉션 보기
](modelcollections-view-parent.md)
+ [

# 제약 조건
](modelcollections-limitations.md)

# 사전 조건 권한 설정
<a name="modelcollections-permissions"></a>

다음과 같은 필수 리소스 그룹 작업을 포함하는 사용자 지정 정책을 생성합니다.
+ `resource-groups:CreateGroup`
+ `resource-groups:DeleteGroup`
+ `resource-groups:GetGroupQuery`
+ `resource-groups:ListGroupResources`
+ `resource-groups:Tag`
+ `tag:GetResources`

인라인 정책을 추가하는 방법에 대한 지침은 [IAM 자격 증명 권한 추가(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)를 참조하세요. 정책 형식을 선택할 때 JSON 형식을 선택하고 다음 정책을 추가합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "resource-groups:ListGroupResources"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "resource-groups:GetGroupQuery"
            ],
            "Resource": "arn:aws:resource-groups:*:*:group/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:Tag"
            ],
            "Resource": "arn:aws:resource-groups:*:*:group/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": "sagemaker:collection"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "resource-groups:DeleteGroup",
            "Resource": "arn:aws:resource-groups:*:*:group/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sagemaker:collection": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "tag:GetResources",
            "Resource": "*"
        }
    ]
}
```

------

# 컬렉션 생성
<a name="modelcollections-create"></a>

**중요**  
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 [SageMaker AI 리소스 태그 지정을 위한 권한 제공](security_iam_id-based-policy-examples.md#grant-tagging-permissions) 섹션을 참조하세요.  
SageMaker 리소스를 만들 수 있는 권한을 부여하는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md)에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

Amazon SageMaker Studio 콘솔에서 컬렉션을 만들 수 있습니다. 컬렉션을 만들려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 **컬렉션**을 선택합니다.

1. (선택 사항) 다른 컬렉션 내에 컬렉션을 만들려면 컬렉션을 추가할 계층 구조로 이동합니다. 그렇지 않으면 컬렉션이 루트 수준에서 생성됩니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **새 컬렉션 생성**을 선택합니다.

1. 대화 상자의 **이름** 필드에 컬렉션 이름을 입력합니다.
**참고**  
이 컬렉션에 여러 계층 구조를 만들 계획이라면 컬렉션 이름을 짧게 유지하세요. 루트 수준에서 컬렉션의 위치를 나타내는 문자열인 절대 경로는 256자 이하여야 합니다. 자세한 내용은 [컬렉션 및 모델 그룹 태그 지정](modelcollections-limitations.md#modelcollections-tagging)섹션을 참조하세요.

1. (선택 사항) 컬렉션에 모델 그룹을 추가하려면 다음 단계를 완료합니다.

   1. **모델 그룹 선택**을 선택합니다.

   1. 추가할 모델 그룹을 선택합니다. 최대 10개까지 선택할 수 있습니다.

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

1. 컬렉션이 현재 계층 구조에서 생성되었는지 확인합니다. 새 컬렉션이 바로 보이지 않으면 **새로 고침**을 선택합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **컬렉션** 탭을 선택합니다.

1. (선택 사항) 다른 컬렉션 내에 컬렉션을 만들려면 컬렉션을 추가할 계층 구조로 이동합니다. 그렇지 않으면 컬렉션이 루트 수준에서 생성됩니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **새 컬렉션 생성**을 선택합니다.

1. 대화 상자의 **이름** 필드에 컬렉션 이름을 입력합니다.
**참고**  
이 컬렉션에 여러 계층 구조를 만들 계획이라면 컬렉션 이름을 짧게 유지하세요. 루트 수준에서 컬렉션의 위치를 나타내는 문자열인 절대 경로는 256자 이하여야 합니다. 자세한 내용은 [컬렉션 및 모델 그룹 태그 지정](modelcollections-limitations.md#modelcollections-tagging)섹션을 참조하세요.

1. (선택 사항) 컬렉션에 모델 그룹을 추가하려면 다음 단계를 완료합니다.

   1. **모델 그룹 선택**을 선택합니다.

   1. 추가할 모델 그룹을 선택합니다. 최대 10개까지 선택할 수 있습니다.

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

1. 컬렉션이 현재 계층 구조에서 생성되었는지 확인합니다. 새 컬렉션이 바로 보이지 않으면 **새로 고침**을 선택합니다.

------

# 컬렉션에 모델 그룹 추가
<a name="modelcollections-add-models"></a>

Amazon SageMaker Studio 콘솔에서 컬렉션에 모델 그룹을 추가할 수 있습니다. 컬렉션에 모델 그룹을 추가하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델**을 선택합니다.

1. 추가할 모델 그룹 옆의 확인란을 선택합니다. 최대 10개의 모델 그룹을 선택할 수 있습니다. 11개 이상을 선택하면 컬렉션에 모델 그룹을 추가하는 UI 옵션이 비활성화됩니다.

1. **만들기** 옆에 있는 세로 줄임표를 선택하고 **컬렉션에 추가**를 선택합니다.

1. 선택한 모델 그룹을 추가할 컬렉션의 라디오 버튼을 선택합니다.

1. **컬렉션에 추가**를 선택합니다.

1. 모델 그룹이 컬렉션에 추가되었는지 확인합니다. 선택한 모델 그룹의 **컬렉션** 열에 모델 그룹을 추가한 컬렉션 이름이 표시됩니다.

------
#### [ Studio Classic ]

**모델 그룹** 또는 **컬렉션** 탭에서 컬렉션에 모델 그룹을 추가할 수 있습니다.

**컬렉션** 탭에서 컬렉션에 하나 이상의 모델 그룹을 추가하려면 다음 단계를 완료하세요.

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **컬렉션** 탭을 선택합니다.

1. 모델 그룹을 추가할 컬렉션을 선택합니다. 원하는 컬렉션이 루트 수준에 있지 않은 경우 모델 그룹을 추가할 계층 구조로 이동합니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **모델 그룹 추가**를 선택합니다.

1. 추가할 모델 그룹을 선택합니다. 최대 10개의 모델 그룹을 선택할 수 있습니다. 11개 이상을 선택하면 컬렉션에 모델 그룹을 추가하는 UI 옵션이 비활성화됩니다.

1. **컬렉션에 추가**를 선택합니다.

1. 모델 그룹이 현재 계층 구조에 추가되었는지 확인합니다. 새 모델 그룹이 바로 보이지 않으면 **새로 고침**을 선택합니다.

**모델 그룹** 탭에서 컬렉션에 하나 이상의 모델 그룹을 추가하려면 다음 단계를 완료하세요.

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **모델 그룹** 탭을 선택합니다.

1. 추가할 모델 그룹을 선택합니다. 최대 10개까지 선택할 수 있습니다. 11개 이상을 선택하면 컬렉션에 모델 그룹을 추가하는 UI 옵션이 비활성화됩니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **컬렉션에 추가**를 선택합니다.

1. 팝업 대화 상자에서 루트 경로 위치 `Collections`을 선택합니다. 루트 위치에 대한 이 링크는 테이블 위에 표시됩니다.

1. 대상 컬렉션이 포함된 계층 구조 또는 모델을 추가할 새 컬렉션을 만들려는 계층 구조로 이동합니다.

1. (선택 사항) 기존 컬렉션에 모델 그룹을 추가하려면 다음 단계를 완료합니다.

   1. 대상 컬렉션을 선택합니다.

   1. **컬렉션에 추가**를 선택합니다.

1. (선택 사항) 새 컬렉션에 모델 그룹을 추가하려면 다음 단계를 완료합니다.

   1. **새 컬렉션**을 선택합니다.

   1. 새 컬렉션의 이름을 입력합니다.

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

------

# 컬렉션에서 모델 그룹 또는 컬렉션 제거
<a name="modelcollections-remove-models"></a>

컬렉션에서 모델 그룹이나 컬렉션을 제거하면 모델 레지스트리에서 제거되는 것이 아니라 특정 그룹에서만 제거됩니다. Amazon SageMaker Studio 콘솔에서 컬렉션에서 모델 그룹을 제거할 수 있습니다.

컬렉션에서 하나 이상의 모델 그룹 또는 컬렉션을 제거하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 **컬렉션**을 선택합니다.

1. 제거하려는 모델 그룹 또는 컬렉션이 포함된 컬렉션으로 이동합니다.

1. 제거할 모델 그룹 또는 컬렉션을 선택합니다. 최대 10개까지 선택할 수 있습니다. 11개 이상의 모델 그룹 또는 컬렉션을 선택하면 제거하는 UI 옵션이 비활성화됩니다.
**중요**  
제거할 모델 그룹과 컬렉션을 동시에 선택할 수는 없습니다. 모델 그룹과 컬렉션을 모두 제거하려면 먼저 모델 그룹을 제거한 다음 컬렉션을 제거합니다.
**중요**  
비어 있지 않은 컬렉션은 제거할 수 없습니다. 비어 있지 않은 컬렉션을 제거하려면 먼저 해당 콘텐츠를 제거해야 합니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **컬렉션에서 X개 항목 제거**를 선택합니다(여기서 X는 선택한 모델 그룹 수).

1. 선택한 모델 그룹 제거를 원한다는 것을 확인합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **컬렉션** 탭을 선택합니다.

1. 제거하려는 모델 그룹 또는 컬렉션이 포함된 컬렉션으로 이동합니다.

1. 제거할 모델 그룹 또는 컬렉션을 선택합니다. 최대 10개까지 선택할 수 있습니다. 11개 이상의 모델 그룹 또는 컬렉션을 선택하면 제거하는 UI 옵션이 비활성화됩니다.
**중요**  
제거할 모델 그룹과 컬렉션을 동시에 선택할 수는 없습니다. 모델 그룹과 컬렉션을 모두 제거하려면 먼저 모델 그룹을 제거한 다음 컬렉션을 제거합니다.
**중요**  
비어 있지 않은 컬렉션은 제거할 수 없습니다. 비어 있지 않은 컬렉션을 제거하려면 먼저 해당 콘텐츠를 제거해야 합니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **컬렉션에서 X개 항목 제거를 선택합니다**(여기서 X는 선택한 모델 그룹 수).

1. 선택한 모델 그룹 제거를 원한다는 것을 확인합니다.

------

# 컬렉션 간 모델 그룹 이동
<a name="modelcollections-move-models"></a>

Amazon SageMaker Studio 콘솔에서 하나 이상의 모델 그룹을 한 컬렉션에서 다른 컬렉션으로 이동할 수 있습니다.

모델 그룹을 이동하려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 **컬렉션**을 선택합니다.

1. 이동하려는 모델 그룹이 포함된 컬렉션으로 이동합니다.

1. 이동할 모델 그룹을 선택합니다. 최대 10개까지 선택할 수 있습니다. 11개 이상을 선택하면 모델 그룹을 이동하는 UI 옵션이 비활성화됩니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **다음 위치로 이동**을 선택합니다.

1. 대화 상자에서 루트 경로 위치 `Collections`을 선택합니다. 루트 위치에 대한 이 링크는 테이블 위에 표시됩니다.

1. 대상 컬렉션이 포함된 계층 구조로 이동합니다.

1. 테이블에서 대상 컬렉션을 선택합니다.

1. **여기로 이동**을 선택합니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **컬렉션** 탭을 선택합니다.

1. 이동하려는 모델 그룹이 포함된 컬렉션으로 이동합니다.

1. 이동할 모델 그룹을 선택합니다. 최대 10개까지 선택할 수 있습니다. 11개 이상을 선택하면 모델 그룹을 이동하는 UI 옵션이 비활성화됩니다.

1. 오른쪽 상단의 **작업** 드롭다운 메뉴에서 **다음 위치로 이동**을 선택합니다.

1. 대화 상자에서 루트 경로 위치 `Collections`을 선택합니다. 루트 위치에 대한 이 링크는 테이블 위에 표시됩니다.

1. 대상 컬렉션이 포함된 계층 구조로 이동합니다.

1. 테이블에서 대상 컬렉션을 선택합니다.

1. **여기로 이동**을 선택합니다.

------

# 모델 그룹의 상위 컬렉션 보기
<a name="modelcollections-view-parent"></a>

Amazon SageMaker Studio 콘솔에서 특정 모델 그룹이 포함된 컬렉션을 볼 수 있습니다.

특정 모델 그룹이 포함된 컬렉션을 보려면 Studio를 사용하는지 아니면 Studio Classic을 사용하는지에 따라 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **모델**을 선택합니다.

1. 아직 선택되어 있지 않은 경우 **등록된 모델** 탭을 선택합니다.

1. **등록된 모델** 탭 레이블 바로 아래에서 아직 선택되어 있지 않은 경우 **모델 그룹**을 선택합니다.

1. 모델 그룹의 **컬렉션** 열을 확인합니다.이 열에는 이 모델 그룹이 포함된 컬렉션의 이름이 표시됩니다. 여러 컬렉션에 이 모델 그룹이 포함된 경우 **컬렉션** 열 항목을 선택하면 이 모델 그룹이 포함된 컬렉션을 나열하는 팝업이 표시됩니다.

------
#### [ Studio Classic ]

1. Amazon SageMaker Studio Classic에 로그인합니다. 자세한 내용은 [Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)을 참조하세요.

1. 왼쪽의 탐색 창에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. **모델**을 선택한 다음 **모델 레지스트리**를 선택합니다.

1. **모델 그룹** 탭을 선택합니다.

1. 테이블에서 모델 그룹을 찾습니다.

1. 모델 그룹의 **컬렉션** 열을 확인합니다.이 열에는 이 모델 그룹이 포함된 컬렉션의 이름이 표시됩니다. 여러 컬렉션에 이 모델 그룹이 포함된 경우 **컬렉션** 열 항목을 선택하면 이 모델 그룹이 포함된 컬렉션을 나열하는 팝업이 표시됩니다.

------

# 제약 조건
<a name="modelcollections-limitations"></a>

컬렉션을 사용하는 동안 컬렉션 작업에 대한 태그 길이 제한 또는 속도 제한과 관련된 문제가 발생할 수 있습니다. 컬렉션을 사용할 때 이러한 제한과 관련된 문제를 피할 수 있도록 다음 주의 사항 목록을 검토하세요.

**VPC 제약 조건**
+ VPC 모드에서는 컬렉션이 지원되지 않습니다.

**컬렉션 작업 제약 조건**
+ 컬렉션에 한 번에 최대 10개의 모델 그룹을 추가할 수 있습니다.
+ 컬렉션에서 한 번에 최대 10개의 모델 그룹을 제거할 수 있습니다.
+ 다른 컬렉션으로 한 번에 최대 10개의 모델 그룹을 이동할 수 있습니다.
+ 컬렉션이 비어 있지 않으면 컬렉션을 삭제할 수 없습니다.
+ 모델 그룹은 여러 컬렉션에 속할 수 있지만 컬렉션은 하나의 컬렉션에만 속할 수 있습니다.

**태그 관련 제약 조건**
+ 모델 그룹은 최대 48개의 컬렉션에 속할 수 있습니다. 자세한 내용은 다음 섹션 [컬렉션 및 모델 그룹 태그 지정](#modelcollections-tagging)을 참조하세요.
+ 컬렉션의 절대 경로는 최대 256자일 수 있습니다. 컬렉션 이름은 사용자가 지정하므로 경로 길이를 제어할 수 있습니다. 자세한 내용은 다음 섹션 [컬렉션 및 모델 그룹 태그 지정](#modelcollections-tagging)을 참조하세요.

## 컬렉션 및 모델 그룹 태그 지정
<a name="modelcollections-tagging"></a>

SageMaker 모델 레지스트리는 태그 규칙 및 태그를 사용하여 컬렉션 그룹과 계층 구조를 내부적으로 나타냅니다. AWS Resource Access Manager, SageMaker SDK 및에서 이러한 태그 요소에 액세스할 수 AWS CLI있지만 변경하거나 삭제하지 않는 것이 중요합니다.

**중요**  
컬렉션 또는 모델 그룹에 속하는 태그 규칙 또는 태그를 삭제하거나 변경하지 마세요. 삭제하거나 변경하면 컬렉션 작업을 수행할 수 없습니다\$1

태그 규칙은 SageMaker AI가 계층 구조에서 컬렉션의 위치를 식별하는 데 사용하는 키-값 쌍입니다. 간단히 말해 키는 상위 컬렉션의 키이고 값은 계층 구조 내 컬렉션의 경로입니다. SageMaker AI에서는 태그 값을 256자 이하로 설정할 수 있으므로 여러 개의 중첩된 계층 구조가 있는 경우 컬렉션 이름을 짧게 유지하는 것이 좋습니다.

**중요**  
컬렉션 이름은 짧게 작성하세요. 컬렉션의 절대 경로는 256자 이하여야 합니다.

반면 모델 그룹에는 태그 규칙이 없지만 태그를 사용합니다. 모델 그룹의 태그에는 모델 그룹을 포함하는 모든 컬렉션의 태그 규칙이 포함됩니다. 예를 들어, 네 개의 컬렉션에 *model-group-1*이 포함된 경우 *model-group-1*에는 네 개의 태그가 있습니다. SageMaker AI를 사용하면 단일 AWS 리소스에 최대 50개의 태그를 지정할 수 있습니다. 범용으로 두 개가 사전 할당되므로 모델 그룹은 최대 48개의 태그를 가질 수 있습니다. 결과적으로 모델 그룹은 최대 48개의 컬렉션에 속할 수 있습니다.

# SageMaker AI에서의 모델 배포
<a name="model-deploy-mlops"></a>

프로덕션용 모델을 훈련하고 승인한 후에는 SageMaker AI를 사용하여 실시간 추론을 위해 엔드포인트에 모델을 배포할 수 있습니다. SageMaker AI는 워크로드에 가장 적합한 옵션을 선택할 수 있도록 여러 추론 옵션을 제공합니다. 또한 최적의 성능을 위해 필요한 인스턴스 유형과 인스턴스 수를 선택하여 엔드포인트를 구성할 수 있습니다. 모델 배포에 대한 자세한 내용은 [추론 모델 배포](deploy-model.md)섹션을 참조하세요.



모델을 프로덕션에 배포한 후에는 현재 모델의 가용성을 유지하면서 모델 성능을 더욱 최적화하는 방법을 모색하고자 할 수 있습니다. 예를 들어, 변경 사항을 적용하기 전에 섀도우 테스트를 설정하여 인프라를 제공하는 다른 모델이나 모델을 시험해 볼 수 있습니다. SageMaker AI는 새 모델, 컨테이너 또는 인스턴스를 섀도우 모드로 배포하고 동일한 엔드포인트 내에서 실시간으로 추론 요청의 사본을 해당 모델에 라우팅합니다. 섀도우 변형의 응답을 기록하여 비교할 수 있습니다. 섀도우 테스트에 대한 자세한 내용은 [섀도우 테스트](shadow-tests.md)섹션을 참조하세요. 계속해서 모델을 변경하기로 결정한 경우 배포 가드레일을 사용하여 현재 모델에서 새 모델로의 전환을 제어할 수 있습니다. 트래픽 이동 프로세스에 대한 블루/그린 또는 Canary 테스트와 같은 방법을 선택하여 업데이트 중에 세밀한 제어를 유지할 수 있습니다. 배포 가드레일에 대한 자세한 내용은 [프로덕션에서 모델을 업데이트하기 위한 배포 가드레일](deployment-guardrails.md)섹션을 참조하세요.

# SageMaker 모델 모니터
<a name="model-monitor-mlops"></a>

모델이 프로덕션 단계에 들어가면 Amazon SageMaker 모델 모니터를 사용하여 실시간으로 성능을 모니터링할 수 있습니다. 모델 모니터를 사용하면 데이터 품질, 모델 품질, 바이어스 드리프트 및 기능 속성 드리프트에 대한 사용자 지정 임계값 위반을 탐지하여 모델 품질을 유지할 수 있습니다. 또한 위반 사항이 발생할 경우 문제를 해결하고 즉시 재훈련을 시작할 수 있도록 알림을 구성할 수 있습니다. 모델 모니터는 SageMaker Clarify와 통합되어 잠재적 바이어스에 대한 가시성을 개선합니다.

SageMaker 모델 모니터에 대해 알아보려면 [Amazon SageMaker Model Monitor를 사용한 데이터 및 모델 품질 모니터링](model-monitor.md)섹션을 참조하세요.

# SageMaker 프로젝트를 통한 MLOps 자동화
<a name="sagemaker-projects"></a>

SageMaker 프로젝트를 사용하여 CI/CD로 엔드투엔드 ML 솔루션을 생성합니다.

SageMaker 프로젝트를 사용하여 MLOps 솔루션을 만들고 다음을 오케스트레이션하고 관리합니다.
+ 처리, 훈련 및 추론을 위한 사용자 지정 이미지 구축
+ 데이터 준비 및 특성 추출
+ 모델 훈련
+ 모델 평가
+ 모델 배포
+ 모델 모니터링 및 업데이트

**Topics**
+ [

# SageMaker AI 프로젝트는 무엇인가요?
](sagemaker-projects-whatis.md)
+ [

# 프로젝트를 사용하기 위해 SageMaker Studio 권한 부여
](sagemaker-projects-studio-updates.md)
+ [

# Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트 만들기
](sagemaker-projects-create.md)
+ [

# MLOps 프로젝트 템플릿
](sagemaker-projects-templates.md)
+ [

# 프로젝트 리소스 보기
](sagemaker-projects-resources.md)
+ [

# Amazon SageMaker Studio 또는 Studio Classic에서 MLOps 프로젝트 업데이트
](sagemaker-projects-update.md)
+ [

# Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트 삭제
](sagemaker-projects-delete.md)
+ [

# 타사 Git 리포지토리를 사용한 SageMaker AI MLOps 프로젝트 안내서
](sagemaker-projects-walkthrough-3rdgit.md)

# SageMaker AI 프로젝트는 무엇인가요?
<a name="sagemaker-projects-whatis"></a>

SageMaker 프로젝트는 조직이 데이터 사이언티스트를 위한 개발자 환경과 MLOps 엔지니어를 위한 CI/CD 시스템을 설정하고 표준화하는 데 도움이 됩니다. 또한 프로젝트는 조직이 종속성 관리, 코드 리포지토리 관리, 빌드 재현성 및 아티팩트 공유를 설정하는 데 도움이 됩니다.

Amazon S3 버킷에 저장된 사용자 지정 템플릿을 사용하거나 또는 SageMaker AI의 템플릿을 사용하여 AWS Service Catalog SageMaker 프로젝트를 프로비저닝할 수 있습니다. AWS Service Catalog에 대한 자세한 내용은 [AWS Service Catalog란 무엇입니까](https://docs.aws.amazon.com/servicecatalog/latest/dg/what-is-service-catalog.html)?를 참조하십시오. SageMaker 프로젝트를 통해 MLOps 엔지니어와 조직 관리자는 자체 템플릿을 정의하거나 SageMaker AI에서 제공하는 템플릿을 사용할 수 있습니다. SageMaker AI에서 제공하는 템플릿은 소스 버전 관리, 자동화된 ML 파이프라인, ML 사용 사례에서 빠르게 반복을 시작할 수 있는 코드 세트를 통해 ML 워크플로를 부트스트랩합니다.

## SageMaker AI 프로젝트는 언제 사용해야 하나요?
<a name="sagemaker-projects-when"></a>

**중요**  
2024년 9월 9일부터 AWS CodeCommit 리포지토리를 사용하는 프로젝트 템플릿은 더 이상 지원되지 않습니다. 새 프로젝트의 경우 타사 Git 리포지토리를 사용하는 사용 가능한 프로젝트 템플릿 중에서 선택하세요.

노트북은 모델 구축 및 실험에 유용하지만 코드를 공유하는 데이터 사이언티스트와 ML 엔지니어 팀은 코드 일관성과 엄격한 버전 관리를 유지하기 위해 보다 확장 가능한 방법이 필요합니다.

모든 조직은 AWS 환경에 대한 보안 및 거버넌스를 제공하는 자체 표준 및 관행 세트를 가지고 있습니다. SageMaker AI는 ML 워크플로 및 CI/CD를 빠르게 시작하려는 조직을 위한 퍼스트 파티 템플릿 세트를 제공합니다. 템플릿에는 AWS CodeBuild AWS CodePipeline및와 같이 CI/CD에 AWS네이티브 서비스를 사용하는 프로젝트가 포함됩니다 AWS CodeCommit. 템플릿은 Jenkins 및 GitHub와 같은 타사 도구를 사용하는 프로젝트를 생성할 수 있는 옵션도 제공합니다. SageMaker AI에서 제공하는 프로젝트 템플릿 목록은 [SageMaker AI에서 제공하는 프로젝트 템플릿 사용](sagemaker-projects-templates-sm.md) 섹션을 참조하세요.

조직은 프로비저닝하고 관리하는 MLOps 리소스를 엄격하게 제어해야 하는 경우가 많습니다. 이러한 책임에는 IAM 역할 및 정책 구성, 리소스 태그 적용, 암호화 적용, 여러 계정의 리소스 분리 등 특정 작업이 포함됩니다. SageMaker 프로젝트는 조직이 템플릿을 사용하여 ML 워크플로에 필요한 리소스를 정의하는 사용자 지정 CloudFormation 템플릿 제공을 통해 이러한 모든 작업을 지원할 수 있습니다. 데이터 사이언티스트는 템플릿을 선택하여 ML 워크플로를 부트스트랩하고 사전 구성할 수 있습니다.

시작하려면 Amazon S3 버킷 내에 사용자 지정 템플릿을 생성하고 저장하는 것이 좋습니다. 이렇게 하면 조직의 지원되는 모든 리전에서 버킷을 생성할 수 있습니다. S3는 버전 관리를 지원하므로 여러 버전의 템플릿을 유지하고 필요한 경우 롤백할 수 있습니다. Amazon S3 버킷의 템플릿 스토어에서 프로젝트를 생성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[Amazon S3 버킷의 템플릿 사용](sagemaker-projects-templates-custom.md#sagemaker-projects-templates-s3).

또는 사용자 지정 템플릿을 Service Catalog 제품으로 생성하고 Studio 또는 Studio Classic UI의 **조직 템플릿에서 프로비저닝할 수도 있습니다**. Service Catalog는 조직에서 사용이 승인된 제품 카탈로그를 생성하고 관리하는 데 도움이 되는 서비스입니다 AWS. 사용자 지정 템플릿을 만드는 방법에 대한 자세한 내용은 [Build Custom SageMaker AI Project Templates – Best Practices](https://aws.amazon.com/blogs/machine-learning/build-custom-sagemaker-project-templates-best-practices/)를 참조하세요.

두 옵션 중 하나를 사용할 수 있지만 서비스 카탈로그를 통해 S3 버킷을 사용하는 것이 좋습니다. 따라서 서비스 카탈로그의 복잡성을 관리할 필요 없이 SageMaker AI를 사용할 수 있는 지원되는 리전에서 버킷을 생성할 수 있습니다.

SageMaker 프로젝트는 Git 리포지토리를 관리하는 데 도움이 되므로 팀 간에 더 효율적으로 협업하고, 코드 일관성을 유지하고, CI/CD를 지원할 수 있습니다. SageMaker 프로젝트는 다음 작업에 도움이 될 수 있습니다.
+ ML 수명 주기의 모든 엔터티를 하나의 프로젝트로 구성합니다.
+ 모범 사례를 통합한 모델 훈련 및 배포를 위한 표준 ML 인프라를 설정하는 원클릭 접근 방식을 설정합니다.
+ ML 인프라용 템플릿을 만들고 공유하여 여러 사용 사례를 지원합니다.
+ SageMaker AI에서 제공하는 사전 구축된 템플릿을 활용하여 모델 구축에 빠르게 집중하거나 조직별 리소스 및 지침이 포함된 사용자 지정 템플릿을 생성합니다.
+ 프로젝트 템플릿을 확장하여 원하는 도구와 통합합니다. 예시는 [Create a SageMaker AI Project to integrate with GitLab and GitLab Pipelines](https://aws.amazon.com/blogs/machine-learning/build-mlops-workflows-with-amazon-sagemaker-projects-gitlab-and-gitlab-pipelines/)을 참조하세요.
+ ML 수명 주기의 모든 엔터티를 하나의 프로젝트로 구성합니다.

## SageMaker AI 프로젝트에는 무엇이 있나요?
<a name="sagemaker-projects-within"></a>

고객은 자신의 사용 사례에 가장 적합한 리소스로 프로젝트를 유연하게 설정할 수 있습니다. 아래 예시는 모델 훈련 및 배포를 포함한 ML 워크플로의 MLOps 설정을 보여줍니다.

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


SageMaker AI에서 제공하는 템플릿을 사용하는 일반적인 프로젝트에는 다음이 포함될 수 있습니다.
+ ML 솔루션을 빌드하고 배포하기 위한 샘플 코드가 있는 하나 이상의 리포지토리. 다음은 필요에 맞게 수정할 수 있는 실제 예시입니다. 이 코드를 소유하고 있으며 버전 관리 리포지토리를 작업에 활용할 수 있습니다.
+ 다음 다이어그램과 같이 데이터 준비, 훈련, 모델 평가 및 모델 배포를 위한 단계를 정의하는 SageMaker AI 파이프라인입니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/projects/pipeline-in-project-simple.png)
+ 새 버전의 코드를 체크인할 때마다 SageMaker AI 파이프라인을 실행하는 CodePipeline 또는 Jenkins 파이프라인입니다. CodePipeline에 대한 자세한 내용은 [What is AWS CodePipeline을 참조하세요.](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) Jenkins에 대한 자세한 내용은 [Jenkins 사용자 설명서](https://www.jenkins.io/doc/)를 참조하세요.
+ 모델 버전이 포함된 모델 그룹. SageMaker AI 파이프라인 실행의 결과 모델 버전을 승인할 때마다 SageMaker AI 엔드포인트에 배포할 수 있습니다.

각 SageMaker AI 프로젝트에는 프로젝트에서 생성된 모든 SageMaker AI 및 AWS 리소스에 태그로 적용되는 고유한 이름과 ID가 있습니다. 이름과 ID를 사용하여 프로젝트와 관련된 모든 엔터티를 볼 수 있습니다. 다음이 포함됩니다.
+ 파이프라인
+ 등록된 모델
+ 배포된 모델(엔드포인트)
+ 데이터세트
+ 서비스 카탈로그 제품
+ CodePipeline과 Jenkins 파이프라인
+ CodeCommit 및 타사 Git 리포지토리

## SageMaker AI Pipelines을 사용하려면 프로젝트를 생성해야 하나요?
<a name="sagemaker-projects-need"></a>

아니요.SageMaker 파이프라인은 훈련 작업, 처리 작업 및 기타 SageMaker AI 작업과 마찬가지로 독립 실행형 엔터티입니다. SageMaker AI 프로젝트를 사용하지 않고 SageMaker Python SDK를 사용하여 노트북 내에서 직접 파이프라인을 생성, 업데이트 및 실행할 수 있습니다.

프로젝트는 코드를 구성하고 프로덕션 품질 시스템에 필요한 운영 모범 사례를 채택하는 데 도움이 되는 추가 계층을 제공합니다.

# 프로젝트를 사용하기 위해 SageMaker Studio 권한 부여
<a name="sagemaker-projects-studio-updates"></a>

도메인에 추가하는 Amazon SageMaker Studio(또는 Studio Classic) 관리자 및 Studio(또는 Studio Classic) 사용자는 SageMaker AI에서 제공하는 프로젝트 템플릿을 보고 해당 템플릿으로 프로젝트를 만들 수 있습니다. 기본적으로 관리자는 Service Catalog 콘솔에서 SageMaker AI 템플릿을 볼 수 있습니다. 사용자에게 SageMaker 프로젝트 사용 권한이 있는 경우 관리자는 다른 사용자가 만드는 것을 볼 수 있습니다. 관리자는 SageMaker AI 프로젝트 CloudFormation 템플릿이 Service Catalog 콘솔에서 정의하는 템플릿을 볼 수도 있습니다. 서비스 카탈로그 콘솔 사용에 대한 자세한 내용은 서비스 카탈로그 사용자 설명서의 [서비스 카탈로그란 무엇인가요?](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)를 참조하세요.**

기본적으로 도메인과 동일한 실행 역할을 사용하도록 구성된 도메인의 Studio(및 Studio Classic) 사용자는 SageMaker AI 프로젝트 템플릿을 사용하여 프로젝트를 만들 수 있는 권한이 있습니다.

**중요**  
역할을 수동으로 생성하지 마세요. 항상 다음 절차에 설명된 단계를 사용하여 **Studio 설정**을 통해 역할을 생성하세요.

도메인의 실행 역할 이외의 역할을 사용하여 SageMaker AI에서 제공하는 프로젝트 템플릿을 보고 사용하는 사용자의 경우, Studio 사용자를 도메인에 추가할 때 **Amazon SageMaker AI 프로젝트 템플릿 및 Amazon SageMaker JumpStart 활성화**를 켜서 개별 사용자 프로필에 **프로젝트** 권한을 부여해야 합니다. 이 단계에 대한 자세한 내용은 [사용자 프로필 추가](domain-user-profile-add.md) 섹션을 참조하세요.

SageMaker 프로젝트는 서비스 카탈로그의 지원을 받기 때문에 SageMaker 프로젝트에 대한 액세스가 필요한 각 역할을 서비스 카탈로그의 **Amazon SageMaker AI 솔루션 및 ML Ops 제품 포트폴리오**에 추가해야 합니다. 다음 이미지와 같이 **그룹, 역할 및 사용자** 탭에서 이 작업을 수행할 수 있습니다. Studio Classic의 각 사용자 프로필에 다른 역할이 있는 경우 이러한 각 역할을 서비스 카탈로그에 추가해야 합니다. Studio Classic에서 사용자 프로필을 만드는 동안에도 이 작업을 수행할 수 있습니다.

## 새 도메인 역할에 프로젝트에 대한 액세스 권한 부여
<a name="sagemaker-projects-grant-access"></a>

도메인의 실행 역할을 변경하거나 역할이 다른 사용자 프로필을 추가할 때 SageMaker 프로젝트를 사용하려면 이러한 새 역할에 Service Catalog 포트폴리오에 대한 액세스 권한을 부여해야 합니다. 다음 단계에 따라 모든 역할에 필요한 권한이 있는지 확인합니다.

**새 도메인 역할에 프로젝트에 대한 액세스 권한을 부여하는 방법**

1. [Service Catalog 콘솔](https://console.aws.amazon.com/servicecatalog/)을 엽니다.

1. 왼쪽 탐색 메뉴에서 **포트폴리오**를 선택합니다.

1. **가져옴** 섹션을 선택합니다.

1. **Amazon SageMaker 솔루션 및 ML Ops 제품**을 선택합니다.

1. **액세스** 탭을 선택합니다.

1. **액세스 권한 부여**를 선택합니다.

1. **액세스 권한 부여** 대화 상자에서 **역할**을 선택합니다.

1. 다음을 포함하여 도메인의 사용자 프로필에서 사용하는 모든 역할에 대한 액세스 권한을 부여합니다.
   + 도메인의 실행 역할
   + 개별 사용자 프로필에 할당된 사용자 지정 실행 역할

1. **액세스 권한 부여**를 선택하여 확인합니다.

**중요**  
도메인의 실행 역할을 변경하거나 새 실행 역할로 사용자 프로필을 추가할 때마다 이 프로세스를 완료해야 합니다. 이 액세스 권한이 없으면 사용자는 SageMaker 프로젝트를 생성하거나 사용할 수 없습니다.

다음 절차는 Studio 또는 Studio Classic에 온보딩한 후 **프로젝트** 권한을 부여하는 방법을 보여줍니다. Studio 또는 Studio Classic 온보딩에 대한 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 섹션을 참조하세요.

**SageMaker AI 도메인에 활성 프로젝트 템플릿 권한이 있는지 확인하는 방법:**

1. [SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker/)을 엽니다.

1. 왼쪽 탐색 창에서 **관리자 구성**을 선택합니다.

1. **관리자 구성**에서 **도메인**을 선택합니다.

1. 도메인을 선택합니다.

1. **도메인 설정** 탭을 선택합니다.

1. **SageMaker 프로젝트** 및 JumpStart에서 다음 옵션이 켜져 있는지 확인합니다.
   + **이 계정에 대해 Amazon SageMaker AI 프로젝트 템플릿 및 Amazon SageMaker JumpStart 활성화**
   + **Studio 사용자에 대해 Amazon SageMaker AI 프로젝트 템플릿 및 Amazon SageMaker JumpStart 활성화**

**역할 목록을 보려면:**

1. [SageMaker AI 콘솔](https://console.aws.amazon.com/sagemaker/)을 엽니다.

1. 왼쪽 탐색 창에서 **관리자 구성**을 선택합니다.

1. **관리자 구성**에서 **도메인**을 선택합니다.

1. 도메인을 선택합니다.

1. **도메인 설정** 탭을 선택합니다.

1. 역할 목록이 **Studio** 탭 아래 `Apps`카드에 표시됩니다.
**중요**  
7월 25일부터 프로젝트 템플릿을 사용하려면 추가 역할이 필요합니다. `Projects` 아래에서 확인해야 하는 전체 역할 목록은 다음과 같습니다.  
`AmazonSageMakerServiceCatalogProductsLaunchRole` `AmazonSageMakerServiceCatalogProductsUseRole` `AmazonSageMakerServiceCatalogProductsApiGatewayRole` `AmazonSageMakerServiceCatalogProductsCloudformationRole` `AmazonSageMakerServiceCatalogProductsCodeBuildRole` `AmazonSageMakerServiceCatalogProductsCodePipelineRole` `AmazonSageMakerServiceCatalogProductsEventsRole` `AmazonSageMakerServiceCatalogProductsFirehoseRole` `AmazonSageMakerServiceCatalogProductsGlueRole` `AmazonSageMakerServiceCatalogProductsLambdaRole` `AmazonSageMakerServiceCatalogProductsExecutionRole`  
이러한 역할에 대한 자세한 설명은 [AWS SageMaker 프로젝트 및 JumpStart에 대한 관리형 정책](security-iam-awsmanpol-sc.md)섹션을 참조하세요.

# Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트 만들기
<a name="sagemaker-projects-create"></a>

**중요**  
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 [SageMaker AI 리소스 태그 지정을 위한 권한 제공](security_iam_id-based-policy-examples.md#grant-tagging-permissions) 섹션을 참조하세요.  
SageMaker 리소스를 만들 수 있는 권한을 부여하는 [AWS Amazon SageMaker AI에 대한 관리형 정책](security-iam-awsmanpol.md)에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

이 절차는 Amazon SageMaker Studio Classic을 사용하여 MLOps 프로젝트를 만드는 방법을 보여 줍니다.

**사전 조건**
+ Studio 또는 Studio Classic에 로그인하기 위한 IAM 계정 또는 IAM Identity Center 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.
+ SageMaker AI에서 제공하는 프로젝트 템플릿을 사용할 수 있는 권한. 자세한 내용은 [프로젝트를 사용하기 위해 SageMaker Studio 권한 부여](sagemaker-projects-studio-updates.md) 단원을 참조하십시오.
+ Studio Classic 사용자 인터페이스 및 Jupyter Notebook에 대한 기본 지식 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 섹션을 참조하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **배포**를 선택한 후 **프로젝트**를 선택합니다.

1. 프로젝트 목록 위 오른쪽 상단에서 **프로젝트 만들기**를 선택합니다.

1. **템플릿** 페이지에서 프로젝트에 사용할 템플릿을 선택합니다. 프로젝트 템플릿에 대한 자세한 내용은 [MLOps 프로젝트 템플릿](sagemaker-projects-templates.md)섹션을 참조하세요.

1. **다음**을 선택합니다.

1. **프로젝트 세부 정보** 페이지에서 다음 정보를 입력합니다.
   + **이름**: 프로젝트의 이름입니다.
   + **설명**: 프로젝트에 대한 설명입니다(선택 사항).
   + 선택한 템플릿과 관련된 Service Catalog 프로비저닝 파라미터의 값입니다.

1. **프로젝트 생성**을 선택하고 프로젝트가 **프로젝트** 목록에 나타날 때까지 기다립니다.

1. (선택 사항) Studio 사이드바에서 **파이프라인**을 선택하여 프로젝트에서 만든 파이프라인을 봅니다. Pipelines에 대한 자세한 내용은 [파이프라인](pipelines.md) 섹션을 참조하세요.

------
#### [ Studio Classic ]

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. **프로젝트 생성**을 선택합니다.

   **프로젝트 생성** 탭이 열리고 사용 가능한 템플릿 목록이 표시됩니다.

1. 아직 선택하지 않은 경우 **SageMaker AI 템플릿**을 선택합니다. 프로젝트 템플릿에 대한 자세한 내용은 [MLOps 프로젝트 템플릿](sagemaker-projects-templates.md)섹션을 참조하세요.

1. **모델 빌드, 훈련 및 배포** 템플릿을 선택합니다.

1. **프로젝트 템플릿 선택**을 선택합니다.

   **프로젝트 생성** 탭이 변경되어 **프로젝트 세부 정보**가 표시됩니다.

1. 다음 정보를 입력합니다.
   + **프로젝트 세부 정보**에 프로젝트의 이름과 설명을 입력합니다.
   + 필요에 따라 프로젝트를 추적하는 데 사용할 수 있는 키-값 쌍을 추가할 수 있습니다.

1. **프로젝트 생성**을 선택하고 프로젝트가 **프로젝트** 목록에 나타날 때까지 기다립니다.

------

# MLOps 프로젝트 템플릿
<a name="sagemaker-projects-templates"></a>

Amazon SageMaker AI 프로젝트 템플릿은 프로젝트의 MLOps 설정 및 구현을 자동화합니다. SageMaker AI 프로젝트 템플릿은 SageMaker AI가 Amazon SageMaker Studio(또는 Studio Classic) 사용자에게 제공하는 Service Catalog 제품입니다. Amazon SageMaker Studio(또는 Studio Classic)를 온보딩하거나 업데이트할 때 권한을 활성화하면 Service Catalog 콘솔에서 이러한 Service Catalog 제품을 볼 수 있습니다. SageMaker AI 프로젝트 템플릿을 사용할 수 있는 권한을 활성화하는 방법에 대한 자세한 내용은 [프로젝트를 사용하기 위해 SageMaker Studio 권한 부여](sagemaker-projects-studio-updates.md) 섹션을 참조하세요. SageMaker AI 프로젝트 템플릿을 사용하여 엔드투엔드 MLOps 솔루션인 프로젝트를 생성합니다.

SageMaker 프로젝트 템플릿을 사용하여 이미지 구축 CI/CD를 구현할 수 있습니다. 이 템플릿을 사용하면 빌드되어 Amazon ECR로 푸시되는 이미지의 CI/CD를 자동화할 수 있습니다. 프로젝트 소스 제어 리포지토리의 컨테이너 파일을 변경하면 ML 파이프라인이 시작되고 컨테이너의 최신 버전이 배포됩니다. 자세한 내용은 블로그 [Create Amazon SageMaker Projects with image building CI/CD pipelines](https://aws.amazon.com/blogs/machine-learning/create-amazon-sagemaker-projects-with-image-building-ci-cd-pipelines/)을 참조하세요.

관리자인 경우 처음부터 사용자 지정 프로젝트 템플릿을 만들거나 SageMaker AI에서 제공하는 프로젝트 템플릿 중 하나를 수정할 수 있습니다. 조직의 Studio(또는 Studio Classic) 사용자는 이러한 사용자 지정 프로젝트 템플릿을 사용하여 프로젝트를 만들 수 있습니다.

**Topics**
+ [

# SageMaker AI에서 제공하는 프로젝트 템플릿 사용
](sagemaker-projects-templates-sm.md)
+ [

# 사용자 지정 프로젝트 템플릿 생성
](sagemaker-projects-templates-custom.md)

# SageMaker AI에서 제공하는 프로젝트 템플릿 사용
<a name="sagemaker-projects-templates-sm"></a>

**중요**  
2024년 10월 28일부터 AWS CodeCommit 템플릿이 제거되었습니다. 새 프로젝트의 경우 타사 Git 리포지토리를 사용하는 사용 가능한 프로젝트 템플릿 중에서 선택하세요.

Amazon SageMaker AI는 ML 모델의 지속적 통합 및 지속적 배포(CI/CD)를 위한 MLOps 솔루션을 생성하는 데 필요한 인프라를 생성하는 프로젝트 템플릿을 제공합니다. 이러한 템플릿을 사용하여 데이터를 처리하고, 특성을 추출하고, 모델을 훈련 및 테스트하고, SageMaker Model Registry 모델을 등록하고, 추론을 위해 모델을 배포합니다. 요구 사항에 맞게 시드 코드와 구성 파일을 사용자 지정할 수 있습니다.

**참고**  
프로젝트 템플릿을 사용하려면 추가 역할이 필요합니다. 필수 역할의 전체 목록과 역할 생성 방법에 대한 지침은 [프로젝트를 사용하기 위해 SageMaker Studio 권한 부여](sagemaker-projects-studio-updates.md)섹션을 참조하세요. 새 역할이 없는 경우, 새 프로젝트를 생성하려고 할 때 **CodePipeline에 역할 arn:aws:iam::xxx:role/service-role/AmazonSageMakerServiceCatalogProductsCodePipelineRole에서 역할 수임을 수행할 권한이 없습니다**라는 오류 메시지가 표시되고 계속 진행할 수 없습니다.

SageMaker AI 프로젝트 템플릿은 다음과 같은 코드 리포지토리, 워크플로 자동화 도구 및 파이프라인 단계 선택을 제공합니다.
+ **코드 리포지토리**: GitHub 및 Bitbucket과 같은 타사 Git 리포지토리
+ **CI/CD 워크플로 자동화**: AWS CodePipeline 또는 Jenkins
+ **파이프라인 단계**: 모델 구축 및 훈련, 모델 배포 또는 둘 다

다음 주제에서는 SageMaker AI 프로젝트를 생성할 때 선택할 수 있는 각 템플릿에 대한 개요를 제공합니다. [Project walkthrough](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-walkthrough.html)의 [Create the Project](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-walkthrough.html#sagemaker-proejcts-walkthrough-create)를 따라 Studio(또는 Studio Classic)에서 사용 가능한 템플릿을 볼 수도 있습니다.

실제 프로젝트를 만드는 방법에 대한 단계별 지침을 보려면 다음 프로젝트 안내서 중 하나를 따르세요.
+ 템플릿 [CodePipeline을 사용해 타사 Git로 모델 구축, 훈련 및 배포를 하기 위한 MLOps 템플릿](#sagemaker-projects-templates-git-code-pipeline)을 사용하려면 [타사 Git 리포지토리를 사용한 SageMaker AI MLOps 프로젝트 안내서](sagemaker-projects-walkthrough-3rdgit.md)섹션을 참조하세요.
+ [Jenkins로 타사 Git 리포지토리를 사용한 모델 구축, 훈련 및 배포를 위한 MLOps 템플릿](#sagemaker-projects-templates-git-jenkins) 템플릿을 사용하려면 [Create Amazon SageMaker Projects using third-party source control and Jenkins](https://aws.amazon.com/blogs/machine-learning/create-amazon-sagemaker-projects-using-third-party-source-control-and-jenkins/)를 참조하세요.

**Topics**

## CodePipeline을 사용해 타사 Git로 모델 구축, 훈련 및 배포를 하기 위한 MLOps 템플릿
<a name="sagemaker-projects-templates-git-code-pipeline"></a>
+ **코드 리포지토리**: 타사 Git입니다.
**참고**  
 AWS 계정에서 GitHub 사용자 또는 조직으로의 AWS CodeStar 연결을 설정합니다. 키`sagemaker`와 값이 있는 태그를이 AWS CodeStar 연결`true`에 추가합니다.
+ **CI/CD 워크플로 자동화**: AWS CodePipeline

### 모델 구축 및 훈련
<a name="sagemaker-projects-templates-git-code-pipeline-building-training"></a>

이 템플릿은 다음 리소스를 제공합니다.
+ 하나의 고객 지정 Git 리포지토리와의 연결. 리포지토리에는 Python 코드로 Amazon SageMaker AI 파이프라인을 생성하고 업데이트하는 방법을 보여주는 샘플 코드가 들어 있습니다. 이 리포지토리에는 Studio(또는 Studio Classic)에서 열고 실행할 수 있는 샘플 Python 노트북도 있습니다.
+ 소스 및 빌드 단계가 있는 AWS CodePipeline 파이프라인입니다. 소스 단계는 타사 Git 리포지토리를 가리킵니다. 구축 단계는 해당 리포지토리에서 코드를 가져오고, SageMaker AI 파이프라인을 생성 및 업데이트하고, 파이프라인 실행을 시작하고, 파이프라인 실행이 완료될 때까지 기다립니다.
+ Git 리포지토리를 시드 코드 정보로 채우는 AWS CodeBuild 프로젝트입니다. 이렇게 하려면에서 Git 리포지토리 호스트의 계정으로 AWS CodeStar 연결 AWS 계정 해야 합니다.
+ CodePipeline 및 CodeBuild 아티팩트를 비롯한 아티팩트와 SageMaker AI 파이프라인 실행에서 생성된 모든 아티팩트를 저장하는 Amazon S3 버킷

### 모델 배포
<a name="sagemaker-projects-templates-git-code-pipeline-deployment"></a>

이 템플릿은 다음 리소스를 제공합니다.
+ 하나의 고객 지정 Git 리포지토리와의 연결. 리포지토리에는 스테이징 및 프로덕션 환경의 엔드포인트에 모델을 배포하는 샘플 코드가 포함되어 있습니다.
+ 소스, 빌드, deploy-to-staging 및 deploy-to-production 단계가 있는 AWS CodePipeline 파이프라인입니다. 소스 단계는 타사 Git 리포지토리를 가리키고 빌드 단계는 해당 리포지토리에서 코드를 가져와 배포할 CloudFormation 스택을 생성합니다. deploy-to-staging 및 deploy-to-production덕션 단계는 CloudFormation 스택을 해당 환경에 배포합니다. 스테이징 및 프로덕션 빌드 단계 사이에는 수동 승인 단계가 있으므로 MLOps 엔지니어가 모델을 승인해야 프로덕션에 배포할 수 있습니다.
+ Git 리포지토리를 시드 코드 정보로 채우는 AWS CodeBuild 프로젝트입니다. 이렇게 하려면에서 Git 리포지토리 호스트의 계정으로 AWS CodeStar 연결 AWS 계정 해야 합니다.
+ CodePipeline 및 CodeBuild 아티팩트를 비롯한 아티팩트와 SageMaker AI 파이프라인 실행에서 생성된 모든 아티팩트를 저장하는 Amazon S3 버킷

### 모델 구축, 훈련 및 배포
<a name="sagemaker-projects-templates-git-code-pipeline-building-training-deployment"></a>

이 템플릿은 다음 리소스를 제공합니다.
+ 하나 이상의 고객 지정 Git 리포지토리와의 연결.
+ 소스, 빌드, deploy-to-staging 및 deploy-to-production 단계가 있는 AWS CodePipeline 파이프라인입니다. 소스 단계는 타사 Git 리포지토리를 가리키고, 빌드 단계는 해당 리포지토리에서 코드를 가져와 배포할 CloudFormation 스택을 생성합니다. 배포-스테이징 및 배포-프로덕션 단계에서는 CloudFormation 스택을 해당 환경에 배포합니다. 스테이징 및 프로덕션 빌드 단계 사이에는 수동 승인 단계가 있으므로 MLOps 엔지니어가 모델을 승인해야 프로덕션에 배포할 수 있습니다.
+ Git 리포지토리를 시드 코드 정보로 채우는 AWS CodeBuild 프로젝트입니다. 이렇게 하려면 AWS 계정에서 Git 리포지토리 호스트의 계정으로 AWS CodeStar 연결해야 합니다.
+ CodePipeline 및 CodeBuild 아티팩트를 비롯한 아티팩트와 SageMaker AI 파이프라인 실행에서 생성된 모든 아티팩트를 저장하는 Amazon S3 버킷

앞서 언급한 것처럼 이 템플릿을 사용하여 실제 프로젝트를 만드는 데모는 [타사 Git 리포지토리를 사용한 프로젝트 안내서](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-walkthrough-3rdgit.html)를 참조하세요.

## CodePipeline을 사용하여 모델 구축, 훈련, 배포 및 Amazon SageMaker Model Monitor를 수행하기 위한 MLOps 템플릿
<a name="sagemaker-projects-template-model-monitor"></a>
+ **코드 리포지토리**: 타사 Git입니다.
**참고**  
 AWS 계정에서 GitHub 사용자 또는 조직으로의 AWS CodeStar 연결을 설정합니다. 키`sagemaker`와 값이 있는 태그를이 AWS CodeStar 연결`true`에 추가합니다.
+ **CI/CD 워크플로 자동화**: AWS CodePipeline

다음 템플릿에는 다음과 같은 유형의 모니터링을 제공하는 추가 Amazon SageMaker Model Monitor 템플릿이 포함되어 있습니다.
+ [데이터 품질](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-quality.html) – 데이터 품질의 드리프트를 모니터링합니다.
+ [모델 품질](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality.html) – 정확도와 같은 모델 품질 지표의 드리프트를 모니터링합니다.
+ [프로덕션 단계 모델의 편향 드리프트](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-model-monitor-bias-drift.html) – 모델 예측의 편향을 모니터링합니다.

### 모델 구축, 훈련, 배포 및 Amazon SageMaker Model Monitor
<a name="sagemaker-projects-template-model-monitor-training-deployment-model-monitor"></a>

이 템플릿은 CodePipeline을 사용해 Git 리포지토리로 모델 구축, 훈련 및 배포를 하기 위한 MLOps 템플릿의 확장입니다. 여기에는 템플릿의 모델 구축, 훈련 및 배포 구성 요소와 다음 유형의 모니터링을 제공하는 추가 Amazon SageMaker 모델 모니터 템플릿이 포함됩니다.

### 배포된 모델 모니터링
<a name="sagemaker-projects-template-model-monitor-deploy"></a>

Amazon SageMaker AI 데이터 품질, 모델 품질, 모델 편향 및 모델 설명 가능성 모니터 중 하나 이상을 배포하기 위한 이 MLOps 솔루션용 템플릿을 사용하여 SageMaker AI 추론 엔드포인트에서 배포된 모델을 모니터링할 수 있습니다. 이 템플릿은 다음 리소스를 제공합니다.
+ 하나 이상의 고객 지정 Git 리포지토리와의 연결. 리포지토리에는 Amazon SageMaker Model Registry에서 모니터가 사용하는 [기준](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-create-baseline.html)을 가져오고 스테이징 및 프로덕션 환경을 위한 템플릿의 파라미터를 업데이트하는 샘플 Python 코드가 들어 있습니다. 또한 Amazon SageMaker 모델 모니터를 생성하기 위한 CloudFormation 템플릿도 포함되어 있습니다.
+ 소스, 빌드 및 배포 단계가 있는 AWS CodePipeline 파이프라인입니다. 소스 단계는 CodePipeline 리포지토리를 가리킵니다. 빌드 단계는 해당 리포지토리에서 코드를 가져오고, 모델 레지스트리에서 기준을 가져오고, 스테이징 및 프로덕션 환경을 위한 템플릿 파라미터를 업데이트합니다. 배포 단계에서는 구성된 모니터를 스테이징 및 프로덕션 환경에 배포합니다. `DeployStaging` 단계 내의 수동 승인 단계에서는 승인 후 `DeployProd` 단계로 이동하기 전에 프로덕션 SageMaker AI 엔드포인트가 `InService`인지 확인해야 합니다.
+ Git 리포지토리를 시드 코드 정보로 채우는 AWS CodeBuild 프로젝트입니다. 이렇게 하려면에서 Git 리포지토리 호스트의 계정으로 AWS CodeStar 연결 AWS 계정 해야 합니다.
+ 템플릿은 모델 구축, 훈련 및 배포를 위해 MLOps 템플릿에서 생성한 것과 동일한 Amazon S3 버킷을 사용하여 모니터의 출력을 저장합니다.
+ 두 개의 Amazon EventBridge 이벤트 규칙은 스테이징 SageMaker AI 엔드포인트가 업데이트될 때마다 Amazon SageMaker 모델 모니터를 시작합니다. AWS CodePipeline 

## Jenkins로 타사 Git 리포지토리를 사용한 모델 구축, 훈련 및 배포를 위한 MLOps 템플릿
<a name="sagemaker-projects-templates-git-jenkins"></a>
+ **코드 리포지토리**: 타사 Git입니다.
**참고**  
 AWS 계정에서 GitHub 사용자 또는 조직으로의 AWS CodeStar 연결을 설정합니다. 키`sagemaker`와 값이 있는 태그를이 AWS CodeStar 연결`true`에 추가합니다.
+ **CI/CD 워크플로 자동화**: Jenkins

### 모델 구축, 훈련 및 배포
<a name="sagemaker-projects-templates-git-jenkins-building-training-deployment"></a>

이 템플릿은 다음 리소스를 제공합니다.
+ 하나 이상의 고객 지정 Git 리포지토리와의 연결.
+ 소스, 빌드, 배포-스테이징, 배포-프로덕션 단계가 포함된 파이프라인. 소스 단계는 고객 지정 Git 리포지토리를 가리킵니다. 빌드 단계에서는 해당 리포지토리에서 코드를 가져와 두 개의 CloudFormation 스택을 생성합니다. 배포 단계에서는 CloudFormation 스택을 해당 환경에 배포합니다. 스테이징 단계와 프로덕션 단계 사이에는 승인 단계가 있습니다.
+ Git 리포지토리를 시드 코드 정보로 채우는 AWS CodeBuild 프로젝트입니다. 이렇게 하려면 AWS 계정에서 Git 리포지토리 호스트의 계정으로 AWS CodeStar 연결해야 합니다.
+ SageMaker AI 프로젝트 및 SageMaker AI 파이프라의 아티팩트를 저장하는 Amazon S3 버킷

템플릿은 프로젝트와 소스 제어 리포지토리 간의 연결을 생성하지만 AWS 계정과 Jenkins 간의 통신을 설정하려면 추가 수동 단계를 수행해야 합니다. 단계에 대한 자세한 정보는 [Create Amazon SageMaker Projects using third-party source control and Jenkins](https://aws.amazon.com/blogs/machine-learning/create-amazon-sagemaker-projects-using-third-party-source-control-and-jenkins/)를 참조하세요.

지침은 이 예시에서 GitHub를 소스 제어 리포지토리로 사용하여 다음 다이어그램에 표시된 아키텍처를 구축하는 데 도움이 됩니다. 그림과 같이 Git 리포지토리를 프로젝트에 연결하여 코드 버전을 체크인하고 관리합니다. Jenkins는 Git 리포지토리에서 모델 빌드 코드의 변경 사항을 감지하면 모델 빌드 파이프라인을 시작합니다. 또한 프로젝트를 Jenkins에 연결하여 모델 배포 단계를 오케스트레이션합니다.모델 배포 단계는 모델 레지스트리에 등록된 모델을 승인하거나 Jenkins가 모델 배포 코드의 변경 사항을 감지할 때 시작됩니다.



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


요약하면 단계는 다음 작업을 통해 안내합니다.

1.  AWS 와 GitHub 계정 간의 연결을 설정합니다.

1. Jenkins 계정을 만들고 필요한 플러그인을 가져옵니다.

1. Jenkins IAM 사용자 및 권한 정책을 생성합니다.

1. Jenkins 서버에서 Jenkins IAM 사용자의 AWS 자격 증명을 설정합니다.

1. Jenkins 서버와 통신하기 위한 API 토큰을 생성합니다.

1. CloudFormation 템플릿을 사용하여 EventBridge 규칙을 설정하여 새로 승인된 모델의 모델 레지스트리를 모니터링합니다.

1. 모델 구축 및 배포 코드로 GitHub 리포지토리를 시드하는 SageMaker AI 프로젝트를 생성합니다.

1. 모델 빌드 시드 코드를 사용하여 Jenkins 모델 빌드 파이프라인을 생성합니다.

1. 모델 배포 시드 코드를 사용하여 Jenkins 모델 배포 파이프라인을 생성합니다.

## 이미지 구축, 모델 구축 및 모델 배포를 위한 MLOps 템플릿
<a name="sagemaker-projects-templates-image-building-model-building-deployment"></a>

이 템플릿은 [CodePipeline을 사용해 타사 Git로 모델 구축, 훈련 및 배포를 하기 위한 MLOps 템플릿](#sagemaker-projects-templates-git-code-pipeline)의 확장입니다. 여기에는 해당 템플릿의 모델 구축, 훈련 및 배포 구성 요소와 다음 옵션이 모두 포함됩니다.
+ 처리 이미지–파이라인 구축 포함
+ 훈련 이미지–파이라인 구축 포함
+ 추론 이미지–파이라인 구축 포함

템플릿을 사용하여 프로젝트 생성 중에 선택한 각 구성 요소에 대해 다음이 생성됩니다.
+ Amazon ECR 리포지토리
+ [SageMaker 이미지](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateImage.html)
+ 사용자 지정할 수 있는 Dockerfile이 포함된 CodeCommit 리포지토리
+ CodePipeline 리포지토리가 변경되어 시작되는 CodePipeline
+ 도커 이미지를 구축하고 이를 Amazon ECR 리포지토리에 등록하는 CodeBuild 프로젝트
+ 일정에 따라 CodePipeline을 시작하는 EventBridge 규칙

CodePipeline이 시작되면 새 도커 컨테이너를 구축하고 Amazon ECR 리포지토리에 등록합니다. 새 컨테이너가 Amazon ECR 리포지토리에 등록되면 SageMaker 이미지에 새 `ImageVersion`이 추가됩니다. 그러면 모델 구축 파이프라인이 시작되고, 배포 파이프라인이 시작됩니다.

새로 생성된 이미지는 해당하는 경우 워크플로의 모델 구축, 훈련 및 배포 부분에 사용됩니다.

## 타사 Git 리포지토리 사용을 위한 SageMaker 프로젝트 업데이트
<a name="sagemaker-projects-templates-update"></a>

`AmazonSageMakerServiceCatalogProductsUseRole` 역할에 연결된 관리형 정책은 타사 Git 템플릿과 함께 사용할 수 있도록 2021년 7월 27일에 업데이트되었습니다. 이 날짜 이후에 Amazon SageMaker Studio(또는 Studio Classic)에 온보딩하고 프로젝트 템플릿을 활성화하는 사용자는 새 정책을 사용합니다. 이 날짜 이전에 온보딩한 사용자는 이러한 템플릿을 사용하려면 정책을 업데이트해야 합니다. 다음 중 하나를 사용하여 정책을 업데이트합니다.
+ 역할 삭제 및 Studio(또는 Studio Classic) 설정 전환

  1. IAM 콘솔에서 `AmazonSageMakerServiceCatalogProductsUseRole`을 삭제합니다.

  1. Studio(또는 Studio Classic) 컨트롤 패널에서 **설정 편집**을 선택합니다.

  1. 두 설정을 모두 전환한 다음 **제출**을 선택합니다.
+ IAM 콘솔에서 다음 권한을 `AmazonSageMakerServiceCatalogProductsUseRole`에 추가합니다.

  ```
  {
        "Effect": "Allow",
        "Action": [
            "codestar-connections:UseConnection"
        ],
        "Resource": "arn:aws:codestar-connections:*:*:connection/*",
        "Condition": {
            "StringEqualsIgnoreCase": {
                "aws:ResourceTag/sagemaker": "true"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:PutObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::sagemaker-*"
        ]
    }
  ```

# 사용자 지정 프로젝트 템플릿 생성
<a name="sagemaker-projects-templates-custom"></a>

**중요**  
2024년 10월 28일부터 AWS CodeCommit 템플릿이 제거되었습니다. 새 프로젝트의 경우 타사 Git 리포지토리를 사용하는 사용 가능한 프로젝트 템플릿 중에서 선택하세요. 자세한 내용은 [MLOps 프로젝트 템플릿](sagemaker-projects-templates.md) 단원을 참조하십시오.

SageMaker AI에서 제공하는 템플릿이 요구 사항을 충족하지 못하는 경우(예: 여러 단계 또는 사용자 지정 승인 단계가 포함된 CodePipeline에서 더 복잡한 오케스트레이션을 수행하려는 경우) 자체 템플릿을 생성하세요.

먼저 SageMaker AI에서 제공하는 템플릿을 사용하여 코드와 리소스를 구성하고 그 위에 구축하는 방법을 이해하는 것이 좋습니다. 이렇게 하려면 SageMaker AI 템플릿에 대한 관리자 액세스를 활성화한 후 [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)에 로그인하고 **포트폴리오**를 선택한 다음 **가져옴**을 선택합니다. 서비스 카탈로그에 대한 자세한 내용은 서비스 카탈로그 사용자 설명서의 [서비스 카탈로그 개요](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)를 참조하세요.**

고유한 프로젝트 템플릿을 만들어 MLOps 프로젝트를 사용자 지정합니다. SageMaker AI 프로젝트 템플릿은 MLOps 프로젝트에 리소스를 프로비저닝하기 위해 Service Catalog에서 프로비저닝된 제품입니다.

사용자 지정 프로젝트 템플릿을 생성하려면 다음 단계를 완료합니다.

1. 포트폴리오를 생성합니다. 자세한 내용은 [3단계: 서비스 카탈로그 포트폴리오 생성](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)을 참조하세요.

1. 제품을 생성합니다. 제품은 CloudFormation 템플릿입니다. 제품의 여러 버전을 생성할 수 있습니다. 자세한 내용은 [4단계: 서비스 카탈로그 제품 생성](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-product.html)을 참조하세요.

   제품이 SageMaker 프로젝트와 함께 작동하도록 하려면 제품 템플릿에 다음 파라미터를 추가합니다.

   ```
   SageMakerProjectName:
   Type: String
   Description: Name of the project
   
   SageMakerProjectId:
   Type: String
   Description: Service generated Id of the project.
   ```
**중요**  
프로젝트의 리포지토리가 VPC 모드에서 표시되도록 하려면 CodeCommit 리포지토리를 SageMaker AI 코드 리포지토리로 래핑하는 것이 좋습니다. 샘플 템플릿과 필수 추가 사항은 다음 코드 샘플에 나와 있습니다.  
원본 (샘플) 템플릿:  

   ```
   ModelBuildCodeCommitRepository:
       Type: AWS::CodeCommit::Repository
       Properties:
         # Max allowed length: 100 chars
         RepositoryName: !Sub sagemaker-${SageMakerProjectName}-${SageMakerProjectId}-modelbuild # max: 10+33+15+10=68
         RepositoryDescription: !Sub SageMaker Model building workflow infrastructure as code for the Project ${SageMakerProjectName}
         Code:
           S3:
             Bucket: SEEDCODE_BUCKETNAME
             Key: toolchain/model-building-workflow-v1.0.zip
           BranchName: main
   ```
VPC 모드에서 추가할 추가 콘텐츠:  

   ```
   SageMakerRepository:
       Type: AWS::SageMaker::CodeRepository
       Properties:
           GitConfig:
               RepositoryUrl: !GetAtt ModelBuildCodeCommitRepository.CloneUrlHttp
               Branch: main
   ```

1. 시작 제약 조건을 추가합니다. 시작 제약 조건은 사용자가 제품을 시작할 때 서비스 카탈로그가 맡는 IAM 역할을 지정합니다. 자세한 내용은 [6단계: 시작 제약 조건을 추가하여 IAM 역할 할당](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchconstraint.html)을 참조하세요.

1. 템플릿을 테스트하려면 [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)에서 제품을 프로비저닝합니다. 템플릿이 마음에 들면 다음 단계를 계속 진행하여 Studio(또는 Studio Classic)에서 템플릿을 사용할 수 있도록 합니다.

1. 1단계에서 만든 서비스 카탈로그 포트폴리오에 대한 액세스 권한을 Studio(또는 Studio Classic) 실행 역할에 부여합니다. 도메인 실행 역할 또는 Studio(또는 Studio Classic) 액세스 권한이 있는 사용자 역할을 사용합니다. 포트폴리오에 역할을 추가하는 방법에 대한 자세한 내용은 [7단계: 최종 사용자에게 포트폴리오에 대한 액세스 권한 부여](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-deploy.html)를 참조하세요.

1. Studio(또는 Studio Classic)의 **조직 템플릿** 목록에서 프로젝트 템플릿을 사용할 수 있게 하려면 2단계에서 만든 서비스 카탈로그 제품에 다음 키와 값이 포함된 태그를 만듭니다.
   + **키**: `sagemaker:studio-visibility`
   + **값**: `true`

이 단계를 완료한 후 조직의 Studio(또는 Studio Classic) 사용자는 템플릿을 선택할 때 **조직 템플릿**을 선택하고 [Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트 만들기](sagemaker-projects-create.md)의 단계에 따라 만든 템플릿으로 프로젝트를 만들 수 있습니다.

## Amazon S3 버킷의 템플릿 사용
<a name="sagemaker-projects-templates-s3"></a>

Amazon S3에 저장된 템플릿을 사용하여 SageMaker 프로젝트를 생성할 수도 있습니다.

**참고**  
에서 템플릿을 사용할 수 있지만 AWS Service Catalog S3 버킷에 템플릿을 저장하고 해당 템플릿을 사용하여 프로젝트를 생성하는 것이 좋습니다.

### 관리자 설정
<a name="sagemaker-projects-templates-s3-setup"></a>

S3 버킷에서 템플릿을 사용하여 프로젝트를 생성하려면 먼저 다음 단계를 수행합니다.

1. [S3 버킷을 생성하고](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 템플릿을 버킷에 업로드합니다.

1. [S3 버킷에 CORS 정책을 설정하여 액세스 권한을 구성합니다](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html).

1. 다음 키-값 태그를 템플릿에 추가하여 SageMaker AI에 표시되도록 합니다.

   ```
   sagemaker:studio-visibility : true
   ```

1. [도메인 생성](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html).

1. SageMaker AI가 도메인 생성을 완료한 후 도메인에 다음 키-값 태그를 추가합니다.

   ```
   sagemaker:projectS3TemplatesLocation : s3://<amzn-s3-demo-bucket>
   ```

그런 다음 AWS 콘솔, Python 또는 [CreateProject](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProject.html) 및 [UpdateProject](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateProject.html) API 작업을 사용하여 S3 버킷 내의 템플릿에서 SageMaker 프로젝트를 생성하거나 업데이트합니다. S3 

------
#### [ Studio ]

**프로젝트 만들기**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **배포**, **프로젝트**, **프로젝트 생성을** 선택합니다.

1. **조직 템플릿을** 선택한 다음 **S3 템플릿을** 선택하여 사용 가능한 템플릿을 확인합니다. 예상한 템플릿이 보이지 않으면 관리자에게 알립니다.

1. 사용할 템플릿을 선택한 **후 다음을** 선택합니다.

1. 프로젝트 이름, 선택적 설명 및 기타 필수 필드를 입력합니다. 완료했으면 **Create**(생성)를 선택합니다.

**프로젝트 업데이트**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 업데이트할 프로젝트를 선택합니다. **작업을** 선택한 다음 **프로젝트 업데이트를** 선택합니다.

1. 프로젝트를 업데이트할 때 템플릿 파라미터 또는 템플릿 URL을 업데이트할 수 있습니다. 완료했으면 **다음**을 선택합니다.

1. 요약 테이블에서 프로젝트 업데이트를 검토하고 **업데이트**를 선택합니다.

------
#### [ Python Boto3 ]

S3 버킷을 생성하고 템플릿을 업로드한 후 다음 예제를 사용하여 SageMaker 프로젝트를 생성할 수 있습니다.

```
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

response = sagemaker_client.create_project(
    ProjectName='my-custom-project',
    ProjectDescription='SageMaker project with custom CFN template stored in S3',
    TemplateProviders=[{
        'CfnTemplateProvider': {
            'TemplateName': 'CustomProjectTemplate',
            'TemplateURL': f'https://<bucket_name>.s3.us-west-2.amazonaws.com/custom-project-template.yml',
            'Parameters': [
                {'Key': 'ParameterKey', 'Value': 'ParameterValue'}
            ]
        }
    }]
)
print(f"Project ARN: {response['ProjectArn']}")
```

SageMaker 프로젝트를 업데이트하려면 다음 예제를 참조하세요.

```
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

response = sagemaker_client.update_project(
    ProjectName='my-custom-project',
    ProjectDescription='SageMaker project with custom CFN template stored in S3',
    TemplateProvidersToUpdate=[{
        'CfnTemplateProvider': {
            'TemplateName': 'CustomProjectTemplate',
            'TemplateURL': f'https://<bucket_name>.s3.us-west-2.amazonaws.com/custom-project-template.yml',
            'Parameters': [
                {'Key': 'ParameterKey', 'Value': 'ParameterValue'}
            ]
        }
    }]
)
print(f"Project ARN: {response['ProjectArn']}")
```

------

# 프로젝트 리소스 보기
<a name="sagemaker-projects-resources"></a>

프로젝트를 만든 후 Amazon SageMaker Studio Classic에서 프로젝트와 관련된 리소스를 확인하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **배포**를 선택한 후 **프로젝트**를 선택합니다.

1. 세부 정보를 보려는 프로젝트의 이름을 선택합니다. 프로젝트 세부 정보가 있는 페이지가 나타납니다.

프로젝트 세부 정보 페이지에서 다음 엔터티를 볼 수 있습니다. 프로젝트와 연결된 엔터티에 해당하는 다음 탭 중 원하는 것을 열 수 있습니다.
+ 리포지토리: 이 프로젝트와 관련된 코드 리포지토리입니다. 프로젝트를 생성할 때 SageMaker AI에서 제공한 템플릿을 사용하면 AWS CodeCommit 리포지토리 또는 타사 Git 리포지토리가 생성됩니다. CodeCommit에 대한 자세한 내용은 [란 AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 무엇입니까?를 참조하십시오.
+ 파이프라인: 모델을 준비하고, 훈련하고, 배포하기 위한 단계를 정의하는 SageMaker AI ML 파이프라인입니다. SageMaker AI ML 파이프라인에 대한 자세한 내용은 [Pipelines 작업](pipelines-build.md) 섹션을 참조하세요.
+ 실험: 프로젝트와 관련된 하나 이상의 Amazon SageMaker Autopilot 실험입니다. Autopilot에 대한 자세한 내용은 [SageMaker Autopilot](autopilot-automate-model-development.md)섹션을 참조하세요.
+ 모델 그룹: 프로젝트에서 파이프라인 실행을 통해 생성된 모델 버전 그룹입니다. 모델 그룹에 대한 자세한 내용은 [모델 그룹 생성](model-registry-model-group.md)섹션을 참조하세요.
+ 엔드포인트: 실시간 추론을 위해 배포된 모델을 호스팅하는 SageMaker AI 엔드포인트입니다. 모델 버전이 승인되면 엔드포인트에 배포됩니다.
+ 태그: 프로젝트와 연결된 모든 태그입니다. 태그에 대한 자세한 내용은 *AWS 일반 참조*의 [Tagging AWS resources](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)를 참조하세요.
+ 메타데이터: 프로젝트와 연결된 메타데이터입니다. 여기에는 사용된 템플릿 및 버전과 템플릿 시작 경로가 포함됩니다.

------
#### [ Studio Classic ]

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. 세부 정보를 보려는 프로젝트의 이름을 선택합니다.

   프로젝트 세부 정보가 있는 탭이 나타납니다.

프로젝트 세부 정보 탭에서는 프로젝트와 관련된 다음 엔터티를 볼 수 있습니다.
+ 리포지토리: 이 프로젝트와 관련된 코드 리포지토리입니다. 프로젝트를 생성할 때 SageMaker AI에서 제공한 템플릿을 사용하면 AWS CodeCommit 리포지토리 또는 타사 Git 리포지토리가 생성됩니다. CodeCommit에 대한 자세한 내용은 [란 AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 무엇입니까?를 참조하십시오.
+ 파이프라인: 모델을 준비하고, 훈련하고, 배포하기 위한 단계를 정의하는 SageMaker AI ML 파이프라인입니다. SageMaker AI ML 파이프라인에 대한 자세한 내용은 [Pipelines 작업](pipelines-build.md) 섹션을 참조하세요.
+ 실험: 프로젝트와 관련된 하나 이상의 Amazon SageMaker Autopilot 실험입니다. Autopilot에 대한 자세한 내용은 [SageMaker Autopilot](autopilot-automate-model-development.md)섹션을 참조하세요.
+ 모델 그룹: 프로젝트에서 파이프라인 실행을 통해 생성된 모델 버전 그룹입니다. 모델 그룹에 대한 자세한 내용은 [모델 그룹 생성](model-registry-model-group.md)섹션을 참조하세요.
+ 엔드포인트: 실시간 추론을 위해 배포된 모델을 호스팅하는 SageMaker AI 엔드포인트입니다. 모델 버전이 승인되면 엔드포인트에 배포됩니다.
+ 설정: 프로젝트 설정입니다. 여기에는 프로젝트의 이름과 설명, 프로젝트 템플릿 및 `SourceModelPackageGroupName`에 대한 정보, 프로젝트에 대한 메타데이터가 포함됩니다.

------

# Amazon SageMaker Studio 또는 Studio Classic에서 MLOps 프로젝트 업데이트
<a name="sagemaker-projects-update"></a>

이 절차는 Amazon SageMaker Studio 또는 Studio Classic에서 MLOps 프로젝트를 업데이트하는 방법을 보여줍니다. 프로젝트를 업데이트하면 엔드투엔드 ML 솔루션을 수정할 수 있는 옵션이 제공됩니다. **설명**, 템플릿 버전 및 템플릿 파라미터를 업데이트할 수 있습니다.

**사전 조건**
+ Studio 또는 Studio Classic에 로그인하기 위한 IAM 계정 또는 IAM Identity Center 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하세요.
+ Studio 또는 Studio Classic 사용자 인터페이스 및 Jupyter Notebook에 대한 기본 지식 Studio UI에 대한 자세한 내용은 [Amazon SageMaker Studio](studio-updated.md) 섹션을 참조하세요. Studio Classic에 대한 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 섹션을 참조하세요.
+ 다음 사용자 지정 인라인 정책을 지정된 역할에 추가합니다.

  `AmazonSageMakerFullAccess`가 있는 사용자 생성 역할

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:CreateProvisionedProductPlan",
                  "servicecatalog:DescribeProvisionedProductPlan",
                  "servicecatalog:DeleteProvisionedProductPlan"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

  `AmazonSageMakerServiceCatalogProductsLaunchRole`

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "cloudformation:CreateChangeSet",
                  "cloudformation:DeleteChangeSet",
                  "cloudformation:DescribeChangeSet"
              ],
              "Resource": "arn:aws:cloudformation:*:*:stack/SC-*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "codecommit:PutRepositoryTriggers"
              ],
              "Resource": "arn:aws:codecommit:*:*:sagemaker-*"
          }
      ]
  }
  ```

------

Studio 또는 Studio Classic에서 프로젝트를 업데이트하려면 다음 단계를 완료하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **배포**를 선택한 후 **프로젝트**를 선택합니다.

1. 업데이트하려는 프로젝트 옆에 있는 라디오 버튼을 선택합니다.

1. 프로젝트 목록의 오른쪽 상단 모서리 위에 있는 세로 줄임표를 선택하고 **업데이트**를 선택합니다.

1. **다음**을 선택합니다.

1. 요약 테이블에서 프로젝트 업데이트를 검토하고 **업데이트**를 선택합니다. 프로젝트 업데이트를 완료하는 데 몇 분이 걸릴 수 있습니다.

------
#### [ Studio Classic ]

**Studio Classic에서 프로젝트를 업데이트하는 방법**

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다. 프로젝트 목록이 나타납니다.

1. 프로젝트 목록에서 업데이트하려는 프로젝트의 이름을 선택합니다.

1. 프로젝트 탭의 오른쪽 상단에 있는 **작업** 메뉴에서 **업데이트**를 선택합니다.

1. **프로젝트 업데이트** 대화 상자에서 **설명**과 나열된 템플릿 파라미터를 편집할 수 있습니다.

1. **차이 보기**를 선택합니다.

   대화 상자에는 원본 및 업데이트된 프로젝트 설정이 표시됩니다. 프로젝트 설정을 변경하면 현재 프로젝트의 리소스가 수정되거나 삭제될 수 있습니다. 대화 상자에는 이러한 변경 사항도 표시됩니다.

1. **업데이트** 버튼이 활성화되려면 몇 분 정도 기다려야 할 수 있습니다. **업데이트**를 선택합니다.

1. 프로젝트 업데이트 작업을 완료하는 데 몇 분이 걸릴 수 있습니다. 프로젝트 탭에서 **설정**을 선택하고 파라미터가 올바르게 업데이트되었는지 확인합니다.

------

# Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트 삭제
<a name="sagemaker-projects-delete"></a>

이 절차는 Amazon SageMaker Studio 또는 Studio Classic을 사용하여 MLOps 프로젝트를 삭제하는 방법을 보여줍니다.

**사전 조건**

**참고**  
Studio 또는 Studio Classic에서는 자신이 만든 프로젝트만 삭제할 수 있습니다. 이 조건은 `AmazonSageMakerFullAccess`정책의 서비스 카탈로그 권한 `servicecatalog:TerminateProvisionedProduct`의 일부입니다. 필요한 경우 이 정책을 업데이트하여 이 조건을 제거할 수 있습니다.
+ Studio 또는 Studio Classic에 로그인하기 위한 IAM 계정 또는 IAM Identity Center 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하세요.
+ Studio 또는 Studio Classic 사용자 인터페이스 및 Jupyter Notebook에 대한 기본 지식 Studio UI에 대한 자세한 내용은 [Amazon SageMaker Studio](studio-updated.md) 섹션을 참조하세요. Studio Classic에 대한 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 섹션을 참조하세요.

------
#### [ Studio ]

1. [Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)의 지침에 따라 SageMaker Studio 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **배포**를 선택한 후 **프로젝트**를 선택합니다.

1. 삭제하려는 프로젝트 옆에 있는 라디오 버튼을 선택합니다.

1. 프로젝트 목록의 오른쪽 상단 모서리 위에 있는 세로 줄임표를 선택하고 **삭제**를 선택합니다.

1. **프로젝트 삭제** 대화 상자의 정보를 검토하고 프로젝트를 삭제하려면 **예, 프로젝트 삭제**를 선택합니다.

1. **삭제**를 선택합니다.

1. 프로젝트 목록이 나타납니다. 프로젝트가 목록에 더 이상 나타나지 않는지 확인합니다.

------
#### [ Studio Classic ]

1. Studio Classic에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하십시오.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. 대상 드롭다운 목록에서 대상 프로젝트를 선택합니다. 프로젝트가 보이지 않는 경우 프로젝트 이름을 입력하고 필터를 적용하여 프로젝트를 찾습니다.

1. 프로젝트를 찾았으면 프로젝트 이름을 선택하여 세부 정보를 확인합니다.

1. **작업** 메뉴에서 **삭제**를 선택합니다.

1. **프로젝트 삭제** 창에서 **삭제**를 선택하여 선택을 확인합니다.

------

# 타사 Git 리포지토리를 사용한 SageMaker AI MLOps 프로젝트 안내서
<a name="sagemaker-projects-walkthrough-3rdgit"></a>

**중요**  
2023년 11월 30일부터 이전 Amazon SageMaker Studio 환경이 이제 Amazon SageMaker Studio Classic으로 명명되었습니다. 다음 섹션은 Studio Classic 애플리케이션 사용에 관해 다룹니다. 업데이트된 Studio 환경 사용에 대한 자세한 내용은 [Amazon SageMaker Studio](studio-updated.md) 섹션을 참조하세요.  
Studio Classic은 기존 워크로드에 대해 유지 관리되지만 더 이상 온보딩에 사용할 수 없습니다. 기존 Studio Classic 애플리케이션만 중지하거나 삭제할 수 있으며 새 애플리케이션을 생성할 수 없습니다. [워크로드를 새 Studio 환경으로 마이그레이션하는](studio-updated-migrate.md) 것이 좋습니다.

이 안내서에서는 템플릿 [CodePipeline을 사용해 타사 Git로 모델 구축, 훈련 및 배포를 하기 위한 MLOps 템플릿](sagemaker-projects-templates-sm.md#sagemaker-projects-templates-git-code-pipeline)으로 MLOps 프로젝트를 사용하여 모델을 구축, 훈련 및 배포하기 위한 CI/CD 시스템 생성 방법을 보여줍니다.

**사전 조건**

이 연습을 수행하려면 다음이 있어야 합니다.
+ Studio Classic에 로그인하기 위한 IAM 또는 IAM Identity Center 계정 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md) 단원을 참조하세요.
+ SageMaker AI에서 제공하는 프로젝트 템플릿을 사용할 수 있는 권한. 자세한 내용은 [프로젝트를 사용하기 위해 SageMaker Studio 권한 부여](sagemaker-projects-studio-updates.md) 단원을 참조하세요.
+ Studio Classic 사용자 인터페이스 및 Jupyter Notebook에 대한 기본 지식 자세한 내용은 [Amazon SageMaker Studio Classic UI 개요](studio-ui.md) 단원을 참조하세요.
+ 빈 GitHub 리포지토리 2개. 이러한 리포지토리를 프로젝트 템플릿에 입력하면 모델 빌드 및 배포 코드와 함께 이러한 리포지토리가 시딩됩니다.

**Topics**
+ [

## 1단계: GitHub 연결 설정
](#sagemaker-proejcts-walkthrough-connect-3rdgit)
+ [

## 2단계: 프로젝트 생성
](#sagemaker-proejcts-walkthrough-create-3rdgit)
+ [

## 3단계: 코드 변경
](#sagemaker-projects-walkthrough-change-3rdgit)
+ [

## 4단계: 모델 승인
](#sagemaker-proejcts-walkthrough-approve-3rdgit)
+ [

## (선택 사항) 5단계: 프로덕션에 모델 버전 배포
](#sagemaker-projects-walkthrough-prod-3rdgit)
+ [

## 6단계: 리소스 정리
](#sagemaker-projectcts-walkthrough-cleanup-3rdgit)

## 1단계: GitHub 연결 설정
<a name="sagemaker-proejcts-walkthrough-connect-3rdgit"></a>

이 단계에서는 [AWS CodeConnections 연결](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html)을 사용하여 GitHub 리포지토리에 연결합니다. SageMaker AI 프로젝트는 이 연결을 사용하여 소스 코드 리포지토리에 액세스합니다.

**GitHub 연결을 설정하려면:**

1. [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)에서 CodePipeline 콘솔에 로그인합니다.

1. 탐색 창의 **설정**에서 **연결**을 선택합니다.

1. **연결 생성**을 선택합니다.

1. **공급자 선택**에서 **GitHub**를 선택합니다.

1. **연결 이름**에 이름을 입력합니다.

1. **GitHub에 연결**을 선택합니다.

1.  AWS Connector GitHub 앱이 이전에 설치되지 않은 경우 **새 앱 설치를** 선택합니다.

   그러면 액세스할 수 있는 모든 GitHub 개인 계정 및 조직의 목록이 표시됩니다.

1. SageMaker 프로젝트 및 GitHub 리포지토리와 함께 사용할 연결을 설정하려는 계정을 선택합니다.

1. **구성**을 선택합니다.

1. 선택적으로 특정 리포지토리를 선택하거나 **모든 리포지토리**를 선택할 수 있습니다.

1. **저장**을 선택합니다. 앱이 설치되면 **GitHub에 연결** 페이지로 리디렉션되고 설치 ID가 자동으로 채워집니다.

1. **연결**을 선택합니다.

1. 키 `sagemaker`와 값 `true`가 포함된 태그를 이 CodeConnections 연결에 추가합니다.

1. 연결 ARN을 복사하여 나중에 사용할 수 있도록 저장합니다. ARN을 프로젝트 생성 단계에서 파라미터로 사용합니다.

## 2단계: 프로젝트 생성
<a name="sagemaker-proejcts-walkthrough-create-3rdgit"></a>

이 단계에서는 SageMaker AI에서 제공하는 프로젝트 템플릿으로 모델을 구축, 훈련 및 배포하여 SageMaker AI MLOps 프로젝트를 생성합니다.

**SageMaker AI MLOps 프로젝트를 만드는 방법**

1. Studio에 로그인합니다. 자세한 내용은 [Amazon SageMaker AI 도메인 개요](gs-studio-onboard.md)섹션을 참조하세요.

1. Studio 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. **프로젝트 생성**을 선택합니다.

   **프로젝트 생성** 탭이 나타납니다.

1. **SageMaker AI 프로젝트 템플릿**의 경우 **CodePipeline을 사용하여 타사 Git 리포지토리로 모델 구축, 훈련 및 배포**를 선택하세요.

1. **다음**을 선택합니다.

1. **모델 빌드 코드 리포지토리 정보**에서 다음 파라미터를 입력합니다.
   + **브랜치**의 경우 Git 리포지토리에서 파이프라인 활동에 사용할 브랜치를 입력합니다.
   + **전체 리포지토리 이름**의 경우 Git 리포지토리 이름을 *사용자 이름/리포지토리 이름* 또는 *조직/리포지토리 이름* 형식으로 입력합니다.
   + **Code Connection ARN**의 경우 1단계에서 생성한 CodeConnections 연결의 ARN을 입력합니다.

1. **모델 배포 코드 리포지토리 정보**에서 다음 파라미터를 입력합니다.
   + **브랜치**의 경우 Git 리포지토리에서 파이프라인 활동에 사용할 브랜치를 입력합니다.
   + **전체 리포지토리 이름**의 경우 Git 리포지토리 이름을 *사용자 이름/리포지토리 이름* 또는 *조직/리포지토리 이름* 형식으로 입력합니다.
   + **Code Connection ARN**의 경우 1단계에서 생성한 CodeConnections 연결의 ARN을 입력합니다.

1. **프로젝트 생성**을 선택합니다.

프로젝트가 **생성됨** **상태**로 **프로젝트** 목록에 나타납니다.

## 3단계: 코드 변경
<a name="sagemaker-projects-walkthrough-change-3rdgit"></a>

이제 모델을 빌드하는 파이프라인 코드를 변경하고 변경 내용을 커밋하여 새 파이프라인 실행을 시작합니다. 파이프라인 실행은 새 모델 버전을 등록합니다.

**코드를 변경하려면**

1. 모델 빌드 GitHub 리포지토리에서 `pipelines/abalone`폴더로 이동합니다. `pipeline.py`를 두 번 클릭하여 코드 파일을 엽니다.

1. `pipeline.py` 파일에서 훈련 인스턴스 유형을 설정하는 줄을 찾습니다.

   ```
   training_instance_type = ParameterString(
           name="TrainingInstanceType", default_value="ml.m5.xlarge"
   ```

   편집할 파일을 열고 `ml.m5.xlarge`에서 `ml.m5.large`로 변경한 다음 커밋합니다.

코드 변경을 커밋한 후 MLOps 시스템은 새 모델 버전을 생성하는 파이프라인 실행을 시작합니다. 다음 단계에서는 새 모델 버전을 승인하여 프로덕션에 배포합니다.

## 4단계: 모델 승인
<a name="sagemaker-proejcts-walkthrough-approve-3rdgit"></a>

이제 이전 단계에서 생성한 새 모델 버전을 승인하여 SageMaker AI 엔드포인트에 모델 버전 배포를 시작합니다.

**모델 버전을 승인하려면**

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. 첫 단계에서 만든 프로젝트 이름을 찾고 두 번 클릭하여 프로젝트의 프로젝트 탭을 엽니다.

1. 프로젝트 탭에서 **모델 그룹**을 선택한 다음 나타나는 모델 그룹의 이름을 두 번 클릭합니다.

   모델 그룹 탭이 나타납니다.

1. 모델 그룹 탭에서 **버전 1**을 두 번 클릭합니다. **버전 1** 탭이 열립니다. **상태 업데이트**를 선택합니다.

1. 모델 **모델 버전 상태 업데이트** 대화 상자의 **상태** 드롭다운 목록에서 **승인**을 선택한 다음 **상태 업데이트**를 선택합니다.

   모델 버전을 승인하면 MLOps 시스템이 모델을 스테이징에 배포합니다. 엔드포인트를 보려면 프로젝트 탭에서 **엔드포인트** 탭을 선택합니다.

## (선택 사항) 5단계: 프로덕션에 모델 버전 배포
<a name="sagemaker-projects-walkthrough-prod-3rdgit"></a>

이제 모델 버전을 프로덕션 환경에 배포할 수 있습니다.

**참고**  
이 단계를 완료하려면 Studio Classic 도메인의 관리자여야 합니다. 관리자가 아닌 경우 이 단계를 건너뜁니다.

**모델 버전을 프로덕션 환경에 배포하려면**

1. [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)에서 CodePipeline 콘솔에 로그인합니다.

1. **파이프라인**을 선택한 다음, **sagemaker-*projectname*-*projectid*-modeldeploy**라는 이름의 파이프라인을 선택합니다.여기서 *projectname*은 프로젝트 이름이고 *projectid*는 프로젝트 ID입니다.

1. **배포 스테이징 단계**에서 **검토**를 선택합니다.

1. **검토** 대화 상자에서 **승인**을 선택합니다.

   **배포 스테이징** 단계를 승인하면 MLOps 시스템이 모델을 프로덕션에 배포합니다. 엔드포인트를 보려면 Studio Classic의 프로젝트 탭에서 **엔드포인트** 탭을 선택합니다.

## 6단계: 리소스 정리
<a name="sagemaker-projectcts-walkthrough-cleanup-3rdgit"></a>

비용이 발생하지 않도록 하려면 이 안내서에서 생성된 리소스를 정리합니다.

**참고**  
 CloudFormation 스택과 Amazon S3 버킷을 삭제하려면 Studio Classic의 관리자여야 합니다. 관리자가 아닌 경우 관리자에게 해당 단계를 완료해 달라고 요청하세요.

1. Studio Classic 사이드바에서 **홈** 아이콘(![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/studio/icons/house.png))을 선택합니다.

1. 메뉴에서 **배포**를 선택한 다음 **프로젝트**를 선택합니다.

1. 대상 드롭다운 목록에서 대상 프로젝트를 선택합니다. 프로젝트가 보이지 않는 경우 프로젝트 이름을 입력하고 필터를 적용하여 프로젝트를 찾습니다.

1. 프로젝트를 선택하여 기본 패널에서 세부 정보를 확인합니다.

1. **작업** 메뉴에서 **삭제**를 선택합니다.

1. **프로젝트 삭제** 창에서 **삭제**를 선택하여 선택을 확인합니다.

   이렇게 하면 프로젝트에서 생성한 서비스 카탈로그 프로비저닝 제품이 삭제됩니다. 여기에는 프로젝트용으로 생성된 CodeCommit, CodePipeline, CodeBuild 리소스가 포함됩니다.

1. 프로젝트가 생성한 CloudFormation 스택을 삭제합니다. 두 개의 스택이 있습니다.하나는 스테이징용이고 다른 하나는 프로덕션용입니다. 스택의 이름은 **sagemaker-*projectname*-*project-id*-deploy-staging** 및 **sagemaker-*projectname*-*project-id*-deploy-prod**입니다.여기서 *projectname*은 프로젝트 이름이고 *project-id*는 프로젝트 ID입니다.

    CloudFormation 스택을 삭제하는 방법에 대한 자세한 내용은 *CloudFormation 사용 설명서*[의 CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

1. 프로젝트에서 생성한 Amazon S3 버킷을 삭제합니다. 버킷 이름은 **sagemaker-project-*project-id***이고, 여기서 *projt-id*는 프로젝트 ID입니다.

# Amazon SageMaker AI MLOps 문제 해결
<a name="mlopsfaq"></a>

다음을 사용하여 SageMaker AI에서 MLOps 관련 문제를 해결하세요. 이 항목에서는 일반적인 오류와 해결 방법에 대한 정보를 제공합니다.

## SageMaker AI 템플릿에서 만든 SageMaker AI 프로젝트를 삭제하려고 하는데 비어 있지 않은 Amazon S3 버킷 또는 Amazon ECR 리포지토리로 인해 오류가 발생하는 경우 프로젝트를 삭제하려면 어떻게 해야 하나요?
<a name="collapsible-section-14"></a>

SageMaker AI 프로젝트를 삭제하려고 할 때 다음 오류 메시지 중 하나가 표시되는 경우:

```
The bucket you tried to delete is not empty
```

```
The repository with name 'repository-name' in registry 
        with id 'id' cannot be deleted because it still contains images
```

SageMaker AI 프로젝트를 삭제하기 전에 수동으로 삭제해야 하는 비어 있지 않은 Amazon S3 버킷 또는 Amazon ECR 리포지토리가 있습니다. CloudFormation 는 비어 있지 않은 Amazon S3 버킷 또는 Amazon ECR 리포지토리를 자동으로 삭제하지 않습니다.