

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 古い SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

このセクションは、[SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) のオリジナルバージョンに基づいています。

**重要**  
[SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のオリジナルバージョンの開発とテクニカルサポートを中止します。  
現在 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のバージョン `v1.2.2` 以下を使用している場合は、リソースを [Amazon SageMaker 用 ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)に移行することをお勧めします。ACK サービスコントローラーは、[AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) をベースにした新世代の SageMaker Operators for Kubernetes です。  
移行ステップについては、「[リソースを最新のオペレータに移行する](kubernetes-sagemaker-operators-migrate.md)」を参照してください。  
元のバージョンの SageMaker Operators for Kubernetes のサポート終了に関するよくある質問への回答については、「[SageMaker AI Operators for Kubernetes のオリジナル バージョンのサポート終了についてのお知らせ](kubernetes-sagemaker-operators-eos-announcement.md)」を参照してください。

**Topics**
+ [SageMaker AI Operators for Kubernetes をインストールする](#kubernetes-sagemaker-operators-eos-install)
+ [Amazon SageMaker AI ジョブを使用する](kubernetes-sagemaker-jobs.md)
+ [リソースを最新のオペレータに移行する](kubernetes-sagemaker-operators-migrate.md)
+ [SageMaker AI Operators for Kubernetes のオリジナル バージョンのサポート終了についてのお知らせ](kubernetes-sagemaker-operators-eos-announcement.md)

## SageMaker AI Operators for Kubernetes をインストールする
<a name="kubernetes-sagemaker-operators-eos-install"></a>

以下の手順に従って、SageMaker AI Operators for Kubernetes をインストールして使用し、Amazon SageMaker AI で機械学習モデルをトレーニング、チューニング、デプロイします。

**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>

以下のセクションでは、オペレーターの元のバージョンを設定、デプロイする手順について説明します。

**警告**  
**注:** 次の手順では、SageMaker AI Operators for Kubernetes の最新バージョンはインストールされません。新しい ACK ベースの SageMaker AI Operators for Kubernetes をインストールするには、「[最新の SageMaker AI Operators for Kubernetes](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 クラスターコントロールプレーンとのマイナーバージョンの相違が 1 つ以内である `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` を使用したクラスターの自動作成については、「[Amazon EKS の開始方法 – 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 プロバイダーが関連付けられました。ロールを作成し、ロールを引き受けるための ServiceAccount 許可を Kubernetes に付与できます。

##### 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 アカウントにデプロイしたり、特定のジョブにアクセスできるユーザーを制御するのに役立ちます。

このガイドでは、オペレーターを特定の定義済み名前空間にインストールする方法を説明します。コントローラーを 2 番目の名前空間にデプロイするには、このガイドの手順を最初から最後まで実行し、各ステップで名前空間を変更します。

##### 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 プロバイダーが関連付けられ、ロールを作成して、ロールを引き受けるための ServiceAccount 許可を Kubernetes に付与できるようになりました。

##### 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>` のプレースホルダーはすべて、クラスターに対応する値に必ず置き換えてください。このガイドでは、`<Namespace>` の値に `my-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>

名前空間の範囲内へのオペレーターのデプロイは、2 つの部分で構成されます。1 つ目は、クラスターレベルでインストールされる CRD のセットです。これらのリソース定義は、Kubernetes クラスターごとに 1 回だけインストールする必要があります。2 つ目の部分は、オペレーターのアクセス許可とデプロイそのものです。

 クラスターに 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>

名前空間の範囲内へのオペレーターのデプロイには、2 つの部分が必要です。1 つ目は、クラスターレベルでインストールされる CRD のセットです。これらのリソース定義は、Kubernetes クラスターごとに 1 回だけインストールする必要があります。2 つ目の部分は、オペレーターのアクセス許可とデプロイそのものです。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>

 SageMaker AI Operators for Kubernetes の一部として、`kubectl` の `smlogs` [プラグイン](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)を使用できます。これにより、SageMaker AI CloudWatch ログを `kubectl` でストリーミングできるようになります。`kubectl` は [PATH](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. ファイルから以下の 2 行を削除してジョブを編集し、ファイナライザーを削除します。ファイルを保存すると、ジョブが削除されます。

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

### 各リージョンのイメージと SMlog
<a name="images-and-smlogs-in-each-region"></a>

以下の表に、各リージョンで使用できるオペレーターイメージと SMLog を示します。


|  リージョン  |  コントローラーイメージ  |  Linux SMLog  | 
| --- | --- | --- | 
|  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>

このセクションは、[SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) のオリジナルバージョンに基づいています。

**重要**  
[SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のオリジナルバージョンの開発とテクニカルサポートを中止します。  
現在 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のバージョン `v1.2.2` 以下を使用している場合は、リソースを [Amazon SageMaker 用 ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)に移行することをお勧めします。ACK サービスコントローラーは、[AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) をベースにした新世代の SageMaker Operators for Kubernetes です。  
移行ステップについては、「[リソースを最新のオペレータに移行する](kubernetes-sagemaker-operators-migrate.md)」を参照してください。  
元のバージョンの SageMaker Operators for Kubernetes のサポート終了に関するよくある質問への回答については、「[SageMaker AI Operators for Kubernetes のオリジナル バージョンのサポート終了についてのお知らせ](kubernetes-sagemaker-operators-eos-announcement.md)」を参照してください。

Operators for Kubernetes を使用して Amazon SageMaker AI ジョブを実行するには、YAML ファイルを適用するか、提供された Helm チャートを使用します。

以下のチュートリアルのサンプルオペレータージョブはすべて、一般公開されている MNIST データセットから取得したサンプルデータを使用しています。これらのサンプルを実行するには、Amazon S3 バケットにデータセットをダウンロードします。データセットの場所は、「[MNIST データセットをダウンロードする](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-preprocess-data-pull-data.html)」で確認できます。

**Topics**
+ [TrainingJob オペレーター](#trainingjob-operator)
+ [HyperParameterTuningJob オペレーター](#hyperparametertuningjobs-operator)
+ [BatchTransformJob オペレーター](#batchtransformjobs-operator)
+ [HostingDeployment オペレーター](#hosting-deployment-operator)
+ [ProcessingJob オペレーター](#kubernetes-processing-job-operator)
+ [HostingAutoscalingPolicy (HAP) オペレーター](#kubernetes-hap-operator)

## TrainingJob オペレーター
<a name="trainingjob-operator"></a>

トレーニングジョブオペレーターは、トレーニングジョブを SageMaker AI で起動して、指定されたジョブの仕様を SageMaker AI と調整します。SageMaker のトレーニングジョブについては、SageMaker AI の [CreateTrainingJob API ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html)を参照してください。

**Topics**
+ [YAML ファイルを使用して TrainingJob を作成する](#create-a-trainingjob-using-a-simple-yaml-file)
+ [Helm チャートを使用して TrainingJob を作成する](#create-a-trainingjob-using-a-helm-chart)
+ [TrainingJob を一覧表示する](#list-training-jobs)
+ [TrainingJob について説明する](#describe-a-training-job)
+ [TrainingJob のログを表示する](#view-logs-from-training-jobs)
+ [TrainingJob を削除する](#delete-training-jobs)

### YAML ファイルを使用して TrainingJob を作成する
<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` ファイルを編集して `roleArn` パラメータを `<sagemaker-execution-role>` に置き換えて、`outputPath` を SageMaker AI 実行ロールが書き込みアクセス許可を持つ Amazon S3 バケットに置き換えます。SageMaker AI がユーザーに代わって Amazon S3、Amazon CloudWatch、その他のサービスにアクセスするには、`roleArn` にアクセス許可が必要です。SageMaker AI ExecutionRole の作成の詳細については、「[SageMaker AI ロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)」を参照してください。以下のコマンドを使用して YAML ファイルを適用します。

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

### Helm チャートを使用して TrainingJob を作成する
<a name="create-a-trainingjob-using-a-helm-chart"></a>

Helm チャートを使用すると TrainingJob を実行できます。

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 ロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)」を参照してください。

#### TrainingJob を作成する
<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 で実際のトレーニングジョブを起動し、`TrainingJob` Kubernetes リソースを更新して、SageMaker AI でのジョブのステータスを反映させます。ジョブの期間中に使用された SageMaker AI リソースには料金が発生します。ジョブが完了または停止すると、料金は発生しません。

**注**: SageMaker AI では、実行中のトレーニングジョブは更新できません。パラメータを編集して設定ファイルを再適用することはできません。メタデータ名を変更するか、既存のジョブを削除して新しいジョブを作成します。Kubeflow の TFJob のような既存のトレーニングジョブオペレーターと同様に、`update` はサポートされていません。

### TrainingJob を一覧表示する
<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
```

ジョブが完了または失敗した後も、トレーニングジョブは引き続き一覧表示されます。以下の「[TrainingJob を削除する](#delete-training-jobs)」の手順を実行すると、一覧から `TrainingJob` ジョブを削除できます。完了または停止したジョブでは、SageMaker AI リソースの料金は発生しません。

#### TrainingJob のステータス値
<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)から引用しています。ジョブのステータスに関するより詳細な情報が含まれます。

### TrainingJob について説明する
<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>
```

### TrainingJob のログを表示する
<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
```

### TrainingJob を削除する
<a name="delete-training-jobs"></a>

以下のコマンドを使用して、Amazon SageMaker AI のトレーニングジョブを停止します。

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

このコマンドは、SageMaker トレーニングジョブを Kubernetes から削除します。このコマンドでは次の出力が返されます。

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

SageMaker AI でジョブがまだ進行中の場合は、ジョブは停止します。ジョブが完了または停止すると、SageMaker AI リソースの料金は発生しません。

**注**: SageMaker AI はトレーニングジョブを削除しません。停止したジョブは、引き続き SageMaker AI コンソールに表示されます。`delete` コマンドで SageMaker AI からリソースをクリーンアップするには、約 2 分かかります。

## HyperParameterTuningJob オペレーター
<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 ファイルを使用して HyperparameterTuningJob を作成する](#create-a-hyperparametertuningjob-using-a-simple-yaml-file)
+ [Helm チャートを使用して HyperparameterTuningJob を作成する](#create-a-hyperparametertuningjob-using-a-helm-chart)
+ [HyperparameterTuningJob を一覧表示する](#list-hyperparameter-tuning-jobs)
+ [HyperparameterTuningJob について説明する](#describe-a-hyperparameter-tuning-job)
+ [HyperparameterTuningJob のログを表示する](#view-logs-from-hyperparametertuning-jobs)
+ [HyperparameterTuningJob を削除する](#delete-hyperparametertuning-jobs)

### YAML ファイルを使用して HyperparameterTuningJob を作成する
<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 チャートを使用して HyperparameterTuningJob を作成する
<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` をアカウントに対応する値に変更する必要があります。

#### HyperparameterTuningJob を作成する
<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 で実際のハイパーパラメータ最適化ジョブを起動し、`HyperParameterTuningJob` Kubernetes リソースを更新して、SageMaker AI でのジョブのステータスを反映させます。ジョブの期間中に使用された SageMaker AI リソースには料金が発生します。ジョブが完了または停止すると、料金は発生しません。

**注**: SageMaker AI では、実行中のハイパーパラメータ調整ジョブを更新することはできません。パラメータを編集して設定ファイルを再適用することはできません。メタデータ名を変更するか、既存のジョブを削除して新しいジョブを作成する必要があります。Kubeflow の `TFJob` のような既存のトレーニングジョブオペレーターと同様に、`update` はサポートされていません。

### HyperparameterTuningJob を一覧表示する
<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
```

ジョブが完了または失敗した後も、ハイパーパラメータチューニングジョブは引き続き一覧表示されます。以下の「[HyperparameterTuningJob を削除する](#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 ドキュメントの「[TrainingJobStatusCounters](https://docs.aws.amazon.com/sagemaker/latest/dg/API_TrainingJobStatusCounters.html)」を参照してください。

#### 最適な TrainingJob
<a name="best-training-job"></a>

この列には、選択したメトリクスを最適化した `TrainingJob` の名前が表示されます。

チューニングされたハイパーパラメータの概要を表示するには、以下を実行します。

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

`TrainingJob` の詳細を表示するには、以下を実行します。

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

#### スポーンされた TrainingJob
<a name="spawned-training-jobs"></a>

以下のコマンドを実行すると、`HyperparameterTuningJob` によって起動された Kubernetes の 10 件すべてのトレーニングジョブを追跡することもできます。

```
kubectl get trainingjobs
```

### HyperparameterTuningJob について説明する
<a name="describe-a-hyperparameter-tuning-job"></a>

`describe` `kubectl` コマンドを使用すると、デバッグの詳細情報を取得できます。

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

チューニングジョブに関する情報以外にも、SageMaker AI Operator for Kubernetes は、ハイパーパラメータチューニングジョブが検出した[最適なトレーニングジョブ](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>
```

### HyperparameterTuningJob のログを表示する
<a name="view-logs-from-hyperparametertuning-jobs"></a>

ハイパーパラメータチューニングジョブにはログはありませんが、ハイパーパラメータチューニングジョブによって起動されるトレーニングジョブにはすべてログがあります。これらのログには、通常のトレーニングジョブの場合と同様にアクセスできます。詳細については、「[TrainingJob のログを表示する](#view-logs-from-training-jobs)」を参照してください。

### HyperparameterTuningJob を削除する
<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
```

**注**: delete コマンドで SageMaker AI からリソースをクリーンアップするには、約 2 分かかります。

## BatchTransformJob オペレーター
<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 ファイルを使用して BatchTransformJob を作成する](#create-a-batchtransformjob-using-a-simple-yaml-file)
+ [Helm チャートを使用して BatchTransformJob を作成する](#create-a-batchtransformjob-using-a-helm-chart)
+ [BatchTransformJob を一覧表示する](#list-batch-transform-jobs)
+ [BatchTransformJob の詳細を表示する](#describe-a-batch-transform-job)
+ [BatchTransformJob のログを表示する](#view-logs-from-batch-transform-jobs)
+ [BatchTransformJob を削除する](#delete-a-batch-transform-job)

### YAML ファイルを使用して BatchTransformJob を作成する
<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 チャートを使用して BatchTransformJob を作成する
<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 バケットに置き換えます。

#### BatchTransformJob を作成する
<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 で実際の変換ジョブを起動し、`BatchTransformJob` Kubernetes リソースを更新して、SageMaker AI でのジョブのステータスを反映させます。ジョブの期間中に使用された SageMaker AI リソースには料金が発生します。ジョブが完了または停止すると、料金は発生しません。

**注**: SageMaker AI では、実行中のバッチ変換ジョブを更新することはできません。パラメータを編集して設定ファイルを再適用することはできません。メタデータ名を変更するか、既存のジョブを削除して新しいジョブを作成する必要があります。Kubeflow の `TFJob` のような既存のトレーニングジョブオペレーターと同様に、`update` はサポートされていません。

### BatchTransformJob を一覧表示する
<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
```

ジョブが完了または失敗した後も、バッチ変換ジョブは引き続き一覧表示されます。以下の「[BatchTransformJob を削除する](#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` になる場合があります。これは、オペレーターがまだジョブを処理していないことを意味します。

### BatchTransformJob の詳細を表示する
<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>
```

### BatchTransformJob のログを表示する
<a name="view-logs-from-batch-transform-jobs"></a>

以下のコマンドを使用して、`xgboost-mnist` バッチ変換ジョブのログを確認します。

```
kubectl smlogs batchtransformjob xgboost-mnist-batch-transform
```

### BatchTransformJob を削除する
<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 リソースの料金は発生しません。Delete で SageMaker AI からリソースをクリーンアップするには、約 2 分かかります。

**注**: SageMaker AI はバッチ変換ジョブを削除しません。停止したジョブは、引き続き SageMaker AI コンソールに表示されます。

## HostingDeployment オペレーター
<a name="hosting-deployment-operator"></a>

HostingDeployment オペレーターは、リアルタイム推論のためのエンドポイントの作成と削除、既存のエンドポイントの更新をサポートします。ホスティングデプロイ演算子は、SageMaker AI でモデルの作成、エンドポイントの設定、エンドポイントの作成を行い、指定されたホスティングデプロイジョブ仕様を SageMaker AI と調整します。SageMaker AI 推論の詳細については、SageMaker AI の [CreateEndpoint API ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)を参照してください。

**Topics**
+ [HostingDeployment リソースを設定する](#configure-a-hostingdeployment-resource)
+ [HostingDeployment を作成する](#create-a-hostingdeployment)
+ [HostingDeployment を一覧表示する](#list-hostingdeployments)
+ [HostingDeployment の詳細を表示する](#describe-a-hostingdeployment)
+ [エンドポイントを呼び出す](#invoking-the-endpoint)
+ [HostingDeployment を更新する](#update-hostingdeployment)
+ [HostingDeployment を削除する](#delete-the-hostingdeployment)

### 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` ファイルには以下のコンポーネントが含まれており、必要に応じて編集できます。
+ ProductionVariants。**本番稼働用バリアントは、1 つのモデルを提供する一連のインスタンスです。SageMaker AI は、設定済みの加重に従って、すべての本番環境バリアント間の負荷を分散します。
+ *モデル*。モデルは、モデルの提供に必要なコンテナおよび実行ロール ARN です。少なくとも 1 つのコンテナが必要です。
+ *コンテナ*。コンテナは、データセットと提供されるイメージを指定します。SageMaker AI で提供されているアルゴリズムの代わりに独自のカスタムアルゴリズムを使用する場合は、推論コードが SageMaker AI の要件を満たしている必要があります。詳細については、「[SageMaker AI で独自のアルゴリズムを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html)」を参照してください。

### HostingDeployment を作成する
<a name="create-a-hostingdeployment"></a>

HostingDeployment を作成するには、`kubectl` を使用して、ファイル `hosting.yaml` に以下のコマンドを適用します。

```
kubectl apply -f hosting.yaml
```

SageMaker AI では、指定された設定でエンドポイントが作成されます。エンドポイントのライフタイム中に使用された SageMaker AI リソースでは料金が発生します。エンドポイントが削除されると、料金は発生しません。

作成プロセスの所要時間は約 10 分です。

### HostingDeployment を一覧表示する
<a name="list-hostingdeployments"></a>

HostingDeployment が作成されたことを確認するには、以下のコマンドを使用します。

```
kubectl get hostingdeployments
```

出力は次のようになります。

```
NAME           STATUS     SAGEMAKER-ENDPOINT-NAME
host-xgboost   Creating   host-xgboost-def0e83e0d5f11eaaa450aSMLOGS
```

#### HostingDeployment のステータス値
<a name="hostingdeployment-status-values"></a>

status フィールドは、以下の値のいずれかになります。
+ `SynchronizingK8sJobWithSageMaker`: オペレーターはエンドポイントを作成する準備をしています。
+ `ReconcilingEndpoint`: オペレーターはエンドポイントリソースを作成、更新、削除しています。HostingDeployment がこの状態で変わらない場合は、`kubectl describe` を使用して `Additional` フィールドの理由を確認します。
+ `OutOfService`: エンドポイントは受信リクエストを受け取ることができません。
+ `Creating`: [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html) が実行中です。
+ `Updating`: [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html) または [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) が実行中です。
+ `SystemUpdating`: エンドポイントはメンテナンス中であり、完了するまで更新、削除、再スケーリングできません。このメンテナンスオペレーションでは、VPC 設定、 AWS KMS 暗号化、モデル、インスタンスタイプ、インスタンス数など、お客様が指定した値は変更されません。
+ `RollingBack`: エンドポイントがスケールアップやスケールダウンに失敗したため、またはバリアントの重みを変更できなかったため、以前の設定にロールバックしています。ロールバックが完了すると、エンドポイントは `InService` ステータスに戻ります。この移行ステータスは、オートスケーリングがオンになっているエンドポイントで、[UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 呼び出しの一部としてバリアントの重みや容量が変更される場合、または [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) オペレーションが明示的に呼び出されたときにのみ適用されます。
+ `InService`: エンドポイントは受信リクエストを処理できます。
+ `Deleting`: [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html) が実行中です。
+ `Failed`: エンドポイントを作成、更新、再スケーリングできませんでした。[DescribeEndpoint:FailureReason](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeEndpoint.html#SageMaker-DescribeEndpoint-response-FailureReason) を使用すると、失敗の詳細を確認できます。失敗したエンドポイントで実行できるオペレーションは、[DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html) のみです。

### HostingDeployment の詳細を表示する
<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>
```

status フィールドには、以下のフィールドを使用して詳細情報が表示されます。
+ `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。詳細については、「[Amazon SageMaker AI ホスティングサービスでモデルをデプロイする](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)」を参照してください。
+ `FailureReason`: 作成、更新、削除のコマンドが失敗した場合、ここに原因が表示されます。
+ `Last Check Time`: オペレーターが最後にエンドポイントのステータスをチェックした日時。
+ `Last Modified Time`: エンドポイントが最後に変更された日時。
+ `Model Names`: HostingDeployment モデル名と SageMaker AI モデル名の key-value ペア。

### エンドポイントを呼び出す
<a name="invoking-the-endpoint"></a>

エンドポイントのステータスが になったら`InService`、次の 2 つの方法でエンドポイントを呼び出すことができます。認証と URL リクエストの署名を行う AWS CLI を使用する方法と、cURL などの HTTP クライアントを使用する方法です。独自のクライアントを使用する場合は、v4 URL AWS 署名と認証を自分で実行する必要があります。

CLI AWS を使用してエンドポイントを呼び出すには、次のコマンドを実行します。リージョンとエンドポイント名を、エンドポイントのリージョンと 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` はモックデータのモデルからの予測になります。

### HostingDeployment を更新する
<a name="update-hostingdeployment"></a>

1. HostingDeployment のステータスが `InService` になったら、更新が可能になります。HostingDeployment が実行中になるまでに約 10 分かかることがあります。ステータスが `InService` になったことを確認するには、以下のコマンドを使用します。

   ```
   kubectl get hostingdeployments
   ```

1. HostingDeployment は、ステータスが `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 分です。

### HostingDeployment を削除する
<a name="delete-the-hostingdeployment"></a>

1. `kubectl` を使用し、以下のコマンドで HostingDeployment を削除します。

   ```
   kubectl delete hostingdeployments host-xgboost
   ```

   出力は次のようになります。

   ```
   hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
   ```

1. ホスティングデプロイが削除されたことを確認するには、以下のコマンドを使用します。

   ```
   kubectl get hostingdeployments
   No resources found.
   ```

削除されたエンドポイントでは、SageMaker AI リソースに対して料金は発生しません。

## ProcessingJob オペレーター
<a name="kubernetes-processing-job-operator"></a>

ProcessingJob オペレーターは、Amazon SageMaker の処理ジョブを起動するために使用されます。SageMaker 処理ジョブの詳細については、「[CreateProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)」を参照してください。

**Topics**
+ [YAML ファイルを使用して ProcessingJob を作成する](#kubernetes-processing-job-yaml)
+ [ProcessingJob を一覧表示する](#kubernetes-processing-job-list)
+ [ProcessingJob の詳細を表示する](#kubernetes-processing-job-description)
+ [ProcessingJob を削除する](#kubernetes-processing-job-delete)

### YAML ファイルを使用して ProcessingJob を作成する
<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 (Amazon 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 ロール](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>
   ```

### ProcessingJob を一覧表示する
<a name="kubernetes-processing-job-list"></a>

ProcessingJob オペレーターを使用して作成されたすべてのジョブを一覧表示するには、次のいずれかのコマンドを使用します。`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)」を参照してください。

**ProcessingJob のステータス**
+ `SynchronizingK8sJobWithSageMaker` - ジョブは最初にクラスターに送信されます。オペレーターはリクエストを受け取っており、処理ジョブ作成の準備をしています。
+ `Reconciling` - オペレーターは他のオペレーターと共に初期化、または一時的なエラーからの復旧を実行しています。処理ジョブがこのステータスのまま変化しない場合は、`kubectl` `describe` コマンドを使用し、`Additional` フィールドでその理由を確認します。
+ `InProgress | Completed | Failed | Stopping | Stopped` - SageMaker の処理ジョブのステータス。詳細については、「[DescribeProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html#sagemaker-DescribeProcessingJob-response-ProcessingJobStatus)」を参照してください。
+ `Error` - オペレーターは照合によって復旧できません。

完了、停止、または失敗したジョブについては、SageMaker AI リソースに対して追加料金は発生しません。

### ProcessingJob の詳細を表示する
<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>
```

### ProcessingJob を削除する
<a name="kubernetes-processing-job-delete"></a>

処理ジョブを削除すると、SageMaker の処理ジョブは 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 からリソースをクリーンアップするには、数分かかります。

## HostingAutoscalingPolicy (HAP) オペレーター
<a name="kubernetes-hap-operator"></a>

HostingAutoscalingPolicy (HAP) オペレーターは、リソース ID のリストを入力として受け取り、それぞれに同じポリシーを適用します。それぞれのリソース ID は、エンドポイント名とバリアント名の組み合わせになります。HAP オペレーターは 2 つのステップを実行します。最初にリソース ID を登録し、スケーリングポリシーをそれぞれのリソース ID に適用します。`Delete` は両方のアクションを元に戻します。既存の SageMaker AI エンドポイントに HAP を適用できるほか、[HostingDeployment オペレーター](https://docs.aws.amazon.com/sagemaker/latest/dg/hosting-deployment-operator.html#create-a-hostingdeployment)を使用して新しい SageMaker AI エンドポイントを作成することもできます。SageMaker AI のオートスケーリングの詳細については、[アプリケーションのオートスケーリングポリシーに関するドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)を参照してください。

**注記**  
`kubectl` コマンドでは、`hostingautoscalingpolicy` の代わりに短縮形 `hap` を使用できます。

**Topics**
+ [YAML ファイルを使用して HostingAutoscalingPolicy を作成する](#kubernetes-hap-job-yaml)
+ [HostingAutoscalingPolicy を一覧表示する](#kubernetes-hap-list)
+ [HostingAutoscalingPolicy の詳細を表示する](#kubernetes-hap-describe)
+ [HostingAutoscalingPolicy を更新する](#kubernetes-hap-update)
+ [HostingAutoscalingPolicy を削除する](#kubernetes-hap-delete)
+ [HostingAutoscalingPolicy を持つエンドポイントを更新または削除する](#kubernetes-hap-update-delete-endpoint)

### YAML ファイルを使用して HostingAutoscalingPolicy を作成する
<a name="kubernetes-hap-job-yaml"></a>

YAML ファイルを使用して、定義済みまたはカスタムのメトリクスを 1 つまたは複数の 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"
```

以下のサンプルを使用して、事前定義済みまたはカスタムのメトリクスを 1 つまたは複数のエンドポイントに適用する HAP を作成します。

#### サンプル 1: 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. 以下のいずれかのコマンドを使用して、1 つのリソース ID (エンドポイント名とバリアント名の組み合わせ) に事前定義済みのメトリクスを適用します。

   クラスターを対象範囲とするインストールの場合:

   ```
   kubectl apply -f hap-predefined-metric.yaml
   ```

   名前空間を対象範囲とするインストールの場合:

   ```
   kubectl apply -f hap-predefined-metric.yaml -n <NAMESPACE>
   ```

#### サンプル 2: 1 つのエンドポイントバリアントにカスタムのメトリクスを適用する
<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. 以下のいずれかのコマンドを使用して、1 つのリソース ID (エンドポイント名とバリアント名の組み合わせ) に、推奨の `SageMakerVariantInvocationsPerInstance` の代わりにカスタムのメトリクスを適用します。
**注記**  
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>
   ```

#### 複数のエンドポイントとバリアントの HostingAutoscalingPolicies に関する考慮事項
<a name="kubernetes-hap-scaling-considerations"></a>

以下の考慮事項は、複数のリソース ID を使用する場合に適用されます。
+ 1 つのポリシーを複数のリソース ID に適用する場合は、リソース ID ごとに 1 つの PolicyARN が作成されます。エンドポイントが 5 つある場合は、PolicyARN も 5 つになります。ポリシーで `describe` コマンドを実行すると、レスポンスは 1 つのジョブとして表示され、含まれるジョブステータスも 1 つになります。
+ 複数のリソース 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 が一覧表示されます。

### HostingAutoscalingPolicy を一覧表示する
<a name="kubernetes-hap-list"></a>

以下のいずれかのコマンドを使用して、HAP オペレーターを使って作成されたすべての HostingAutoscalingPolicy (HAP) を一覧表示します。

クラスターを対象範囲とするインストールの場合:

```
kubectl get hap
```

名前空間を対象範囲とするインストールの場合:

```
kubectl get hap -n <NAMESPACE>
```

出力は以下のようになります。

```
NAME             STATUS   CREATION-TIME
hap-predefined   Created  2021-07-13T21:32:21Z
```

以下のコマンドを使用して、HostingAutoscalingPolicy (HAP) のステータスをチェックします。

```
kubectl get hap <job-name>
```

以下のいずれかの値が返されます。
+ `Reconciling` - 特定のタイプのエラーでは、ステータスが `Error` ではなく `Reconciling` として表示されます。サーバー側のエラーやエンドポイントなどは、`Creating` または `Updating` の状態になります。詳細は、ステータスまたはオペレーターのログの `Additional` フィールドをチェックします。
+ `Created`
+ `Error`

**ポリシーが適用されたオートスケーリングエンドポイントを表示するには**

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. 左パネルの **[Inference]** (推論) を展開します。

1. **[Endpoints]** (エンドポイント) を選択します。

1. 対象のエンドポイントの名前を選択します。

1. **[Endpoint runtime settings]** (エンドポイントのランタイム設定) セクションまでスクロールします。

### HostingAutoscalingPolicy の詳細を表示する
<a name="kubernetes-hap-describe"></a>

以下のコマンドを使用して、HostingAutoscalingPolicy (HAP) の詳細を取得します。通常、これらのコマンドは、問題のデバッグや HAP のリソース ID (エンドポイント名とバリアント名の組み合わせ) のチェックに使用されます。

```
kubectl describe hap <job-name>
```

### HostingAutoscalingPolicy を更新する
<a name="kubernetes-hap-update"></a>

HostingAutoscalingPolicy (HAP) オペレーターは更新をサポートします。YAML 仕様を編集して値を変更し、ポリシーを再適用すると、HAP オペレーターが既存のポリシーを削除し、新しいポリシーを適用します。

### HostingAutoscalingPolicy を削除する
<a name="kubernetes-hap-delete"></a>

以下のいずれかのコマンドを使用して、HostingAutoscalingPolicy (HAP) ポリシーを削除します。

クラスターを対象範囲とするインストールの場合:

```
kubectl delete hap hap-predefined
```

名前空間を対象範囲とするインストールの場合:

```
kubectl delete hap hap-predefined -n <NAMESPACE>
```

以下のコマンドは、スケーリングポリシーを削除し、Kubernetes からスケーリングターゲットの登録を解除します。このコマンドでは次の出力が返されます。

```
hostingautoscalingpolicies.sagemaker.aws.amazon.com "hap-predefined" deleted
```

### HostingAutoscalingPolicy を持つエンドポイントを更新または削除する
<a name="kubernetes-hap-update-delete-endpoint"></a>

HostingAutoscalingPolicy (HAP) を持つエンドポイントを更新するには、`kubectl` `delete` コマンドを使用して HAP を削除し、エンドポイントを更新してから HAP を再適用します。

HAP を持つエンドポイントを削除するには、`kubectl` `delete` コマンドを使用して HAP を削除してから、エンドポイントを削除します。

# リソースを最新のオペレータに移行する
<a name="kubernetes-sagemaker-operators-migrate"></a>

[SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のオリジナルバージョンの開発とテクニカルサポートを中止します。

現在 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) のバージョン `v1.2.2` 以下を使用している場合は、リソースを [Amazon SageMaker 用 ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)に移行することをお勧めします。ACK サービスコントローラーは、[AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) をベースにした新世代の SageMaker Operators for Kubernetes です。

元のバージョンの SageMaker Operators for Kubernetes のサポート終了に関するよくある質問への回答については、「[SageMaker AI Operators for Kubernetes のオリジナル バージョンのサポート終了についてのお知らせ](kubernetes-sagemaker-operators-eos-announcement.md)」を参照してください。

次の手順に従ってリソースを移行し、ACK を使用して Amazon SageMaker AI で機械学習モデルをトレーニング、チューニング、デプロイします。

**注記**  
最新の SageMaker AI Operators for Kubernetes には下位互換性がありません。

**Topics**
+ [前提条件](#migrate-resources-to-new-operators-prerequisites)
+ [リソースの採用](#migrate-resources-to-new-operators-steps)
+ [古いリソースをクリーンアップする](#migrate-resources-to-new-operators-cleanup)
+ [最新の SageMaker AI Operators for Kubernetes を使用する](#migrate-resources-to-new-operators-tutorials)

## 前提条件
<a name="migrate-resources-to-new-operators-prerequisites"></a>

最新の SageMaker AI Operators for Kubernetes にリソースを正常に移行するには、次を実行する必要があります。

1. 最新の SageMaker AI Operators for Kubernetes をインストールします。ステップバイステップの手順については、「*ACK SageMaker AI Controller を使用した機械学習*」の「[設定](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)」を参照してください。

1. [HostingAutoscalingPolicy リソース](#migrate-resources-to-new-operators-hap) を使用している場合は、新しい Application Auto Scaling Operator をインストールします。ステップバイステップの手順については、「*アプリケーションのオートスケーリングを使用して SageMaker AI ワークロードをスケールする*」の「[設定](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/#setup)」を参照してください。HostingAutoScalingPolicy リソースを使用していない場合、このステップは省略できます。

アクセス許可が正しく設定されている場合、ACK SageMaker AI サービスコントローラーは AWS リソースの仕様とステータスを判断し、ACK コントローラーが最初に作成したかのようにリソースを照合できます。

## リソースの採用
<a name="migrate-resources-to-new-operators-steps"></a>

最新の SageMaker AI Operators for Kubernetes は、ACK サービスコントローラーによって最初に作成されなかったリソースを採用する機能を提供します。詳細については、ACK ドキュメントの[「既存の AWS リソースの採用](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/)」を参照してください。

次の手順は、最新の SageMaker AI Operators for Kubernetes が既存の 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
```

### HostingAutoscalingPolicy リソース
<a name="migrate-resources-to-new-operators-hap"></a>

`HostingAutoscalingPolicy` (HAP) リソースは、複数の Application Auto Scaling リソース (`ScalableTarget` と `ScalingPolicy`) で構成されています。ACK で HAP リソースを採用する場合は、まず [Application Auto Scaling コントローラー](https://github.com/aws-controllers-k8s/applicationautoscaling-controller)をインストールします。HAP リソースを採用するには、`ScalableTarget` と `ScalingPolicy` の両方のリソースを採用する必要があります。これらのリソースのリソース識別子は、`HostingAutoscalingPolicy` リソースのステータス (`status.ResourceIDList`) で確認できます。

### HostingDeployment リソース
<a name="migrate-resources-to-new-operators-hosting-deployment"></a>

`HostingDeployment` リソースは、複数の SageMaker AI リソース (`Endpoint`、`EndpointConfig`、各 `Model`) で構成されます。ACK で SageMaker エンドポイントを採用する場合は、`Endpoint`、`EndpointConfig` と各 `Model` を個別に採用する必要があります。`Endpoint`、`EndpointConfig`、`Model` の名前は、`HostingDeployment` リソースのステータス (`status.endpointName`、`status.endpointConfigName`、`status.modelNames`) にあります。

サポートされているすべての SageMaker AI リソースのリストについては、「[ACK API リファレンス](https://aws-controllers-k8s.github.io/community/reference/)」を参照してください。

## 古いリソースをクリーンアップする
<a name="migrate-resources-to-new-operators-cleanup"></a>

最新の SageMaker Operators for Kubernetes がリソースを採用したら、古いオペレーターをアンインストールして古いリソースをクリーンアップできます。

### ステップ 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
```

## 最新の SageMaker AI Operators for Kubernetes を使用する
<a name="migrate-resources-to-new-operators-tutorials"></a>

最新の SageMaker Operators for Kubernetes の使用に関する詳細なガイドについては、「[SageMaker AI Operators for Kubernetes を使用する](kubernetes-sagemaker-operators-ack.md#kubernetes-sagemaker-operators-ack-use)」を参照してください。

# SageMaker AI Operators for Kubernetes のオリジナル バージョンのサポート終了についてのお知らせ
<a name="kubernetes-sagemaker-operators-eos-announcement"></a>

このページでは、[SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) のオリジナルバージョンのサポート終了をお知らせし、よくある質問への回答と、フルサポートされている新世代の SageMaker AI Operators for Kubernetes である [Amazon SageMaker AI の ACK サービス コントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)に関する移行情報を提供します。最新の SageMaker AI Operators for Kubernetes に関する全般的な情報については、「[最新の SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators-ack.md)」を参照してください。

## サポートの終了に関するよくある質問
<a name="kubernetes-sagemaker-operators-eos-faq"></a>

**Topics**
+ [SageMaker AI Operators for Kubernetes のオリジナル バージョンをサポート終了にする理由](#kubernetes-sagemaker-operators-eos-faq-why)
+ [最新の SageMaker Operators for Kubernetes と ACK に関する詳細情報はどこで入手できますか。](#kubernetes-sagemaker-operators-eos-faq-more)
+ [サポート終了 (EOS) とは何を意味しますか?](#kubernetes-sagemaker-operators-eos-faq-definition)
+ [トレーニングや推論のためにワークロードを新しい SageMaker Operators for Kubernetes に移行するにはどうすればよいですか。](#kubernetes-sagemaker-operators-eos-faq-how)
+ [どのバージョンの ACK に移行すればよいですか?](#kubernetes-sagemaker-operators-eos-faq-version)
+ [初期の SageMaker AI Operators for Kubernetes と新しい演算子 (Amazon SageMaker AI 向け ACK サービスコントローラー) は機能上は同等ですか。](#kubernetes-sagemaker-operators-eos-faq-parity)

### SageMaker AI Operators for Kubernetes のオリジナル バージョンをサポート終了にする理由
<a name="kubernetes-sagemaker-operators-eos-faq-why"></a>

ユーザーは、[Amazon SageMaker AI の ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)を利用できるようになりました。ACK サービスコントローラーは、Kubernetes 用コントローラー (ACK) に基づく新世代の SageMaker AI Operators for Kubernetes です。これは、本番稼働用に最適化されたコミュニティ主導のプロジェクトであり、Kubernetes オペレーターを介して AWS サービスを公開する方法を標準化しています。 [AWS](https://aws-controllers-k8s.github.io/community/)これを踏まえ、[ SageMaker AI Operators for Kubernetes](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 history and tenets](https://aws-controllers-k8s.github.io/community/docs/community/background/)」を参照してください。

### 最新の SageMaker Operators for Kubernetes と ACK に関する詳細情報はどこで入手できますか。
<a name="kubernetes-sagemaker-operators-eos-faq-more"></a>
+ 最新の SageMaker Operators for Kubernetes の詳細については、GitHub リポジトリの「[Amazon SageMaker AI 向け ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)」を参照するか、[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/)を参照してください。

  オートスケーリングの例については、「[アプリケーションのオートスケーリングで SageMaker のワークロードをスケールする](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)」を参照してください。
+  AWS Controller for Kubernetes (ACK) の詳細については、「[AWS Controllers for Kubernetes](https://aws-controllers-k8s.github.io/community/)」(ACK) のドキュメントを参照してください。
+ サポートされている SageMaker AI リソースのリストについては、「[ACK API リファレンス](https://aws-controllers-k8s.github.io/community/reference/)」を参照してください。

### サポート終了 (EOS) とは何を意味しますか?
<a name="kubernetes-sagemaker-operators-eos-faq-definition"></a>

現在の演算子は引き続き使用できますが、演算子のサービスための新機能の開発は終了し、問題が見つかった場合のパッチやセキュリティ更新プログラムのリリースも提供されなくなります。`v1.2.2` が [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) の最終リリースになります。ユーザーは、ワークロードを[Amazon SageMaker AI の ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)に移行する必要があります。

### トレーニングや推論のためにワークロードを新しい SageMaker Operators for Kubernetes に移行するにはどうすればよいですか。
<a name="kubernetes-sagemaker-operators-eos-faq-how"></a>

古い SageMaker AI Operators for Kubernetes から最新の SageMaker AI Operators for Kubernetes へのリソースの移行については、「[リソースを最新のオペレータに移行する](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)の最新リリースバージョンに移行する必要があります。

### 初期の SageMaker AI Operators for Kubernetes と新しい演算子 (Amazon SageMaker AI 向け ACK サービスコントローラー) は機能上は同等ですか。
<a name="kubernetes-sagemaker-operators-eos-faq-parity"></a>

はい、機能は同等です。

この 2 つのバージョンの主な相違点には、次のようなものがあります。
+ ACK ベースの SageMaker AI Operators for Kubernetes で使用されるカスタムリソース定義 (CRD) は AWS API 定義に従い、元のバージョンの SageMaker AI Operators for Kubernetes のカスタムリソース仕様と互換性がありません。新しいコントローラーの [CRD](https://github.com/aws-controllers-k8s/sagemaker-controller/tree/main/helm/crds) を参照するか、移行ガイドを使用してリソースを採用し、新しいコントローラーを使用してください。
+ `Hosting Autoscaling` ポリシーは、最新の SageMaker Operators for Kubernetes には含まれず、[Application autoscaling](https://github.com/aws-controllers-k8s/applicationautoscaling-controller) ACK コントローラーに移行されました。アプリケーションのオートスケーリングコントローラーを使用して SageMaker AI エンドポイントで自動スケーリングを設定する方法については、こちらの「[オートスケーリングの例](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)」を参照してください。
+ `HostingDeployment` リソースを使用して、モデル、エンドポイント設定、エンドポイントを 1 つの CRD に作成しました。新しい SageMaker Operators for Kubernetes には、これらのリソースごとに個別の CRD があります。