

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

# 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의 작업은 중지되지 않습니다.