

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

# SageMaker AI ワークフロー
<a name="workflows"></a>

機械学習 (ML) の運用をスケールする際、Amazon SageMaker AI のフルマネージドワークフローサービスを使用して、ML ライフサイクルの継続的インテグレーションと継続的デプロイ (CI/CD) を実践できます。Pipelines SDK を使用すると、パイプラインのステップを選択して統合ソリューションに統合し、データの準備からモデルのデプロイまでのモデル構築プロセスを自動化できます。Kubernetes ベースのアーキテクチャの場合、Kubernetes クラスターに SageMaker AI 演算子をインストールし、Kubernetes API や `kubectl` などのコマンドライン Kubernetes ツールを使用して SageMaker AI ジョブをネイティブに作成できます。Kubeflow パイプライン用の SageMaker AI コンポーネントを使用すると、Kubeflow Pipelines から SageMaker AI のネイティブジョブを作成してモニタリングできます。SageMaker AI のジョブパラメータ、ステータス、出力には、Kubeflow パイプライン UI からアクセスできます。最後に、バッチジョブをスケジュールする場合は、 AWS Batch ジョブキュー統合または Jupyter ノートブックベースのワークフローサービスのいずれかを使用して、定義したスケジュールでスタンドアロンまたは定期的な実行を開始できます。

要約すると、SageMaker AI は以下のワークフロー技術を提供します。
+ [Pipelines](pipelines.md): ML パイプラインを構築して管理するためのツール。
+ [Kubernetes のオーケストレーション](kubernetes-workflows.md): Kubernetes クラスター用の SageMaker AI カスタム演算子と Kubeflow Pipelines のコンポーネント
+ [SageMaker ノートブックジョブ](notebook-auto-run.md): Jupyter Notebook のオンデマンドまたはスケジュール済み非インタラクティブなバッチ実行。

SageMaker AI と統合されている他のサービスを活用してワークフローを構築することもできます。オプションには次のサービスが含まれます。
+ [Airflow ワークフロー](https://sagemaker.readthedocs.io/en/stable/workflows/airflow/index.html): Airflow ワークフローを作成および管理するための設定をエクスポートする SageMaker API。
+ [AWS Step Functions](https://sagemaker.readthedocs.io/en/stable/workflows/step_functions/index.html): リソースを個別にプロビジョンする必要なく、SageMaker AI インフラストラクチャをオーケストレーションする Python のマルチステップ ML ワークフロー
+ [AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-sagemaker.html): SageMaker AI トレーニングジョブを AWS Batch ジョブキューに送信します。ジョブキューでは、コンピューティング環境で実行するジョブを優先してスケジュールできます。

SageMaker トレーニングと推論の管理の詳細については、「[Amazon SageMaker Python SDK ワークフロー](https://sagemaker.readthedocs.io/en/stable/workflows/index.html)」を参照してください。

**Topics**
+ [Pipelines](pipelines.md)
+ [Kubernetes のオーケストレーション](kubernetes-workflows.md)
+ [SageMaker ノートブックジョブ](notebook-auto-run.md)
+ [ML ワークフローをスケジュールする](workflow-scheduling.md)
+ [AWS Batch SageMaker AI トレーニングジョブのサポート](training-job-queues.md)

# Pipelines
<a name="pipelines"></a>

Amazon SageMaker Pipelines は、機械学習 (ML) 開発の自動化専用のワークフローオーケストレーションサービスです。

Pipelines には、他の AWS ワークフロー製品よりも以下の利点があります。

**自動スケーリングサーバーレスインフラストラクチャ** Pipelines の実行のために基盤となるオーケストレーションインフラストラクチャを管理する必要がないため、コアの ML タスクに集中できます。SageMaker AI は、ML ワークロードのニーズに応じて、パイプラインオーケストレーションコンピューティングリソースを自動的にプロビジョン、スケール、シャットダウンします。

**直感的なユーザーエクスペリエンス** Pipelines は、ビジュアルエディタ、SDK、API、JSON のいずれかのインターフェイスを使用して作成および管理を行うことができます。Amazon SageMaker Studio ビジュアルインターフェイスで、さまざまな ML ステップをドラッグアンドドロップしてパイプラインを作成できます。以下のスクリーンショットは、パイプラインのための Studio ビジュアルエディタを示しています。

![\[Studio の Pipelines のビジュアルドラッグアンドドロップインターフェイスのスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


ML ワークフローをプログラムで管理する場合、SageMaker Python SDK は高度なオーケストレーション機能を提供しています。詳細については、「SageMaker Python SDK ドキュメント」の「[Amazon SageMaker Pipelines](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html)」を参照してください。

**AWS 統合** Pipelines は、データ処理、モデルトレーニング、ファインチューニング、評価、デプロイ、モニタリングジョブを自動化するために、すべての SageMaker AI 機能やその他の AWS サービスとシームレスに統合します。SageMaker AI 機能をパイプラインに組み込み、ディープリンクを使用して複数のパイプラインにわたって操作し、大規模な ML ワークフローを作成、モニタリング、デバッグできます。

**コスト削減** Pipelines では、SageMaker Studio 環境と Pipelines がオーケストレーションを行う基盤となるジョブ (SageMaker Training、SageMaker Processing、SageMaker Inference、Amazon S3 データストレージなど) に対してのみ料金が発生します。

**監査可能性とリネージトラッキング** Pipelines では、組み込みのバージョニングを使用して、パイプラインの更新と実行の履歴を追跡できます。Amazon SageMaker ML Lineage Tracking は、エンドツーエンドの ML 開発ライフサイクルにおけるデータソースとデータコンシューマーの分析に役立ちます。

**Topics**
+ [Pipelines の概要](pipelines-overview.md)
+ [Pipelines のアクション](pipelines-build.md)

# Pipelines の概要
<a name="pipelines-overview"></a>

Amazon SageMaker パイプラインは、ドラッグアンドドロップ UI または [Pipelines SDK](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html) を使用して定義される、有向非巡回グラフ (DAG) 内の相​​互接続されたステップのセットです。[パイプライン定義 JSON スキーマ](https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/)を使用してパイプラインを構築することもできます。この DAG の JSON 定義は、パイプラインの各ステップの要件と関係性に関する情報を提供します。パイプラインの DAG の構造は、ステップ間のデータの依存関係によって決まります。これらのデータ依存関係は、ステップの出力のプロパティが別のステップに入力として渡される際に作成されます。次の図は、パイプライン DAG の例です。

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


**この例の DAG には以下のステップが含まれます。**

1. `AbaloneProcess` は、[処理](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-processing)ステップのインスタンスで、トレーニングに使用するデータに対して前処理スクリプトを実行します。例えば、このスクリプトを使用して、欠損値の補完入力、数値データの正規化、データのトレーニング、検証、テストデータセットへの分割ができます。

1. `AbaloneTrain` は、[トレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-training)ステップのインスタンスで、ハイパーパラメータを設定し、前処理された入力データからモデルをトレーニングします。

1. `AbaloneEval` は、[処理](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-processing)ステップの別のインスタンスで、モデルの精度を評価します。このステップは、データ依存関係の一例となります。このステップでは、`AbaloneProcess` のテストデータセット出力を使用します。

1. `AbaloneMSECond` は、[条件](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-condition)ステップのインスタンスで、この例では、モデル評価の平均二乗誤差の結果が特定の制限を下回っていることを確認します。モデルが基準を満たさない場合、パイプラインの実行が停止します。

1. パイプラインの実行は、次のステップで続行します。

   1. `AbaloneRegisterModel` では、SageMaker AI が [RegisterModel](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-register-model) ステップを呼び出して、モデルをバージョン管理されたモデルパッケージグループとして Amazon SageMaker モデルレジストリに登録します。

   1. `AbaloneCreateModel` では、SageMaker AI が [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-create-model) ステップを呼び出して、バッチ変換の準備としてモデルを作成します。`AbaloneTransform` では、SageMaker AI が [Transform](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-transform) ステップを呼び出して、指定したデータセットでモデル予測を生成します。

以降のトピックでは、基本的な Pipelines の概念について説明します。これらの概念の実装を解説したチュートリアルについては、「[Pipelines のアクション](pipelines-build.md)」を参照してください。

**Topics**
+ [パイプラインの構造と実行](build-and-manage-pipeline.md)
+ [IAM アクセス管理](build-and-manage-access.md)
+ [Pipelines のクロスアカウントサポートを設定する](build-and-manage-xaccount.md)
+ [Pipeline のパラメータ](build-and-manage-parameters.md)
+ [Pipelines のステップ](build-and-manage-steps.md)
+ [@step デコレータを使用した Python コードのリフトアンドシフト](pipelines-step-decorator.md)
+ [ステップ間でデータを渡す](build-and-manage-propertyfile.md)
+ [パイプラインのステップのキャッシュ](pipelines-caching.md)
+ [パイプラインのステップの再試行ポリシー](pipelines-retry-policy.md)
+ [パイプラインステップの選択的実行](pipelines-selective-ex.md)
+ [Amazon SageMaker Pipelines の ClarifyCheck と QualityCheck のステップを使用したベースライン計算、ドリフト検出、ライフサイクル](pipelines-quality-clarify-baseline-lifecycle.md)
+ [パイプライン実行をスケジュールする](pipeline-eventbridge.md)
+ [Amazon SageMaker Experiments の統合](pipelines-experiments.md)
+ [ローカルモードを使用してパイプラインを実行する](pipelines-local-mode.md)
+ [Amazon SageMaker Pipelines のトラブルシューティング](pipelines-troubleshooting.md)

# パイプラインの構造と実行
<a name="build-and-manage-pipeline"></a>

**Topics**
+ [パイプラインの構造](#build-and-manage-pipeline-structure)
+ [並列処理設定を使用したパイプラインの実行](#build-and-manage-pipeline-execution)

## パイプラインの構造
<a name="build-and-manage-pipeline-structure"></a>

Amazon SageMaker Pipelines インスタンスは、`name`、`parameters`、`steps` で構成されています。パイプライン名は、`(account, region)` ペア内で一意である必要があります。ステップ定義で使用されるすべてのパラメータは、パイプラインで定義する必要があります。リストされているパイプラインステップは、相互のデータ依存関係によって実行順序が自動的に決定されます。Pipelines サービスは、データ依存関係 DAG 内のステップ間の関係を解決して、実行を完了するステップのセットを作成します。以下は、パイプライン構造の例です。

**警告**  
ビジュアルエディタまたは SageMaker AI Python SDK を使用してパイプラインを構築する場合、パイプラインパラメータやステップ定義フィールド (環境変数など) に機密情報を含めないでください。これらのフィールドは、将来 `DescribePipeline` リクエストで返される際に表示されてしまいます。

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

## 並列処理設定を使用したパイプラインの実行
<a name="build-and-manage-pipeline-execution"></a>

デフォルトでは、パイプラインは、並列で実行できるすべてのステップを実行します。この動作は、パイプラインを作成または更新するとき、およびパイプラインの実行を開始または再試行するときに `ParallelismConfiguration` プロパティを使用して制御できます。

並列処理の設定は、実行ごとに適用されます。例えば、2 つの実行を開始して、それぞれが最大 50 ステップを同時に実行できる場合は、合計 100 ステップが同時に実行されます。また、実行の開始時、再試行時、または更新時に指定した `ParallelismConfiguration` は、パイプラインで定義した並列処理設定よりも優先されます。

**Example `ParallelismConfiguration` でパイプラインの実行を作成する**  

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

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

# IAM アクセス管理
<a name="build-and-manage-access"></a>

以下のセクションでは、Amazon SageMaker Pipelines の AWS Identity and Access Management (IAM) 要件について説明します。これらのアクセス許可の実装例については、「[前提条件](define-pipeline.md#define-pipeline-prereq)」を参照してください。

**Topics**
+ [パイプラインロールのアクセス許可](#build-and-manage-role-permissions)
+ [パイプラインステップのアクセス許可](#build-and-manage-step-permissions)
+ [Amazon S3 バケットを使用した CORS 設定](#build-and-manage-cors-s3)
+ [Pipelines ジョブのアクセス管理をカスタマイズする](#build-and-manage-step-permissions-prefix)
+ [パイプラインバージョンへのアクセスをカスタマイズする](#build-and-manage-step-permissions-version)
+ [Pipelines を使用したサービスコントロールポリシー](#build-and-manage-scp)

## パイプラインロールのアクセス許可
<a name="build-and-manage-role-permissions"></a>

パイプラインには、パイプラインの作成時に Pipelines に渡される IAM パイプライン実行ロールが必要です。パイプラインの作成に使用する SageMaker AI インスタンスのロールには、パイプライン実行ロールを指定する`iam:PassRole`アクセス許可を持つポリシーが必要です。これは、インスタンスがパイプラインの作成と実行に使用するパイプライン実行ロールを Pipelines サービスに渡すためのアクセス許可が必要なためです。IAM ロールの詳細については、「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」を参照してください。

パイプラインの実行ロールには、次のアクセス許可が必要です。
+ (デフォルトで使用されるパイプライン実行ロールではなく) パイプライン内の任意の SageMaker AI ジョブステップに、一意またはカスタマイズされたロールを使用できます。パイプライン実行ロールが、これらの各ロールを指定する`iam:PassRole`アクセス許可を持つポリシーを追加していることを確認します。
+  パイプライン内の各ジョブタイプに対する `Create` と `Describe` のアクセス許可。
+  `JsonGet` 関数を使用するための Amazon S3 アクセス許可。Amazon S3 リソースへのアクセスは、リソースベースのポリシーとアイデンティティベースのポリシーを使用して制御します。リソースベースのポリシーが Amazon S3 バケットに適用され、Pipelines にバケットへのアクセス権が付与されます。アイデンティティベースのポリシーは、アカウントから Amazon S3 呼び出しを行う機能をパイプラインに提供します。リソースベースのポリシーとアイデンティティベースのポリシーの詳細については、「[アイデンティティベースのポリシーとリソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)」を参照してください。

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

## パイプラインステップのアクセス許可
<a name="build-and-manage-step-permissions"></a>

Pipelines は、SageMaker AI ジョブを実行する手順を提供しています。パイプラインステップでこれらのジョブを実行するには、必要なリソースへのアクセスを提供する IAM ロールがアカウントに必要です。このロールは、パイプラインによって SageMaker AI サービスプリンシパルに渡されます。IAM ロールの詳細については、「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」を参照してください。

デフォルトでは、各ステップがパイプラインの実行ロールを取得します。必要に応じて、パイプラインの任意のステップに別のロールを渡すこともできます。こうすることで、パイプライン定義で指定される 2 つのステップ間に直接的な関係がない限り、各ステップのコードは他のステップで使用されるリソースに影響を与えないようになります。これらのロールは、ステップのプロセッサや推定器を定義するときに渡します。これらの定義にロールを含める方法の例については、「[SageMaker AI Python SDK ドキュメント](https://sagemaker.readthedocs.io/en/stable/overview.html#using-estimators)」を参照してください。

## Amazon S3 バケットを使用した CORS 設定
<a name="build-and-manage-cors-s3"></a>

Amazon S3 バケットから Pipelines にイメージが期待どおりにインポートされるようにするには、イメージのインポート元となる Amazon S3 バケットに CORS 設定を追加する必要があります。このセクションでは、必要な CORS 設定を Amazon S3 バケットに設定する方法について説明します。Pipelines に必要な XML `CORSConfiguration` は、[入力イメージデータの CORS 要件](sms-cors-update.md) の XML とは異なります。これ以外の場合は、XML に記載されている情報を使用して、Amazon S3 バケットの CORS 要件の詳細を取得できます。

イメージをホストする Amazon S3 バケットには、次の CORS 設定コードを使用します。CORS を設定する手順については、「Amazon Simple Storage Service ユーザーガイド」の「[Cross−Origin Resource Sharing (CORS) の設定](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html)」を参照してください。Amazon S3 コンソールを使用してポリシーをバケットに追加する場合は、JSON 形式を使用する必要があります。

**JSON**

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

**XML**

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

次の GIF は、Amazon S3 コンソールを使って CORS ヘッダーポリシーを追加する方法に関する Amazon S3 ドキュメントにある手順を示しています。

![\[Amazon S3 コンソールを使用して CORS ヘッダーポリシーを追加する方法を示す GIF。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/sms/gifs/cors-config.gif)


## Pipelines ジョブのアクセス管理をカスタマイズする
<a name="build-and-manage-step-permissions-prefix"></a>

IAM ポリシーをさらにカスタマイズして、組織内の特定のメンバーがパイプラインステップの一部またはすべてを実行できるようにすることが可能です。例えば、特定のユーザーにトレーニングジョブを作成するアクセス許可を付与し、別のユーザーグループに処理ジョブを作成するアクセス許可を付与し、すべてのユーザーに残りのステップを実行するアクセス許可を付与できます。この機能を使用するには、ジョブ名にプレフィックスとして付けるカスタム文字列を選択します。管理者は許可された ARN の先頭にプレフィックスを付加し、データサイエンティストはこのプレフィックスをパイプラインのインスタンス化に含めます。許可されたユーザーの IAM ポリシーには、指定されたプレフィックスの付いたジョブ ARN が含まれているため、パイプラインステップの後続のジョブには、続行するために必要なアクセス許可が付与されます。ジョブプレフィックスはデフォルトではオフになっています。使用するには `Pipeline` クラスでこのオプションをオンにする必要があります。

プレフィックスがオフになっているジョブの場合、ジョブ名は次の表で説明するフィールドを連結した形式になります。

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


| フィールド | 定義 | 
| --- | --- | 
|  pipelines   |  常に静的な文字列が先頭に追加されます。この文字列は、パイプラインオーケストレーションサービスをジョブのソースとして識別します。  | 
|  executionId  |  実行中のパイプラインインスタンス用のランダム化されたバッファ。  | 
|  stepNamePrefix  |  ユーザー指定のステップ名 (パイプラインステップの `name` 引数で指定)。最初の 20 文字に制限されます。  | 
|  entityToken  |  ステップエンティティが冪等性であることを保証するためのランダム化されたトークン。  | 
|  failureCount  |  ジョブを完了するために試行された現在の再試行回数。  | 

この場合、ジョブ名の先頭にはカスタムプレフィックスは付けられず、対応する IAM ポリシーがこの文字列と一致する必要があります。

ジョブプレフィックスを有効にするユーザーの場合、基になるジョブ名は次の形式になり、カスタムプレフィックスは `MyBaseJobName` として指定されます。

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

カスタムプレフィックスは、静的な `pipelines` 文字列を置き換え、パイプラインの一部として SageMaker AI ジョブを実行できるユーザーの選択を絞り込むのに役立ちます。

**プレフィックスの長さ制限**

ジョブ名には、個々のパイプラインステップに固有の内部の長さ制限があります。この制約により、許可されるプレフィックスの長さも制限されます。プレフィックスの長さの要件は以下のとおりです。


| パイプラインのステップ | プレフィックスの長さ | 
| --- | --- | 
|   `[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`, `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`, `[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`, `[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`, `[ClarifyCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)`, `[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)`, `[RegisterModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`   |  38  | 
|  `[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`, `[AutoML](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`  |  6  | 

### IAM ポリシーにジョブプレフィックスを適用する
<a name="build-and-manage-step-permissions-prefix-iam"></a>

管理者は IAM ポリシーを作成して、特定のプレフィックスを持つユーザーにジョブの作成を許可します。以下のポリシーの例では、データサイエンティストに、`MyBaseJobName` プレフィックスを使用する場合にトレーニングジョブの作成を許可しています。

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

### ジョブプレフィックスをパイプラインインスタンス化に適用する
<a name="build-and-manage-step-permissions-prefix-inst"></a>

プレフィックスをジョブインスタンスクラスの `*base_job_name` 引数で指定します。

**注記**  
パイプラインステップを作成する前に、`*base_job_name` 引数付きのジョブプレフィックスをジョブインスタンスに渡します。このジョブインスタンスには、ジョブをパイプラインのステップとして実行するのに必要な情報が含まれています。この引数は、使用するジョブインスタンスによって異なります。次のリストは、各パイプラインステップタイプにどの引数を使用するかを示しています。  
`[Estimator](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)` (`[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`)、`[Processor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html)` (`[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`)、`[AutoML](https://sagemaker.readthedocs.io/en/stable/api/training/automl.html)` (`[AutoMLStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`) クラス用の `base_job_name`
`[Tuner](https://sagemaker.readthedocs.io/en/stable/api/training/tuner.html)`クラス (`[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`) 用の `tuning_base_job_name`
`[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html)`クラス (`[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`) 用の `transform_base_job_name`
`[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)` (品質チェック) クラスと `[ClarifyCheckstep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)` (明確化チェック) クラス用の `[CheckJobConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#checkjobconfig)` の `base_job_name`
`[Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html)` クラスに使用される引数は、結果を `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)` に渡す前にモデルに対して `create` を実行するか `register` を実行するかによって異なります。  
`create` を呼び出す場合、カスタムプレフィックスはモデルを構築するときの `name` 引数から取得されます (つまり `Model(name=)`)。
`register` を呼び出す場合、カスタムプレフィックスは `register` 呼び出しの `model_package_name` 引数から取得されます (つまり `my_model.register(model_package_name=)`)

次の例は、新しいトレーニングジョブインスタンスのプレフィックスを指定する方法を示しています。

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

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

ジョブプレフィックスはデフォルトではオフになっています。この機能を有効にするには、以下のスニペットに示す `PipelineDefinitionConfig` の `use_custom_job_prefix` オプションを使用します。

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

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

パイプラインを作成して実行します。次の例では、パイプラインを作成して実行し、ジョブのプレフィックスをオフにしてパイプラインを再実行する方法も示しています。

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

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

同様に、既存のパイプラインでもこの機能をオンに切り替えて、ジョブプレフィックスを使用する新規の実行を開始できます。

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

最後に、パイプライン実行時に `list_steps` を呼び出して、カスタムプレフィックスが付いたジョブを表示できます。

```
steps = execution.list_steps()

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

## パイプラインバージョンへのアクセスをカスタマイズする
<a name="build-and-manage-step-permissions-version"></a>

`sagemaker:PipelineVersionId` 条件キーを使用して、特定のバージョンの Amazon SageMaker Pipelines へのカスタマイズされたアクセスを許可できます。例えば、以下のポリシーは、バージョン ID 6 以降にたいしてのみ、実行を開始したり、パイプラインバージョンを更新したりするためのアクセスを許可します。

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

****  

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

------

サポートされる条件キーの詳細については、「[Amazon SageMaker AI の条件キー](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)」を参照してください。

## Pipelines を使用したサービスコントロールポリシー
<a name="build-and-manage-scp"></a>

サービスコントロールポリシー (SCP) は、組織のアクセス許可の管理に使用できる組織ポリシーの一種です。SCP では、組織のすべてのアカウントで使用可能な最大アクセス許可を一元的に制御できます。組織内でパイプラインを使用することで、データサイエンティストが AWS コンソールを操作することなくパイプラインの実行を管理できるようになります。 

Amazon S3 へのアクセスを制限する SCP で VPC を使用する場合、他の Amazon S3 リソースへのアクセスをパイプラインに許可するための手順を実行する必要があります。

VPC 外の Amazon S3 に Pipelines が `JsonGet` 関数を使用してアクセスできるようにするには、Pipelines を使用するロールが Amazon S3 にアクセスできるように組織の SCP を更新します。これを行うには、プリンシパルタグと条件キーを使用して、パイプラインの実行ロールを介して Pipelines エグゼキュターが使用するロールの例外を作成します。

**VPC 外の Amazon S3 へのアクセスを Pipelines に許可するには**

1. 「[IAM ユーザーとロールのタグ付け](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)」の手順に従って、パイプラインの実行ロールに固有のタグを作成します。

1. 作成したタグの `Aws:PrincipalTag IAM` 条件キーを使用して、SCP で例外を付与します。詳細については、「[サービスコントロールポリシーの作成、更新、削除](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html)」を参照してください。

# Pipelines のクロスアカウントサポートを設定する
<a name="build-and-manage-xaccount"></a>

Amazon SageMaker Pipelines のクロスアカウントサポートにより、異なる AWS アカウントで運用されている他のチームや組織と機械学習パイプラインでコラボレーションできます。クロスアカウントパイプライン共有を設定すると、パイプラインへの制御されたアクセスを許可し、他のアカウントにパイプラインの詳細の表示、実行のトリガー、実行のモニタリングを許可できます。次のトピックでは、クロスアカウントパイプライン共有を設定する方法、共有リソースで使用できるさまざまなアクセス許可ポリシー、SageMaker AI への直接 API コールを通じて共有パイプラインエンティティにアクセスして操作する方法について説明します。

## クロスアカウントパイプライン共有を設定する
<a name="build-and-manage-xaccount-set-up"></a>

SageMaker AI は [AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) (AWS RAM) を使用して、パイプラインエンティティをアカウント間で安全に共有できるようにします。

### リソース共有を作成する
<a name="build-and-manage-xaccount-set-up-console"></a>

1. [AWS RAM コンソール](https://console.aws.amazon.com/ram/home)で **[リソース共有を作成]** を選択します。

1. リソース共有の詳細を指定する際は、Pipelines のリソースタイプを選択し、共有するパイプラインを 1 つまたは複数選択します。パイプラインを他のアカウントと共有すると、その実行もすべて暗黙的に共有されます。

1. アクセス許可をリソース共有に関連付けます。デフォルトの読み取り専用アクセス許可ポリシーまたは拡張パイプライン実行許可ポリシーのいずれかを選択します。詳細については、「[Pipelines リソースのアクセス許可ポリシー](#build-and-manage-xaccount-permissions)」を参照してください。
**注記**  
拡張パイプライン実行ポリシーを選択した場合、共有アカウントによって呼び出されるすべての開始、停止、再試行コマンドは、パイプラインを共有した AWS アカウントのリソースを使用することに注意してください。

1.  AWS アカウント IDs を使用して、共有リソースへのアクセスを許可するアカウントを指定します。

1. リソース共有の設定を確認し、**[リソース共有の作成]** を選択します。リソース共有とプリンシパルの関連付けが完了するまでに数分かかることがあります。

詳細については、「AWS Resource Access Manager ユーザーガイド」の「[Sharing your AWS resources](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)」を参照してください。**

### リソース共有の招待に対する返信を受け取る
<a name="build-and-manage-xaccount-set-up-responses"></a>

リソース共有とプリンシパルの関連付けが設定されると、指定された AWS アカウントにリソース共有への参加の招待が届きます。共有リソースにアクセスするには、 AWS アカウントが招待を受け入れる必要があります。

を通じてリソース共有の招待を受け入れる方法の詳細については AWS RAM、*AWS 「 Resource Access Manager* [ユーザーガイド」の「共有 AWS リソース](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html)の使用」を参照してください。

## Pipelines リソースのアクセス許可ポリシー
<a name="build-and-manage-xaccount-permissions"></a>

リソース共有を作成する際は、サポートされている 2 つのアクセス許可ポリシーから 1 つを選択して SageMaker AI パイプラインリソースタイプに関連付けます。どちらのポリシーも、選択したパイプラインとそのすべての実行へのアクセス許可を付与します。

### デフォルトの読み取り専用のアクセス許可
<a name="build-and-manage-xaccount-permissions-default"></a>

`AWSRAMDefaultPermissionSageMakerPipeline` ポリシーは以下の読み取り専用アクションを許可します。

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

### 拡張パイプライン実行アクセス許可
<a name="build-and-manage-xaccount-permissions-extended"></a>

`AWSRAMPermissionSageMakerPipelineAllowExecution` ポリシーには、デフォルトのポリシーの読み取り専用アクセス許可がすべて含まれており、共有アカウントがパイプラインの実行を開始、停止、再試行することも許可されます。

**注記**  
拡張パイプライン実行アクセス許可ポリシーを使用する場合は、 AWS リソースの使用に注意してください。このポリシーにより、共有アカウントはパイプライン実行の開始、停止、再試行が許可されます。共有パイプラインの実行に使用されるリソースはすべて所有者アカウントによって消費されます。

拡張パイプライン実行アクセス許可ポリシーでは、以下のアクションを許可します。

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

## 直接 API コールを通じて共有パイプラインエンティティにアクセスする
<a name="build-and-manage-xaccount-api-calls"></a>

クロスアカウントパイプライン共有を設定すると、パイプライン ARN で次の SageMaker API アクションを呼び出すことができます。

**注記**  
API コマンドは、リソース共有に関連付けられたアクセス許可に含まれている場合にのみ呼び出すことができます。`AWSRAMPermissionSageMakerPipelineAllowExecution` ポリシーを選択すると、開始、停止、再試行コマンドは、パイプラインを共有した AWS アカウントのリソースを使用します。
+ [DescribePipeline](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipeline.html)
+ [DescribePipelineDefinitionForExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipelineDefinitionForExecution.html)
+ [DescribePipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipelineExecution.html)
+ [ListPipelineExecutions](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineExecutions.html)
+ [ListPipelineExecutionSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineExecutionSteps.html)
+ [ListPipelineParametersForExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListPipelineParametersForExecution.html)
+ [StartPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartPipelineExecution.html)
+ [StopPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html)
+ [RetryPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RetryPipelineExecution.html)

# Pipeline のパラメータ
<a name="build-and-manage-parameters"></a>

パラメータを使用すると、パイプライン定義に変数を導入できます。定義したパラメータは、パイプライン定義全体で参照できます。パラメータはデフォルト値を持ちますが、パイプラインの実行の開始時にパラメータ値を指定することによってオーバーライドできます。デフォルト値は、パラメータタイプに一致するインスタンスでなければなりません。ステップ定義で使用されるすべてのパラメータは、パイプライン定義で定義する必要があります。このトピックでは、定義できるパラメータとその実装方法について説明します。

Amazon SageMaker Pipelines では、以下のパラメータタイプをサポートしています。
+  `ParameterString` — 文字列パラメータを表します。
+  `ParameterInteger` — 整数パラメータを表します。
+  `ParameterFloat` — float パラメータを表します。
+  `ParameterBoolean` — Python ブール型を表します。

パラメータは、次の形式になります。

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

パラメータの実装例は次のとおりです。

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

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

パラメータは、次の例に示すようにパイプラインの作成時に渡します。

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

次の例に示すように、デフォルト値とは異なるパラメータ値をパイプラインの実行に渡すこともできます。

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

パラメータは、`[ sagemaker.workflow.functions.Join](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.functions.Join)` などの SageMaker Python SDK 関数を使用して操作できます。パラメータの詳細については、「[SageMaker パイプラインのパラメータ](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#parameters)」を参照してください。

パイプラインパラメータの既知の制限については、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「*[Limitations - Parameterization](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#parameterization)*」を参照してください。

# Pipelines のステップ
<a name="build-and-manage-steps"></a>

Pipelines は、複数のステップで構成されています。これらのステップでは、プロパティを使用して、パイプラインが実行するアクションとステップ間の関係を定義します。次のページでは、ステップのタイプ、プロパティ、ステップ間の関係性について説明します。

**Topics**
+ [ステップを追加する](build-and-manage-steps-types.md)
+ [統合の追加](build-and-manage-steps-integration.md)
+ [ステップのプロパティ](#build-and-manage-properties)
+ [ステップの並列処理](#build-and-manage-parallelism)
+ [ステップ間のデータ依存関係](#build-and-manage-data-dependency)
+ [ステップ間のカスタム依存関係](#build-and-manage-custom-dependency)
+ [ステップでのカスタムイメージ](#build-and-manage-images)

# ステップを追加する
<a name="build-and-manage-steps-types"></a>

以下では、各ステップタイプの要件について説明し、ステップの実装例と、ステップを Pipelines に追加する方法について説明します。これらは、必要なリソースと入力を提供しないため、機能する実装ではありません。これらのステップの実装に関するチュートリアルについては、「[Pipelines のアクション](pipelines-build.md)」を参照してください。

**注記**  
`@step` デコレータを使用してコードを Pipeline ステップに変換することで、ローカルの機械学習コードからステップを作成することもできます。詳細については、「[@step デコレータ](#step-type-custom)」を参照してください。

Amazon SageMaker Pipelines では、以下のステップタイプをサポートしています。
+ [コードを実行する](#step-type-executecode)

  [Processing](#step-type-processing)
+ [トレーニング](#step-type-training)
+ [チューニング](#step-type-tuning)
+ [AutoML](#step-type-automl)
+ [`Model`](#step-type-model)
+ [`Create model`](#step-type-create-model)
+ [`Register model`](#step-type-register-model)
+ [`Deploy model (endpoint)`](#step-type-deploy-model-endpoint)
+ [変換](#step-type-transform)
+ [条件](#step-type-condition)
+ [`Callback`](#step-type-callback)
+ [Lambda](#step-type-lambda)
+ [`ClarifyCheck`](#step-type-clarify-check)
+ [`QualityCheck`](#step-type-quality-check)
+ [EMR](#step-type-emr)
+ [ノートブックジョブ](#step-type-notebook-job)
+ [失敗](#step-type-fail)

## @step デコレータ
<a name="step-type-custom"></a>

drag-and-dropパイプライン UI で高度な SageMaker AI 機能やその他の AWS サービスを活用するカスタム ML ジョブをオーケストレーションする場合は、 を使用します[コードステップを実行する](#step-type-executecode)。

`@step` デコレータを使用すると、ローカル機械学習コードからステップを作成できます。コードをテストしたら、`@step` デコレータで注釈を付けることで、関数を SageMaker AI パイプラインステップに変換できます。パイプラインは、`@step` デコレータ関数の出力をステップとしてパイプラインに渡すと、パイプラインを作成して実行します。単一または複数の `@step` デコレータ関数と従来の SageMaker AI パイプラインステップを含むマルチステップ DAG パイプラインを作成することもできます。`@step` デコレータを使用してステップを作成する方法の詳細については、「[@step デコレータを使用した Python コードのリフトアンドシフト](pipelines-step-decorator.md)」を参照してください。

## コードステップを実行する
<a name="step-type-executecode"></a>

Pipelines のドラッグアンドドロップ UI では、**[コード実行]** ステップを使用して、パイプラインステップとして独自のコードを実行できます。Python 関数、スクリプト、またはノートブックをアップロードして、パイプラインの一部として実行できます。高度な SageMaker AI 機能やその他の AWS サービスを活用するカスタム ML ジョブをオーケストレーションする場合は、このステップを使用する必要があります。

**[コード実行]** ステップは、Amazon SageMaker AI のデフォルトの Amazon S3 バケットにファイルをアップロードします。このバケットには、必要なクロスオリジンリソース共有 (CORS) アクセス許可が設定されていない場合があります。CORS アクセス許可の付与の詳細については、「[入力イメージデータの CORS 要件](sms-cors-update.md)」を参照してください。

**[コード実行]** ステップでは、Amazon SageMaker トレーニングジョブを使用してコードを実行します。IAM ロールに `sagemaker:DescribeTrainingJob` API と `sagemaker:CreateTrainingJob` API のアクセス許可があることを確認します。Amazon SageMaker AI に必要なすべてのアクセス許可とその設定方法については、「[Amazon SageMaker AI API アクセス許可: アクション、アクセス許可、リソースの参照](api-permissions-reference.md)」を参照してください。

Pipeline Designer を使用してパイプラインにコード実行ステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Amazon SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[コード実行]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[コード実行]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。

1. 単一のファイルをアップロードして実行することも、複数のアーティファクトを含む圧縮フォルダーをアップロードすることもできます。

1. 単一ファイルアップロードの場合、ノートブック、Python 関数、またはスクリプトのオプションパラメータを指定できます。

1. Python 関数を提供する場合は、`file.py:<function_name>` 形式でハンドラーを指定する必要があります。

1. 圧縮フォルダをアップロードする場合は、コードへの相対パスを指定する必要があります。必要に応じて、圧縮フォルダ内の `requirements.txt` ファイルまたは初期化スクリプトへのパスを指定できます。

1. キャンバスに、追加した **[コード実行]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[コード実行]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[コード実行]** ステップの直前のステップが含まれている場合は、**[コード実行]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。**[コード実行]** ステップからの出力は、Python 関数で参照できます。

## 処理ステップ
<a name="step-type-processing"></a>

処理ステップを使用すると、データ処理のための処理ジョブを作成できます。ジョブの処理の詳細については、「[データを処理して、モデルを評価する](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)」を参照してください。

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

Pipeline Designer を使用してパイプラインに処理ステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Amazon SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. 左側のサイドバーで、**[データ処理]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[データ処理]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep)」を参照してください。

1. キャンバスに、追加した **[データ処理]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[データ処理]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[コード実行]** ステップの直前のステップが含まれている場合は、**[コード実行]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

処理ステップには、プロセッサ、処理コードを定義する Python スクリプト、処理の出力、ジョブ引数が必要です。以下の例は、`ProcessingStep` 定義の作成方法を示しています。

```
from sagemaker.sklearn.processing import SKLearnProcessor

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

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

inputs = [
    ProcessingInput(source=<input_data>, destination="/opt/ml/processing/input"),
]

outputs = [
    ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
    ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"),
    ProcessingOutput(output_name="test", source="/opt/ml/processing/test")
]

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

**ランタイムパラメータを渡す**

次の例は、PySpark プロセッサから `ProcessingStep` にランタイムパラメータを渡す方法を示しています。

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

pipeline_session = PipelineSession()

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

step_args = pyspark_processor.run(
    inputs=[ProcessingInput(source=<input_data>, destination="/opt/ml/processing/input"),],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test")
    ],
    code="preprocess.py",
    arguments=None,
)


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

処理ステップの要件の詳細については、「[sagemaker.workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep)」のドキュメントを参照してください。詳細な例については、「[Orchestrate Jobs to Train and Evaluate Models with Amazon SageMaker Pipelines](https://github.com/aws/amazon-sagemaker-examples/blob/62de6a1fca74c7e70089d77e36f1356033adbe5f/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.ipynb)」サンプルノートブックを参照してください。「*Define a Processing Step for Feature Engineering*」セクションに詳細が記載されています。

------

## トレーニングステップ
<a name="step-type-training"></a>

トレーニングステップを使用すると、モデルをトレーニングするためのトレーニングジョブを作成できます。トレーニングジョブの詳細については、「[Amazon SageMaker AI でモデルをトレーニングする](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)」を参照してください。

トレーニングステップには、推定器と、トレーニングおよび検証データの入力が必要です。

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

Pipeline Designer を使用してパイプラインにトレーニングステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Amazon SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルをトレーニング]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルをトレーニング]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.TrainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep)」を参照してください。

1. キャンバスに、追加した **[モデルをトレーニング]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルをトレーニング]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルをトレーニング]** ステップの直前のステップが含まれている場合は、**[モデルをトレーニング]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

以下の例は、`TrainingStep` 定義の作成方法を示しています。トレーニングステップの要件の詳細については、「[sagemaker.workflow.steps.TrainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep)」のドキュメントを参照してください。

```
from sagemaker.workflow.pipeline_context import PipelineSession

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

from sagemaker.xgboost.estimator import XGBoost

pipeline_session = PipelineSession()

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

step_args = xgb_estimator.fit(
    inputs={
        "train": TrainingInput(
            s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv"
        ),
        "validation": TrainingInput(
            s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
                "validation"
            ].S3Output.S3Uri,
            content_type="text/csv"
        )
    }
)

step_train = TrainingStep(
    name="TrainAbaloneModel",
    step_args=step_args,
)
```

------

## チューニングステップ
<a name="step-type-tuning"></a>

チューニングステップを使用すると、ハイパーパラメータチューニングジョブを作成できます。このジョブは、ハイパーパラメータの最適化 (HPO) とも呼ばれます。ハイパーパラメータチューニングジョブは、複数のトレーニングジョブを実行し、各ジョブでモデルバージョンが生成されます。ハイパーパラメータのチューニングについては、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

チューニングジョブは、パイプラインの SageMaker AI 実験に関連付けられ、トレーニングジョブがトライアルとして作成されます。詳細については、「[Experiments の統合](pipelines-experiments.md)」を参照してください。

チューニングステップには、[HyperparameterTuner](https://sagemaker.readthedocs.io/en/stable/api/training/tuner.html) とトレーニングの入力が必要です。`HyperparameterTuner` の `warm_start_config` パラメータを指定すると、以前のチューニングジョブを再トレーニングできます。ハイパーパラメータのチューニングとウォームスタートの詳細については、「[ウォームスタートのハイパーパラメータ調整ジョブを実行する](automatic-model-tuning-warm-start.md)」を参照してください。

[sagemaker.workflow.steps.TuningStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep) クラスの [get\$1top\$1model\$1s3\$1uri](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep.get_top_model_s3_uri) メソッドを使用すると、パフォーマンスに優れたモデルバージョンのいずれかからモデルアーティファクトを取得できます。SageMaker AI パイプラインでのチューニングステップの使用方法を解説したノートブックについては、「[sagemaker-pipelines-tuning-step.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/tuning-step/sagemaker-pipelines-tuning-step.ipynb)」を参照してください。

**重要**  
チューニングステップは、Amazon SageMaker Python SDK v2.48.0 と Amazon SageMaker Studio v3.8.0 で導入されました。チューニングステップを使用する前に Studio Classic をアップデートする必要があります。アップデートしないと、パイプライン DAG は表示されません。Studio Classic を更新するには、「[Amazon SageMaker Studio Classic をシャットダウンして更新する](studio-tasks-update-studio.md)」を参照してください。

以下の例は、`TuningStep` 定義の作成方法を示しています。

```
from sagemaker.workflow.pipeline_context import PipelineSession

from sagemaker.tuner import HyperparameterTuner
from sagemaker.inputs import TrainingInput
from sagemaker.workflow.steps import TuningStep

tuner = HyperparameterTuner(..., sagemaker_session=PipelineSession())
    
step_tuning = TuningStep(
    name = "HPTuning",
    step_args = tuner.fit(inputs=TrainingInput(s3_data="s3://amzn-s3-demo-bucket/my-data"))
)
```

**最適なモデルバージョンを取得する**

以下の例は、`get_top_model_s3_uri` メソッドを使用して、チューニングジョブから最適なモデルバージョンを取得する方法を示しています。最大でパフォーマンス上位 50 件のバージョンが利用でき、[HyperParameterTuningJobObjective](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobObjective.html) に従ってランク付けされています。`top_k` 引数はバージョンのインデックスです。`top_k=0` がパフォーマンスが最も高いバージョン、`top_k=49` がパフォーマンスが最も低いバージョンになります。

```
best_model = Model(
    image_uri=image_uri,
    model_data=step_tuning.get_top_model_s3_uri(
        top_k=0,
        s3_bucket=sagemaker_session.default_bucket()
    ),
    ...
)
```

チューニングステップの要件の詳細については、「[sagemaker.workflow.steps.TuningStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TuningStep)」のドキュメントを参照してください。

## ファインチューニングステップ
<a name="step-type-fine-tuning"></a>

ファインチューニングでは、Amazon SageMaker JumpStart からの事前トレーニング済みの基盤モデルを新しいデータセットでトレーニングします。転移学習とも呼ばれるこのプロセスでは、より小さなデータセットを使用し、より短時間のトレーニングで正確なモデルを生成できます。モデルをファインチューニングする際は、デフォルトのデータセットを使用することも、独自のデータを選択することもできます。JumpStart から基盤モデルをファインチューニングする方法の詳細については、「[モデルを微調整する](jumpstart-fine-tune.md)」を参照してください。

ファインチューニングステップでは、Amazon SageMaker トレーニングジョブを使用してモデルをカスタマイズします。IAM ロールに、パイプラインでファインチューニングジョブを実行するための `sagemaker:DescribeTrainingJob` API と `sagemaker:CreateTrainingJob` API のアクセス許可があることを確認します。Amazon SageMaker AI に必要なアクセス許可とその設定方法については、「[Amazon SageMaker AI API アクセス許可: アクション、アクセス許可、リソースの参照](api-permissions-reference.md)」を参照してください。

ドラッグアンドドロップエディタを使用してパイプラインに **[モデルを微調整]** ステップを追加するには、以下の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルを微調整]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルを微調整]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。

1. キャンバスに、追加した **[モデルを微調整]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルを微調整]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルを微調整]** ステップの直前のステップが含まれている場合は、**[モデルを微調整]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

## AutoML ステップ
<a name="step-type-automl"></a>

[AutoML](https://sagemaker.readthedocs.io/en/stable/api/training/automl.html) API を使用して AutoML ジョブを作成し、モデルを自動的にトレーニングします。AutoML ジョブの詳細については、「[Automate model development with Amazon SageMaker Autopilot](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-automate-model-development.html)」を参照してください。

**注記**  
現在、AutoML ステップは[アンサンブルトレーニングモード](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html)のみをサポートしています。

以下の例は、`AutoMLStep` を使用した定義の作成方法を示しています。

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.workflow.automl_step import AutoMLStep

pipeline_session = PipelineSession()

auto_ml = AutoML(...,
    role="<role>",
    target_attribute_name="my_target_attribute_name",
    mode="ENSEMBLING",
    sagemaker_session=pipeline_session) 

input_training = AutoMLInput(
    inputs="s3://amzn-s3-demo-bucket/my-training-data",
    target_attribute_name="my_target_attribute_name",
    channel_type="training",
)
input_validation = AutoMLInput(
    inputs="s3://amzn-s3-demo-bucket/my-validation-data",
    target_attribute_name="my_target_attribute_name",
    channel_type="validation",
)

step_args = auto_ml.fit(
    inputs=[input_training, input_validation]
)

step_automl = AutoMLStep(
    name="AutoMLStep",
    step_args=step_args,
)
```

**最適なモデルバージョンを取得する**

AutoML ステップは、複数のモデル候補を自動的にトレーニングします。以下のとおり `get_best_auto_ml_model` メソッドを使用して、AutoML ジョブから最適な目標メトリクスを持つモデルを取得します。モデルアーティファクトにアクセスするには、IAM `role` を使用する必要もあります。

```
best_model = step_automl.get_best_auto_ml_model(role=<role>)
```

詳細については、SageMaker Python SDK の「[AutoML](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.automl_step.AutoMLStep)」のステップを参照してください。

## モデルステップ
<a name="step-type-model"></a>

SageMaker AI モデルを作成または登録するには、`ModelStep` を使用します。`ModelStep` 要件の詳細については、「[sagemaker.workflow.model\$1step.ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.model_step.ModelStep)」のドキュメントを参照してください。

### モデルを作成する
<a name="step-type-model-create"></a>

SageMaker AI モデルを作成するには、`ModelStep` を使用できます。`ModelStep` には、モデルアーティファクトと、モデルの作成に使用する必要がある SageMaker AI インスタンスタイプに関する情報が必要です。SageMaker AI モデルの詳細については、「[Amazon SageMaker AI でモデルをトレーニングする](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)」を参照してください。

以下の例は、`ModelStep` 定義の作成方法を示しています。

```
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.model import Model
from sagemaker.workflow.model_step import ModelStep

step_train = TrainingStep(...)
model = Model(
    image_uri=pytorch_estimator.training_image_uri(),
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    sagemaker_session=PipelineSession(),
    role=role,
)

step_model_create = ModelStep(
   name="MyModelCreationStep",
   step_args=model.create(instance_type="ml.m5.xlarge"),
)
```

### モデルの登録
<a name="step-type-model-register"></a>

`ModelStep` を使用して `sagemaker.model.Model` または `sagemaker.pipeline.PipelineModel` を Amazon SageMaker モデルレジストリに登録できます。`PipelineModel` は推論パイプラインを表します。これは、推論要求を処理する連続したコンテナで構成されるモデルです。モデルの登録方法の詳細については、「[Model Registry を使用したモデル登録デプロイ](model-registry.md)」を参照してください。

次の例は、`PipelineModel` を登録する `ModelStep` の作成方法を示しています。

```
import time

from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.sklearn import SKLearnModel
from sagemaker.xgboost import XGBoostModel

pipeline_session = PipelineSession()

code_location = 's3://{0}/{1}/code'.format(bucket_name, prefix)

sklearn_model = SKLearnModel(
   model_data=processing_step.properties.ProcessingOutputConfig.Outputs['model'].S3Output.S3Uri,
   entry_point='inference.py',
   source_dir='sklearn_source_dir/',
   code_location=code_location,
   framework_version='1.0-1',
   role=role,
   sagemaker_session=pipeline_session,
   py_version='py3'
)

xgboost_model = XGBoostModel(
   model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts,
   entry_point='inference.py',
   source_dir='xgboost_source_dir/',
   code_location=code_location,
   framework_version='0.90-2',
   py_version='py3',
   sagemaker_session=pipeline_session,
   role=role
)

from sagemaker.workflow.model_step import ModelStep
from sagemaker import PipelineModel

pipeline_model = PipelineModel(
   models=[sklearn_model, xgboost_model],
   role=role,sagemaker_session=pipeline_session,
)

register_model_step_args = pipeline_model.register(
    content_types=["application/json"],
   response_types=["application/json"],
   inference_instances=["ml.t2.medium", "ml.m5.xlarge"],
   transform_instances=["ml.m5.xlarge"],
   model_package_group_name='sipgroup',
)

step_model_registration = ModelStep(
   name="AbaloneRegisterModel",
   step_args=register_model_step_args,
)
```

## モデルの作成ステップ
<a name="step-type-create-model"></a>

モデルの作成ステップを使用すると、SageMaker AI モデルを作成できます。SageMaker AI モデルの詳細については、「[Amazon SageMaker でモデルをトレーニングする](how-it-works-training.md)」を参照してください。

モデル作成ステップには、モデルアーティファクトと、モデルの作成に使用する必要がある SageMaker AI インスタンスタイプに関する情報が必要です。次の例は、モデルステップ定義を作成する方法を説明しています。モデルの作成ステップの要件の詳細については、「[sagemaker.workflow.steps.CreateModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.CreateModelStep)」のドキュメントを参照してください。

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

パイプラインにモデルの作成ステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルの作成]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルの作成]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.CreateModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.CreateModelStep)」を参照してください。

1. キャンバスに、追加した **[モデルの作成]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルの作成]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルの作成]** ステップの直前のステップが含まれている場合は、**[モデルの作成]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

**重要**  
SageMaker Python AI SDK v2.90.0 以降では、[モデルステップ](#step-type-model) を使用してモデルを作成することをお勧めします。`CreateModelStep` は SageMaker Python SDK の以前のバージョンでも引き続き動作しますが、アクティブなサポートは終了しています。

```
from sagemaker.workflow.steps import CreateModelStep

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

------

## モデルステップの登録
<a name="step-type-register-model"></a>

モデルの登録ステップでは、SageMaker Model Registry にモデルを登録します。

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

Pipeline Designer を使用してパイプラインからモデルを登録するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Amazon SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルの登録]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルの登録]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.step\$1collections.RegisterModel](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_collections.RegisterModel)」を参照してください。

1. キャンバスに、追加した **[モデルの登録]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルの登録]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルの登録]** ステップの直前のステップが含まれている場合は、**[モデルの登録]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

**重要**  
SageMaker Python AI SDK v2.90.0 以降では、[モデルステップ](#step-type-model) を使用してモデルを登録することをお勧めします。`RegisterModel` は SageMaker Python SDK の以前のバージョンでも引き続き動作しますが、アクティブなサポートは終了しています。

`RegisterModel` ステップは、[sagemaker.model.Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html) または [sagemaker.pipeline.PipelineModel](https://sagemaker.readthedocs.io/en/stable/api/inference/pipeline.html#pipelinemodel) を Amazon SageMaker モデルレジストリに登録するために使用します。`PipelineModel` は推論パイプラインを表します。これは、推論要求を処理する連続したコンテナで構成されるモデルです。

モデルの登録方法の詳細については、「[Model Registry を使用したモデル登録デプロイ](model-registry.md)」を参照してください。`RegisterModel` ステップの要件の詳細については、「[sagemaker.workflow.step\$1collections.RegisterModel](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_collections.RegisterModel)」のドキュメントを参照してください。

次の例は、`PipelineModel` を登録する `RegisterModel` ステップの作成方法を示しています。

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

code_location = 's3://{0}/{1}/code'.format(bucket_name, prefix)

sklearn_model = SKLearnModel(model_data=processing_step.properties.ProcessingOutputConfig.Outputs['model'].S3Output.S3Uri,
 entry_point='inference.py',
 source_dir='sklearn_source_dir/',
 code_location=code_location,
 framework_version='1.0-1',
 role=role,
 sagemaker_session=sagemaker_session,
 py_version='py3')

xgboost_model = XGBoostModel(model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts,
 entry_point='inference.py',
 source_dir='xgboost_source_dir/',
 code_location=code_location,
 framework_version='0.90-2',
 py_version='py3',
 sagemaker_session=sagemaker_session,
 role=role)

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

step_register = RegisterModel(
 name="AbaloneRegisterModel",
 model=pipeline_model,
 content_types=["application/json"],
 response_types=["application/json"],
 inference_instances=["ml.t2.medium", "ml.m5.xlarge"],
 transform_instances=["ml.m5.xlarge"],
 model_package_group_name='sipgroup',
)
```

`model` が指定されていない場合、モデル登録ステップには、以下の例に示すような推定器が必要です。

```
from sagemaker.workflow.step_collections import RegisterModel

step_register = RegisterModel(
    name="AbaloneRegisterModel",
    estimator=xgb_train,
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    content_types=["text/csv"],
    response_types=["text/csv"],
    inference_instances=["ml.t2.medium", "ml.m5.xlarge"],
    transform_instances=["ml.m5.xlarge"],
    model_package_group_name=model_package_group_name,
    approval_status=model_approval_status,
    model_metrics=model_metrics
)
```

------

## モデルのデプロイ (エンドポイント) ステップ
<a name="step-type-deploy-model-endpoint"></a>

Pipeline Designer で、モデルのデプロイ (エンドポイント) ステップを使用して、モデルをエンドポイントにデプロイします。新しいエンドポイントを作成することも、既存のエンドポイントを使用することもできます。リアルタイム推論は、リアルタイム、インタラクティブ、低レイテンシーの要件がある推論ワークロードに最適です。SageMaker AI Hosting サービスにモデルをデプロイすると、推論に使用できるリアルタイムエンドポイントを取得できます。このようなエンドポイントはフルマネージドであり、自動スケーリングをサポートしています。SageMaker AI でのリアルタイム推論の詳細については、「[リアルタイム推論](realtime-endpoints.md)」を参照してください。

デプロイモデルステップをパイプラインに追加する前に、IAM ロールに以下のアクセス許可が付与されていることを確認してください。
+ `sagemaker:CreateModel`
+ `sagemaker:CreateEndpointConfig`
+ `sagemaker:CreateEndpoint`
+ `sagemaker:UpdateEndpoint`
+ `sagemaker:DescribeModel`
+ `sagemaker:DescribeEndpointConfig`
+ `sagemaker:DescribeEndpoint`

SageMaker AI に必要なすべてのアクセス許可とその設定方法については、「[Amazon SageMaker AI API アクセス許可: アクション、アクセス許可、リソースの参照](api-permissions-reference.md)」を参照してください。

ドラッグアンドドロップエディタを使用して Pipeline に [モデルのデプロイ] ステップを追加するには、以下の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルの登録 (エンドポイント)]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルのデプロイ (エンドポイント)]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。

1. キャンバスに、追加した **[モデルのデプロイ (エンドポイント)]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルのデプロイ (エンドポイント)]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルのデプロイ (エンドポイント)]** ステップの直前のステップが含まれている場合は、**[モデルのデプロイ (エンドポイント)]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

## 変換ステップ
<a name="step-type-transform"></a>

変換ステップは、バッチ変換でデータセット全体に対して推論を実行するために使用します。バッチ変換の詳細については、「[推論パイプラインを使用したバッチ変換](inference-pipeline-batch.md)」を参照してください。

変換ステップには、変換器と、バッチ変換を実行する対象のデータが必要です。次の例は、変換ステップの定義の作成方法を説明しています。変換ステップの要件の詳細については、「[sagemaker.workflow.steps.TransformStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TransformStep)」のドキュメントを参照してください。

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

ドラッグアンドドロップエディタを使用して Pipeline に [バッチ変換] ステップを追加するには、以下の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[モデルのデプロイ (エンドポイント)]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルのデプロイ (バッチ変換)]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.TransformStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TransformStep)」を参照してください。

1. キャンバスに、追加した **[モデルのデプロイ (バッチ変換)]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[モデルのデプロイ (バッチ変換)]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[モデルのデプロイ (バッチ変換)]** ステップの直前のステップが含まれている場合は、**[モデルのデプロイ (バッチ変換)]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

```
from sagemaker.workflow.pipeline_context import PipelineSession

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

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

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

------

## 条件ステップ
<a name="step-type-condition"></a>

条件ステップを使用すると、ステップのプロパティの条件を評価し、パイプラインで次に実行するアクションを評価できます。

条件ステップには、以下が必要です。
+ 条件のリスト
+ 条件が `true` と評価された場合に実行するステップのリスト
+ 条件が `false` と評価された場合に実行するステップのリスト

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

Pipeline Designer を使用してパイプラインに条件ステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Amazon SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[条件]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[条件]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.condition\$1step.ConditionStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.condition_step.ConditionStep)」を参照してください。

1. キャンバスに、追加した **[条件]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[条件]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[条件]** ステップの直前のステップが含まれている場合は、**[条件]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

 以下の例は、`ConditionStep` 定義の作成方法を示しています。

**制限事項**
+ Pipelines は、ネストされた条件ステップの使用をサポートしていません。条件ステップを別の条件ステップの入力として渡すことはできません。
+ 条件ステップの両方のブランチで同じステップを使用することはできません。両方のブランチに同じステップ機能が必要な場合は、ステップを複製して別の名前を付けます。

```
from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo
from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.functions import JsonGet

cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name=step_eval.name,
        property_file=evaluation_report,
        json_path="regression_metrics.mse.value"
    ),
    right=6.0
)

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

`ConditionStep` 要件の詳細については、「[sagemaker.workflow.condition\$1step.ConditionStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#conditionstep)」の API リファレンスを参照してください。サポートされる条件の詳細については、「SageMaker AI Python SDK ドキュメント」の「*[Amazon SageMaker Pipelines - 条件](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#conditions)*」を参照してください。

------

## コールバックステップ
<a name="step-type-callback"></a>

`Callback` ステップを使用して、Amazon SageMaker Pipelines によって直接提供されていないプロセスと AWS サービスをワークフローに追加します。`Callback` ステップを実行すると、次の手順が実行されます。
+ Pipelines は、ユーザー指定の Amazon Simple Queue Service (Amazon SQS) キューにメッセージを送信します。このようなメッセージには、Pipelines が生成したトークンと、ユーザーが指定した入力パラメータのリストが含まれます。メッセージの送信後、Pipelines はユーザーからの応答を待ちます。
+ ユーザーは Amazon SQS キューからメッセージを取得し、カスタムプロセスを開始します。
+ プロセスが終了すると、ユーザーは次のいずれかの API を呼び出し、Pipelines が生成した以下のトークンを送信します。
  +  [SendPipelineExecutionStepSuccess](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_SendPipelineExecutionStepSuccess.html) - 出力パラメータのリストと共に送信
  +  [SendPipelineExecutionStepFailure](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_SendPipelineExecutionStepFailure.html) - 失敗の理由と共に送信
+ API コールにより、Pipelines はパイプラインプロセスを続行するか、プロセスを失敗させます。

`Callback` ステップの要件の詳細については、「[sagemaker.workflow.callback\$1step.CallbackStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.callback_step.CallbackStep)」のドキュメントを参照してください。詳細なソリューションについては、「[SageMaker Pipelines を拡張して、コールバックステップを使用してカスタムステップを含める](https://aws.amazon.com/blogs/machine-learning/extend-amazon-sagemaker-pipelines-to-include-custom-steps-using-callback-steps/)」を参照してください。

**重要**  
`Callback` ステップは、Amazon SageMaker Python SDK v2.45.0 と Amazon SageMaker Studio v3.6.2 で導入されました。`Callback` ステップを使用する前に Studio Classic をアップデートする必要があります。アップデートしないと、パイプライン DAG は表示されません。Studio Classic を更新するには、「[Amazon SageMaker Studio Classic をシャットダウンして更新する](studio-tasks-update-studio.md)」を参照してください。

次のサンプルは、上記のプロシージャの実装の 1 例を説明しています。

```
from sagemaker.workflow.callback_step import CallbackStep

step_callback = CallbackStep(
    name="MyCallbackStep",
    sqs_queue_url="https://sqs.us-east-2.amazonaws.com/012345678901/MyCallbackQueue",
    inputs={...},
    outputs=[...]
)

callback_handler_code = '
    import boto3
    import json

    def handler(event, context):
        sagemaker_client=boto3.client("sagemaker")

        for record in event["Records"]:
            payload=json.loads(record["body"])
            token=payload["token"]

            # Custom processing

            # Call SageMaker AI to complete the step
            sagemaker_client.send_pipeline_execution_step_success(
                CallbackToken=token,
                OutputParameters={...}
            )
'
```

**注記**  
`CallbackStep` の出力パラメータはネストしないでください。例えば、ネストされたディクショナリを出力パラメータとして使用すると、そのディクショナリは単一の文字列として扱われます (例: `{"output1": "{\"nested_output1\":\"my-output\"}"}` など)。ネストされた値を指定した場合、特定の出力パラメータを参照しようとすると、SageMaker AI は再試行不可能なクライアントエラーを返します。

**動作を停止する**

`Callback` ステップの実行中は、パイプラインプロセスが停止しません。

実行中の `Callback` ステップがあるパイプラインプロセスで [StopPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html) を呼び出すと、Pipelines は Amazon SQS メッセージを SQS キューに送信します。SQS メッセージの本文には、`Stopping` に設定された **[Status]** (ステータス) フィールドが含まれます。SQS メッセージの本文の例は次のとおりです。

```
{
  "token": "26vcYbeWsZ",
  "pipelineExecutionArn": "arn:aws:sagemaker:us-east-2:012345678901:pipeline/callback-pipeline/execution/7pinimwddh3a",
  "arguments": {
    "number": 5,
    "stringArg": "some-arg",
    "inputData": "s3://sagemaker-us-west-2-012345678901/abalone/abalone-dataset.csv"
  },
  "status": "Stopping"
}
```

メッセージを受け取ったら、必要なアクション (リソースのクリーンアップなど) を実行するロジックを Amazon SQS メッセージコンシューマーに追加する必要があります。次に、`SendPipelineExecutionStepSuccess` または `SendPipelineExecutionStepFailure` への呼び出しを追加します。

Pipelines は、ここのような呼び出しのいずれかを受け取った場合にのみ、パイプラインプロセスを停止します。

## Lambda ステップ
<a name="step-type-lambda"></a>

Lambda ステップを使用して AWS Lambda 関数を実行します。既存の Lambda 関数を実行できるほか、SageMaker AIで新しい Lambda 関数を作成して実行することもできます。既存の Lambda 関数を使用する場合は、SageMaker AI パイプライン AWS リージョン と同じ にある必要があります。SageMaker AI パイプラインでの Lambda ステップの使用方法を解説したノートブックについては、「[sagemaker-pipelines-lambda-step.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/lambda-step/sagemaker-pipelines-lambda-step.ipynb)」を参照してください。

**重要**  
Lambda ステップは、Amazon SageMaker Python SDK v2.51.0 と Amazon SageMaker Studio v3.9.1 で導入されました。Lambda ステップを使用する前に Studio Classic をアップデートする必要があります。アップデートしないと、パイプライン DAG は表示されません。Studio Classic を更新するには、「[Amazon SageMaker Studio Classic をシャットダウンして更新する](studio-tasks-update-studio.md)」を参照してください。

SageMaker AI は、Lambda 関数を作成、更新、呼び出し、削除するための [sagemaker.lambda\$1helper.Lambda](https://sagemaker.readthedocs.io/en/stable/api/utility/lambda_helper.html) クラスを提供しています。`Lambda` には以下の署名があります。

```
Lambda(
    function_arn,       # Only required argument to invoke an existing Lambda function

    # The following arguments are required to create a Lambda function:
    function_name,
    execution_role_arn,
    zipped_code_dir,    # Specify either zipped_code_dir and s3_bucket, OR script
    s3_bucket,          # S3 bucket where zipped_code_dir is uploaded
    script,             # Path of Lambda function script
    handler,            # Lambda handler specified as "lambda_script.lambda_handler"
    timeout,            # Maximum time the Lambda function can run before the lambda step fails
    ...
)
```

[sagemaker.workflow.lambda\$1step.LambdaStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.lambda_step.LambdaStep) クラスには `Lambda` タイプの引数 `lambda_func` があります。既存の Lambda 関数は、関数の Amazon リソースネーム (ARN) を `function_arn` に指定するだけで呼び出すことができます。`function_arn` の値を指定しない場合は、`handler` と以下のいずれかを指定する必要があります。
+ `zipped_code_dir` - 圧縮された Lambda 関数のパス

  `s3_bucket` - `zipped_code_dir` がアップロードされる Amazon S3 バケット
+ `script` - Lambda 関数スクリプトファイルのパス

以下の例は、既存の Lambda 関数を呼び出す `Lambda` ステップ定義の作成方法を示しています。

```
from sagemaker.workflow.lambda_step import LambdaStep
from sagemaker.lambda_helper import Lambda

step_lambda = LambdaStep(
    name="ProcessingLambda",
    lambda_func=Lambda(
        function_arn="arn:aws:lambda:us-west-2:012345678910:function:split-dataset-lambda"
    ),
    inputs={
        s3_bucket = s3_bucket,
        data_file = data_file
    },
    outputs=[
        "train_file", "test_file"
    ]
)
```

以下の例は、Lambda 関数スクリプトを使用して Lambda 関数を作成して呼び出す `Lambda` ステップ定義の作成方法を示しています。

```
from sagemaker.workflow.lambda_step import LambdaStep
from sagemaker.lambda_helper import Lambda

step_lambda = LambdaStep(
    name="ProcessingLambda",
    lambda_func=Lambda(
      function_name="split-dataset-lambda",
      execution_role_arn=execution_role_arn,
      script="lambda_script.py",
      handler="lambda_script.lambda_handler",
      ...
    ),
    inputs={
        s3_bucket = s3_bucket,
        data_file = data_file
    },
    outputs=[
        "train_file", "test_file"
    ]
)
```

**入力と出力**

`Lambda` 関数に入力または出力がある場合、これらも `Lambda` ステップで定義する必要があります。

**注記**  
入力パラメータと出力パラメータはネストしないでください。例えば、ネストされたディクショナリを出力パラメータとして使用すると、そのディクショナリは単一の文字列として扱われます (例: `{"output1": "{\"nested_output1\":\"my-output\"}"}`)。ネストされた値を指定して後で参照しようとすると、再試行されないクライアントエラーが発生します。

`Lambda` ステップを定義する場合、`inputs` はキーと値のペアの辞書でなければなりません。`inputs` 辞書の各値は、プリミティブ型 (文字列、整数、または浮動小数点) であることが必要です。ネストされたオブジェクトはサポートされません。定義しない場合、`inputs` 値はデフォルトで `None` になります。

`outputs` 値は、キーのリストでなければなりません。これらのキーは、`Lambda` 関数の出力に定義されている辞書を参照します。`inputs` と同様に、これらのキーはプリミティブ型でなければならず、ネストされたオブジェクトはサポートされません。

**タイムアウトと停止動作**

`Lambda` クラスには、Lambda 関数の実行が可能な最大時間を指定する `timeout` 引数があります。デフォルト値は 120 秒で、最大値は 10 分です。Lambda 関数の実行中にタイムアウトに達すると、Lambda ステップは失敗しますが、Lambda 関数は引き続き実行されます。

Lambda ステップによって呼び出された Lambda 関数を停止できないため、Lambda ステップの実行中はパイプラインプロセスを停止できません。Lambda 関数の実行中にプロセスを停止すると、パイプラインは関数が終了するか、タイムアウトに達するまで待機します。どちらか先に発生したほうのタイミングとなります。その後、プロセスは停止します。Lambda 関数が終了した場合、パイプラインプロセスのステータスは `Stopped` になります。タイムアウトに達した場合、パイプラインプロセスのステータスは `Failed` になります。

## ClarifyCheck ステップ
<a name="step-type-clarify-check"></a>

`ClarifyCheck` ステップを使用すると、バイアス分析とモデルの説明可能性に関するベースラインドリフトチェックを前のベースラインに対して実行できます。次に、`model.register()` メソッドを使用して[ベースラインを生成して登録し](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html#pipelines-quality-clarify-baseline-calculations)、`[step\$1args](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#model-step)` を使用してそのメソッドの出力を [モデルステップ](#step-type-model) に渡すことができます。このようなドリフトチェック用のベースラインは、モデルエンドポイントのために Amazon SageMaker Model Monitor を使用できます。このため、[ベースライン](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-create-baseline.html)の提案を別途に行う必要はありません。

`ClarifyCheck` ステップでは、ドリフトチェック用のベースラインをモデルレジストリからプルすることもできます。`ClarifyCheck` ステップでは、SageMaker Clarify の事前構築済みコンテナを使用します。このコンテナは、制約の提案や特定のベースラインに対する制約の検証など、さまざまなモデルモニタリング機能を提供します。詳細については、「[構築済みの SageMaker Clarify コンテナ](clarify-processing-job-configure-container.md)」を参照してください。

### ClarifyCheck ステップを設定する
<a name="configuring-step-type-clarify"></a>

パイプラインで使用するたびに以下のチェックタイプの 1 つのみを実行するように `ClarifyCheck` ステップを設定できます。
+ データバイアスのチェック
+ モデルバイアスのチェック
+ モデルの説明可能性のチェック

実行するには、`clarify_check_config` パラメータに以下のいずれかのチェックタイプ値を指定します。
+ `DataBiasCheckConfig`
+ `ModelBiasCheckConfig`
+ `ModelExplainabilityCheckConfig`

`ClarifyCheck` ステップは、SageMaker AI Clarify の事前構築済みコンテナを実行する処理ジョブを起動し、[チェックと処理ジョブ](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-configure-processing-jobs.html)専用の設定が必要となります。`ClarifyCheckConfig` と `CheckJobConfig` は、このような設定のヘルパー関数です。このようなヘルパー関数は、モデルバイアス、データバイアス、またはモデルの説明可能性をチェックするために SageMaker Clarify 処理ジョブが計算する方法に合わせて調整されます。詳細については、「[バイアス分析と説明可能性のための SageMaker Clarify 処理ジョブを実行する](clarify-processing-job-run.md)」を参照してください。

### ドリフトチェックのステップ動作を制御する
<a name="controlling-step-type-clarify"></a>

`ClarifyCheck` ステップには、その動作を制御するために、以下の 2 つのブールフラグが必要です。
+ `skip_check`: このパラメータでは、前のベースラインに対するドリフトチェックをスキップするかどうかを指定します。`False` に設定されている場合、設定されたチェックタイプの前のベースラインが使用可能である必要があります。
+ `register_new_baseline`: このパラメータでは、新しく計算されたベースラインにステッププロパティ `BaselineUsedForDriftCheckConstraints` を通じてアクセスできるかどうかを指定します。`False` に設定されている場合、設定されたチェックタイプの前のベースラインも使用可能である必要があります。このベースラインには `BaselineUsedForDriftCheckConstraints` プロパティを通じてアクセスできます。

詳細については、「[Amazon SageMaker Pipelines の ClarifyCheck と QualityCheck のステップを使用したベースライン計算、ドリフト検出、ライフサイクル](pipelines-quality-clarify-baseline-lifecycle.md)」を参照してください。

### ベースラインを操作する
<a name="step-type-clarify-working-with-baselines"></a>

必要に応じて、既存のベースラインを検索するために、`model_package_group_name` を指定することもできます。次に、`ClarifyCheck`ステップは、モデルパッケージグループの最新の承認済みモデルパッケージ上の `DriftCheckBaselines` をプルします。

`supplied_baseline_constraints` パラメータを通じて前のベースラインを指定することもできます。`model_package_group_name` と `supplied_baseline_constraints` の両方を指定すると、`ClarifyCheck` ステップでは `supplied_baseline_constraints` パラメータで指定されたベースラインが使用されます。

`ClarifyCheck` ステップを使用する際の要件の詳細については、「*Amazon SageMaker AI SageMaker SDK for Python*」の「[sagemaker.workflow.steps.ClarifyCheckStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.clarify_check_step.ClarifyCheckStep)」を参照してください。Pipelines での `ClarifyCheck` ステップの使用方法を解説した Amazon SageMaker Studio Classic ノートブックについては、「[sagemaker-pipeline-model-monitor-clarify-steps.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/model-monitor-clarify-pipelines/sagemaker-pipeline-model-monitor-clarify-steps.ipynb)」を参照してください。

**Example データバイアスチェック用の `ClarifyCheck` ステップを作成する**  

```
from sagemaker.workflow.check_job_config import CheckJobConfig
from sagemaker.workflow.clarify_check_step import DataBiasCheckConfig, ClarifyCheckStep
from sagemaker.workflow.execution_variables import ExecutionVariables

check_job_config = CheckJobConfig(
    role=role,
    instance_count=1,
    instance_type="ml.c5.xlarge",
    volume_size_in_gb=120,
    sagemaker_session=sagemaker_session,
)

data_bias_data_config = DataConfig(
    s3_data_input_path=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri,
    s3_output_path=Join(on='/', values=['s3:/', your_bucket, base_job_prefix, ExecutionVariables.PIPELINE_EXECUTION_ID, 'databiascheckstep']),
    label=0,
    dataset_type="text/csv",
    s3_analysis_config_output_path=data_bias_analysis_cfg_output_path,
)

data_bias_config = BiasConfig(
    label_values_or_threshold=[15.0], facet_name=[8], facet_values_or_threshold=[[0.5]]  
)

data_bias_check_config = DataBiasCheckConfig(
    data_config=data_bias_data_config,
    data_bias_config=data_bias_config,
)h

data_bias_check_step = ClarifyCheckStep(
    name="DataBiasCheckStep",
    clarify_check_config=data_bias_check_config,
    check_job_config=check_job_config,
    skip_check=False,
    register_new_baseline=False
   supplied_baseline_constraints="s3://sagemaker-us-west-2-111122223333/baseline/analysis.json",
    model_package_group_name="MyModelPackageGroup"
)
```

## QualityCheck ステップ
<a name="step-type-quality-check"></a>

`QualityCheck` ステップを使用すると、パイプライン内のデータ品質とモデルの品質についての[ベースラインの提案](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-create-baseline.html)と以前のベースラインに対するベースラインドリフトチェックを実行できます。次に、`model.register()` メソッドを使用して[ベースラインを生成して登録](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html#pipelines-quality-clarify-baseline-calculations)し、`[step\$1args](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#model-step)` を使用してそのメソッドの出力を [モデルステップ](#step-type-model) に渡すことができます。

Model Monitor では、これらのドリフトチェック用のベースラインをモデルエンドポイントで使用できるため、ベースラインを別途提案する必要がなくなります。`QualityCheck` ステップでは、ドリフトチェック用のベースラインをモデルレジストリからプルすることもできます。`QualityCheck` ステップでは、Amazon SageMaker AI Model Monitor の事前構築済みコンテナを活用します。このコンテナは、制約の提案、統計の生成、ベースラインに対する制約の検証など、さまざまなモデルモニタリング機能を提供します。詳細については、「[Amazon SageMaker Model Monitor のビルド済みコンテナ](model-monitor-pre-built-container.md)」を参照してください。

### QualityCheck ステップを設定する
<a name="configuring-step-type-quality"></a>

`QualityCheck` ステップは、パイプラインで使用する都度、以下のチェックタイプのいずれか 1 つのみを実行するように設定できます。
+ データの品質チェック
+ モデルの品質チェック

実行するには、`quality_check_config` パラメータに次のいずれかのチェックタイプ値を指定します。
+ `DataQualityCheckConfig`
+ `ModelQualityCheckConfig`

`QualityCheck` ステップでは、Model Monitor の構築済みコンテナを実行し、チェックと処理ジョブのための専用の設定を必要とする処理ジョブが起動します。`QualityCheckConfig` と `CheckJobConfig`は、これらの設定のヘルパー関数です。これらのヘルパー関数は、Model Monitor がモデルの品質またはデータの品質をモニタリングするためのベースラインの作成方法に合わせて調整されます。Model Monitor のベースラインの提案については、「[ベースラインの作成](model-monitor-create-baseline.md)」と「[モデルの質ベースラインを作成する](model-monitor-model-quality-baseline.md)」を参照してください。

### ドリフトチェックのステップ動作を制御する
<a name="controlling-step-type-quality"></a>

`QualityCheck` ステップには、その動作を制御するために、以下の 2 つのブールフラグが必要です。
+ `skip_check`: このパラメータでは、前のベースラインに対するドリフトチェックをスキップするかどうかを指定します。`False` に設定されている場合、設定されたチェックタイプの前のベースラインが使用可能である必要があります。
+ `register_new_baseline`: このパラメータでは、新しく計算されたベースラインにステッププロパティ `BaselineUsedForDriftCheckConstraints` と `BaselineUsedForDriftCheckStatistics` を通じてアクセスできるかどうかを指定します。`False` に設定されている場合、設定されたチェックタイプの前のベースラインも使用可能である必要があります。これらには、`BaselineUsedForDriftCheckConstraints` と `BaselineUsedForDriftCheckStatistics` のプロパティを通じてアクセスできます。

詳細については、「[Amazon SageMaker Pipelines の ClarifyCheck と QualityCheck のステップを使用したベースライン計算、ドリフト検出、ライフサイクル](pipelines-quality-clarify-baseline-lifecycle.md)」を参照してください。

### ベースラインを操作する
<a name="step-type-quality-working-with-baselines"></a>

`supplied_baseline_statistics` パラメータと `supplied_baseline_constraints` パラメータを使用して、以前のベースラインを直接指定できます。`model_package_group_name` を指定すると、`QualityCheck` ステップは、モデルパッケージグループ内の最新の承認済みモデルパッケージの `DriftCheckBaselines` を取得することもできます。

以下を指定すると、`QualityCheck` ステップは、`QualityCheck` ステップのチェック タイプで `supplied_baseline_constraints` および `supplied_baseline_statistics` によって指定されたベースラインが使用されます。
+ `model_package_group_name`
+ `supplied_baseline_constraints`
+ `supplied_baseline_statistics`

`QualityCheck` ステップを使用する際の要件の詳細については、「*Amazon SageMaker AI SageMaker SDK for Python*」の「[sagemaker.workflow.steps.QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.quality_check_step.QualityCheckStep)」を参照してください。Pipelines での `QualityCheck` ステップの使用方法を解説した Amazon SageMaker Studio Classic ノートブックについては、「[sagemaker-pipeline-model-monitor-clarify-steps.ipynb](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/model-monitor-clarify-pipelines/sagemaker-pipeline-model-monitor-clarify-steps.ipynb)」を参照してください。

**Example データ品質チェックのための `QualityCheck` ステップを作成する**  

```
from sagemaker.workflow.check_job_config import CheckJobConfig
from sagemaker.workflow.quality_check_step import DataQualityCheckConfig, QualityCheckStep
from sagemaker.workflow.execution_variables import ExecutionVariables

check_job_config = CheckJobConfig(
    role=role,
    instance_count=1,
    instance_type="ml.c5.xlarge",
    volume_size_in_gb=120,
    sagemaker_session=sagemaker_session,
)

data_quality_check_config = DataQualityCheckConfig(
    baseline_dataset=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri,
    dataset_format=DatasetFormat.csv(header=False, output_columns_position="START"),
    output_s3_uri=Join(on='/', values=['s3:/', your_bucket, base_job_prefix, ExecutionVariables.PIPELINE_EXECUTION_ID, 'dataqualitycheckstep'])
)

data_quality_check_step = QualityCheckStep(
    name="DataQualityCheckStep",
    skip_check=False,
    register_new_baseline=False,
    quality_check_config=data_quality_check_config,
    check_job_config=check_job_config,
    supplied_baseline_statistics="s3://sagemaker-us-west-2-555555555555/baseline/statistics.json",
    supplied_baseline_constraints="s3://sagemaker-us-west-2-555555555555/baseline/constraints.json",
    model_package_group_name="MyModelPackageGroup"
)
```

## EMR ステップ
<a name="step-type-emr"></a>

Amazon SageMaker Pipelines [EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html) ステップを使用して、以下を実行できます。
+ 実行中の Amazon EMR クラスターで [Amazon EMR ステップ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html)を処理します。
+ パイプラインが Amazon EMR クラスターをユーザーの代わりに作成して管理します。

Amazon EMR の詳細については、「[Getting started with Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)」を参照してください。

EMR ステップでは、`EMRStepConfig` に Amazon EMR クラスターで使用する JAR ファイルの場所と渡す引数を含める必要があります。実行中の EMR クラスターでステップを実行する場合は、Amazon EMR クラスター ID も指定します。クラスターの構成を渡して、自動的に作成、管理、終了されるクラスターで EMR ステップを実行することもできます。以下のセクションには、両方の方法を示す例とサンプルノートブックへのリンクが含まれています。

**注記**  
EMR ステップでは、パイプラインに渡すロールに追加のアクセス許可が必要です。[AWS マネージドポリシーをアタッチする: `AmazonSageMakerPipelinesIntegrations`](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-pipelines.html#security-iam-awsmanpol-AmazonSageMakerPipelinesIntegrations) をパイプラインロールに追加するか、そのポリシーのアクセス許可がロールに含まれていることを確認します。
実行中のクラスターで EMR ステップを処理する場合、使用できるクラスターは以下のいずれかのステータスであるもののみです。  
`STARTING`
`BOOTSTRAPPING`
`RUNNING`
`WAITING`
実行中のクラスターで EMR ステップを処理する場合、EMR クラスター上の `PENDING` の状態に最大 256 の EMR ステップを含めることができます。この制限を超えて送信された EMR ステップは、パイプラインの実行に失敗します。[パイプラインのステップの再試行ポリシー](pipelines-retry-policy.md) の使用を検討できます。
クラスター ID またはクラスター設定のいずれかを指定できますが、両方を指定することはできません。
EMR ステップは Amazon EventBridge を利用して EMR ステップまたはクラスターの状態の変化をモニタリングします。実行中のクラスターで Amazon EMR ジョブを処理する場合、EMR ステップは `SageMakerPipelineExecutionEMRStepStatusUpdateRule` ルールを使用して EMR ステップの状態をモニタリングします。EMR ステップが作成したクラスターでジョブを処理する場合、ステップは、`SageMakerPipelineExecutionEMRClusterStatusRule` ルールを使用してクラスターのステータスの変化をモニタリングします。 AWS アカウントにこれらの EventBridge ルールのいずれかが表示された場合は、削除しないでください。削除しないと、EMR ステップが完了しない可能性があります。

**Amazon EMR ステップをパイプラインに追加する**

パイプラインに EMR ステップを追加するには、次の手順を実行します。
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)コンソールを開きます。
+ 左側のナビゲーションペインで、**[パイプライン]** を選択します。
+ **[作成]** を選択します。
+ **[指定なし]** をクリックします。
+ 左側のサイドバーで、**[データ処理]** を選択し、キャンバスにドラッグします。
+ キャンバスで、追加した **[データ処理]** ステップを選択します。
+ 右側のサイドバーの モードで、**EMR (マネージド)** を選択します。
+ 右側のサイドバーで、**設定タブと詳細**タブのフォームに入力します。これらのタブのフィールドの詳細については、[「sagemaker.workflow.fail\$1step.EMRstep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.emr_step.EMRStep)」を参照してください。

**実行中の Amazon EMR クラスターで新しいジョブを起動する**

実行中の Amazon EMR クラスターで新しいジョブを起動する場合は、クラスター ID を文字列として `EMRStep` の `cluster_id` 引数に渡します。次の例で、この手順を説明します。

```
from sagemaker.workflow.emr_step import EMRStep, EMRStepConfig

emr_config = EMRStepConfig(
    jar="jar-location", # required, path to jar file used
    args=["--verbose", "--force"], # optional list of arguments to pass to the jar
    main_class="com.my.Main1", # optional main class, this can be omitted if jar above has a manifest 
    properties=[ # optional list of Java properties that are set when the step runs
    {
        "key": "mapred.tasktracker.map.tasks.maximum",
        "value": "2"
    },
    {
        "key": "mapreduce.map.sort.spill.percent",
        "value": "0.90"
   },
   {
       "key": "mapreduce.tasktracker.reduce.tasks.maximum",
       "value": "5"
    }
  ]
)

step_emr = EMRStep (
    name="EMRSampleStep", # required
    cluster_id="j-1ABCDEFG2HIJK", # include cluster_id to use a running cluster
    step_config=emr_config, # required
    display_name="My EMR Step",
    description="Pipeline step to execute EMR job"
)
```

完全な例を説明するサンプルノートブックについては、「[Pipelines EMR Step With Running EMR Cluster](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/emr-step/sagemaker-pipelines-emr-step-with-running-emr-cluster.ipynb)」を参照してください。

**新しい Amazon EMR クラスターで新しいジョブを起動する**

`EMRStep` が作成した新しいクラスターで新しいジョブを起動するには、クラスターの構成をディクショナリとして指定します。ディクショナリは [RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) リクエストと同じ構造である必要があります。ただし、以下のフィールドはクラスター設定に含めないでください。
+ [`Name`]
+ [`Steps`]
+ [`AutoTerminationPolicy`]
+ [`Instances`][`KeepJobFlowAliveWhenNoSteps`]
+ [`Instances`][`TerminationProtected`]

その他の `RunJobFlow` 引数はすべて、クラスター設定で使用できます。リクエスト構文の詳細については、「[RunJobFlow](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)」を参照してください。

次の例では、クラスターの構成 を EMR ステップ定義に渡します。これにより、ステップは新しい EMR クラスターで新しいジョブを起動するように求められます。この例の EMR クラスター設定には、プライマリー EMR クラスターノードとコア EMR クラスターノードの仕様が含まれています。Amazon EMR ノードタイプの詳細については、「[Understand node types: primary, core, and task nodes](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html)」を参照してください。

```
from sagemaker.workflow.emr_step import EMRStep, EMRStepConfig

emr_step_config = EMRStepConfig(
    jar="jar-location", # required, path to jar file used
    args=["--verbose", "--force"], # optional list of arguments to pass to the jar
    main_class="com.my.Main1", # optional main class, this can be omitted if jar above has a manifest 
    properties=[ # optional list of Java properties that are set when the step runs
    {
        "key": "mapred.tasktracker.map.tasks.maximum",
        "value": "2"
    },
    {
        "key": "mapreduce.map.sort.spill.percent",
        "value": "0.90"
   },
   {
       "key": "mapreduce.tasktracker.reduce.tasks.maximum",
       "value": "5"
    }
  ]
)

# include your cluster configuration as a dictionary
emr_cluster_config = {
    "Applications": [
        {
            "Name": "Spark", 
        }
    ],
    "Instances":{
        "InstanceGroups":[
            {
                "InstanceRole": "MASTER",
                "InstanceCount": 1,
                "InstanceType": "m5.2xlarge"
            },
            {
                "InstanceRole": "CORE",
                "InstanceCount": 2,
                "InstanceType": "m5.2xlarge"
            }
        ]
    },
    "BootstrapActions":[],
    "ReleaseLabel": "emr-6.6.0",
    "JobFlowRole": "job-flow-role",
    "ServiceRole": "service-role"
}

emr_step = EMRStep(
    name="emr-step",
    cluster_id=None,
    display_name="emr_step",
    description="MyEMRStepDescription",
    step_config=emr_step_config,
    cluster_config=emr_cluster_config
)
```

完全な例を説明するサンプルノートブックについては、「[Pipelines EMR Step With Cluster Lifecycle Management](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-pipelines/tabular/emr-step/sagemaker-pipelines-emr-step-with-cluster-lifecycle-management.ipynb)」を参照してください。

## EMR サーバーレスステップ
<a name="step-type-serverless"></a>

EMR サーバーレスステップをパイプラインに追加するには、次の手順を実行します。
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)コンソールを開きます。
+ 左側のナビゲーションペインで、**[パイプライン]** を選択します。
+ **[作成]** を選択します。
+ **[指定なし]** をクリックします。
+ 左側のサイドバーで、**[データ処理]** を選択し、キャンバスにドラッグします。
+ キャンバスで、追加した **[データ処理]** ステップを選択します。
+ 右側のサイドバーの モードで、**EMR (サーバーレス)** を選択します。
+ 右側のサイドバーで、**設定タブと詳細**タブのフォームに入力します。

## ノートブックジョブステップ
<a name="step-type-notebook-job"></a>

`NotebookJobStep` を使用して、SageMaker ノートブックジョブをパイプラインステップとして非インタラクティブに実行します。パイプラインを Pipelines のドラッグアンドドロップ UI で構築する場合は、[コードステップを実行する](#step-type-executecode) を使用してノートブックを実行します。SageMaker ノートブックジョブの詳細については、「[SageMaker ノートブックジョブ](notebook-auto-run.md)」を参照してください。

`NotebookJobStep` には、少なくとも入力ノートブック、イメージ URI、カーネル名が必要です。ノートブックジョブステップの要件と、ステップをカスタマイズするために設定できるその他のパラメータの詳細については、「[sagemaker.workflow.steps.NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep)」を参照してください。

次の例では、最小引数を使用して `NotebookJobStep` を定義します。

```
from sagemaker.workflow.notebook_job_step import NotebookJobStep


notebook_job_step = NotebookJobStep(
    input_notebook=input_notebook,
    image_uri=image_uri,
    kernel_name=kernel_name
)
```

`NotebookJobStep` パイプラインステップは、SageMaker ノートブックジョブとして処理されます。このため、`tags` 引数を使用して特定のタグを含めることで、Studio Classic UI ノートブックジョブダッシュボードの実行ステータスを追跡できます。含めるのタグの詳細については、「[Studio UI ダッシュボードでノートブックジョブを表示する](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)」を詳細してください。

SageMaker Python SDK を使用してノートブックジョブをスケジュールする場合、ノートブックジョブを実行するために指定できるのは特定のイメージのみです。詳細については、「[SageMaker AI Python SDK ノートブックジョブのイメージに関する制約](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk)」を参照してください。

## Fail ステップ
<a name="step-type-fail"></a>

目的の条件または状態が達成されなかった場合に、Fail ステップを使用して Amazon SageMaker Pipelines の実行を停止します。Fail ステップを使用すると、パイプラインの実行失敗の原因を示すカスタムエラーメッセージを入力することもできます。

**注記**  
Fail ステップとその他のパイプラインステップが同時に実行される場合、すべての同時実行ステップが完了するまでパイプラインは終了しません。

### Fail ステップの使用に関する制限
<a name="step-type-fail-limitations"></a>
+ Fail ステップを他のステップの `DependsOn` リストに追加することはできません。詳細については、「[ステップ間のカスタム依存関係](build-and-manage-steps.md#build-and-manage-custom-dependency)」を参照してください。
+ 他のステップは [失敗] ステップを参照できません。それは、*常に*パイプラインの実行の最後のステップです。
+ Fail ステップで終了するパイプライン実行を再試行することはできません。

Fail ステップのエラーメッセージは、静的テキスト文字列の形式で作成できます。別の方法として、[Pipeline パラメータ](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-parameters.html)の [Join](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html?highlight=Join#sagemaker.workflow.functions.Join) オペレーションやその他の[ステップのプロパティ](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#build-and-manage-properties)を使用して、より詳細なエラーメッセージを作成することもできます。

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

パイプラインに Fail ステップを追加するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[Fail]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[Fail]** ステップを選択します。

1. 右側のサイドバーで、**[設定]** タブと **[詳細]** タブのフォームに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.fail\$1step.FailStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.fail_step.FailStep)」を参照してください。

1. キャンバスに、追加した **[Fail]** ステップの直前のステップが含まれている場合は、カーソルをクリックして、そのステップから **[Fail]** ステップまでドラッグし、エッジを作成します。

1. キャンバスに、追加した **[Fail]** ステップの直前のステップが含まれている場合は、**[Fail]** ステップからそのステップまでカーソルをクリックしてドラッグし、エッジを作成します。

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

**Example**  
次のコードスニペット例では、`FailStep` でパイプラインパラメータと `Join` オペレーションで設定した `ErrorMessage` を使用しています。  

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

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

------

# 統合の追加
<a name="build-and-manage-steps-integration"></a>

MLflow 統合を使用すると、パイプラインで MLflow を使用して、追跡サーバーまたはサーバーレスアプリケーションの選択、実験の選択、メトリクスのログ記録を行うことができます。

## 主要なコンセプト
<a name="add-integration-key-concepts"></a>

**デフォルトのアプリケーション作成** - パイプラインビジュアルエディタを入力すると、デフォルトの MLflow アプリケーションが作成されます。

**統合パネル** - 新しい統合パネルには、選択して設定できる MLflow が含まれています。

**アプリケーションと実験を更新する** - パイプラインの実行中に選択したアプリケーションと実験を上書きするオプション。

## 仕組み
<a name="add-integration-how-it-works"></a>
+ **パイプラインビジュアルエディタ**に移動する
+ ツールバーで**統合**を選択する
+ **MLflow** を選択する
+ MLflow アプリケーションと実験を設定する

## スクリーンショットの例
<a name="add-integration-example-screenshots"></a>

統合サイドパネル

![\[説明を実行する 。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/screenshot-pipeline-1.png)


MLflow 設定

![\[説明を実行する 。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/screenshot-pipeline-2.png)


パイプラインの実行中に実験を上書きする方法

![\[説明を実行する 。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/screenshot-pipeline-3.png)


## ステップのプロパティ
<a name="build-and-manage-properties"></a>

`properties` 属性は、パイプラインのステップ間にデータの依存関係を追加するために使用されます。Pipelines は、これらのデータ依存関係をパイプライン定義から DAG を構築するために使用します。これらのプロパティはプレースホルダー値として参照でき、実行時に解決されます。

Pipelines ステップの `properties` 属性は、対応する SageMaker AI ジョブタイプに対する `Describe` コールが返すオブジェクトと一致します。ジョブタイプごとに、`Describe` 呼び出しは次のレスポンスオブジェクトを返します。
+ `ProcessingStep` - [DescribeProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html)
+ `TrainingStep` - [DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html)
+ `TransformStep` - [DescribeTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTransformJob.html)

データ依存関係の作成時に各ステップタイプでどのプロパティが参照可能かを確認するには、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「[Data Dependency - Property Reference](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#data-dependency-property-reference)」を参照してください。**

## ステップの並列処理
<a name="build-and-manage-parallelism"></a>

ステップは、他のステップに依存していない場合、パイプライン実行時に直ちに実行されます。ただし、同時に実行するパイプラインステップが多すぎると、使用可能なリソースがすぐに使い果たされる可能性があります。`ParallelismConfiguration` を使用して、パイプラインの同時実行ステップ数を制御します。

次の例では `ParallelismConfiguration` を使用して同時実行ステップの上限数を 5 に設定しています。

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

## ステップ間のデータ依存関係
<a name="build-and-manage-data-dependency"></a>

DAG の構造を定義するには、ステップ間のデータ関係を指定します。ステップ間にデータ依存関係を作成するには、パイプラインのあるステップのプロパティを別のステップに入力として渡します。入力を受け取るステップは、入力を提供するステップの実行が終了するまで開始されません。

データ依存関係は、次の形式の JsonPath 表記で表されます。この形式は JSON プロパティファイルをトラバースします。つまり、ファイル内にネストされた目的のプロパティにアクセスするのに必要な数の *<property>* インスタンスを追加できます。JsonPath 表記の詳細については、「[JsonPath リポジトリ](https://github.com/json-path/JsonPath)」を参照してください。

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

処理ステップの `ProcessingOutputConfig` プロパティを使用して Amazon S3 バケットを指定する方法を以下に示します。

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

データ依存関係を作成するには、以下のようにバケットをトレーニングステップに渡します。

```
from sagemaker.workflow.pipeline_context import PipelineSession

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

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

データ依存関係の作成時に各ステップタイプでどのプロパティが参照可能かを確認するには、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「[Data Dependency - Property Reference](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#data-dependency-property-reference)」を参照してください。**

## ステップ間のカスタム依存関係
<a name="build-and-manage-custom-dependency"></a>

データ依存関係を指定すると、Pipelines がステップ間のデータ接続を提供します。別の方法として、Pipelines を直接使用せずに、あるステップから以前のステップのデータにアクセスすることもできます。この場合、別のステップの実行が終了するまでステップを開始しないように Pipelines に指示するカスタム依存関係を作成できます。カスタム依存関係を作成するには、ステップの`DependsOn` 属性を指定します。

以下の例では、ステップ `A` とステップ `B` の両方が実行を終了してから開始されるステップ `C` を定義します。

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

依存関係により循環依存関係が生まれると、Pipelines で検証例外がスローされます。

以下の例では、処理ステップの実行が終了した後に開始されるトレーニングステップを作成します。

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

training_step.add_depends_on([processing_step])
```

以下の例では、2 つの異なる処理ステップの実行が終了するまで開始されないトレーニングステップを作成します。

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

training_step = TrainingStep(...)

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

以下は、カスタム依存関係を作成する別の方法です。

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

以下の例では、ある処理ステップから入力を受け取り、別の処理ステップの実行が終了するまで待機するトレーニングステップを作成します。

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

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

training_step.add_depends_on([processing_step_2])
```

以下の例では、ステップのカスタム依存関係の文字列リストを取得する方法を示しています。

```
custom_dependencies = training_step.depends_on
```

## ステップでのカスタムイメージ
<a name="build-and-manage-images"></a>

 パイプラインでステップを作成する際に利用可能な SageMaker AI の[深層学習コンテナイメージ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)のいずれかを使用できます。

パイプラインのステップでは独自のコンテナを使用することもできます。Studio Classic 内からイメージを作成することはできないため、Pipelines で使用する前に別の方法でイメージを作成しておく必要があります。

パイプラインのステップの作成時に独自のコンテナを使用する場合は、推定器定義にイメージ URI を追加します。SageMaker AI で独自のコンテナを使用する方法については、「[SageMaker AI で Docker コンテナを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers.html)」を参照してください。

# @step デコレータを使用した Python コードのリフトアンドシフト
<a name="pipelines-step-decorator"></a>

`@step` デコレータは、ローカルの機械学習 (ML) コードを 単一または複数のパイプラインステップに変換する機能です。ML 関数は、他の ML プロジェクトで記述するのと同じ方法で記述できます。ローカルでテストするか、`@remote` デコレータを使用してトレーニングジョブとしてテストを実行した後、`@step` デコレータを追加して関数を SageMaker AI パイプラインステップに変換できます。その後、`@step` デコレータでデコレートされた関数の呼び出しの出力をステップとして Pipelines に渡し、パイプラインを作成して実行できます。`@step` デコレータで一連の関数を連鎖させて、マルチステップの有向非巡回グラフ (DAG) パイプラインを作成することもできます。

`@step` デコレータを使用する設定は、`@remote` デコレータを使用する場合の設定と同じです。[環境をセットアップする](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator.html#train-remote-decorator-env)方法と[設定ファイルを使用](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-config.html)してデフォルトを設定する方法の詳細については、リモート関数のドキュメントを参照してください。`@step` デコレータの詳細については、「[sagemaker.workflow.function\$1step.step](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.function_step.step)」を参照してください。

`@step` デコレータの使用方法を説明するサンプルノートブックを表示するには、「[@step decorator sample notebooks](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/step-decorator)」を参照してください。

以下のセクションでは、`@step` デコレータでローカル ML コードに注釈を付けてステップを作成し、このステップでパイプラインを作成して実行して、ユースケースのエクスペリエンスをカスタマイズする方法について説明します。

**Topics**
+ [`@step` でデコレートした関数を使用してパイプラインを作成する](pipelines-step-decorator-create-pipeline.md)
+ [パイプラインを実行する](pipelines-step-decorator-run-pipeline.md)
+ [パイプラインを設定する](pipelines-step-decorator-cfg-pipeline.md)
+ [ベストプラクティス](pipelines-step-decorator-best.md)
+ [制限事項](pipelines-step-decorator-limit.md)

# `@step` でデコレートした関数を使用してパイプラインを作成する
<a name="pipelines-step-decorator-create-pipeline"></a>

`@step` デコレータを使用して Python 関数をパイプラインステップに変換し、それらの関数間に依存関係を作成してパイプライングラフ (または有向非巡回グラフ (DAG)) を作成して、このグラフのリーフノードをステップのリストとしてパイプラインに渡すことで、パイプラインを作成できます。以下のセクションでは、この手順を例を使って詳しく説明します。

**Topics**
+ [関数をステップに変換する](#pipelines-step-decorator-run-pipeline-convert)
+ [ステップ間の依存関係を作成する](#pipelines-step-decorator-run-pipeline-link)
+ [`@step` でデコレートしたステップで `ConditionStep` でを使用する](#pipelines-step-decorator-condition)
+ [ステップの `DelayedReturn` 出力を使用してパイプラインを定義する](#pipelines-step-define-delayed)
+ [パイプラインを作成する](#pipelines-step-decorator-pipeline-create)

## 関数をステップに変換する
<a name="pipelines-step-decorator-run-pipeline-convert"></a>

`@step` デコレータを使用してステップを作成するには、`@step` 関数を使用して注釈を付けます。次の例は、データを事前処理する `@step` でデコレートした関数を説明しています。

```
from sagemaker.workflow.function_step import step

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

`@step` でデコレートした関数を呼び出すと、SageMaker AI は関数を実行する代わりに `DelayedReturn` インスタンスを返します。`DelayedReturn` インスタンスは、その関数の実際の戻り値のプロキシです。`DelayedReturn` インスタンスは、別の関数に引数として渡すことも、ステップとしてパイプラインインスタンスに直接渡すこともできます。`DelayedReturn` クラスの詳細については、「[sagemaker.workflow.function\$1step.DelayedReturn](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.function_step.DelayedReturn)」を参照してください。

## ステップ間の依存関係を作成する
<a name="pipelines-step-decorator-run-pipeline-link"></a>

2 つのステップ間に依存関係を作成する際は、パイプライングラフのステップ間に接続を作成します。以下のセクションでは、パイプラインステップ間の依存関係を作成する複数の方法を紹介します。

### 入力引数を使用したデータ依存関係
<a name="pipelines-step-decorator-run-pipeline-link-interstep"></a>

ある関数の `DelayedReturn` 出力を別の関数への入力として渡すと、パイプライン DAG にデータ依存関係が自動的に作成されます。次の例では、`preprocess` 関数の `DelayedReturn` 出力を `train` 関数に渡す `preprocess` と、`train` との間に依存関係が作成されます。

```
from sagemaker.workflow.function_step import step

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

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

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

前の例では、`@step` でデコレートされたトレーニング関数を定義しています。この関数が呼び出されると、前処理パイプラインステップの `DelayedReturn` 出力を入力として受け取ります。トレーニング関数を呼び出すと、別の `DelayedReturn` インスタンスが返されます。このインスタンスは、パイプライン DAG を形成する、その関数で定義された以前のすべてのステップ (この例の `preprocess` ステップ) に関する情報を保持します。

前の例では、`preprocess` 関数は単一の値を返します。リストやタプルなどのより複雑な戻り値タイプについては、「[制限事項](pipelines-step-decorator-limit.md)」を参照してください。

### カスタム依存関係を定義する
<a name="pipelines-step-decorator-run-pipeline-link-custom"></a>

前の例では、`train` 関数は `preprocess` の `DelayedReturn` 出力を受け取り、依存関係を作成しました。前のステップの出力を渡さずに依存関係を明示的に定義する場合は、`add_depends_on` 関数をステップで使用します。`get_step()` 関数を使用して、その `DelayedReturn` インスタンスから基盤となるステップを取得し、依存関係を入力として `add_depends_on`\$1on を呼び出します。`get_step()` 関数の定義を表示するには、「[sagemaker.workflow.step\$1outputs.get\$1step](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_outputs.get_step)」を参照してください。次の例は、`get_step()` と `add_depends_on()` を使用して、`preprocess` と `train` の依存関係を作成する方法を説明しています。

```
from sagemaker.workflow.step_outputs import get_step

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

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

step_process_result = preprocess(raw_data)    
step_train_result = train()

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

### `@step` でデコレートした関数から従来のパイプラインステップにデータを渡す
<a name="pipelines-step-decorator-run-pipeline-link-pass"></a>

`@step` でデコレートしたステップと従来のパイプラインステップを含むパイプラインを作成し、両者間でデータを渡すパイプラインを作成できます。例えば、`ProcessingStep` を使用してデータを処理し、その結果を `@step` でデコレートしたトレーニング関数に渡すことができます。次の例では、`@step` でデコレートしたトレーニングステップは、処理ステップの出力を参照します。

```
# Define processing step

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

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

inputs = [
    ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
]
outputs = [
    ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
    ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"),
    ProcessingOutput(output_name="test", source="/opt/ml/processing/test")
]

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

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

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

## `@step` でデコレートしたステップで `ConditionStep` でを使用する
<a name="pipelines-step-decorator-condition"></a>

Pipelines は、先行するステップの結果を評価してパイプラインで実行するアクションを決定する、`ConditionStep` クラスをサポートしています。`ConditionStep` は、`@step` でデコレートしたステップでも使用できます。`ConditionStep` で任意の `@step` でデコレートしたステップの出力を使用するには、そのステップの出力を `ConditionStep` の引数として入力します。次の例の条件ステップは、`@step` でデコレートしたモデル評価ステップの出力を受け取ります。

```
# Define steps

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

```
# Define ConditionStep

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

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

## ステップの `DelayedReturn` 出力を使用してパイプラインを定義する
<a name="pipelines-step-define-delayed"></a>

パイプラインの定義方法は、`@step` デコレータを使用する場合も使用しない場合も同じです。`DelayedReturn` インスタンスをパイプラインに渡す場合、パイプラインを構築するためのステップの完全なリストを渡す必要はありません。SDK は、定義した依存関係に基づいて前のステップを自動的に推測します。パイプラインに渡した `Step` オブジェクトまたは `DelayedReturn` オブジェクトの前のすべてのステップすべてがパイプライングラフに含まれます。次の例では、パイプラインは `train` 関数の `DelayedReturn` オブジェクトを受け取ります。SageMaker AI は、`preprocess` ステップを `train` の前のステップとしてパイプライングラフに追加します。

```
from sagemaker.workflow.pipeline import Pipeline

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

ステップ間にデータやカスタム依存関係がなく、複数のステップを並行して実行する場合、パイプライングラフには複数のリーフノードが含まれます。このようなリーフノードをすべてリストにして、パイプライン定義の `steps` 引数に渡します。

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

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

パイプラインを実行すると、両方のステップが並行して実行されます。

リーフノードには、データまたはカスタム依存関係を通じて定義された以前のすべてのステップに関する情報が含まれているため、パイプラインに渡すのはグラフのリーフノードのみです。パイプラインをコンパイルすると、SageMaker AI はパイプライングラフを形成する後続のすべてのステップも推測し、それぞれを個別のステップとしてパイプラインに追加します。

## パイプラインを作成する
<a name="pipelines-step-decorator-pipeline-create"></a>

次のスニペットに示されるとおり、`pipeline.create()` を呼び出してパイプラインを作成します。`create()` の詳細については、「[sagemaker.workflow.pipeline.Pipeline.create](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.create)」を参照してください。

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

`pipeline.create()` を呼び出すと、SageMaker AI はパイプラインインスタンスの一部として定義されたすべてのステップをコンパイルします。SageMaker AI は、シリアル化された関数、引数、その他のすべてのステップ関連のアーティファクトを Amazon S3 にアップロードします。

データは、次の構造に従って S3 バケットに存在します。

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

`s3_root_uri` は、SageMaker AI 設定ファイルで定義され、パイプライン全体にわたって適用されます。定義されていない場合は、デフォルトの SageMaker AI バケットが使用されます。

**注記**  
SageMaker AI がパイプラインをコンパイルする都度、SageMaker AI はステップのシリアル化された関数、引数、依存関係をその時点の時刻でタイムスタンプされたフォルダに保存します。これは、`pipeline.create()`、`pipeline.update()`、`pipeline.upsert()` または `pipeline.definition()` を実行する都度、発生します。

# パイプラインを実行する
<a name="pipelines-step-decorator-run-pipeline"></a>

次のページでは、Amazon SageMaker Pipelines を使用して、SageMaker AI リソースで、またはローカルでパイプラインを実行する方法について説明します。

従来の SageMaker AI パイプライン実行と同様に、`pipeline.start()` 関数を使用して新しいパイプライン実行を開始します。`start()` 関数の詳細については、「[sagemaker.workflow.pipeline.Pipeline.start](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.start)」を参照してください。

**注記**  
`@step` デコレータを使用して定義したステップは、トレーニングジョブとして実行されます。そのため、次の制限について注意が必要です。  
アカウントにはインスタンス制限とトレーニングジョブ制限があります。スロットリングやリソース制限の問題を避けるため、制限を更新します。
パイプライン内では、トレーニングステップの実行ごとに発生する金銭的コストが発生します。料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

## ローカルで実行されたパイプラインから結果を取得する
<a name="pipelines-step-decorator-run-pipeline-retrieve"></a>

パイプライン実行の任意のステップの結果を表示するには、次のスニペットに示されるとおり、[execution.result()](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline._PipelineExecution.result           ) を使用します。

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

**注記**  
Pipelines は、ローカルモードでの `execution.result()` はサポートしていません。

一度に取得できるのは、単一のステップの結果のみです。SageMaker AI が生成したステップ名の場合は、次のとおり `list_steps` を呼び出してステップ名を取得できます。

```
execution.list_step()
```

## パイプラインをローカルで実行する
<a name="pipelines-step-decorator-run-pipeline-local"></a>

`@step` でデコレートしたステップを含むパイプラインは、従来のパイプラインステップと同様にローカルで実行できます。ローカル モードのパイプライン実行の詳細については、「[ローカルモードを使用してパイプラインを実行する](pipelines-local-mode.md)」を参照してください。ローカルモードを使用するには、次の例に示されるとおり、パイプライン定義に `SageMakerSession` ではなく、`LocalPipelineSession` を指定します。

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

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

local_pipeline_session = LocalPipelineSession()

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

local_pipeline.create(role_arn="role_arn")

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

# パイプラインを設定する
<a name="pipelines-step-decorator-cfg-pipeline"></a>

パイプラインのデフォルトを設定するには、SageMaker AI 設定ファイルを使用することをお勧めします。SageMaker AI 設定ファイルの詳細については、「[SageMaker Python SDK を使用してデフォルトを設定して使用する](https://sagemaker.readthedocs.io/en/stable/overview.html#configuring-and-using-defaults-with-the-sagemaker-python-sdk)」を参照してください。設定ファイルに追加された設定は、パイプライン内のすべてのステップに適用されます。いずれかのステップのオプションを上書きする場合は、`@step` デコレータ引数に新しい値を指定します。次のトピックでは、設定ファイルをセットアップする方法について説明します。

設定ファイル内の `@step` デコレータの設定は、`@remote` デコレータの設定と同じです。設定ファイルでパイプラインロール ARN とパイプラインタグを設定するには、次のスニペットのとおり `Pipeline` セクションを使用します。

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

設定ファイルで指定できるデフォルトのほとんどは、`@step` デコレータに新しい値を渡すことでオーバーライドすることもできます。例えば、次の例に示されるとおり、前処理ステップの設定ファイルで指定されたインスタンスタイプを上書きできます。

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

引数によっては、`@step` デコレータパラメータリストに含まれていません。このような引数は、SageMaker AI 設定ファイルを介してのみパイプライン全体に対して設定できます。このような因数は、以下のとおりです。
+ `sagemaker_session` (`sagemaker.session.Session`): SageMaker AI がサービスコールを委任する基盤となる SageMaker AI セッション。指定しない場合は、以下のデフォルト設定を使用してセッションが作成されます。

  ```
  SageMaker:
    PythonSDK:
      Modules:
        Session:
          DefaultS3Bucket: 'default_s3_bucket'
          DefaultS3ObjectKeyPrefix: 'key_prefix'
  ```
+ `custom_file_filter` (`CustomFileFilter)`: パイプラインステップに含めるローカルディレクトリとファイルを指定する `CustomFileFilter` オブジェクト。指定しない場合、この値はデフォルトで `None` になります。`custom_file_filter` を有効にするには、`IncludeLocalWorkdir` を `True` に設定する必要があります。次の例は、すべてのノートブックファイル、`data` という名前のファイルとディレクトリを無視する設定を説明しています。

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

  `CustomFileFilter` で `IncludeLocalWorkdir` を使用する方法の詳細については、「[モジュラーコードと @remote デコレータの使用](train-remote-decorator-modular.md)」を詳細してください。
+ `s3_root_uri (str)`: SageMaker AI がコードアーカイブとデータをアップロードするルート Amazon S3 フォルダ。指定しない場合は、デフォルトの SageMaker AI バケットが使用されます。
+ `s3_kms_key (str)`: 入出力データの暗号化に使用されるキー。この引数は SageMaker AI 設定ファイルでのみ設定でき、この引数はパイプラインで定義されるすべてのステップに適用されます。指定しない場合、値はデフォルトで `None` になります。S3 KMS キー設定の例については、次のスニペットを参照してください。

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

# ベストプラクティス
<a name="pipelines-step-decorator-best"></a>

以降のセクションでは、パイプラインステップに`@step` デコレータを使用する際に従うべきベストプラクティスを提案しています。

## ウォームプールを使用する
<a name="pipelines-step-decorator-best-warmpool"></a>

パイプライン ステップの実行を高速化するには、トレーニングジョブ用に提供されているウォームプール機能を使用します。次のスニペットに示されるとおり、`@step` デコレータに `keep_alive_period_in_seconds` 引数を指定することで、ウォームプール機能を有効にできます。

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

ウォームプールの詳細については、「[SageMaker AI マネージドウォームプール](train-warm-pools.md)」を参照してください。

## ディレクトリを構造化する
<a name="pipelines-step-decorator-best-dir"></a>

`@step` デコレータを使用する際は、コードモジュールを使用することをお勧めします。ステップ関数を呼び出してパイプラインを定義する `pipeline.py` モジュールをワークスペースのルートに配置します。推奨される構造は、以下のとおりです。

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

# 制限事項
<a name="pipelines-step-decorator-limit"></a>

以降のセクションでは、パイプラインステップに `@step` デコレータを使用する際に注意すべき制限事項について説明します。

## 関数引数の制限
<a name="pipelines-step-decorator-arg"></a>

`@step` でデコレートした関数に入力引数を渡すと、以下の制限が適用されます。
+ `DelayedReturn` オブジェクト、(他のタイプのステップの) `Properties` オブジェクト、`Parameter`、`ExecutionVariable` オブジェクトを、`@step` でデコレートした関数に引数として渡すことができます。ただし、`@step` でデコレートした関数は引数としての `JsonGet` オブジェクトと `Join` オブジェクトをサポートしていません。
+ `@step` 関数からパイプライン変数に直接アクセスすることはできません。以下の例ではエラーが発生します。

  ```
  param = ParameterInteger(name="<parameter-name>", default_value=10)
  
  @step
  def func():
      print(param)
  
  func() # this raises a SerializationError
  ```
+ パイプライン変数を別のオブジェクトにネストして、`@step` 関数に渡すことはできません 以下の例ではエラーが発生します。

  ```
  param = ParameterInteger(name="<parameter-name>", default_value=10)
  
  @step
  def func(arg):
      print(arg)
  
  func(arg=(param,)) # this raises a SerializationError because param is nested in a tuple
  ```
+ 関数の入力と出力はシリアル化されるため、関数からの入出力として渡すことができるデータのタイプには制限があります。詳細については、「[リモート関数を呼び出す](train-remote-decorator-invocation.md)」の「*Data serialization and deserialization*」セクションを参照してください。`@step` でデコレートした関数にも同じ制限が適用されます。
+ boto クライアントを持つオブジェクトはシリアル化できないため、`@step` でデコレートした関数への入出力としてこのようなオブジェクトを渡すことはできません。例えば、`Estimator`、`Predictor`、`Processor` などの SageMaker Python SDK クライアントクラスはシリアル化できません。

## 関数のインポート
<a name="pipelines-step-decorator-best-import"></a>

ステップに必要なライブラリは、関数の外部に配置するのではなく内部にインポートする必要があります。グローバルスコープでインポートすると、関数をシリアル化する際にインポートの衝突が発生するリスクがあります。例えば、`sklearn.pipeline.Pipeline` は `sagemaker.workflow.pipeline.Pipeline` に上書きされる可能性があります。

## 関数の戻り値の子メンバーの参照
<a name="pipelines-step-decorator-best-child"></a>

`@step` でデコレートした関数の戻り値の子メンバーを参照する場合、以下の制限が適用されます。
+ `DelayedReturn` オブジェクトがタプル、リスト、またはディクトである場合は、次の例に示されるとおり、子メンバーを `[]` で参照できます。

  ```
  delayed_return[0]
  delayed_return["a_key"]
  delayed_return[1]["a_key"]
  ```
+ 関数を呼び出す際に基となるタプルまたはリストの正確な長さが不明であるため、タプルの出力またはリストの出力はアンパックできません。以下の例ではエラーが発生します。

  ```
  a, b, c = func() # this raises ValueError
  ```
+ `DelayedReturn` オブジェクトを反復処理することはできません。以下の例ではエラーが発生します。

  ```
  for item in func(): # this raises a NotImplementedError
  ```
+ 任意の子メンバーを '`.`' で参照することはできません。以下の例ではエラーが発生します。

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

## サポートされていない既存のパイプライン機能
<a name="pipelines-step-decorator-best-unsupported"></a>

`@step` デコレータは、以下のパイプライン機能では使用できません。
+ [Pipeline ステップのキャッシュ](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-caching.html)
+ [プロパティファイル](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-propertyfile.html#build-and-manage-propertyfile-property)

# ステップ間でデータを渡す
<a name="build-and-manage-propertyfile"></a>

Amazon SageMaker Pipelines を使用してパイプラインを構築する場合は、あるステップから次のステップにデータを渡す必要がある場合があります。例えば、トレーニングステップが生成したモデルアーティファクトをモデル評価ステップまたはデプロイステップへの入力として使用する必要がある場合があります。この機能を使用すると、相互依存パイプラインステップを作成して、ML ワークフローを構築できます。

パイプラインステップの出力から情報を取得する必要がある場合は、`JsonGet` を使用できます。`JsonGet` は、Amazon S3 またはプロパティファイルから情報を抽出するのに役立ちます。以降のセクションでは、`JsonGet` を使用してステップ出力を抽出するために利用できる方法について説明します。

## Amazon S3 を使用してステップ間でデータを渡す
<a name="build-and-manage-propertyfile-s3"></a>

`ConditionStep` で `JsonGet` を使用すると、Amazon S3 から直接 JSON 出力を取得できます。Amazon S3 URI は、プリミティブ文字列、パイプライン実行変数、またはパイプラインパラメータを含む `Std:Join` 関数にすることができます。以下の例は、`ConditionStep` で `JsonGet` を使用する方法を説明しています。

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

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

条件ステップで Amazon S3 パスを使用して `JsonGet` を使用する場合は、条件ステップと JSON 出力を生成するステップの間に依存関係を明示的に追加する必要があります。次の例では、条件ステップが処理ステップへの依存関係を持つように作成されています。

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

## プロパティファイルを使用してステップ間でデータを渡す
<a name="build-and-manage-propertyfile-property"></a>

プロパティファイルを使用して、処理ステップの出力の情報を保存します。これは、処理ステップの結果を分析して、条件ステップの実行方法を決定するために特に便利です。`JsonGet` 関数はプロパティファイルを処理し、JsonPath 表記を使用してプロパティ JSON ファイルをクエリできるようにします。JsonPath 表記の詳細については、「[JsonPath リポジトリ](https://github.com/json-path/JsonPath)」を参照してください。

後で使用できるようにプロパティファイルを保存するには、最初に `PropertyFile` インスタンスを以下の形式で作成する必要があります。`path` パラメータは、プロパティファイルが保存される JSON ファイルの名前です。いずれの `output_name` も、処理ステップで定義した `ProcessingOutput` の `output_name` と一致する必要があります。これにより、ステップの `ProcessingOutput` をプロパティファイルでキャプチャできるようになります。

```
from sagemaker.workflow.properties import PropertyFile

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

`ProcessingStep` インスタンスを作成する際に、`property_files` パラメータを追加して、Amazon SageMaker Pipelines サービスがインデックスを作成する必要があるすべてのパラメータファイルをリストします。これにより、プロパティファイルが保存され、後で使用できるようになります。

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

条件ステップでプロパティファイルを使用するには、次の例に示すように、条件ステップに渡す条件に `property_file` を追加し、`json_path` パラメータを使用して JSON ファイルで目的のプロパティをクエリします。

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

より詳細な例については、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「[Property File](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#property-file)」を参照してください。**

# パイプラインのステップのキャッシュ
<a name="pipelines-caching"></a>

Amazon SageMaker Pipelines では、ステップのキャッシュを使用して、パイプラインを再実行する際の時間とリソースを節約できます。ステップのキャッシュは、ステップの設定と入力が同じである場合、(再計算せずに) ステップの以前正常に完了した実行の出力を再利用します。これにより、同一のパラメータでパイプラインを再実行しても一貫した結果が得られるようになります。次のトピックでは、パイプラインステップのキャッシュを設定して有効にする方法について説明します。

ステップの署名付きキャッシュを使用すると、Pipelines は、特定の属性の値が同一である現在のパイプラインステップの以前の実行を検索します。見つかった場合、Pipelines はステップを再計算するのではなく、前回の実行からの出力を伝搬します。チェックされる属性はステップタイプに固有のもので、[パイプラインステップタイプ別のデフォルトのキャッシュキー属性](pipelines-default-keys.md) にリストされています。

ステップのキャッシュをオプトインする必要があります。デフォルトではオフになっています。ステップのキャッシュをオンにするときは、タイムアウトも定義する必要があります。このタイムアウトは、前回の実行時間からどのくらい経っても再利用の候補として残せるのかを定義します。

ステップキャッシュは実行の成功のみを考慮します。失敗した実行を再利用することはありません。タイムアウト期間内に複数の成功した実行が存在する場合、Pipelines は最新の正常に完了した実行の結果を使用します。一致する正常に完了した実行がタイムアウト期間内にない場合、Pipelines はステップを再実行します。エグゼキュターが条件を満たすが進行中である以前の実行を検出した場合、両方のステップは実行を継続し、成功すればキャッシュを更新します。

ステップのキャッシュでは個々のパイプラインのみが対象となるため、ステップ署名が一致しても別のパイプラインのステップを再利用することはできません。

ステップのキャッシュは、次のステップタイプに使用できます。
+ [Processing](build-and-manage-steps-types.md#step-type-processing)
+ [トレーニング](build-and-manage-steps-types.md#step-type-training)
+ [チューニング](build-and-manage-steps-types.md#step-type-tuning)
+ [AutoML](build-and-manage-steps-types.md#step-type-automl)
+ [変換](build-and-manage-steps-types.md#step-type-transform)
+ [`ClarifyCheck`](build-and-manage-steps-types.md#step-type-clarify-check)
+ [`QualityCheck`](build-and-manage-steps-types.md#step-type-quality-check)
+ [EMR](build-and-manage-steps-types.md#step-type-emr)

**Topics**
+ [ステップキャッシュを有効にする](pipelines-caching-enabling.md)
+ [ステップキャッシュを無効にする](pipelines-caching-disabling.md)
+ [パイプラインステップタイプ別のデフォルトのキャッシュキー属性](pipelines-default-keys.md)
+ [キャッシュデータアクセス制御](pipelines-access-control.md)

# ステップキャッシュを有効にする
<a name="pipelines-caching-enabling"></a>

ステップのキャッシュを有効にするには、ステップ定義に `CacheConfig` プロパティを追加する必要があります。 `CacheConfig` プロパティはパイプライン定義ファイルで次の形式を使用します。

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

`Enabled` フィールドには、特定のステップでキャッシュがオンになっているかどうかが示されます。このフィールドを `true` に設定すると、SageMaker AI に同じ属性を持つステップの前回の実行を検索するように指示できます。または、フィールドを `false` に設定して、パイプラインが実行される都度ステップを実行するように SageMaker AI に指示することもできます。`ExpireAfter` はタイムアウト期間を定義する [ISO 8601 の期間](https://en.wikipedia.org/wiki/ISO_8601#Durations)形式の文字列です。`ExpireAfter` 期間には、年、月、週、日、時、分の値を含めることができます。各値は数字とそれに続く期間の単位を示す文字で構成されます。例えば、次のようになります。
+ "30d" = 30 日
+ "5y" = 5 年
+ "T16m" = 16 分
+ "30dT5h" = 30 日と 5 時間。

以下の説明では、Amazon SageMaker Python SDK を使用して新規または既存のパイプラインのキャッシュを有効にする手順を示します。

**新しいパイプラインのキャッシュを有効にするには**

新しいパイプラインの場合は、`enable_caching=True` で `CacheConfig` インスタンスを初期化し、パイプラインステップへの入力として指定します。次の例では、トレーニングステップのタイムアウト時間を 1 時間に設定してキャッシュを有効にします。

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

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

**既存のパイプラインのキャッシュを有効にする**

すでに定義されている既存のパイプラインのキャッシュを有効にするには、ステップの `enable_caching` プロパティを有効にし、`expire_after` をタイムアウト値に設定します。最後に、パイプラインを `pipeline.upsert()` または `pipeline.update()` で更新します。これを再度実行すると、次のコードサンプルがトレーニングステップのタイムアウト時間を 1 時間に設定してキャッシュを有効にします。

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

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

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

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

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

または、(既存の) パイプラインを定義した後でキャッシュ設定を更新して、1 つの連続したコードを実行できるようにします。以下のコードサンプルはこの方法を示しています。

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

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

詳細なコードサンプルと Python SDK パラメータがキャッシュに及ぼす影響に関する説明については、Amazon SageMaker Python SDK ドキュメントの「[Caching Configuration](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)」を参照してください。

# ステップキャッシュを無効にする
<a name="pipelines-caching-disabling"></a>

ステップタイプの [パイプラインステップタイプ別のデフォルトのキャッシュキー属性](pipelines-default-keys.md) にリストされていない属性を変更しても、パイプラインステップは再実行されません。ただし、それでもパイプラインステップを再実行したいこともあります。その場合は、ステップキャッシュを無効にする必要があります。

ステップキャッシュを無効にするには、次のコードスニペットに示すように、ステップ定義内のステップ定義の `CacheConfig` プロパティの `Enabled` 属性を `false` に設定します。

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

`Enabled` が `false` に設定されている場合、`ExpireAfter` 属性は無視されることに注意してください。

Amazon SageMaker Python SDK を使用してパイプラインステップのキャッシュを無効にするには、パイプラインステップのパイプラインを定義し、`enable_caching` プロパティをオフにしてパイプラインを更新します。

これを再実行すると、次のコードサンプルがトレーニングステップのキャッシュを無効にします。

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

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

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

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

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

または、パイプラインを定義した後で `enable_caching` プロパティを無効にして、コードを 1 回連続して実行できるようにします。以下のコードサンプルはこのソリューションを示しています。

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

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

詳細なコードサンプルと Python SDK パラメータがキャッシュに及ぼす影響に関する説明については、Amazon SageMaker Python SDK ドキュメントの「[Caching Configuration](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)」を参照してください。

# パイプラインステップタイプ別のデフォルトのキャッシュキー属性
<a name="pipelines-default-keys"></a>

前のパイプラインステップを再利用するか、ステップを再実行するかを決定する際、Pipelines は特定の属性が変更されていないかどうかを確認します。属性セットがタイムアウト期間内の以前の実行とすべて異なる場合、ステップは再び実行されます。これらの属性には、入力アーティファクト、アプリまたはアルゴリズムの仕様、環境変数が含まれます。次のリストは、パイプラインの各ステップタイプと、変更された場合にステップの再実行を開始する属性を示しています。以下の属性の作成に使用される Python SDK パラメータの詳細については、「Amazon SageMaker Python SDK ドキュメント」の「[Caching Configuration](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#caching-configuration)」を参照してください。

## [処理ステップ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)
<a name="collapsible-caching-section-1"></a>
+ AppSpecification
+ 環境
+ ProcessingInputs。この属性には、前処理スクリプトに関する情報が含まれます。

  

## [トレーニングステップ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)
<a name="collapsible-caching-section-2"></a>
+ AlgorithmSpecification
+ CheckpointConfig
+ DebugHookConfig
+ DebugRuleConfigurations
+ 環境
+ HyperParameters
+ InputDataConfig。この属性には、トレーニングスクリプトに関する情報が含まれます。

  

## [チューニングステップ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html)
<a name="collapsible-caching-section-3"></a>
+ HyperParameterTuningJobConfig
+ TrainingJobDefinition。この属性は複数の子属性で構成されており、そのすべてがステップの再実行を生じさせるわけではありません。(変更された場合) 再実行が発生する可能性のある子属性は以下のとおりです。
  + AlgorithmSpecification
  + HyperParameterRanges
  + InputDataConfig
  + StaticHyperParameters
  + TuningObjective
+ TrainingJobDefinition

  

## [AutoML ステップ](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobConfig.html)
<a name="collapsible-caching-section-4"></a>
+ AutoMLJobConfig。この属性は複数の子属性で構成されており、そのすべてがステップの再実行を生じさせるわけではありません。(変更された場合) 再実行が発生する可能性のある子属性は以下のとおりです。
  + CompletionCriteria
  + CandidateGenerationConfig
  + DataSplitConfig
  + モード
+ AutoMLJobObjective
+ InputDataConfig
+ ProblemType

  

## [変換ステップ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)
<a name="collapsible-caching-section-5"></a>
+ DataProcessing
+ 環境
+ ModelName
+ TransformInput

  

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

  

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

  

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

  

# キャッシュデータアクセス制御
<a name="pipelines-access-control"></a>

SageMaker AI パイプラインが実行されると、パイプラインによって起動された SageMaker AI ジョブに関連するパラメータとメタデータがキャッシュされ、以後の実行で再利用できるように保存されます。このメタデータには、キャッシュされたパイプラインステップ以外にもさまざまなソースからアクセスでき、以下のタイプが含まれます。
+ `Describe*Job` リクエストでオプションで指定するパラメータです。
+ CloudWatch Logs
+ CloudWatch Events
+ CloudWatch メトリクス
+ SageMaker AI Search

リスト内の各データソースへのアクセスは、独自の IAM アクセス許可セットによって制御されることに注意してください。あるデータソースに対する特定のロールのアクセス許可を削除しても、他のデータソースへのアクセスレベルには影響しません。例えば、アカウント管理者は、呼び出し元のロールからの `Describe*Job` リクエストに対する IAM アクセス許可を削除する場合があります。呼び出し元は `Describe*Job` リクエストを作成できなくなりますが、パイプラインを実行するアクセス許可がある限り、キャッシュされたステップで実行されるパイプラインからメタデータを取得することはできます。アカウント管理者が特定の SageMaker AI ジョブからメタデータへのアクセスを完全に削除する場合は、データへのアクセスを提供する関連サービスごとにアクセス許可を削除する必要があります。

# パイプラインのステップの再試行ポリシー
<a name="pipelines-retry-policy"></a>

再試行ポリシーを使用すると、エラーが発生した後に Pipelines ステップを再試行するのに役立ちます。パイプラインステップでは例外が発生する場合がありますが、例外はさまざまな理由で発生します。場合によっては、再試行によってこれらの問題を解決できることがあります。パイプラインステップの再試行ポリシーを使用すると、特定のパイプラインステップを再試行するかどうかを選択できます。

再試行ポリシーは、次のパイプラインステップのみをサポートします。
+ [処理ステップ](build-and-manage-steps-types.md#step-type-processing) 
+ [トレーニングステップ](build-and-manage-steps-types.md#step-type-training) 
+ [チューニングステップ](build-and-manage-steps-types.md#step-type-tuning) 
+ [AutoML ステップ](build-and-manage-steps-types.md#step-type-automl) 
+ [モデルの作成ステップ](build-and-manage-steps-types.md#step-type-create-model) 
+ [モデルステップの登録](build-and-manage-steps-types.md#step-type-register-model) 
+ [変換ステップ](build-and-manage-steps-types.md#step-type-transform) 
+ [ノートブックジョブステップ](build-and-manage-steps-types.md#step-type-notebook-job) 

**注記**  
チューニングと AutoML ステップの両方で実行されるジョブは、再試行ポリシーが設定されていても、内部的に再試行され、`SageMaker.JOB_INTERNAL_ERROR` 例外タイプは再試行されません。SageMaker API を使用して独自の[再試行戦略](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RetryStrategy.html)をプログラムできます。

## 再試行ポリシーでサポートされる例外タイプ
<a name="pipelines-retry-policy-supported-exceptions"></a>

パイプラインステップの再試行ポリシーは、次の例外タイプをサポートします。
+ `Step.SERVICE_FAULT`: これらの例外は、ダウンストリームのサービスを呼び出したときに内部サーバーエラーまたは一時的なエラーがあると発生します。Pipelines は、このようなタイプのエラーは自動的に再試行します。再試行ポリシーを使用すると、この例外タイプのデフォルトの再試行オペレーションをオーバーライドできます。
+ `Step.THROTTLING`: ダウンストリームのサービスの呼び出し中には、スロットリング例外が発生することがあります。Pipelines は、このようなタイプのエラーは自動的に再試行します。再試行ポリシーを使用すると、この例外タイプのデフォルトの再試行オペレーションをオーバーライドできます。
+ `SageMaker.JOB_INTERNAL_ERROR`: これらの例外は、SageMaker AI ジョブが `InternalServerError` を返す場合に発生します。この場合、新しいジョブを始めると、一時的な問題が解決することがあります。
+ `SageMaker.CAPACITY_ERROR`: SageMaker AI ジョブで Amazon EC2 `InsufficientCapacityErrors` が発生すると、SageMaker AI ジョブの失敗につながります。新しい SageMaker AI ジョブを開始して再試行すると、この問題を回避できます。
+ `SageMaker.RESOURCE_LIMIT`: SageMaker AI ジョブを実行する際に、リソース制限クォータを超えることがあります。しばらく待ってから SageMaker AI ジョブの実行を再試行すると、リソースがリリースされたかどうかを確認できます。

## 再試行ポリシーの JSON スキーマ
<a name="pipelines-retry-policy-json-schema"></a>

パイプラインの再試行ポリシーには、以下の JSON スキーマがあります。

```
"RetryPolicy": {
   "ExceptionType": [String]
   "IntervalSeconds": Integer
   "BackoffRate": Double
   "MaxAttempts": Integer
   "ExpireAfterMin": Integer
}
```
+ `ExceptionType`: このフィールドには、以下の例外タイプが文字列配列形式で必要です。
  + `Step.SERVICE_FAULT`
  + `Step.THROTTLING`
  + `SageMaker.JOB_INTERNAL_ERROR`
  + `SageMaker.CAPACITY_ERROR`
  + `SageMaker.RESOURCE_LIMIT`
+ `IntervalSeconds` (オプション): 最初の再試行までの秒数 (デフォルトは 1)。`IntervalSeconds` の最大値は 43,200 秒 (12 時間) です。
+ `BackoffRate` (オプション): 各試行間で再試行間隔が増加する乗数 (デフォルトは 2.0)。
+ `MaxAttempts` (オプション): 再試行の最大回数を表す正の整数 (デフォルトは 5)。`MaxAttempts` で指定された回数を超えてエラーが再発する場合、再試行が停止され通常のエラー処理が再開されます。0 の値は、エラーが再試行されないことを指定します。`MaxAttempts` の最大値は 20 です。
+ `ExpireAfterMin` (オプション): 再試行の最大タイムスパンを表す正の整数。ステップの実行から数えて `ExpireAfterMin` 分後にエラーが再発した場合は、再試行が停止され、通常のエラー処理が再開されます。0 の値は、エラーが再試行されないことを指定します。`ExpireAfterMin ` の最大値は 14,400 分 (10 日) です。
**注記**  
`MaxAttempts` または `ExpireAfterMin` のいずれか 1 つを指定できますが、両方を指定することはできません。両方とも指定されていない場合は、`MaxAttempts` がデフォルトになります。**1 つのポリシーに両方のプロパティがあると、再試行ポリシーによって検証エラーが生成されます。

# 再試行ポリシーを設定する
<a name="pipelines-configuring-retry-policy"></a>

SageMaker Pipelines は機械学習ワークフローのオーケストレーションのための堅牢かつ自動化された方法を提供するとはいえ、実行時に失敗する場合もあります。このようなシナリオを適切に処理し、パイプラインの信頼性を向上させるために、例外が発生した後に特定のステップを自動的に再試行する方法とタイミングを定義する再試行ポリシーを設定できます。再試行ポリシーでは、再試行する例外のタイプ、再試行の最大回数、再試行の間隔、再試行の間隔を引き上げるためのバックオフ率を指定できます。次のセクションでは、JSON と SageMaker Python SDK の両方を使用して、パイプライン内のトレーニングステップの再試行ポリシーを設定する方法の例を説明します。

以下は、再試行ポリシーを使用したトレーニングステップの例です。

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



以下は、再試行ポリシーを使用して SDK for Python (Boto3) に `TrainingStep` を構築する方法の例です。

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

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

特定のステップタイプの再試行動作の設定の詳細については、「Amazon SageMaker Python SDK ドキュメント」の「[Amazon SageMaker Pipelines - Retry Policy](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#retry-policy)」を参照してください。**

# パイプラインステップの選択的実行
<a name="pipelines-selective-ex"></a>

Pipelines を使用してワークフローを作成し、ML トレーニングステップのオーケストレーションを行いながら、複数の実験フェーズを実行する必要がある場合があります。毎回完全なパイプラインを実行する代わりに、特定のステップのみを繰り返す必要がある場合があります。Pipelines を使用すると、パイプラインステップを選択的に実行できます。これにより、ML トレーニングを最適化できます。選択的実行は、以下のシナリオで役に立ちます。
+ アップストリームステップのパラメータを保持したまま、インスタンスタイプ、ハイパーパラメータ、またはその他の変数を使用して特定のステップを再起動する必要がある場合
+ パイプラインが中間ステップで失敗した場合。データ準備や特徴量抽出などの実行前のステップを再実行するとコストがかかります。パイプラインを完了するには、修正を適用して特定のステップを手動で再実行する必要がある場合もあります。

選択的実行を使用すると、パイプラインの有向非巡回グラフ (DAG) で接続されている限り、任意のステップのサブセットを実行できます。次の DAG は、パイプラインワークフローの例を説明しています。

![\[サンプルパイプラインの有向非巡回グラフ (DAG)\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/pipeline-full.png)


選択的実行では、`AbaloneTrain` ステップと `AbaloneEval` ステップを選択できます。ただしこれらのステップは DAG 内で接続されていないため、`AbaloneTrain` ステップと `AbaloneMSECond` ステップのみを選択して選択的実行を実行することはできません。選択的実行は、ワークフロー内の選択されていないステップについて、ステップを再計算するのではなく、リファレンスパイプライン実行からの出力を再利用します。また、選択したステップの下流にある選択されていないステップは、選択的実行では実行されません。

パイプラインで中間ステップのサブセットを実行する場合、ステップが前のステップに依存している場合があります。SageMaker AI には、このような依存関係をリソースとして提供するためのリファレンスパイプラインの実行が必要です。例えば、`AbaloneTrain` ステップと `AbaloneEval` ステップを実行する場合は、`AbaloneProcess` ステップからの出力が必要です。リファレンス実行 ARN を提供するか、SageMaker AI に最新のパイプライン実行を使用するように指示するかを選択できます。デフォルトの動作は、後者です。リファレンス実行がある場合は、リファレンス実行からランタイムパラメータを構築し、上書きして選択的実行に提供することもできます。詳細については、「[リファレンス実行からランタイムパラメータ値を再使用する](#pipelines-selective-ex-reuse)」を参照してください。

詳細には、`SelectiveExecutionConfig` を使用して選択的実行パイプライン実行の設定を指定します。リファレンスパイプライン実行の ARN を含める場合 (`source_pipeline_execution_arn` 引数を使用)、SageMaker AI は指定したパイプライン実行の前のステップの依存関係を使用します。ARN を含めない場合に、最新のパイプライン実行が存在すると、SageMaker AI はデフォルトでその実行をリファレンスとして使用します。ARNを含めず、SageMaker AI で最新のパイプライン実行を使用したくない場合は、`reference_latest_execution` を `False` に設定します。SageMaker AI が最終的にリファレンスとして使用するパイプライン実行は、最新であるかユーザー指定かを問わず、`Success` ステータスまたは `Failed` ステータスである必要があります。

SageMaker AI がリファレンス実行を選択する方法のまとめは、次の表のとおりです。


| `source_pipeline_execution_arn` 引数値 | `reference_latest_execution` 引数値 | 使用されるリファレンス実行 | 
| --- | --- | --- | 
| パイプライン ARN | `True` または指定なし | 指定されるパイプライン ARN | 
| パイプライン ARN | `False` | 指定されるパイプライン ARN | 
| null または指定なし | `True` または指定なし | 最新のパイプライン実行 | 
| null または指定なし | `False` | なし — この場合は、アップストリーム依存関係のないステップを選択 | 

選択的実行設定の要件に関する詳細については、「[SageMaker.workflow.Selective\$1Execution\$1Config.SelectiveExecutionConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#selective-execution-config)」のドキュメントを参照してください。

以下では、パイプラインのリファレンス実行を指定したり、最新のパイプライン実行をリファレンスとして使用したり、リファレンスパイプライン実行を使用しない選択的実行を実行したりする例を説明します。

## ユーザー指定のパイプラインリファレンスを使用した選択的実行
<a name="pipelines-selective-ex-arn"></a>

次の例は、最新のパイプライン実行をリファレンスとして使用した、`AbaloneTrain` ステップと `AbaloneEval` ステップの選択的な実行を説明しています。

```
from sagemaker.workflow.selective_execution_config import SelectiveExecutionConfig

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

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

## 最新のパイプライン実行をリファレンスとして使用する選択的実行
<a name="pipelines-selective-ex-latest"></a>

次の例は、最新のパイプライン実行をリファレンスとして使用して、`AbaloneTrain` ステップと `AbaloneEval` ステップの選択的な実行について説明しています。SageMaker AI はデフォルトで最新のパイプライン実行を使用するため、オプションで `reference_latest_execution` 引数を `True` に設定できます。

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

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

## リファレンスパイプラインを使用しない選択的実行
<a name="pipelines-selective-ex-none"></a>

次の例は、リファレンス ARN を指定せず、最新のパイプライン実行をリファレンスとして使用するオプションをオフにして、`AbaloneProcess` ステップと `AbaloneTrain` ステップの選択的実行を行うする方法を説明しています。このステップのサブセットは前のステップに依存しないため、SageMaker AI は、このような設定を許可します。

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

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

## リファレンス実行からランタイムパラメータ値を再使用する
<a name="pipelines-selective-ex-reuse"></a>

`build_parameters_from_execution` を使用してリファレンスパイプラインの実行からパラメータを構築し、その結果を選択的実行パイプラインに提供できます。リファレンス実行の元のパラメータを使用するか、`parameter_value_overrides` 引数を使用して上書きを適用することができます。

次の例は、リファレンス実行からパラメータを構築し、`MseThreshold` パラメータに上書きを適用する方法を示しています。

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

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

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

# Amazon SageMaker Pipelines の ClarifyCheck と QualityCheck のステップを使用したベースライン計算、ドリフト検出、ライフサイクル
<a name="pipelines-quality-clarify-baseline-lifecycle"></a>

次のトピックでは、[`ClarifyCheck`](build-and-manage-steps-types.md#step-type-clarify-check) ステップと [`QualityCheck`](build-and-manage-steps-types.md#step-type-quality-check) ステップを使用する際に、Amazon SageMaker Pipelines でベースラインとモデルバージョンがどのように進化するかについて説明します。

`ClarifyCheck` ステップの場合、ベースラインは、ステッププロパティ内の単一のファイルであり、サフィックスが `constraints` になります。`QualityCheck` ステップの場合、ベースラインは、ステッププロパティ内の 2 つのファイルの組み合わせです。一方のサフィックスは `statistics`、もう一方のサフィックスは `constraints` になります。以下のトピックでは、これらのプロパティおよびプロパティの使用方法を示すプレフィックスについて説明します。これらは、2 つのパイプラインステップでベースラインの動作とライフサイクルに影響を与えます。例えば、`ClarifyCheck` ステップは、常に `CalculatedBaselineConstraints` プロパティで新しいベースラインを計算して割り当てます。`QualityCheck` ステップは `CalculatedBaselineConstraints` と `CalculatedBaselineStatistics` プロパティで同じ処理を行います。

## ClarifyCheck と QualityCheck のステップのベースライン計算と登録
<a name="pipelines-quality-clarify-baseline-calculations"></a>

`ClarifyCheck` と `QualityCheck` の両方のステップは、基礎となる処理ジョブ実行によるステップ入力に基づいて新しいベースラインを計算します。これらの新しく計算されたベースラインには、プレフィックス `CalculatedBaseline` が付いたプロパティを介してアクセスします。これらのプロパティは、モデルパッケージの `ModelMetrics` として [モデルステップ](build-and-manage-steps-types.md#step-type-model) ステップで記録できます。このモデルパッケージは、5 つの異なるベースラインに登録できます。データバイアス、モデルバイアス、`ClarifyCheck` ステップの実行によるモデルの説明可能性とモデルの品質、`QualityCheck` ステップ実行によるデータ品質のチェックタイプごとに 1 つずつ登録できます。`register_new_baseline` パラメータは、ステップの実行後のプレフィックス `BaselineUsedForDriftCheck` が付いたプロパティの値セットを指定します。

次の想定されるユースケースの表は、`ClarifyCheck` ステップと `QualityCheck` ステップに設定できるステップパラメータに基づくさまざまな動作を示しています。


| この設定の選択で想定されるユースケース  | `skip_check` / `register_new_baseline` | ステップでドリフトチェックを行うか | ステッププロパティ `CalculatedBaseline` の値 | ステッププロパティ `BaselineUsedForDriftCheck` の値 | 
| --- | --- | --- | --- | --- | 
| 新しいモデルバージョンを取得するためのチェックを有効にして定期的な再トレーニングを行っているが、モデルレジストリで新しいモデルバージョンに*前のベースラインを `DriftCheckBaselines` として引き継ぎたい*。 | False/ False | 既存のベースラインに対してドリフトチェックを実行する | ステップを実行して計算された新しいベースライン | モデルレジストリの最新の承認済みモデルのベースライン、またはステップパラメータとして指定されたベースライン | 
| 新しいモデルバージョンを取得するためのチェックを有効にして定期的な再トレーニングを行っているが、新しいモデルバージョンで*新しく計算したベースラインを使用して、モデルレジストリの `DriftCheckBaselines` を更新したい*。 | False/ True | 既存のベースラインに対してドリフトチェックを実行する | ステップを実行して計算された新しいベースライン | ステップを実行して新たに計算されたベースライン (プロパティ CalculatedBaseline の値) | 
| 特定のタイプのチェックに関してエンドポイントでの違反が Amazon SageMaker Model Monitor で検出されたため、新しいモデルバージョンを再トレーニングするためのパイプラインを開始しており、*このタイプのチェックを前のベースラインに対してはスキップするが、前のベースラインを新しいモデルバージョンの `DriftCheckBaselines` としてモデルレジストリで引き継ぐ*ことを希望している。 | True/ False | ドリフトチェックなし | 実行して計算された新しいベースライン | モデルレジストリの最新の承認済みモデルのベースライン、またはステップパラメータとして指定されたベースライン | 
| 次の場合に発生: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/pipelines-quality-clarify-baseline-lifecycle.html)  | True/ True | ドリフトチェックなし | ステップを実行して計算された新しいベースライン | ステップを実行して新たに計算されたベースライン (プロパティ CalculatedBaseline の値) | 

**注記**  
制約に科学的表記法を使用する場合は、float に変換する必要があります。その方法を示す前処理スクリプトの例については、「[Create a Model Quality Baseline](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-baseline.html)」を参照してください。

[モデルステップ](build-and-manage-steps-types.md#step-type-model) にモデルを登録するときに、`BaselineUsedForDriftCheck` プロパティを `DriftCheckBaselines` として登録できます。そうすると、これらのベースラインファイルを、Model Monitor でのモデルおよびデータの品質チェックに使用できます。さらに、これらのベースラインを ClarifyCheckStep および `QualityCheck` ステップで使用すると、新たにトレーニングされたモデルと、将来のパイプラインの実行のためにモデルレジストリに登録されている既存のモデルと比較できます。

## Pipelines の以前のベースラインに対するドリフト検出
<a name="pipelines-quality-clarify-baseline-drift-detection"></a>

`QualityCheck` ステップでは、定期的な再トレーニングのためのパイプラインを開始して新しいモデルバージョンを取得する場合に、前の承認済みモデルバージョンのベースラインでデータ品質とデータバイアスの値が [違反のスキーマ (constraint\$1violations.json ファイル)](model-monitor-interpreting-violations.md) のときは、トレーニングステップの実行が不要になることがあります。また、`ClarifyCheck` ステップを実行したときに、モデル品質、モデルバイアス、モデルの説明可能性が、前の承認済みモデルバージョンの登録ベースラインに違反している場合も、新しくトレーニングされたモデルバージョンの登録が不要になることがあります。このようなケースでは、必要なチェックを有効にするために、対応するチェックステップの `skip_check` プロパティを `False` に設定できます。これにより、前のベースラインに対する違反が検出されると、`ClarifyCheck` ステップと `QualityCheck` ステップが失敗します。そうすると、パイプラインプロセスが続行されなくなり、ベースラインからドリフトされたモデルは登録されず、`ClarifyCheck` と `QualityCheck` のステップは、比較対象となる特定のモデルパッケージグループの最新の承認済みモデルバージョンの `DriftCheckBaselines` を取得できるようになります。また、前のベースラインは、`supplied_baseline_constraints` から (`QualityCheck` ステップの場合は `supplied_baseline_statistics` に加えて) 直接提供できるようになり、モデルパッケージグループからプルされたベースラインよりも常に優先されます。

## Pipelines を使用したベースラインとモデルのバージョンのライフサイクルと進化
<a name="pipelines-quality-clarify-baseline-evolution"></a>

`ClarifyCheck` と `QualityCheck` のステップの `register_new_baseline` を `False` に設定すると、前のベースラインにステッププロパティのプレフィックス `BaselineUsedForDriftCheck` を使用してアクセスできるようになります。その後、[モデルステップ](build-and-manage-steps-types.md#step-type-model) にモデルを登録するときに、これらのベースラインを新しいモデルバージョンに `DriftCheckBaselines` として登録できます。モデルレジストリでこの新しいモデルバージョンを承認すると、このモデルバージョンの `DriftCheckBaseline` が次のパイプラインプロセスの `ClarifyCheck` ステップと `QualityCheck` ステップで使用できるようになります。将来のモデルバージョンで特定のチェックタイプのベースラインを更新する場合は、`register_new_baseline` を `True` に設定すると、プレフィックス `BaselineUsedForDriftCheck` の付いたプロパティが新しく計算されたベースラインになります。こうすることで、将来トレーニングするモデルの優先ベースラインを保持したり、必要に応じてドリフトチェックのベースラインを更新したりして、モデルトレーニングのイテレーション全体のベースラインの進化とライフサイクルを管理できます。

以下の図は、ベースラインの進化とライフサイクルをモデルバージョンを中心にして示しています。

![\[以下の図は、ベースラインの進化とライフサイクルをモデルバージョンを中心に説明しています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/pipelines/Baseline-Lifecycle.png)


# パイプライン実行をスケジュールする
<a name="pipeline-eventbridge"></a>

[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) を使用すると、Amazon SageMaker Pipelines の実行のスケジュールを設定できます。Amazon SageMaker Pipelines は、[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) のターゲットとしてサポートされています。これにより、イベントバス内の任意のイベントに基づいて、モデル構築パイプラインの実行を開始できます。EventBridge を使用すると、パイプラインの実行を自動化して、トレーニングジョブやエンドポイントのステータス変更などのイベントに自動的に対応できます。イベントには、Amazon S3 バケットへの新しいファイルのアップロード、ドリフトによる Amazon SageMaker AI エンドポイントのステータスの変更、*Amazon Simple Notification Service* (SNS) のトピックなどがあります。

自動的に開始できる Pipelines アクションは以下のとおりです。  
+  `StartPipelineExecution` 

SageMaker AI ジョブのスケーリングの詳細については、「[Amazon EventBridge を使用した SageMaker AI の自動化](https://docs.aws.amazon.com/sagemaker/latest/dg/automating-sagemaker-with-eventbridge.html)」を参照してください。

**Topics**
+ [Amazon EventBridge を使用してパイプラインをスケジュールする](#pipeline-eventbridge-schedule)
+ [SageMaker Python SDK でパイプラインをスケジュールする](#build-and-manage-scheduling)

## Amazon EventBridge を使用してパイプラインをスケジュールする
<a name="pipeline-eventbridge-schedule"></a>

Amazon CloudWatch Events を使用してパイプラインの実行を開始するには、EventBridge [ルール](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html)を作成する必要があります。イベントのルールを作成する際は、ルールにマッチするイベントを EventBridge が受信したときに実行するターゲットアクションを指定します。イベントがルールに一致すると、EventBridge は指定されたターゲットにイベントを送信し、ルールに定義されているアクションを開始します。

 以下のチュートリアルでは、EventBridge コンソールまたは AWS CLIを使用し、EventBridge でパイプラインの実行をスケジュールする方法を説明します。  

### 前提条件
<a name="pipeline-eventbridge-schedule-prerequisites"></a>
+ `SageMaker::StartPipelineExecution` アクセス許可で EventBridge が引き受けることができるロール。EventBridge コンソールからルールを作成すると、このロールは自動的に作成されます。それ以外の場合は、このロールを独自に作成する必要があります。SageMaker ロール作成の詳細については、「[SageMaker のロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。
+ スケジュールする Amazon SageMaker AI パイプライン。Amazon SageMaker AI Pipeline を作成するには、「[パイプラインを定義する](https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html)」を参照してください。

### EventBridge コンソールを使用して EventBridge ルールを作成する
<a name="pipeline-eventbridge-schedule-console"></a>

 以下の手順では、EventBridge コンソールを使用して EventBridge ルールを作成する方法を説明します。  

1. [EventBridge コンソール](https://console.aws.amazon.com/events)に移動します。

1. 左側にある **[Rules]** (ルール) を選択します。

1.  `Create Rule` を選択します。

1. ルールの名前と説明を入力します。

1.  このルールの開始方法を選択します。ルールには、次の選択肢があります。
   + **Event pattern** (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みパターンを選択した場合は、このパターンを編集してカスタマイズできます。イベントパターンの詳細については、「[CloudWatch Events のイベントパターン](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)」を参照してください。
   + **Schedule** (スケジュール): ルールは指定されたスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、[cron 式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions)を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。

1. 目的のイベントバスを選択します。

1. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを選択します。1 件のルールあたり最大 5 個のターゲットを追加できます。ターゲットドロップダウンリストで [`SageMaker Pipeline`] を選択します。

1. パイプラインのドロップダウンリストから、開始するパイプラインを選択します。

1. 名前と値のペアを使用して、パイプラインの実行に渡すパラメータを追加します。パラメータ値は、静的な値または動的な値を使用できます。Amazon SageMaker AI Pipeline のパラメータの詳細については、「[AWS::Events::Rule SagemakerPipelineParameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#aws-resource-sagemaker-pipeline-properties)」を参照してください。
   + 静的な値は、パイプラインが開始されるたびにパイプラインの実行に渡されます。例えば、`{"Name": "Instance_type", "Value": "ml.4xlarge"}` がパラメータリストに指定されている場合、EventBridge がパイプラインを開始するたびに、これがパラメータとして `StartPipelineExecutionRequest` に渡されます。
   + 動的な値は JSON パスを使用して指定します。EventBridge がイベントのペイロードから値を解析し、パイプラインの実行に渡します。例: *`$.detail.param.value`* 

1. このルールに使用するロールを選択します。既存のロールを使用するか、新しいロールを作成できます。

1. (オプション) タグを追加します。

1. `Create` を選択して、ルールを確定します。

 これでルールが有効になり、パイプラインの実行を開始する準備が整います。

### [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/events/index.html) を使用して EventBridge ルールを作成する
<a name="pipeline-eventbridge-schedule-cli"></a>

 以下の手順では、 AWS CLIを使用して EventBridge ルールを作成する方法を説明します。

1. 開始するルールを作成します。を使用して EventBridge ルールを作成する場合 AWS CLI、ルールの開始方法にはイベントパターンとスケジュールの 2 つのオプションがあります。
   +  **Event pattern** (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みのパターンを選択した場合は、このパターンを編集してカスタマイズできます。  次のコマンドを使用すると、イベントパターンによるルールを作成できます。

     ```
     aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
     ```
   +  **Schedule** (スケジュール): ルールは指定したスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、cron 式を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。次のコマンドを使用すると、スケジュールによるルールを作成できます。

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

1. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを追加します。1 件のルールあたり最大 5 個のターゲットを追加できます。  ターゲットごとに、以下を指定する必要があります。  
   +  ARN: パイプラインのリソース ARN。
   +  ロール ARN: パイプラインを実行するために EventBridge が引き受けるロールの ARN。
   +  パラメータ: 渡す Amazon SageMaker AI パイプラインパラメータ 

1. 以下のコマンドを実行し、[put-targets](https://docs.aws.amazon.com/cli/latest/reference/events/put-targets.html) を使用して、Amazon SageMaker AI パイプラインをルールのターゲットとして渡します。

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

## SageMaker Python SDK でパイプラインをスケジュールする
<a name="build-and-manage-scheduling"></a>

以降のセクションでは、SageMaker Python SDK を使用して EventBridge リソースにアクセスし、パイプラインスケジュールを作成するアクセス許可を設定する方法を説明します。

### 必要なアクセス許可
<a name="build-and-manage-scheduling-permissions"></a>

パイプラインスケジューラを使用するには、必要なアクセス許可が付与されている必要があります。以下の手順を実行して、アクセス許可を設定します。

1. パイプライントリガーの作成に使用される IAM ロールに次の最小権限ポリシーをアタッチするか、 AWS マネージドポリシー を使用します`AmazonEventBridgeSchedulerFullAccess`。

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

****  

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

------

1. このロールの信頼ポリシーにサービスプリンシパル `scheduler.amazonaws.com` を追加して、EventBridge との信頼関係を確立します。SageMaker Studio でノートブックを起動する場合は、以下の信頼ポリシーを実行ロールにアタッチします。

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

****  

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

------

### パイプラインのスケジュールを作成する
<a name="build-and-manage-scheduling-create"></a>

`PipelineSchedule` コンストラクタを使用すると、パイプラインを 1 回のみ実行したり、事前指定した間隔で実行したりするようにスケジュールできます。パイプラインスケジュールのタイプは、`at`、`rate`、`cron` である必要があります。このようなスケジュールタイプのセットは、[EventBridge スケジューリングオプション](https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html) の拡張機能です。`PipelineSchedule` クラスの使用方法の詳細については、「[sagemaker.workflow.triggers.PipelineSchedule](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#pipeline-schedule)」を参照してください。次の例は、`PipelineSchedule` を使用して各スケジュールタイプを作成する方法を説明しています。

```
from sagemaker.workflow.triggers import PipelineSchedule

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

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

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

**注記**  
1 回限りのスケジュールを作成し、現在の時刻にアクセスする必要がある場合は、`datetime.utcnow()` の代わりに `datetime.now()` を使用します。前者は現在のゾーンコンテキストを保存しないため、EventBridge に渡される時刻が不正確になります。

### トリガーをパイプラインにアタッチする
<a name="build-and-manage-scheduling-attach"></a>

`PipelineSchedule` をパイプラインにアタッチするには、作成したパイプラインオブジェクトでトリガーのリストを使用して `put_triggers` コールを呼び出します。レスポンス ARN を取得したら、アカウントでのスケジュール作成が正常に完了し、EventBridge は指定された時間または割合でターゲットパイプラインの呼び出しを開始します。親パイプラインにトリガーをアタッチするには、適切なアクセス許可が付与されたロールを指定する必要があります。指定しない場合、パイプラインは[設定ファイル](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-config.html)からパイプラインの作成に使用するデフォルトのロールを取得します。

次の例は、パイプラインにスケジュールをアタッチする方法を説明しています。

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

### 現在のトリガーを説明する
<a name="build-and-manage-scheduling-describe"></a>

作成したパイプライントリガーに関する情報を取得するには、トリガー名を使用して `describe_trigger()` API を呼び出します。このコマンドは、開始時刻、有効なステータス、その他の役に立つ情報など、作成されたスケジュール式の詳細を返します。次のスニペットは、呼び出しの例です。

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

### トリガーリソースをクリーンアップする
<a name="build-and-manage-scheduling-clean"></a>

パイプラインを削除する前に、既存のトリガーをクリーンアップして、アカウントのリソースリークを回避します。親パイプラインを破棄する前に、トリガーを削除する必要があります。トリガーを削除するには、トリガー名のリストを `delete_triggers` API に渡します。次のスニペットは、トリガーを削除する方法を説明しています。

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

**注記**  
トリガーを削除する際は、次の制限に注意する必要があります。  
トリガー名を指定してトリガーを削除するオプションは、SageMaker Python SDK でのみ使用できます。CLI または `DeletePipeline` API コールでパイプラインを削除しても、トリガーは削除されません。結果として、このトリガーは孤立状態となり、SageMaker AI は存在しないパイプラインの実行の開始を試行します。
別のノートブックセッションを使用している場合や、パイプラインのターゲットを既に削除している場合は、スケジューラ [CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/delete-schedule.html) または EventBridge コンソールを使用して、孤立状態となったスケジュールをクリーンアップすることができます。

# Amazon SageMaker Experiments の統合
<a name="pipelines-experiments"></a>

Amazon SageMaker Pipelines は Amazon SageMaker Experiments と密接に統合されています。デフォルトでは、Pipelines がパイプラインを作成して実行する際、次の SageMaker Experiments エンティティがない場合は作成されます。
+ パイプラインの実験
+ パイプラインの実行ごとの実行グループ
+ パイプラインの実行ステップで作成された各 SageMaker AI ジョブの実行グループに追加される実行

SageMaker AI モデルトレーニング実験の複数の実行グループでメトリクスを比較するのと同じように、複数のパイプラインの実行でモデルトレーニングの精度などのメトリクスを比較できます。

以下のサンプルは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の[Pipeline](https://github.com/aws/sagemaker-python-sdk/blob/v2.41.0/src/sagemaker/workflow/pipeline.py) に関連するパラメータを示しています。

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

パイプラインの実験と実行グループを作成しない場合は、`pipeline_experiment_config` を `None` に設定します。

**注記**  
Experiments の統合は Amazon SageMaker Python SDK v2.41.0 で導入されました。

以下の命名規則は、`pipeline_experiment_config` の `ExperimentName` と `TrialName` のパラメータで指定した内容に基づいて適用されます。
+ `ExperimentName` を指定しない場合は、パイプライン `name` が実験名に使用されます。

  `ExperimentName` を指定する合は、それが実験名に使用されます。同じ名前の実験がある場合は、パイプラインで作成された実行グループが既存の実験に追加されます。同じ名前の実験がない場合は、新しい実験が作成されます。
+ `TrialName` を指定しない場合は、パイプラインの実行 ID が実行グループ名に使用されます。

  `TrialName` を指定する合は、それが実行グループ名に使用されます。同じ名前の実行グループがある場合は、パイプラインで作成された実行が既存の実行グループに追加されます。同じ名前の実行グループが存在しない場合、新しい実行グループが作成されます。

**注記**  
エンティティを作成したパイプラインが削除されても、実験エンティティは削除されません。SageMaker Experments API を使用すると、エンティティを削除できます。

パイプラインに関連付けられた SageMaker AI Experiment エンティティを表示する方法については、「[パイプラインから実験データにアクセスする](pipelines-studio-experiments.md)」を参照してください。SageMaker Experiments の詳細については、「[Studio Classic の Amazon SageMaker Experiments](experiments.md)」を参照してください。

以下のセクションでは、ここまでのルールのサンプルと、パイプライン定義ファイルでのルールの記述方法を紹介します。パイプライン定義ファイルの詳細については、「[Pipelines の概要](pipelines-overview.md)」を参照してください。

**Topics**
+ [デフォルトの動作](pipelines-experiments-default.md)
+ [Experiments の統合を無効にする](pipelines-experiments-none.md)
+ [カスタム実験名を指定する](pipelines-experiments-custom-experiment.md)
+ [カスタム実行グループ名を指定する](pipelines-experiments-custom-trial.md)

# デフォルトの動作
<a name="pipelines-experiments-default"></a>

**パイプラインを作成する**

SageMaker AI Pipeline を作成する際のデフォルトの動作は、SageMaker Experiments と自動的に統合することです。カスタム設定を指定しない場合、SageMaker AI はパイプラインと同じ名前の実験と、パイプライン実行 ID を名前として使用したパイプライン実行ごとに実行グループを作成し、パイプラインステップの一環として起動されるすべての SageMaker AI ジョブを各実行グループ内で個別に実行します。モデルトレーニング実験を分析する方法と同様、さまざまなパイプライン実行間でメトリクスをシームレスに追跡して比較できます。次のセクションでは、実験の統合を明示的に設定せずにパイプラインを定義する場合の、このようなデフォルトの動作を説明します。

`pipeline_experiment_config` は省略されています。`ExperimentName` のデフォルトはパイプライン `name` に、`TrialName` のデフォルトは実行 ID になります。

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

**パイプライン定義ファイル**

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

# Experiments の統合を無効にする
<a name="pipelines-experiments-none"></a>

**パイプラインを作成する**

パイプラインを定義する際、`pipeline_experiment_config` パラメータを `None` に設定することで、パイプラインと SageMaker Experiments の統合を無効にできます。この方法で、SageMaker AI は、パイプライン実行に関連付けられたメトリクスとアーティファクトを追跡するために、実験、実行グループ、または個別の実行を自動的に作成しなくなります。次の例では、パイプライン設定パラメータを `None` に設定しています。

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

**パイプライン定義ファイル**

前のデフォルトの例と同じですが、`PipelineExperimentConfig` がありません。

# カスタム実験名を指定する
<a name="pipelines-experiments-custom-experiment"></a>

デフォルトの動作では、SageMaker Experiments で パイプライン名をの実験名として使用します。これを上書きして、代わりにカスタム実験名を指定することができます。これは、分析と比較が容易になるように、複数のパイプライン実行を同じ実験にグループ化する場合に役立ちます。実行グループ名は、明示的にカスタム名を設定しない限り、デフォルトでパイプライン実行 ID に設定されます。次のセクションでは、実行グループ名をデフォルトの実行 ID のままにして、カスタム実験名でパイプラインを作成する方法を説明します。

**パイプラインを作成する**

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

**パイプライン定義ファイル**

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

# カスタム実行グループ名を指定する
<a name="pipelines-experiments-custom-trial"></a>

カスタム実験名の設定に加えて、パイプラインの実行中に SageMaker Experiments が作成する実行グループのカスタム名を指定することもできます。実行グループの名前には、一意性を確保するためにパイプライン実行 ID が追加されます。カスタム実行グループ名を指定して、同じ実験内の関連するパイプライン実行を特定して分析できます。次のセクションでは、実験名にはデフォルトのパイプライン名を使用して、カスタム実行グループ名を使ってパイプラインを定義する方法を説明します。

**パイプラインを作成する**

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

**パイプライン定義ファイル**

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

# ローカルモードを使用してパイプラインを実行する
<a name="pipelines-local-mode"></a>

SageMaker Pipelines のローカルモードを使用すると、マネージド SageMaker AI サービスでパイプラインを実行する前に、トレーニング、処理、推論スクリプトや、[パイプラインパラメータ](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#pipeline-parameters)のランタイム互換性を簡単にテストできます。ローカルモードを使用すると、より小規模なデータセットを使用して SageMaker AI パイプラインをローカルでテストできます。これにより、マネージドサービスの使用コストをかけずに、ユーザースクリプトやパイプライン定義自体のエラーをすばやく簡単にデバッグできます。次のトピックでは、パイプラインをローカルで定義して実行する方法について説明します。

パイプラインのローカルモードは、内部で [SageMaker ジョブのローカルモード](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode) を利用します。これは SageMaker Python SDK の機能であり、Docker コンテナを使用して SageMaker AI の組み込みイメージまたはカスタムイメージをローカルで実行することができます。パイプラインのローカルモードは SageMaker AI ジョブのローカルモードを基盤に構築されています。そのため、これらのジョブを別々に実行した場合と同じ結果が得られることが期待できます。例えば、ローカルモードでは引き続き Amazon S3 を使用してモデルアーティファクトをアップロードし、出力を処理します。ローカルジョブによって生成されたデータをローカルディスクに保存したい場合は、「[Local Mode](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)」で説明されている設定を使用できます。

パイプラインローカルモードは現在、以下のステップタイプをサポートしています。
+ [トレーニングステップ](build-and-manage-steps-types.md#step-type-training)
+ [処理ステップ](build-and-manage-steps-types.md#step-type-processing)
+ [変換ステップ](build-and-manage-steps-types.md#step-type-transform)
+ [モデルステップ](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-model-create) ([モデルの作成] 引数を使用する場合のみ)
+ [条件ステップ](build-and-manage-steps-types.md#step-type-condition)
+ [Fail ステップ](build-and-manage-steps-types.md#step-type-fail)

[並列処理設定](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#parallelism-configuration)を使用して複数のステップを並行して実行できるマネージドパイプラインサービスとは対照的に、ローカルのパイプラインエグゼキューターはステップを順番に実行します。そのため、ローカルパイプラインの全体的な実行パフォーマンスはクラウド上で実行されるパイプラインよりも劣る可能性があります。このパフォーマンスは主に、データセットのサイズ、アルゴリズム、ローカルコンピューターの処理能力に依存します。また、ローカルモードで実行されたパイプラインは [SageMaker Experiments](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-experiments.html) には記録されないことにも注意してください。

**注記**  
パイプラインのローカルモードは、XGBoost などの SageMaker AI アルゴリズムとは互換性がありません。これらのアルゴリズムを使用する場合は、[スクリプトモード](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html)で使用する必要があります。

パイプラインをローカルで実行するには、パイプラインステップとパイプライン自体に関連付けられた `sagemaker_session` フィールドが `LocalPipelineSession` 型と一致している必要があります。次の例は、ローカルで実行される SageMaker AI パイプラインを定義する方法を示しています。

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

local_pipeline_session = LocalPipelineSession()

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

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

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

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

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

steps = execution.list_steps()

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

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

SageMaker Pipelines マネージドサービスでパイプラインを実行する準備ができたら、前のコードスニペットの `LocalPipelineSession` を (次のコードサンプルに示すように) `PipelineSession` に置き換え、コードを再実行することでパイプラインを実行できます。

```
from sagemaker.workflow.pipeline_context import PipelineSession

pipeline_session = PipelineSession()
```

# Amazon SageMaker Pipelines のトラブルシューティング
<a name="pipelines-troubleshooting"></a>

Amazon SageMaker Pipelines を使用する際に、さまざまな理由で問題が発生する場合があります。このトピックでは、一般的なエラーとその解決方法を説明します。

 **パイプライン定義の問題** 

パイプライン定義が正しくフォーマットされていない可能性があります。その結果として  実行が失敗したり、ジョブが不正確になったりすることがあります。これらのエラーは、パイプラインが作成されたとき、または実行が発生したときに見つかります。定義が検証されない場合、Pipelines は JSON ファイル内のフォーマットに問題がある文字を特定するエラーメッセージを返します。この問題を解決するには、SageMaker AI Python SDK を使用して作成されたステップが正確かどうかを確認します。

パイプライン定義にステップを含めることができるのは 1 回のみです。このため、ステップは、条件ステップの一部*かつ*同じパイプライン内のパイプラインとして同時に存在することはできません。

 **パイプラインログを確認する** 

以下のコマンドを使用すると、ステップのステータスを表示できます。

```
execution.list_steps()
```

各ステップには、以下の情報が含まれます。
+ パイプラインが起動するエンティティの ARN (SageMaker ジョブ ARN、モデル ARN、モデルパッケージ ARN など) 
+ 失敗の理由には、ステップの失敗の簡単な説明が含まれます。
+ ステップが条件ステップの場合、条件が true または false のどちらに評価されるかが含まれます。  
+ 実行で前のジョブ実行を再利用する場合は、`CacheHit` にソースの実行が一覧表示されます。  

Amazon SageMaker Studio インターフェイスでエラーメッセージとログを表示することもできます。Studio でログを確認する方法については、「[パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)」を参照してください。

 **アクセス許可がない** 

パイプラインの実行を作成するロールや、パイプラインの実行の各ジョブを作成するステップには、適切なアクセス許可が必要です。これらのアクセス許可がないと、パイプラインの実行を送信したり、SageMaker AI ジョブを期待どおりに実行したりできないことがあります。アクセス許可が適切に設定されていることを確認する方法については、「[IAM アクセス管理](build-and-manage-access.md)」を参照してください。

 **ジョブ実行エラー** 

SageMaker AI ジョブの機能を定義するスクリプトの問題により、ステップの実行時に問題が発生する場合があります。それぞれのジョブには一連の CloudWatch ログがあります。これらのログを Studio から表示する方法については、「[パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)」を参照してください。SageMaker AI の CloudWatch ログの使用の詳細については、「[Amazon SageMaker AI 用 CloudWatch Logs](logging-cloudwatch.md)」を参照してください。

 **プロパティファイルのエラー** 

パイプラインでプロパティファイルが正しく実装されないと、問題が発生することがあります。プロパティファイルの実装が期待どおりに動作するようにする方法については、「[ステップ間でデータを渡す](build-and-manage-propertyfile.md)」を参照してください。

 **Dockerfile 内のコンテナにスクリプトをコピーする際の問題** 

次のコードサンプルに示されるとおり、スクリプトはコンテナにコピーするか、`entry_point` 引数 (推定エンティティ) または `code` 引数 (プロセッサエンティティ) を介して渡すことができます。

```
step_process = ProcessingStep(
    name="PreprocessAbaloneData",
    processor=sklearn_processor,
    inputs = [
        ProcessingInput(
            input_name='dataset',
            source=...,
            destination="/opt/ml/processing/code",
        )
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train", destination = processed_data_path),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation", destination = processed_data_path),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test", destination = processed_data_path),
    ],
    code=os.path.join(BASE_DIR, "process.py"), ## Code is passed through an argument
    cache_config = cache_config,
    job_arguments = ['--input', 'arg1']
)

sklearn_estimator = SKLearn(
    entry_point=os.path.join(BASE_DIR, "train.py"), ## Code is passed through the entry_point
    framework_version="0.23-1",
    instance_type=training_instance_type,
    role=role,
    output_path=model_path, # New
    sagemaker_session=sagemaker_session, # New
    instance_count=1, # New
    base_job_name=f"{base_job_prefix}/pilot-train",
    metric_definitions=[
        {'Name': 'train:accuracy', 'Regex': 'accuracy_train=(.*?);'},
        {'Name': 'validation:accuracy', 'Regex': 'accuracy_validation=(.*?);'}
    ],
)
```

# Pipelines のアクション
<a name="pipelines-build"></a>

Amazon SageMaker Pipelines Python SDK または Amazon SageMaker Studio のドラッグアンドドロップビジュアルデザイナーを使用して、ML ワークフローを作成、表示、編集、実行、モニタリングできます。

Amazon SageMaker Pipelines の作成と管理に使用できるビジュアルデザイナーは、次のスクリーンショットのとおりです。

![\[Studio の Pipelines のビジュアルドラッグアンドドロップインターフェイスのスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


パイプラインがデプロイされると、Amazon SageMaker Studio を使用してパイプラインの Directed Acyclic Graph (DAG) を表示したり、実行を管理したりできます。SageMaker Studio を使用すると、現在および過去のパイプラインに関する情報の取得、実行の比較、実行の DAG の参照、メタデータ情報の取得などを行うことができます。Studio からパイプラインを表示する方法の詳細については、「[パイプラインの詳細を表示する](pipelines-studio-list.md)」を参照してください。

**Topics**
+ [パイプラインを定義する](define-pipeline.md)
+ [パイプラインを編集する](edit-pipeline-before-execution.md)
+ [パイプラインを実行する](run-pipeline.md)
+ [パイプラインを停止する](pipelines-studio-stop.md)
+ [パイプラインの詳細を表示する](pipelines-studio-list.md)
+ [パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)
+ [パイプライン定義ファイルをダウンロードする](pipelines-studio-download.md)
+ [パイプラインから実験データにアクセスする](pipelines-studio-experiments.md)
+ [パイプラインのリネージを追跡する](pipelines-lineage-tracking.md)

# パイプラインを定義する
<a name="define-pipeline"></a>

Amazon SageMaker Pipelines を使用してワークフローをオーケストレートするには、JSON パイプライン定義の形式で有向非巡回グラフ (DAG) を生成する必要があります。DAG を使用すると、データの前処理、モデルトレーニング、モデル評価、モデルデプロイなど、ML プロセスに関するさまざまなステップや、このようなステップ間のデータの依存関係とフローを指定できます。次のトピックでは、パイプライン定義を生成する方法を説明します。

JSON パイプライン定義は、SageMaker Python SDK または Amazon SageMaker Studio のビジュアルドラッグアンドドロップパイプラインデザイナー機能を使用して生成できます。このチュートリアルで作成するパイプライン DAG は、次の画像のとおりです。

![\[Studio の Pipelines のビジュアルドラッグアンドドロップインターフェイスのスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/pipelines/pipelines-studio-overview.png)


以降のセクションで定義するパイプラインは、リグレッションに関する問題を解決し、物理的な測定値に基づいてアワビの年齢を決定します。このチュートリアルのコンテンツを含む、実行可能な Jupyter Notebook については、「[Orchestrating Jobs with Amazon SageMaker Model Building Pipelines](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.html)」を参照してください。

**注記**  
モデルの場所をトレーニングステップのプロパティとして参照できます。Github でエンドツーエンドの例 [CustomerChurn pipeline](https://github.com/aws-samples/customer-churn-sagemaker-pipelines-sample/blob/main/pipelines/customerchurn/pipeline.py) を参照してください。

**Topics**

## パイプラインを定義する (Pipeline Designer)
<a name="create-pipeline-designer"></a>

以下のウォークスルーでは、ドラッグアンドドロップ Pipeline Designer を使用して、基本のパイプラインを作成する手順について説明します。ビジュアルデザイナーでパイプライン編集セッションを一時停止または終了する必要がある場合は、**[エクスポート]** オプションをクリックします。これにより、パイプラインの現在の定義をローカル環境にダウンロードできます。その後、パイプライン編集プロセスを再開する場合は、同じ JSON 定義ファイルをビジュアルデザイナーにインポートできます。

### 処理ステップを作成する
<a name="create-processing-step"></a>

データ処理ジョブステップを作成するには、次の手順を実行します。

1. 「[Amazon SageMaker Studio を起動する](studio-updated-launch.md)」の手順に従って、Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. **[作成]** を選択します。

1. **[指定なし]** をクリックします。

1. 左側のサイドバーで、**[データ処理]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[データ処理]** ステップを選択します。

1. 入力データセットを追加するには、右側のサイドバーの **[データ (入力)]** の下にある **[追加]** を選択して、データセットを選択します。

1. 出力データセットを保存する場所を追加するには、右側のサイドバーの **[データ (出力)]** の下にある **[追加]** を選択して、保存先に移動します。

1. 右側のサイドバーの残りのフィールドに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.ProcessingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.ProcessingStep)」を参照してください。

### トレーニングステップを作成する
<a name="create-training-step"></a>

モデルトレーニングステップを設定するには、次の手順を実行します。

1. 左側のサイドバーで、**[モデルをトレーニング]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルをトレーニング]** ステップを選択します。

1. 入力データセットを追加するには、右側のサイドバーの **[データ (入力)]** の下にある **[追加]** を選択して、データセットを選択します。

1. モデルアーティファクトを保存する場所を選択するには、**[場所 (S3 URI)]** フィールドに Amazon S3 URI を入力するか、**[S3 を参照]** をクリックして、送信先の場所に移動します。

1. 右側のサイドバーの残りのフィールドに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.steps.TrainingStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.steps.TrainingStep)」を参照してください。

1. カーソルをクリックして、前のセクションで追加した **[データ処理]** ステップから **[モデルトレーニング]** ステップにドラッグし、2 つのステップを接続するエッジを作成します。

### モデル登録ステップを使用してモデルパッケージを作成する
<a name="create-register-model-step"></a>

モデル登録ステップを使用してモデルパッケージを作成するには、次の手順を実行します。

1. 左側のサイドバーで、**[モデルの登録]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルの登録]** ステップを選択します。

1. 登録するモデルを選択するには、**[モデル (入力)]** の下にある **[追加]** をクリックします。

1. **[モデルグループを作成]** をクリックして、モデルを新しいモデルグループに追加します。

1. 右側のサイドバーの残りのフィールドに入力します。これらのタブのフィールドの詳細については、「[sagemaker.workflow.step\$1collections.RegisterModel](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.step_collections.RegisterModel)」を参照してください。

1. カーソルをクリックして、前のセクションで追加した **[モデルトレーニング]** ステップから **[モデル登録]** ステップにドラッグし、2 つのステップを接続するエッジを作成します。

### デプロイモデル (エンドポイント) ステップを使用してモデルをエンドポイントにデプロイする
<a name="create-deploy-endpoint-step"></a>

モデルデプロイステップを使用してモデルをデプロイするには、次の手順を実行します。

1. 左側のサイドバーで、**[モデルの登録 (エンドポイント)]** を選択し、キャンバスにドラッグします。

1. キャンバスで、追加した **[モデルのデプロイ (エンドポイント)]** ステップを選択します。

1. デプロイするモデルを選択するには、**[モデル (入力)]** の下にある **[追加]** をクリックします。

1. **[エンドポイントの作成]** ラジオボタンをオンにして、新しいエンドポイントを作成します。

1. エンドポイントの **[名前]** と **[説明]** を入力します。

1. カーソルをクリックして、前のセクションで追加した **[モデル登録]** ステップから **[モデルのデプロイ (エンドポイント)]** ステップにドラッグし、2 つのステップを接続するエッジを作成します。

1. 右側のサイドバーの残りのフィールドに入力します。

### パイプラインパラメータを定義する
<a name="define-pipeline-parameters"></a>

実行ごとに値を更新できるパイプラインパラメータのセットを設定できます。パイプラインのパラメータを定義してデフォルト値を設定するには、ビジュアルデザイナーの下部にある歯車アイコンをクリックします。

### パイプラインを保存する
<a name="save-pipeline"></a>

パイプラインを作成するために必要な情報をすべて入力したら、ビジュアルデザイナーの下部にある **[保存]** をクリックします。これにより、ランタイムでパイプラインの潜在的なエラーが検証され、通知が送信されます。自動検証チェックでフラグが付けられたエラーすべてに対処するまで、**[保存]** オペレーションは正常に完了しません。後で編集を再開する場合は、進行中のパイプラインをローカル環境に JSON 定義として保存できます。ビジュアルデザイナーの下部にある **[エクスポート]** ボタンをクリックすると、パイプラインを JSON 定義ファイルとしてエクスポートできます。その後、パイプラインの更新を再開するには、**[インポート]** ボタンをクリックして、この JSON 定義ファイルをアップロードします。

## パイプラインを定義する (SageMaker Python SDK)
<a name="create-pipeline-wrap"></a>

### 前提条件
<a name="define-pipeline-prereq"></a>

 次のチュートリアルを実行するには、以下を実行する必要があります。
+ 「[ノートブックインスタンスを作成する](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-create-ws.html)」の説明に従って、ノートブックインスタンスを設定します。これにより、Amazon S3 での読み取りと書き込み、SageMaker AI でのトレーニング、バッチ変換、処理ジョブの作成のアクセス許可がロールに付与されます。
+ 「[ロールのアクセス許可ポリシーの変更 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)」に示すように、独自のロールを取得および渡すアクセス許可をノートブックに付与します。次の JSON スニペットを追加して、このポリシーをロールにアタッチします。`<your-role-arn>` をノートブックインスタンスの作成に使用する ARN に置き換えます。

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

****  

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

------
+  「[ロールの信頼ポリシーの変更](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-cli.html#roles-managingrole_edit-trust-policy-cli)」の手順に従って、SageMaker AI サービスプリンシパルを信頼します。ロールの信頼関係に次のステートメントの断片を追加します。

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

#### 環境をセットアップする
<a name="define-pipeline-prereq-setup"></a>

次のコードブロックを使用して、新しい SageMaker AI セッションを作成します。このコードブロックでは、セッションのロール ARN が返されます。このロール ARN は、前提条件として設定した実行ロール ARN になります。

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

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

pipeline_session = PipelineSession()

model_package_group_name = f"AbaloneModelPackageGroupName"
```

### パイプラインを作成する
<a name="define-pipeline-create"></a>

**重要**  
Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。詳細については、「[SageMaker AI リソースにタグ付けのアクセス許可を付与する](security_iam_id-based-policy-examples.md#grant-tagging-permissions)」を参照してください。  
SageMaker リソースを作成するためのアクセス許可を付与する [AWS Amazon SageMaker AI の マネージドポリシー](security-iam-awsmanpol.md) には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

SageMaker AI ノートブックインスタンスから次のステップを実行して、以下のステップを含むパイプラインを作成します。
+ 前処理
+ トレーニング
+ 評価
+ 条件評価
+ モデル登録

**注記**  
[ExecutionVariables](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#execution-variables) と [Join](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#execution-variables) 関数を使用して出力場所を指定できます。`ExecutionVariables` はランタイムで解決されます。例えば、`ExecutionVariables.PIPELINE_EXECUTION_ID` は現在の実行の ID に解決されます。この ID は、実行ごとに一意の識別子として使用できます。

#### ステップ 1: データセットをダウンロードする
<a name="define-pipeline-data-download"></a>

このノートブックでは、UCI Machine Learning Abalone Dataset を使用します。データセットには、次の特徴が含まれています。
+ `length` - アワビの最長の殻の測定値。
+ `diameter` - アワビの長さに垂直な直径。
+ `height` - 殻に身が入った状態のアワビの高さ。
+ `whole_weight` - アワビ全体の重量。
+ `shucked_weight` - アワビから取り出した身の重量。
+ `viscera_weight` - 血を抜いた後のアワビの内臓の重量。
+ `shell_weight` - 身を取り除き乾燥させた後のアワビの殻の重量。
+ `sex` - アワビの性別。「M」、「F」、「I」のいずれか。「I」は子供のアワビを表す。
+ `rings` - アワビの殻の輪の数。

アワビの殻の輪の数によって、年齢の近似値が求められます (公式 `age=rings + 1.5` を使用)。ただし、このような数値の取得には時間がかかります。コーンから殻を切断し、断面を染色して、顕微鏡で覗きながら輪の数を数えなければなりません。ただし、その他の物理的な測定値は簡単に入手できます。このノートブックではデータセットを使用し、他の物理的な測定値を用いた不定の輪の数の予測モデルを構築します。

**データセットをダウンロードするには**

1. アカウントのデフォルトの Amazon S3 バケットにデータセットをダウンロードします。

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

1. モデルを作成したら、バッチ変換用の 2 つ目のデータセットをダウンロードします。

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

#### ステップ 2: パイプラインのパラメータを定義する
<a name="define-pipeline-parameters"></a>

 このコードブロックは、パイプラインの以下のパラメータを定義します。
+  `processing_instance_count` - 処理ジョブのインスタンス数。
+  `input_data` - 入力データの Amazon S3 の場所。
+  `batch_data` - バッチ変換用の入力データの Amazon S3 の場所。
+  `model_approval_status` - CI/CD のトレーニング済みモデルを登録するための承認ステータス。詳細については、「[SageMaker プロジェクトを使用した MLOps の自動化](sagemaker-projects.md)」を参照してください。

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

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

#### ステップ 3: 特徴量エンジニアリングの処理ステップを定義する
<a name="define-pipeline-processing-feature"></a>

このセクションでは、データセットからトレーニング用のデータを準備するための処理ステップの作成方法を説明します。

**処理ステップを作成するには**

1.  処理スクリプト用のディレクトリを作成します。

   ```
   !mkdir -p abalone
   ```

1. `/abalone` ディレクトリに次の内容で `preprocessing.py` というファイルを作成します。この前処理スクリプトは、入力データの実行のための処理ステップに渡されます。次に、トレーニングステップでは、前処理されたトレーニング機能とラベルを使用してモデルをトレーニングします。評価ステップでは、トレーニング済みモデル、前処理済みテスト機能、ラベルを使用してモデルを評価します。スクリプトは `scikit-learn` を使用して次の処理を実行します。
   +  不足している `sex` カテゴリデータと入力し、トレーニング用にエンコードします。
   +  `rings` と `sex` を除くすべての数値フィールドをスケーリングして正規化します。
   +  データをトレーニング、テスト、検証のデータセットに分割します。

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

1.  `SKLearnProcessor` のインスタンスを作成して処理ステップに渡します。

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

1. 処理ステップを作成します。このステップは、`SKLearnProcessor`、入出力チャネル、作成した `preprocessing.py` スクリプトを受け取ります。これは、SageMaker AI Python SDK のプロセッサインスタンスの `run` メソッドと非常によく似ています。`ProcessingStep` に渡される `input_data` パラメータはステップ自体の入力データです。この入力データは、プロセッサインスタンスの実行時に使用されます。

    `"train`、`"validation`、`"test"` で指定されるチャネルは、処理ジョブの出力設定で指定されたものになります。このようなステップの `Properties` は、後続のステップで使用し、ランタイム中にランタイム値に解決できます。

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

#### ステップ 4: にトレーニングステップを定義する
<a name="define-pipeline-training"></a>

このセクションでは、SageMaker AI の [XGBoost アルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html)を使用して、処理ステップから出力されたトレーニングデータでモデルをトレーニングする方法を説明します。

**トレーニングステップを定義するには**

1.  トレーニングからモデルを保存するモデルパスを指定します。

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

1. XGBoost アルゴリズムの推定器と入力データセットを設定します。トレーニングインスタンスタイプは推定器に渡されます。一般的なトレーニングスクリプトは、以下のとおりです。
   + 入力チャネルからデータをロードする
   + ハイパーパラメータを使用してトレーニングを設定する
   + モデルをトレーニングする
   + モデルを `model_dir` に保存して、後でホストできるようにする

   SageMaker AI はトレーニングジョブの終了時に、`model.tar.gz` の形式でモデルを Amazon S3 にアップロードします。

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

1. 推定器インスタンスのプロパティと `ProcessingStep` のプロパティを使用して `TrainingStep` を作成します。`"train"` 出力チャネルと `"validation"` 出力チャネルの `S3Uri` を `TrainingStep` に渡します。  

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

#### ステップ 5: モデル評価の処理ステップを定義する
<a name="define-pipeline-processing-model"></a>

このセクションでは、モデルの精度を評価するための処理ステップの作成方法を説明します。このモデル評価の結果は、条件ステップで実行する実行パスを決定するために使用されます。

**モデル評価の処理ステップを定義するには**

1. `/abalone` ディレクトリに `evaluation.py` という名前のファイルを作成します。このスクリプトは、モデル評価を実行するための処理ステップで使用されます。トレーニング済みのモデルとテストデータセットを入力として受け取り、分類評価メトリクスを含む JSON ファイルを生成します。

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

1.  `ProcessingStep` の作成に使用される `ScriptProcessor` のインスタンスを作成します。

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

1.  プロセッサインスタンス、入力チャネルと出力チャネル、`evaluation.py` スクリプトを使用して `ProcessingStep` を作成します。以下を渡します。
   + `step_train` トレーニングステップの `S3ModelArtifacts` プロパティ
   + `step_process` 処理ステップの `"test"` 出力チャネルの `S3Uri`

   これは、SageMaker AI Python SDK のプロセッサインスタンスの `run` メソッドと非常によく似ています。  

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

#### ステップ 6: バッチ変換用の CreateModelStep を定義する
<a name="define-pipeline-create-model"></a>

**重要**  
SageMaker Python SDK v2.90.0 以降では、[モデルステップ](build-and-manage-steps-types.md#step-type-model) を使用してモデルを作成することをお勧めします。`CreateModelStep` は SageMaker Python SDK の以前のバージョンでも引き続き動作しますが、サポートは終了しました。

このセクションでは、トレーニングステップの出力から SageMaker AI モデルを作成する方法を説明します。このモデルは、新しいデータセットのバッチ変換に使用されます。このステップは条件ステップに渡され、条件ステップが `true` と評価された場合にのみ実行されます。

**バッチ変換用の CreateModelStep を定義するには**

1.  SageMaker AI モデルを作成します。`step_train` トレーニングステップの `S3ModelArtifacts` プロパティを渡します。

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

1. SageMaker AI モデルのモデル入力を定義します。

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

1. `CreateModelInput` と定義した SageMaker AI モデルインスタンスを使用して、`CreateModelStep` を作成します。

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

#### ステップ 7: バッチ変換を実行するための TransformStep を定義する
<a name="define-pipeline-transform"></a>

このセクションでは、モデルのトレーニング後にデータセットにバッチ変換を実行する `TransformStep` の作成方法を説明します。このステップは条件ステップに渡され、条件ステップが `true` と評価された場合にのみ実行されます。

**バッチ変換を実行するための TransformStep を定義するには**

1. 該当するコンピューティングインスタンスタイプ、インスタンス数、目的の出力 Amazon S3 バケット URI を使用して、トランスフォーマーインスタンスを作成します。`step_create_model` `CreateModel` ステップの `ModelName` プロパティを渡します。

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

1. 定義したトランスフォーマーインスタンスと`batch_data` パイプラインパラメータを使用して、`TransformStep` を作成します。

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

#### ステップ 8: モデルパッケージを作成するための RegisterModel ステップを定義する
<a name="define-pipeline-register"></a>

**重要**  
SageMaker Python SDK の v2.90.0 以降では、[モデルステップ](build-and-manage-steps-types.md#step-type-model) を使用してモデルを登録することをお勧めします。`RegisterModel` は SageMaker Python SDK の以前のバージョンでも引き続き動作しますが、現在サポートは終了しています。

このセクションでは、`RegisterModel` のインスタンスを作成する方法を説明します。パイプラインで `RegisterModel` を実行すると、モデルパッケージが作成されます。モデルパッケージは、再利用可能なモデルアーティファクトを抽象化したものであり、推論に必要なすべての成分がまとめられています。オプションのモデルの重みの場所と共に使用する推論イメージを定義する推論仕様で構成されます。モデルパッケージグループは、モデルパッケージがまとめられたものです。Pipelines で `ModelPackageGroup` を使用すると、パイプラインの実行ごとに新しいバージョンとモデルパッケージをグループに追加できます。モデルのレジストリの詳細については、「[Model Registry を使用したモデル登録デプロイ](model-registry.md)」をご参照ください。

このステップは条件ステップに渡され、条件ステップが `true` と評価された場合にのみ実行されます。

**モデルパッケージを作成するための RegisterModel ステップを定義するには**
+  トレーニングステップに使用した推定器インスタンスを使用して `RegisterModel` ステップを作成します。`step_train` トレーニングステップの `S3ModelArtifacts` プロパティを渡し、`ModelPackageGroup` を作成します。パイプラインは、この `ModelPackageGroup` を自動的に作成します。

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

#### ステップ 9: モデルの精度を検証するための条件ステップを定義する
<a name="define-pipeline-condition"></a>

`ConditionStep` を使用すると、ステッププロパティの条件に基づいて、パイプライン DAG での条件付き実行が Pipelines でサポートされるようになります。この場合、モデルの精度が求められる値を超える場合にのみ、モデルパッケージを登録します。モデルの精度は、モデル評価ステップによって決まります。精度が必要な値を超過すると、パイプラインは SageMaker AI モデルも作成し、データセットに対してバッチ変換を実行します。このセクションでは、条件ステップを定義する方法を説明します。

**モデルの精度を検証するための条件ステップを定義するには**

1.  モデル評価の処理ステップ `step_eval` の出力で見つかった精度値を使用して、`ConditionLessThanOrEqualTo` 条件を定義します。この出力を取得するには、処理ステップでインデックス付けしたプロパティファイルと、平均二乗誤差値 `"mse"` のそれぞれの JSONPath を使用します。

   ```
   from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo
   from sagemaker.workflow.condition_step import ConditionStep
   from sagemaker.workflow.functions import JsonGet
   
   
   cond_lte = ConditionLessThanOrEqualTo(
       left=JsonGet(
           step_name=step_eval.name,
           property_file=evaluation_report,
           json_path="regression_metrics.mse.value"
       ),
       right=6.0
   )
   ```

1.  `ConditionStep` を作成します。`ConditionEquals` 条件を渡し、条件が満たされた場合の次のステップとなる、モデルパッケージの登録ステップとバッチ変換ステップを設定します。

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

#### ステップ 10: パイプラインを作成する
<a name="define-pipeline-pipeline"></a>

以上ですべてのステップが作成できました。次は、それらのステップをパイプラインに結合します。

**パイプラインを作成するには**

1.  パイプラインの `name`、`parameters`、`steps` を定義します。名前は、`(account, region)` ペア内で一意である必要があります。
**注記**  
ステップは、パイプラインのステップリストまたは条件ステップの if/else ステップリストに 1 回のみ表示できます。また、両方に表示することはできません。

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

1.  (オプション) JSON パイプラインの定義を調べて、フォーマットに誤りがないことを確認します。

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

 パイプライン定義を SageMaker AI に送信する準備が整いました。次のチュートリアルでは、このパイプラインを SageMaker AI に送信し、実行を開始します。

## パイプラインを定義する (JSON)
<a name="collapsible-section-1"></a>

[boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_pipeline) または [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html) を使用してパイプラインを作成することもできます。パイプラインを作成するには、パイプライン定義が必要です。パイプライン定義は、パイプラインの各ステップを定義する JSON オブジェクトです。SageMaker SDK は、パイプライン定義を構築する簡単な方法を提供します。パイプライン定義は、前述の任意の API と共に使用してパイプライン自体を作成できます。SDK を使用しない場合、ユーザーはパイプラインを作成するために生の JSON 定義を記述する必要があり、SageMaker Python SDK によるエラーチェックは利用できません。パイプライン JSON 定義のスキーマを確認するには、「[SageMaker AI パイプライン定義 JSON スキーマ](https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/)」を参照してください。次のコードサンプルは、SageMaker AI パイプライン定義 JSON オブジェクトの例を説明しています。

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

 **次のステップ:** [パイプラインを実行する](run-pipeline.md) 

# パイプラインを編集する
<a name="edit-pipeline-before-execution"></a>

パイプラインを実行する前にパイプラインを変更するには、次の手順を実行します。

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio を開きます。

1. Studio の左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. パイプラインを選択して、パイプラインの詳細を表示します。

1. **[実行]** タブをクリックします。

1. パイプライン実行名を選択します。

1. **[編集]** をクリックして Pipeline Designer を開きます。

1. 必要に応じてステップ間のエッジやステップ設定を更新し、**[保存]** をクリックします。

   編集後にパイプラインを保存すると、新しいバージョン番号が自動的に生成されます。

1. **[Run]** (実行) を選択します。

# パイプラインを実行する
<a name="run-pipeline"></a>

パイプラインのステップを有向非巡回グラフ (DAG) として定義した後、パイプラインを実行して、DAG で定義したステップを実行できます。次のウォークスルーでは、Amazon SageMaker Studio のドラッグアンドドロップビジュアルエディタまたは Amazon SageMaker Python SDK を使用して、Amazon SageMaker AI パイプラインを実行する方法を説明します。

## パイプラインを実行する (Pipeline デザイナー)
<a name="run-pipeline-designer"></a>

パイプラインの新しい実行を開始するには、次の手順を実行します。

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

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio を開きます。

1. 左のナビゲーションペインの [**パイプライン**] を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプラインを選択して、パイプラインの詳細ビューを開きます。

1. 右上の **[ビジュアルエディタ]** を選択します。

1. 最新バージョンから実行を開始するには、**[実行]** をクリックします。

1. 特定のバージョンから実行を開始するには、次の手順に従います。
   + 下部のツールバーのバージョンアイコンをクリックして、バージョンパネルを開きます。
   + 実行するパイプラインのバージョンを選択します。
   + バージョン項目にカーソルを合わせると、スリードットメニューが表示されます。**[実行]** を選択します。
   + (オプション) パイプラインの以前のバージョンを表示するには、バージョンパネルのスリードットメニューから**[プレビュー]** を選択します。通知バーで **[編集]** をクリックしてバージョンを編集することもできます。

**注記**  
パイプラインが正常に完了しない場合、ステータスバナーに **[失敗]** ステータスが表示されます。失敗したステップをトラブルシューティングして、ステータスバナーの **[Retry]** (再試行) を選択し、パイプラインの実行を失敗したステップから再開します。

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

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio Classic サイドバーで、**[ホーム]** アイコン ( ![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前で絞り込むには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプライン名を選択します。

1. 実行リストの **[実行]** または **[グラフ]** タブで、**[実行の作成]** を選択します。

1. 以下の必須情報を入力または更新します。
   + **Name** (名前) - AWS リージョンのアカウントに固有のものである必要があります。
   + **ProcessingInstanceCount** - 処理に使用するインスタンスの数。
   + **ModelApprovalStatus** - 参考情報。
   + **InputDataUrl** – 入力データの Amazon S3 URI

1. **[開始]** を選択します。

パイプラインが実行されると、ステータスバナーの **[詳細の表示]** を選択して実行の詳細を表示できます。

実行を停止する場合は、ステータスバナーの **[停止]** を選択します。停止した時点から実行を再開する場合は、ステータスバナーの **[Resume]** (再開) を選択します。

**注記**  
パイプラインが正常に完了しない場合、ステータスバナーに **[失敗]** ステータスが表示されます。失敗したステップをトラブルシューティングして、ステータスバナーの **[Retry]** (再試行) を選択し、パイプラインの実行を失敗したステップから再開します。

------

## パイプラインを実行する (SageMaker Python SDK)
<a name="run-pipeline-sdk"></a>

SageMaker AI Python SDK を使用してパイプライン定義を作成したら、SageMaker AI に送信して実行を開始することができます。以下のチュートリアルでは、パイプラインの送信、実行の開始、その実行結果の確認、パイプラインの削除方法を説明します。

**Topics**
+ [前提条件](#run-pipeline-prereq)
+ [ステップ 1: パイプラインを開始する](#run-pipeline-submit)
+ [ステップ 2: パイプラインの実行を確認する](#run-pipeline-examine)
+ [ステップ 3: パイプラインの実行のデフォルトパラメータをオーバーライドする](#run-pipeline-parametrized)
+ [ステップ 4: パイプラインの実行を停止して削除する](#run-pipeline-delete)

### 前提条件
<a name="run-pipeline-prereq"></a>

このチュートリアルでは、以下が必要です。
+  SageMaker ノートブックインスタンス。  
+  Pipelines パイプライン定義。このチュートリアルは、「[パイプラインを定義する](define-pipeline.md)」チュートリアルを実行して作成したパイプライン定義を使用することを前提としています。

### ステップ 1: パイプラインを開始する
<a name="run-pipeline-submit"></a>

最初に、パイプラインを開始する必要があります。

**パイプラインを開始するには**

1. JSON パイプラインの定義を調べて、フォーマットに誤りがないことを確認します。

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

1. パイプライン定義を Pipelines サービスに送信して、パイプラインが存在しない場合はパイプラインを作成し、存在する場合はパイプラインを更新します。渡されたロールは、Pipelines がステップで定義されているすべてのジョブを作成するために使用されます。

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

1. パイプラインの実行を開始します。

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

### ステップ 2: パイプラインの実行を確認する
<a name="run-pipeline-examine"></a>

次に、パイプラインの実行を確認する必要があります。

**パイプラインの実行を確認するには**

1.  パイプラインの実行ステータスを書き留め、パイプラインが正常に作成され、開始されたことを確認します。

   ```
   execution.describe()
   ```

1. 実行が終了するまで待ちます。

   ```
   execution.wait()
   ```

1. 実行ステップとそのステータスをリストします。

   ```
   execution.list_steps()
   ```

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

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

1. パイプラインの実行が完了したら、Amazon S3 から結果の `evaluation.json` ファイルをダウンロードして、レポートを確認します。

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

### ステップ 3: パイプラインの実行のデフォルトパラメータをオーバーライドする
<a name="run-pipeline-parametrized"></a>

異なるパイプラインパラメータを指定して追加のパイプラインの実行を動作させると、デフォルトをオーバーライドできます。

**デフォルトパラメータをオーバーライドするには**

1. パイプラインの実行を作成します。これにより、モデル承認ステータスのオーバーライドが「承認済み」に設定された状態で別のパイプライン実行が開始されます。つまり、SageMaker プロジェクトなどの CI/CD パイプラインを通じて、`RegisterModel` ステップで生成されたモデルパッケージバージョンを自動的にデプロイする準備が整います。詳細については、「[SageMaker プロジェクトを使用した MLOps の自動化](sagemaker-projects.md)」を参照してください。

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

1. 実行が終了するまで待ちます。

   ```
   execution.wait()
   ```

1. 実行ステップとそのステータスをリストします。

   ```
   execution.list_steps()
   ```

1. パイプラインの実行が完了したら、Amazon S3 から結果の `evaluation.json` ファイルをダウンロードして、レポートを確認します。

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

### ステップ 4: パイプラインの実行を停止して削除する
<a name="run-pipeline-delete"></a>

パイプラインの処理が終了したら、継続中の実行を停止し、パイプラインを削除できます。

**パイプラインの実行を停止して削除するには**

1. パイプラインの実行を停止します。

   ```
   execution.stop()
   ```

1. パイプラインを削除します。

   ```
   pipeline.delete()
   ```

# パイプラインを停止する
<a name="pipelines-studio-stop"></a>

Amazon SageMaker Studio コンソールでパイプラインの実行を停止できます。

Amazon SageMaker Studio コンソールでパイプラインの実行を停止するには、Studio と Studio Classic のどちらを使用しているかに応じて、以下の手順を実行します。

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

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプライン名を選択します。

1. **[実行]** タブをクリックします。

1. 停止する実行を選択します。

1. **[停止]** を選択します。停止した時点から実行を再開する場合は、**[再開]** を選択します。

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

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio Classic サイドバーで、**[ホーム]** アイコン ( ![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前で絞り込むには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプラインの実行を停止するには、パイプラインのステータスバナーの **[詳細の表示]** を選択してから、**[停止]** を選択します。停止した時点から実行を再開する場合は、**[再開]** を選択します。

------

# パイプラインの詳細を表示する
<a name="pipelines-studio-list"></a>

SageMaker AI パイプラインの詳細を表示して、パラメータや、ステップの依存関係を把握したり、進捗状況とステータスをモニタリングしたりできます。これは、ワークフローのトラブルシューティングや最適化に役立ちます。Amazon SageMaker Studio コンソールを使用して特定のパイプラインの詳細にアクセスし、その実行履歴、定義、パラメータ、メタデータを調べることができます。

別の方法として、パイプラインが SageMaker AI プロジェクトに関連付けられている場合は、プロジェクトの詳細ページからパイプラインの詳細にアクセスできます。詳細については、「[プロジェクトのリソースを表示する](sagemaker-projects-resources.md)」を参照してください。

SageMaker AI パイプラインの詳細を表示するには、Studio を使用しているか Studio Classic を使用しているに応じて、次の手順を実行します。

**注記**  
モデルの再パックは、パイプラインで、Amazon S3 にアップロードされ、SageMaker AI エンドポイントにモデルをデプロイするために使用する圧縮モデルファイル (model.tar.gz) にカスタムスクリプトを含める必要がある場合に発生します。SageMaker AI パイプラインがモデルをトレーニングしてモデルレジストリに登録する際に、トレーニングジョブからのトレーニング済みモデル出力にカスタム推論スクリプトを含める必要がある*場合*は、再パック手順が導入されます。再パックステップでは、モデルを圧縮解除し、新しいスクリプトを追加して、モデルを再圧縮します。パイプラインを実行すると、再パックステップはトレーニングジョブとして追加されます。

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

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプラインを選択して、パイプラインの詳細を表示します。

1. パイプラインの詳細を表示するには、次のいずれかのタブをクリックします。
   + **Executions** (実行) - 実行の詳細。
   + **グラフ** – すべてのステップを含むパイプライングラフ
   + **パラメータ** – パイプラインに関連する実行パラメータとメトリクス
   + **情報** – タグ、パイプラインの Amazon リソースネーム (ARN)、ロールの ARN など、パイプラインに関連付けられたメタデータ。このページからパイプラインの説明を編集することもできます。

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

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio Classic サイドバーで、**[ホーム]** アイコン ( ![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前で絞り込むには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプラインを選択して、パイプラインの詳細を表示します。パイプラインの詳細タブが開き、パイプラインの実行のリストが表示されます。実行を開始したり、他のタブを選択してパイプラインの詳細を確認したりできます。**[Property Inspector]** アイコン (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/gears.png)) を使用すると、表示する列を選択できます。

1. パイプラインの詳細ページで次のいずれかのタブを選択して、パイプラインの詳細を表示します。
   + **Executions** (実行) - 実行の詳細。このタブまたは **[グラフ]** タブから実行を作成できます。
   + **Graph** (グラフ) - パイプラインの DAG。
   + **Parameters** (パラメータ) - モデルの承認ステータスなどを確認できます。
   + **Settings** (設定) - パイプラインに関連付けられたメタデータ。このタブではパイプライン定義ファイルをダウンロードしたり、パイプラインの名前と説明を編集したりできます。

------

# パイプライン実行の詳細を表示する
<a name="pipelines-studio-view-execution"></a>

特定の SageMaker AI パイプライン実行の詳細を確認できます。これにより、以下を行うことができます。
+ 失敗したステップや予期しないエラーなど、実行中に発生した可能性がある問題を特定して解決できます。
+ さまざまなパイプライン実行の結果を比較して、入力データまたはパラメータの変更がワークフロー全体にどのような影響を及ぼすかを把握できます。
+ 最適化のためにボトルネックや機会を特定できます。

パイプライン実行の詳細を表示するには、Studio を使用しているか Studio Classic を使用しているに応じて、次の手順を実行します。

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

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプラインを選択して、パイプラインの詳細を表示します。

1. **[実行]** タブをクリックします。

1. 表示するパイプライン実行の名前を選択します。その実行のパイプライングラフが表示されます。

1. グラフ内のパイプラインステップのいずれかを選択すると、右側のサイドバーにステップの設定が表示されます。

1. パイプラインの追加の詳細を表示するには、次のいずれかのタブをクリックします。
   + **定義** — すべてのステップを含むパイプライングラフ
   + **Parameters** (パラメータ) - モデルの承認ステータスなどを確認できます。
   + **詳細** – タグ、パイプラインの Amazon リソースネーム (ARN)、ロールの ARN など、パイプラインに関連付けられたメタデータ。このページからパイプラインの説明を編集することもできます。

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

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio Classic サイドバーで、**[ホーム]** アイコン ( ![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前で絞り込むには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプライン名を選択します。パイプラインの **[実行]** ページが開きます。

1. **[実行]** ページで実行名を選択して、実行の詳細を表示します。実行の詳細タブが開き、パイプラインのステップのグラフが表示されます。

1. ステップを名前で検索するには、検索フィールドにステップ名に一致する文字を入力します。グラフの右下にあるサイズ変更アイコンを使用して、グラフを拡大したり縮小したり、グラフを画面に合わせて、グラフを全画面に拡大したりできます。グラフの特定の部分に焦点を合わせるには、グラフの空白領域を選択して、グラフがその領域の中心にくるようにドラッグします。  
![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/yosemite/execution-graph-w-input.png)

1. グラフでステップのいずれかを選択すると、そのステップの詳細が表示されます。前のスクリーンショットでは、トレーニングステップが選択され、次のタブが表示されています。
   + **Input** (入力) - トレーニングの入力。Amazon Simple Storage Service (Amazon S3) からの入力ソースがある場合、リンクを選択すると、Amazon S3 コンソールでファイルが表示されます。
   + **Output** (出力) - メトリクス、チャート、ファイル、評価結果などのトレーニングの出力。グラフは [Tracker](https://sagemaker-experiments.readthedocs.io/en/latest/tracker.html#smexperiments.tracker.Tracker.log_precision_recall) API を使用して作成されています。
   + **Logs** (ログ) - ステップによって生成された Amazon CloudWatch ログ。
   + **Info** (情報) - ステップに関連付けられているパラメータとメタデータ。  
![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/yosemite/execution-graph-info.png)

------

# パイプライン定義ファイルをダウンロードする
<a name="pipelines-studio-download"></a>

SageMaker AI パイプラインの定義ファイルは、Amazon SageMaker Studio UI から直接ダウンロードできます。このパイプライン定義ファイルは、次の目的で使用できます。
+ バックアップと復元: ダウンロードしたファイルを使用してパイプライン設定のバックアップを作成します。インフラストラクチャの障害や偶発的な変更が発生した場合には、このバックアップを復元できます。
+ バージョン管理: パイプライン定義ファイルをソースコントロールシステムに保存し、パイプラインの変更を追跡して、必要に応じて以前のバージョンに戻します。
+ プログラムによる操作: パイプライン定義ファイルを SageMaker SDK または AWS CLIへの入力として使用します。
+ 自動化プロセスとの統合: パイプライン定義を CI/CD ワークフローまたはその他の自動化プロセスに統合します。

パイプラインの定義ファイルをダウンロードするには、Studio を使用しているか Studio Classic を使用しているに応じて、次の手順を実行します。

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

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプライン名を選択します。**[実行]** ページが開き、パイプライン実行のリストが表示されます。

1. **[実行]** ページを開いたままにするか、パイプライン実行テーブルの左側にある **[グラフ]**、**[情報]**、または **[パラメータ]** ページを選択します。このようなページのｌいずれかからパイプライン定義をダウンロードできます。

1. ページの右上で、縦三点リーダーをクリックして、**[パイプライン定義のダウンロード (JSON)]** を選択します。

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

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio Classic サイドバーで、**[ホーム]** アイコン ( ![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前で絞り込むには、検索フィールドにパイプライン名全体または一部を入力します。

1. パイプライン名を選択します。

1. **[Settings]** (設定) タブを選択します。

1. **[パイプライン定義ファイルをダウンロード]** をクリックします。

------

# パイプラインから実験データにアクセスする
<a name="pipelines-studio-experiments"></a>

**注記**  
SageMaker Experiments は Studio Classic のみが提供する機能です。

パイプラインを作成して [pipeline\$1experiment\$1config](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.pipeline.Pipeline.pipeline_experiment_config) を指定すると、SageMaker Experiments エンティティがない場合は、Pipelines が以下の SageMaker Experiments エンティティをデフォルトで作成します。
+ パイプラインの実験
+ パイプラインの実行ごとの実行グループ
+ パイプラインステップで作成された各 SageMaker AI ジョブの実行

実験がどのようにパイプラインと統合されているかの詳細については、「[Amazon SageMaker Experiments の統合](pipelines-experiments.md)」を参照してください。SageMaker Experiments の詳細については、「[Studio Classic の Amazon SageMaker Experiments](experiments.md)」を参照してください。

パイプラインに関連付けられた実行のリストは、パイプラインの実行リストまたは実験リストから取得できます。

**パイプラインの実行リストから実行リストを表示するには**

1. パイプラインの実行リストを表示するには、*[Studio Classic]* タブで「[パイプラインの詳細を表示する](pipelines-studio-list.md)」の最初の 5 つの手順を実行します。

1. 画面の右上にある **[フィルター]** アイコン (![\[Funnel or filter icon representing data filtering or narrowing down options.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/jumpstart/jumpstart-filter-icon.png)) をクリックします。

1. **[実験]** をクリックします。パイプラインの作成時に実験の統合が無効になっていなかった場合は、実験名が実行リストに表示されます。
**注記**  
Experiments の統合は [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の v2.41.0 で導入されました。以前のバージョンの SDK で作成されたパイプラインは、デフォルトでは実験と統合されません。

1. 任意の実験を選択すると、その実験に関連する実行グループと実行が表示されます。

**実験リストから実行リストを表示するには**

1. Studio Classic の左側のサイドバーで、**[ホーム]** アイコン (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) をクリックします。

1. メニューから **[実験]** を選択します。

1. 検索バーまたは **[フィルター]** アイコン (![\[Funnel or filter icon representing data filtering or narrowing down options.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/jumpstart/jumpstart-filter-icon.png)) を使用して、パイプラインが作成した実験のリストにフィルターを適用します。

1. 実験名を開き、パイプラインによって作成された実行リストを表示します。

# パイプラインのリネージを追跡する
<a name="pipelines-lineage-tracking"></a>

このチュートリアルでは、Amazon SageMaker Studio を使用して、Amazon SageMaker AI ML パイプラインのリネージを追跡します。

パイプラインは [Amazon SageMaker example GitHub repository](https://github.com/awslabs/amazon-sagemaker-examples) の [Orchestrating Jobs with Amazon SageMaker Model Building Pipelines](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-pipelines/tabular/abalone_build_train_deploy/sagemaker-pipelines-preprocess-train-evaluate-batch-transform.html) ノートブックで作成されたものです。パイプラインの作成方法の詳細については、「[パイプラインを定義する](define-pipeline.md)」を参照してください。

Studio での系統追跡は、Directed Acyclic Graph (DAG) を中心に実施されます。DAG は、パイプラインのステップを表します。DAG では、任意のステップから別のステップまでの系統を追跡できます。以下の図は、パイプラインのステップを示しています。これらのステップは Studio では DAG として表示されます。

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


Amazon SageMaker Studio コンソールでパイプラインのリネージを追跡するには、Studio と Studio Classic のどちらを使用しているかに応じて、以下の手順を実行します。

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

**パイプラインの系統を追跡するには**

1. 「[Launch Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」の手順に従って、SageMaker Studio コンソールを開きます。

1. 左側のナビゲーションペインで、**[パイプライン]** を選択します。

1. (オプション) パイプラインのリストを名前でフィルタリングするには、検索フィールドにパイプライン名全体または一部を入力します。

1. **[名前]** 列でパイプライン名を選択して、パイプラインの詳細を表示します。

1. **[実行]** タブをクリックします。

1. **[実行]** テーブルの **[名前]** 列で、表示するパイプライン実行名を選択します。

1. **[実行]** ページの右上で、縦三点リーダーをクリックして、**[パイプライン定義のダウンロード (JSON)]** を選択します。ファイルを表示すると、パイプラインのグラフの定義を確認できます。

1. **[編集]** をクリックして Pipeline Designer を開きます。

1. キャンバスの右上隅にあるサイズ変更コントロールとズームコントロールを使用して、グラフを拡大したり縮小したり、画面に合わせてグラフのサイズを調整したり、グラフを全画面に拡大したりできます。

1. トレーニング、検証、テストデータセットを表示するには、次の手順を実行します。

   1. パイプライングラフで処理ステップを選択します。

   1. 右側のサイドバーで、**[概要]** タブをクリックします。

   1. トレーニング、検証、テスト データセットへの Amazon S3 パスは、**[ファイル]** セクションで提供されています。

1. モデルのアーティファクトを表示するには、次の手順を実行します。

   1. パイプライングラフでトレーニングステップを選択します。

   1. 右側のサイドバーで、**[概要]** タブをクリックします。

   1. **[ファイル]** セクションで、モデルアーティファクトへの Amazon S3 パスを検索します。

1. モデルパッケージ ARN を検索するには、次の手順を実行します。

   1. モデル登録ステップを選択します。

   1. 右側のサイドバーで、**[概要]** タブをクリックします。

   1. **[ファイル]** セクションで、モデルパッケージの ARN を検索します。

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

**パイプラインの系統を追跡するには**

1. Amazon SageMaker Studio Classic にサインインします。詳細については、「[Launch Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)」を参照してください。

1. Studio の左側のサイドバーで **[ホーム]** アイコン (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/house.png)) を選択します。

1. メニューで **[パイプライン]** を選択します。

1. **[Search]** (検索) ボックスを使用して、パイプラインリストをフィルタリングします。

1. `AbalonePipeline` パイプラインを選択して、実行リストとパイプラインに関するその他の詳細を表示します。

1. 右側のサイドバーにある **[Property Inspector]** アイコン (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/gears.png)) をクリックすると、**[テーブルプロパティ]** ペインが開き、表示するプロパティを選択できます。

1. **[Settings]** (設定) タブを選択し、**[Download pipeline definition file]** (パイプライン定義ファイルをダウンロード) を選択します。ファイルを表示すると、パイプラインのグラフの定義を確認できます。

1. **[実行]** タブで、実行リストの最初の行を選択して、その実行グラフと実行に関するその他の詳細を表示します。グラフは、チュートリアルの最初に表示される図と同じものです。

   グラフの右下にあるサイズ変更アイコンを使用して、グラフを拡大したり縮小したり、グラフを画面に合わせて、グラフを全画面に拡大したりできます。グラフの特定の部分に焦点を合わせるには、グラフの空白領域を選択して、グラフがその領域の中心にくるようにドラッグします。グラフの右下のインセットには、グラフ内の現在の位置が表示されます。  
![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/yosemite/pipeline-tutorial-execution-graph.png)

1. **[Graph]** (グラフ) タブで `AbaloneProcess` ステップをクリックして、ステップの詳細を表示します。

1. トレーニング、検証、テストデータセットへの Amazon S3 パスは、**[Output]** (出力) タブの **[Files]** (ファイル) にあります。
**注記**  
フルパスを取得するには、パスを右クリックして **[Copy cell contents]** (セルの内容をコピー) を選択します。

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

1. `AbaloneTrain` ステップを選択します。

1. モデルアーティファクトへの Amazon S3 パスは、**[Output]** (出力) タブの **[Files]** (ファイル) にあります。

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

1. `AbaloneRegisterModel` ステップを選択します。

1. モデルパッケージの ARN は、**[Output]** (出力) タブの **[Files]** (ファイル) にあります。

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

------

# Kubernetes のオーケストレーション
<a name="kubernetes-workflows"></a>

SageMaker AI Operators for Kubernetes と SageMaker AI Components for Kubeflow Pipelines を使用して、SageMaker のトレーニングジョブと推論ジョブをオーケストレーションできます。SageMaker AI Operators for Kubernetes を使用すると、Kubernetes を使用するデベロッパーやデータサイエンティストは、SageMaker AI で機械学習 (ML) モデルをより簡単にトレーニング、チューニング、デプロイできるようになります。SageMaker AI Components for Kubeflow Pipelines を使用すると、データ処理ジョブとトレーニングジョブを Kubernetes クラスターから SageMaker AI の機械学習に最適化されたマネージドサービスに移動できます。

**Topics**
+ [SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators.md)
+ [SageMaker AI Components for Kubeflow Pipelines](kubernetes-sagemaker-components-for-kubeflow-pipelines.md)

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

SageMaker AI Operators for Kubernetes を使用すると、Kubernetes を使用するデベロッパーやデータサイエンティストは、SageMaker AI で機械学習 (ML) モデルをより簡単にトレーニング、チューニング、デプロイできるようになります。これらの SageMaker AI Operators を Amazon Elastic Kubernetes Service (Amazon EKS) の Kubernetes クラスターにインストールして、Kubernetes API や `kubectl` などのコマンドライン Kubernetes ツールを使用して SageMaker AI ジョブをネイティブに作成できます。このガイドでは、Kubernetes クラスターから SageMaker AI でモデルトレーニング、ハイパーパラメータチューニング、または推論 (リアルタイムおよびバッチ) を実行するために演算子を設定して使用する方法を説明します。この章で取り上げる手順とガイドラインは、ユーザーが Kubernetes とその基本的なコマンドに精通していることを前提としています。

**重要**  
[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)」を参照してください。

**注記**  
これらのオペレーターの使用に Amazon SageMaker Studio を使用してモデルバージョンを比較します。追加料金はかかりません。これらの演算子を介して SageMaker AI リソースを使用する場合は、料金が発生します。

## オペレーターとは
<a name="kubernetes-sagemaker-operators-overview"></a>

Kubernetes オペレータは、Kubernetes ユーザに代わってアプリケーションを管理するアプリケーションコントローラーです。コントロールプレーンのコントローラーには、中央ステートマネージャー (ETCD) をリッスンして、制御するアプリケーションの状態を管理するさまざまな制御ループが含まれます。このようなアプリケーションの例には、[Cloud-controller-manager](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) や `[kube-controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/)` があります。オペレーターは通常、未加工の Kubernetes API よりも上位レベルの抽象化を提供するため、ユーザーはアプリケーションをデプロイして管理しやすくなります。Kubernetes に新しい機能を追加するには、デベロッパーがアプリケーション固有またはドメイン固有のロジックとコンポーネントを含む**カスタムリソース**を作成して Kubernetes API を拡張します。Kubernetes のオペレーターを使用すると、ユーザーはこれらのカスタムリソースをネイティブに呼び出して、関連するワークフローを自動化できます。

### AWS Controllers for Kubernetes (ACK) の仕組み
<a name="kubernetes-sagemaker-operators-explained"></a>

SageMaker AI Operators for Kubernetes を使用すると、Kubernetes クラスターから SageMaker AI のジョブを管理できます。SageMaker AI Operators for Kubernetes の最新バージョンは AWS Controllers for Kubernetes (ACK) に基づいています。ACK には、一般的なコントローラーランタイム、コードジェネレーター、および一連の AWS サービス固有のコントローラーが含まれており、そのうちの 1 つは SageMaker AI コントローラーです。

次の図は、ACK の仕組みを示しています。

![\[ACK ベースの SageMaker AI Operator for Kubernetes について説明しています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-ack-controller.png)


この図では、Kubernetes ユーザーは、Kubernetes API を使用して Kubernetes クラスター内から SageMaker AI でモデルトレーニングを実行したい。ユーザーは `kubectl apply` への呼び出しを発行し、SageMaker トレーニングジョブを説明する Kubernetes カスタムリソースを記述するファイルを渡します。`kubectl apply` は、マニフェストと呼ばれるこのファイルを、Kubernetes コントローラーノードで実行されている Kubernetes API サーバーに渡します (ワークフロー図のステップ 1)。**Kubernetes API サーバーは、SageMaker トレーニングジョブの仕様が記載されたマニフェストを受け取り、ユーザーが `sageMaker.services.k8s.aws/TrainingJob` の種類のカスタムリソースを作成するアクセス許可を持っているかどうか、またカスタムリソースが適切にフォーマットされているかどうかを判断します (ステップ 2)。**ユーザーが承認され、カスタムリソースが有効な場合、Kubernetes API サーバーはカスタムリソースを etcd データストアに書き込み (ステップ 3)、カスタムリソースが作成されたことをユーザーに応答します (ステップ 4)。****通常の Kubernetes ポッドのコンテキスト内の Kubernetes ワーカーノード上で実行されている SageMaker AI コントローラーに、`sageMaker.services.k8s.aws/TrainingJob` の種類の新しいカスタムリソースが作成されたことが通知されます (ステップ *5*)。次に、SageMaker AI コントローラーは SageMaker API と通信し (ステップ *6*)、SageMaker AI `CreateTrainingJob` API を呼び出して AWSでトレーニングジョブを作成します。SageMaker API と通信した後、SageMaker AI コントローラーは Kubernetes API サーバーを呼び出し、SageMaker AI から受け取った情報でカスタムリソースのステータスを更新します (ステップ *7*)。したがって、SageMaker AI コントローラーは、 AWS SDK を使用して受け取ったのと同じ情報を開発者に提供します。

### アクセス許可の概要
<a name="kubernetes-sagemaker-operators-authentication"></a>

演算子は、ユーザーに代わって SageMaker AI リソースにアクセスします。オペレーターが AWS リソースを操作するために引き受ける IAM ロールは、Kubernetes クラスターへのアクセスに使用する認証情報とは異なります。このロールは、機械学習ジョブの実行時に が AWS 引き受けるロールとも異なります。

以下の画像は、さまざまな認証レイヤーについて説明しています。

![\[SageMaker AI Operator for Kubernetes のさまざまな認証レイヤー\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-authentication.png)


# 最新の SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-ack"></a>

このセクションは、Controllers for Kubernetes (ACK) を使用した最新バージョンの SageMaker AI Operators for Kubernetes に基づいています。

**重要**  
現在 [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)」を参照してください。

[SageMaker AI Operators for Kubernetes](https://github.com/aws-controllers-k8s/sagemaker-controller) の最新バージョンは [AWS Controllers for Kubernetes (ACK) に基づいています。](https://aws-controllers-k8s.github.io/community/ )これは、各コントローラーが AWS サービス API と通信する Kubernetes カスタムコントローラーを構築するためのフレームワークです。これらのコントローラーを使用すると、Kubernetes ユーザーは Kubernetes API を使用してデータベースやメッセージキューなどの AWS リソースをプロビジョニングできます。

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

**Topics**
+ [SageMaker AI Operators for Kubernetes をインストールする](#kubernetes-sagemaker-operators-ack-install)
+ [SageMaker AI Operators for Kubernetes を使用する](#kubernetes-sagemaker-operators-ack-use)
+ [リファレンス](#kubernetes-sagemaker-operators-ack-reference)

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

SageMaker AI Operators for Kubernetes の利用可能な最新バージョンを設定するには、「[ ACK SageMaker Controller を使用した機械学習](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)」の「*設定*」セクションを参照してください。

## SageMaker AI Operators for Kubernetes を使用する
<a name="kubernetes-sagemaker-operators-ack-use"></a>

Amazon EKS を使用して Amazon SageMaker AI の ACK サービスコントローラーで機械学習モデルをトレーニングする方法のチュートリアルについては、「[ACK SageMaker AI Controller を使用した機械学習](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)」を参照してください。

オートスケーリングの例については、「[アプリケーションのオートスケーリングで SageMaker のワークロードをスケールする](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)」を参照してください。

## リファレンス
<a name="kubernetes-sagemaker-operators-ack-reference"></a>

「[Amazon SageMaker AI GitHub リポジトリの ACK サービスコントローラー](https://github.com/aws-controllers-k8s/sagemaker-controller)」や、Kubernetes 向け [AWS コントローラー](https://aws-controllers-k8s.github.io/community/docs/community/overview/)のドキュメントも参照してください。

# 古い 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 があります。

# SageMaker AI Components for Kubeflow Pipelines
<a name="kubernetes-sagemaker-components-for-kubeflow-pipelines"></a>

Kubeflow パイプライン用の SageMaker AI コンポーネントを使用すると、Kubeflow Pipelines から SageMaker AI トレーニング、チューニング、エンドポイントのデプロイ、バッチ変換などのネイティブのジョブを作成およびモニタリングできます。SageMaker AI で Kubeflow Pipeline ジョブを実行することで、データ処理ジョブとトレーニングジョブを Kubernetes クラスターから SageMaker AI の機械学習に最適化されたマネージドサービスに移動できます。このドキュメントは、Kubernetes および Kubeflow に関する事前知識を前提としています。

**Topics**
+ [Kubeflow Pipelines とは](#what-is-kubeflow-pipelines)
+ [Kubeflow Pipeline コンポーネントとはどういうものですか?](#kubeflow-pipeline-components)
+ [SageMaker AI Components for Kubeflow Pipelines を使用する理由](#why-use-sagemaker-components)
+ [SageMaker AI Components for Kubeflow Pipelines のバージョン](#sagemaker-components-versions)
+ [SageMaker AI Components for Kubeflow Pipelines 一覧](#sagemaker-components-list)
+ [IAM アクセス許可](#iam-permissions)
+ [SageMaker AI を使用するためのパイプライン変換](#converting-pipelines-to-use-amazon-sagemaker)
+ [Kubeflow Pipelines をインストールする](kubernetes-sagemaker-components-install.md)
+ [SageMaker AI コンポーネントを使用する](kubernetes-sagemaker-components-tutorials.md)

## Kubeflow Pipelines とは
<a name="what-is-kubeflow-pipelines"></a>

Kubeflow Pipelines (KFP) は、Docker コンテナをベースにしたポータブルでスケーラブルな機械学習 (ML) ワークフローを構築およびデプロイするためのプラットフォームです。Kubeflow Pipelines プラットフォームは以下の要素で構成されます。
+ 実験、ジョブ、実行を管理および追跡するためのユーザーインターフェイス (UI)。
+ 複数ステップの ML ワークフローをスケジューリングするためのエンジン (Argo)。
+ パイプラインとコンポーネントを定義して操作するための SDK。
+ SDK を使用してシステムとやり取りするためのノートブック。

パイプラインは ML ワークフローを説明したもので、[有向非巡回グラフグラフ](https://www.kubeflow.org/docs/pipelines/concepts/graph/)として表現されます。ワークフローの各ステップは、 AWS SDK for Python (Boto3) モジュールである Kubeflow Pipeline [コンポーネント](https://www.kubeflow.org/docs/pipelines/overview/concepts/component/)として表されます。

Kubeflow Pipelines の詳細については、「[Kubeflow Pipelines のドキュメント](https://www.kubeflow.org/docs/pipelines/)」を参照してください。

## Kubeflow Pipeline コンポーネントとはどういうものですか?
<a name="kubeflow-pipeline-components"></a>

Kubeflow Pipeline コンポーネントは、Kubeflow パイプラインの 1 つのステップを実行するために使用される一連のコードです。コンポーネントは、Docker イメージに組み込まれた Python モジュールに代表されます。パイプラインが実行されると、Kubeflow を実行している Kubernetes クラスタ-のワーカーノードのいずれかでコンポーネントのコンテナがインスタンス化され、ロジックが実行されます。パイプラインコンポーネントは、前のコンポーネントから出力を読み取り、パイプラインの次のコンポーネントが使用できる出力を作成できます。これらのコンポーネントを使用すると、基礎となる Kubernetes インフラストラクチャを操作することなく、実験環境や本番環境のパイプラインを迅速かつ簡単に作成できます。

SageMaker AI コンポーネントは Kubeflow パイプラインで使用できます。ロジックをカスタムコンテナにカプセル化するのではなく、Kubeflow Pipelines SDK を使用してコンポーネントを読み込み、パイプラインを記述するだけで済みます。パイプラインが実行されると、指示が SageMaker AI ジョブまたはデプロイに変換されます。その後、ワークロードは SageMaker AI のフルマネージドインフラストラクチャー上で実行されます。

## SageMaker AI Components for Kubeflow Pipelines を使用する理由
<a name="why-use-sagemaker-components"></a>

SageMaker AI Components for Kubeflow Pipelines は、SageMaker AI からコンピューティング集約型のジョブを起動する代替手段を提供します。コンポーネントは、SageMaker AI と Kubeflow Pipelines の移植性とオーケストレーションを統合しています。SageMaker AI Components for Kubeflow Pipelines を使用すると、Kubeflow Pipelines ワークフローの一部として SageMaker AI リソースを作成してモニタリングできます。パイプライン内の各ジョブは、ローカル Kubernetes クラスターではなく SageMaker AI 上で実行されるため、データラベリング、大規模なハイパーパラメータのチューニング、分散トレーニングジョブ、ワンクリックで実行できる安全かつスケーラブルなモデルのデプロイなど、主要な SageMaker AI 機能を活用できます。SageMaker AI のジョブパラメータ、ステータスログ、出力には、Kubeflow パイプライン UI から引き続きアクセスできます。

SageMaker AI コンポーネントは、データの準備から ML モデルの構築、トレーニング、デプロイに至るまでの SageMaker AI の主要な機能を ML ワークフローに統合します。これらのコンポーネントを使用して完全に構築された Kubeflow Pipeline を作成できるほか、必要に応じて個々のコンポーネントをワークフローに統合することもできます。コンポーネントは 1 つまたは 2 つのバージョンで利用できます。コンポーネントのバージョンごとに異なるバックエンドが使用されます。 バージョンの詳細については、「[SageMaker AI Components for Kubeflow Pipelines のバージョン](#sagemaker-components-versions)」を参照してください。

SageMaker AI Components for Kubeflow Pipelines は追加料金なしで使用できます。これらのコンポーネントを介して使用する SageMaker AI リソースに対しては、料金が発生します。

## SageMaker AI Components for Kubeflow Pipelines のバージョン
<a name="sagemaker-components-versions"></a>

SageMaker AI Components for Kubeflow Pipelines には、2 つのバージョンがあります。各バージョンは、異なるバックエンドを利用して SageMaker AI 上でリソースを作成して管理します。
+ SageMaker AI Components for Kubeflow Pipelines バージョン 1 (v1.x 以前) は、バックエンドとして **[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html)** (AWS SDK for Python (Boto3)) を使用します。
+ SageMaker AI Components for Kubeflow Pipelines バージョン 2 (v2.0.0-alpha2 以降) は [SageMaker AI Operator for Kubernetes (ACK)](https://github.com/aws-controllers-k8s/sagemaker-controller) を使用しています。

  AWS は、 AWS クラウドリソースを管理する Kubernetes ネイティブな方法を容易にするために [ACK](https://aws-controllers-k8s.github.io/community/) を導入しました。ACK にはサービス AWS 固有のコントローラーのセットが含まれており、そのうちの 1 つは SageMaker AI コントローラーです。SageMaker AI コントローラーを使用すると、機械学習デベロッパーやデータサイエンティストは、Kubernetes をコントロールプレーンとして使用して、SageMaker AI で機械学習 (ML) モデルをより簡単にトレーニング、調整、デプロイできるようになります。詳細については「[ Kubernetes 向け SageMaker AI の 演算子](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)」を参照してください。

SageMaker AI Components for Kubeflow Pipelines のバージョンは両方ともサポートされています。ただし、バージョン 2 には他にも利点がいくつかあります。特に、以下の利点を得られます。

1. Kubeflow パイプライン、Kubernetes CLI (`kubectl`)、ノートブックなどの他の Kubeflow アプリケーションなど、任意のアプリケーションから SageMaker AI リソースを管理できる一貫したエクスペリエンス 

1. Kubeflow パイプラインワークフローの外部で SageMaker AI リソースを管理してモニタリングする柔軟性 

1. SageMaker AI Operator がデプロイに含まれているため、[Kubeflow on AWS](https://awslabs.github.io/kubeflow-manifests/docs/about/) をフルデプロイした場合、SageMaker AI コンポーネントを使用するための設定時間が不要になります。

## SageMaker AI Components for Kubeflow Pipelines 一覧
<a name="sagemaker-components-list"></a>

以下は、SageMaker AI Components for Kubeflow Pipelines のすべてと使用可能なバージョンのリストです。または、[GitHub で SageMaker AI Components for Kubeflow Pipelines](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker#versioning) を検索することもできます。

**注記**  
SageMaker AI コンポーネントのバージョン 2 が利用可能な場合は、それを利用することをお勧めします。

### Ground Truth コンポーネント
<a name="ground-truth-components"></a>
+ **Ground Truth**

  Ground Truth コンポーネントを使用すると、Kubeflow Pipelines ワークフローから直接 SageMaker AI Ground Truth ラベリングジョブを送信できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **作業チーム**

  Workteam コンポーネントを使用すると、Kubeflow Pipelines ワークフローから直接 SageMaker AI プライベートワークチームジョブを作成できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### データ処理コンポーネント
<a name="data-processing-components"></a>
+ **Processing**

  Processing コンポーネントを使用すると、Kubeflow Pipelines ワークフローから直接 SageMaker AI に処理ジョブを送信できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### トレーニングコンポーネント
<a name="training-components"></a>
+ **トレーニング**

  トレーニングコンポーネントを使用すると、Kubeflow Pipelines ワークフローから SageMaker トレーニングジョブを直接送信できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **ハイパーパラメータの最適化**

  ハイパーパラメータ最適化コンポーネントを使用すると、Kubeflow Pipelines ワークフローから SageMaker AI にハイパーパラメータ調整ジョブを直接送信できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 推論コンポーネント
<a name="inference-components-kfp"></a>
+ **ホスティングデプロイ**

  Hosting コンポーネントを使用すると、Kubeflow Pipelines ワークフローから SageMaker AI ホスティングサービスを使用してモデルをデプロイできます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **バッチ変換**

  バッチ変換コンポーネントを使用すると、Kubeflow Pipelines ワークフローから SageMaker AI のデータセット全体に対して推論ジョブを実行できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **モデルモニター**

  Model Monitor コンポーネントを使用すると、Kubeflow Pipelines ワークフローから本番環境の SageMaker AI 機械学習モデルの品質をモニタリングできます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

## IAM アクセス許可
<a name="iam-permissions"></a>

SageMaker AI コンポーネントで Kubeflow Pipelines をデプロイするには、次の 3 つのレイヤーの認証が必要です。
+ ゲートウェイノード (ローカルマシンまたはリモートインスタンス) に Amazon Elastic Kubernetes Service (Amazon EKS) クラスターへのアクセスを許可する IAM ロール。

  ゲートウェイノードにアクセスするユーザーは、このロールを引き受けて次のことを行います。
  + Amazon EKS クラスターを作成し、KFP をインストールする
  + IAM ロールを作成する
  + サンプル入力データ用の Amazon S3 バケットを作成する

  このロールには以下のアクセス許可が必要です。
  + CloudWatchLogsFullAccess 
  + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess) 
  + IAMFullAccess
  + AmazonS3FullAccess
  + AmazonEC2FullAccess
  + AmazonEKSAdminPolicy (「[Amazon EKS アイデンティティベースのポリシーの例](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)」のスキーマを使用してこのポリシーを作成) 
+ Kubernetes パイプラインポッド (**kfp-example-pod-role**) または SageMaker AI Operator for Kubernetes コントローラーポッドが SageMaker AI にアクセスするために引き受ける Kubernetes IAM 実行ロール。このロールは、Kubernetes から SageMaker AI ジョブを作成してモニタリングするために使用されます。

  このロールには以下のアクセス許可が必要です。
  + AmazonSageMakerFullAccess 

  独自のカスタムポリシーを作成してアタッチすることで、KFP ポッドとコントローラーポッドのアクセス許可を制限できます。
+ Amazon SageMaker3 や Amazon ECR (**kfp-example-sagemaker-execution-role**) などの AWS リソースにアクセスするために SageMaker AI ジョブが引き受ける SageMaker AI IAM 実行ロール。 Amazon S3 

  SageMaker ジョブは、以下の目的でこのロールを使用します。
  + SageMaker AI のリソースにアクセスする
  + Amazon S3 からデータを入力する
  + 出力モデルを Amazon S3 に保存する

  このロールには以下のアクセス許可が必要です。
  + AmazonSageMakerFullAccess 
  + AmazonS3FullAccess 

## SageMaker AI を使用するためのパイプライン変換
<a name="converting-pipelines-to-use-amazon-sagemaker"></a>

汎用的な Python [処理コンテナ](https://docs.aws.amazon.com/sagemaker/latest/dg/amazon-sagemaker-containers.html)と[トレーニングコンテナ](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html)を移植することで、既存のパイプラインを SageMaker AI を使用するように変換できます。推論に SageMaker AI を使用している場合は、クラスターに IAM アクセス許可をアタッチして、アーティファクトをモデルに変換する必要もあります。

# Kubeflow Pipelines をインストールする
<a name="kubernetes-sagemaker-components-install"></a>

[Kubeflow Pipelines (KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/) は Kubeflow のパイプラインオーケストレーションコンポーネントです。

Kubeflow Pipelines (KFP) を既存の Amazon Elastic Kubernetes Service (Amazon EKS) にデプロイすることも、新しい Amazon EKS クラスターを作成することもできます。ゲートウェイノードを使用してクラスターとやりとりします。ローカルマシンまたは Amazon EC2 インスタンスをゲートウェイノードにすることができます。

以下のセクションでは、これらのリソースをセットアップして設定する手順を説明します。

**Topics**
+ [インストールオプションの選択](#choose-install-option)
+ [SageMaker AI にアクセスするためにパイプラインアクセス許可を設定する](#configure-permissions-for-pipeline)
+ [KFP UI (Kubeflow ダッシュボード) にアクセスする](#access-the-kfp-ui)

## インストールオプションの選択
<a name="choose-install-option"></a>

Kubeflow Pipelines は、 での Kubeflow の完全なディストリビューションのコアコンポーネントとして、 AWS またはスタンドアロンインストールとして使用できます。

ユースケースに該当するオプションを選択します。

1. [AWS デプロイ時のフル Kubeflow](#full-kubeflow-deployment)

   [Kubeflow Pipelines に加えて他の Kubeflow コンポーネントを使用するには、完全な Kubeflow のAWS ディストリビューション](https://awslabs.github.io/kubeflow-manifests) デプロイを選択します。

1. [Kubeflow Pipelines のスタンドアロンデプロイ](#kubeflow-pipelines-standalone)

   Kubeflow の他のコンポーネントなしで Kubeflow Pipelines を使用するには、Kubeflow パイプラインをスタンドアロンでインストールします。

### AWS デプロイ時のフル Kubeflow
<a name="full-kubeflow-deployment"></a>

Kubeflow のフルリリースを にインストールするには AWS、デプロイ[ガイドの Kubeflow からバニラ AWS](https://awslabs.github.io/kubeflow-manifests/docs/deployment/)デプロイオプションを選択するか、さまざまな AWS サービス (Amazon S3、Amazon RDS、Amazon Cognito) との統合をサポートするその他のデプロイオプションを選択します。

### Kubeflow Pipelines のスタンドアロンデプロイ
<a name="kubeflow-pipelines-standalone"></a>

このセクションは、ユーザーがロールを作成し、そのロールのポリシーを定義するアクセス許可を持っていることを前提としています。

#### ゲートウェイノードを設定する
<a name="set-up-a-gateway-node"></a>

ローカルマシンまたは Amazon EC2 インスタンスをゲートウェイノードとして使用できます。ゲートウェイノードは、Amazon EKS クラスターを作成し、Kubeflow パイプライン UI にアクセスするために使用されます。

以下の手順を実行して、ノードを設定します。

1. 

**ゲートウェイノードを作成します。**

   既存の Amazon EC2 インスタンスを使用して、「[Launching and Configuring a DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html)」の手順に従って、最新の Ubuntu 18.04 DLAMI バージョンで新しいインスタンスを作成します。

1. 

**IAM ロールを作成して、ゲートウェイノードに AWS リソースへのアクセスを許可します。**

   CloudWatch、、IAM、Amazon EC2、Amazon S3 CloudFormation、Amazon EKS のリソースへのアクセス許可を持つ IAM ロールを作成します。 Amazon S3

   次のポリシーを IAM ロールにアタッチします。
   + CloudWatchLogsFullAccess 
   + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess)
   + IAMFullAccess 
   + AmazonS3FullAccess 
   + AmazonEC2FullAccess 
   + AmazonEKSAdminPolicy (「[Amazon EKS アイデンティティベースのポリシーの例](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)」のスキーマを使用してこのポリシーを作成) 

   IAM アクセス許可を IAM ロールに追加する方法については、「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

1. 

**以下のツールとクライアントをインストールします。**

   Amazon EKS クラスターと KFP ユーザーインターフェイス (UI) にアクセスするために、ゲートウェイノードに以下のツールとリソースをインストールして設定します。
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html): AWS サービスを操作するためのコマンドラインツール。 AWS CLI の設定情報については、「[AWS CLIを設定する](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」を参照してください。
   + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) バージョン 0.1.31 以降: AWS IAM 認証情報を使用して Kubernetes クラスターへの認証を行うツール。
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) バージョン 0.15 以降: Amazon EKS クラスターを操作するためのコマンドラインツール。
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl): Kubernetes クラスターを操作するためのコマンドラインツール。バージョンは、マイナーバージョン 1 つ差以内で Kubernetes のバージョンに合わせる必要があります。
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### Amazon EKS クラスターを設定する
<a name="set-up-anamazon-eks-cluster"></a>

1. 既存の Amazon EKS クラスターがない場合は、ゲートウェイノードのコマンドラインから次のステップを実行します。それ以外の場合は、このステップをスキップします。

   1. 以下のコマンドを実行して、バージョン 1.17 以降の Amazon EKS クラスターを作成します。`<clustername>` は使用するクラスターの名前に置き換えます。

      ```
      eksctl create cluster --name <clustername> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
      ```

   1. クラスターの作成が完了したら、クラスターのノードを一覧表示してクラスターにアクセスできることを確認します。

      ```
      kubectl get nodes
      ```

1. 次のコマンドを使用して、現在の `kubectl` コンテキストがクラスターを指していることを確認します。出力では、現在のコンテキストはアスタリスク (\$1) でマークされています。

   ```
   kubectl config get-contexts
   
   CURRENT NAME     CLUSTER
   *   <username>@<clustername>.us-east-1.eksctl.io   <clustername>.us-east-1.eksctl.io
   ```

1. 目的のクラスターが現在のデフォルトとして設定されていない場合は、以下のコマンドを使用してデフォルトを更新します。

   ```
   aws eks update-kubeconfig --name <clustername> --region us-east-1
   ```

#### Kubeflow Pipelines をインストールする
<a name="install-kubeflow-pipelines"></a>

ゲートウェイノードのターミナルから以下の手順を実行して、クラスターに Kubeflow Pipelines をインストールします。

1. [cert-manager コンポーネント](https://cert-manager.io/docs/installation/kubectl/)をすべてインストールします。

   ```
   kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
   ```

1. Kubeflow Pipelines をインストールします。

   ```
   export PIPELINE_VERSION=2.0.0-alpha.5
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION"
   kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
   ```

1. Kubeflow Pipelines サービスとその他の関連リソースが実行中であることを確認します。

   ```
   kubectl -n kubeflow get all | grep pipeline
   ```

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

   ```
   pod/ml-pipeline-6b88c67994-kdtjv                      1/1     Running            0          2d
   pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk     1/1     Running            0          2d
   pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj    1/1     Running            0          2d
   pod/ml-pipeline-ui-66cc4cffb6-cmsdb                   1/1     Running            0          2d
   pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj            1/1     Running            0          2d
   pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4   1/1     Running            0          2d
   service/ml-pipeline                       ClusterIP   10.100.170.170   <none>        8888/TCP,8887/TCP   2d
   service/ml-pipeline-ui                    ClusterIP   10.100.38.71     <none>        80/TCP              2d
   service/ml-pipeline-visualizationserver   ClusterIP   10.100.61.47     <none>        8888/TCP            2d
   deployment.apps/ml-pipeline                       1/1     1            1           2d
   deployment.apps/ml-pipeline-persistenceagent      1/1     1            1           2d
   deployment.apps/ml-pipeline-scheduledworkflow     1/1     1            1           2d
   deployment.apps/ml-pipeline-ui                    1/1     1            1           2d
   deployment.apps/ml-pipeline-viewer-crd            1/1     1            1           2d
   deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           2d
   replicaset.apps/ml-pipeline-6b88c67994                      1         1         1       2d
   replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf     1         1         1       2d
   replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7    1         1         1       2d
   replicaset.apps/ml-pipeline-ui-66cc4cffb6                   1         1         1       2d
   replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4            1         1         1       2d
   replicaset.apps/ml-pipeline-visualizationserver-9c47576f4   1         1         1       2d
   ```

## SageMaker AI にアクセスするためにパイプラインアクセス許可を設定する
<a name="configure-permissions-for-pipeline"></a>

このセクションでは、Kubeflow Pipeline ポッドに SageMaker AI サービスへのアクセスを許可する IAM 実行ロールを作成します。

### SageMaker AI コンポーネントバージョン 2 の設定
<a name="permissions-for-SM-v2"></a>

Kubeflow Pipelines 向けの SageMaker AI Components バージョン 2 を実行するには、[SageMaker AI Operator for Kubernetes](https://github.com/aws-controllers-k8s/sagemaker-controller) をインストールし、Kubernetes クラスターに SageMaker AI カスタムリソースを作成することを Kubeflow Pipelines ポッドに許可する、ロールベースのアクセスコントロール (RBAC) を設定する必要があります。

**重要**  
Kubeflow Pipelines のスタンドアロンデプロイを使用している場合は、このセクションに従ってください。Kubeflow バージョン 1.6.0-aws-b1.0.0 以降の AWS ディストリビューションを使用している場合、SageMaker AI コンポーネントバージョン 2 はすでに設定されています。

1. SageMaker AI Operator for Kubernetes をインストールして、SageMaker AI コンポーネントバージョン 2 を使用します。

   「[ACK SageMaker Controller を使用した機械学習のチュートリアル](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)」の「*設定*」セクションに従います。

1. Kubeflow Pipelines ポッドが使用する実行ロール (サービスアカウント) の RBAC アクセス許可を設定します。Kubeflow Pipelines スタンドアロンデプロイでは、パイプラインの実行は `pipeline-runner` サービスアカウントを使用して名前空間 `kubeflow` で行われます。

   1. SageMaker AI カスタムリソースを管理するアクセス許可をサービスアカウントに付与する [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example) を作成します。

      ```
      cat > manage_sagemaker_cr.yaml <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: manage-sagemaker-cr  
      namespace: kubeflow
      subjects:
      - kind: ServiceAccount
      name: pipeline-runner
      namespace: kubeflow
      roleRef:
      kind: ClusterRole
      name: ack-sagemaker-controller 
      apiGroup: rbac.authorization.k8s.io
      EOF
      ```

      ```
      kubectl apply -f manage_sagemaker_cr.yaml
      ```

   1. 以下を実行してロールバインディングが作成されたことを確認します。

      ```
      kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
      ```

### SageMaker AI コンポーネントバージョン 1 の設定
<a name="permissions-for-SM-v1"></a>

Kubeflow Pipelines 向け SageMaker AI Components のバージョン 1 を実行するには、Kubeflow Pipeline ポッドが SageMaker AI にアクセスする必要があります。

**重要**  
 AWS デプロイで完全な Kubeflow を使用している場合も、Kubeflow Pilepines スタンドアロンを使用している場合も、このセクションに従ってください。

Kubeflow パイプラインポッドに SageMaker AI へのアクセスを許可する IAM 実行ロールを作成するには、次の手順に従います。

1. クラスター名 (*my-cluster-name* など) とクラスターリージョン (*us-east-1* など) をエクスポートします。

   ```
   export CLUSTER_NAME=my-cluster-name
   export CLUSTER_REGION=us-east-1
   ```

1. インストールに応じて、名前空間とサービスアカウント名をエクスポートします。
   +  AWS インストール時に Kubeflow 全体を表示するには、プロファイル `namespace` (*kubeflow-user-example-com* など) と *default-editor* をサービスアカウントとしてエクスポートします。

     ```
     export NAMESPACE=kubeflow-user-example-com
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
     ```
   + スタンドアロンの Pipelines デプロイでは、kubeflow を `namespace` として、また pipeline-runner をサービスアカウントとしてエクスポートします。****

     ```
     export NAMESPACE=kubeflow
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
     ```

1. 次のコマンドを使用して、[Amazon EKS クラスター用の IAM OIDC プロバイダー](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)を作成します。

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

1.  AWS サービス (SageMaker AI、CloudWatch) にアクセスするための KFP ポッドの IAM 実行ロールを作成します。

   ```
   eksctl create iamserviceaccount \
   --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \
   --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \
   --region ${CLUSTER_REGION} \
   --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \
   --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
   --override-existing-serviceaccounts \
   --approve
   ```

パイプラインのアクセス許可が SageMaker AI コンポーネントバージョン 1 にアクセスするように設定したら、ドキュメントの Kubeflow にある Kubeflow パイプライン用 SageMaker AI コンポーネントガイドに従ってください。[AWS](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)

## KFP UI (Kubeflow ダッシュボード) にアクセスする
<a name="access-the-kfp-ui"></a>

Kubeflow Pipelines UI を使用すると、クラスターで実験、ジョブ、実行を管理および追跡できます。ゲートウェイノードから Kubeflow Pipelines UI にアクセスする方法については、このセクションのデプロイオプションに適用される手順に従ってください。

### AWS デプロイ時のフル Kubeflow
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

[AWS ウェブサイトの Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) の指示に従って Kubeflow ダッシュボードに接続し、パイプラインタブに移動します。

### Kubeflow Pipelines のスタンドアロンデプロイ
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

次の手順に従って、ポート転送を使用してゲートウェイノードから Kubeflow Pipelines UI にアクセスします。

#### KFP UI サービスへのポート転送を設定する
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

ゲートウェイノードのコマンドラインから以下のコマンドを実行します。

1. 以下のコマンドを使用して、KFP UI サービスが実行中であることを確認します。

   ```
   kubectl -n kubeflow get service ml-pipeline-ui
   
   NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
   ml-pipeline-ui   ClusterIP   10.100.38.71   <none>        80/TCP    2d22h
   ```

1. 以下のコマンドを実行して、KFP UI サービスへのポート転送を設定します。これにより、KFP UI がゲートウェイノードのポート 8080 に転送され、ブラウザから KFP UI にアクセスできるようになります。

   ```
   kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
   ```

   アクティビティがないと、リモートマシンからのポート転送はドロップされます。ダッシュボードでログや更新を取得できない場合は、このコマンドを再度実行します。コマンドでエラーが返される場合は、使用しようとしているポートで実行中のプロセスがないことを確認します。

#### KFP UI サービスにアクセスする
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

KFP UI へのアクセス方法は、ゲートウェイノードのタイプによって異なります。
+ ゲートウェイノードにローカルマシンを使用する場合:

  1. 以下の手順を実行して、ブラウザでダッシュボードにアクセスします。

     ```
     http://localhost:8080
     ```

  1. **[Pipelines]** (パイプライン) を選択して、パイプライン UI にアクセスします。
+ ゲートウェイノードに Amazon EC2 インスタンスを使用する場合:

  1. Kubeflow ダッシュボードにローカルマシンのブラウザからアクセスするには、Amazon EC2 インスタンスに SSH トンネルを設定する必要があります。

     ローカルマシンの新しいターミナルセッションから、以下のコマンドを実行します。`<public-DNS-of-gateway-node>` は、Amazon EC2 コンソールで見つかったインスタンスの IP アドレスに置き換えます。パブリック DNS を使用することもできます。`<path_to_key>` を、ゲートウェイノードへのアクセスに使用する pem キーへのパスに置き換えます。

     ```
     public_DNS_address=<public-DNS-of-gateway-node>
     key=<path_to_key>
     
     on Ubuntu:
     ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address}
     
     or on Amazon Linux:
     ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address}
     ```

  1. ブラウザでダッシュボードにアクセスします。

     ```
     http://localhost:9000
     ```

  1. **[Pipelines]** (パイプライン) を選択して、KFP UI にアクセスします。

#### (オプション) SageMaker AI ノートブックインスタンスに Amazon EKS へのアクセス権を付与して、ノートブックから KFP パイプラインを実行します。
<a name="add-access-to-additional-iam-users-or-roles"></a>

SageMaker ノートブックインスタンスは、Jupyter Notebook アプリを実行するフルマネージド Amazon EC2 コンピューティングインスタンスです。ノートブックインスタンスを使用して、Jupyter Notebook を作成、管理できます。また、 AWS SDK for Python (Boto3) や KFP CLI を使用して KFP パイプラインを定義、コンパイル、デプロイ、実行できます。

1. 「[Create a SageMaker Notebook Instance](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)」の手順に従ってノートブックインスタンスを作成し、`S3FullAccess` ポリシーを IAM 実行ロールにアタッチします。

1. ゲートウェイノードのコマンドラインから以下のコマンドを実行し、作成したノートブックインスタンスの IAM ロール ARN を取得します。`<instance-name>` は、インスタンスの名前に置き換えます。

   ```
   aws sagemaker describe-notebook-instance --notebook-instance-name <instance-name> --region <region> --output text --query 'RoleArn'
   ```

   このコマンドでは、IAM ロールの ARN が `arn:aws:iam::<account-id>:role/<role-name>` の形式で出力されます。この ARN を書き留めておきます。

1. 次のコマンドを実行して、以下のポリシー (AmazonSageMakerFullAccess、AmazonEKSWorkerNodePolicy、AmazonS3FullAccess) をこの IAM ロールにアタッチします。`<role-name>` を ARN の `<role-name>` に置き換えます。

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

1. Amazon EKS クラスターは IAM ロールを使用して、クラスターへのアクセスを制御します。ルールは `aws-auth` という名前の設定マップに実装されています。`eksctl` は `aws-auth` 設定マップを読み込んで編集するコマンドを提供します。クラスターにアクセスできるユーザーだけがこの設定マップを編集できます。

   `system:masters` は、クラスターへのスーパーユーザーアクセス許可を持つデフォルトのユーザーグループの 1 つです。このグループにユーザーを追加するか、より制限の厳しいアクセス許可を持つグループを作成します。

1. 次のコマンドを実行して、クラスターにロールをバインディングします。`<IAM-Role-arn>` を IAM ロールの ARN に置き換えます。`<your_username>` は、任意の固有のユーザー名です。

   ```
   eksctl create iamidentitymapping \
   --cluster <cluster-name> \
   --arn <IAM-Role-arn> \
   --group system:masters \
   --username <your-username> \
   --region <region>
   ```

1. SageMaker AI インスタンスで Jupyter ノートブックを開き、以下のコマンドを実行してクラスターへのアクセス権があることを確認します。

   ```
   aws eks --region <region> update-kubeconfig --name <cluster-name>
   kubectl -n kubeflow get all | grep pipeline
   ```

# SageMaker AI コンポーネントを使用する
<a name="kubernetes-sagemaker-components-tutorials"></a>

このチュートリアルでは、SageMaker AI Components for Kubeflow Pipelines を使用してパイプラインを実行し、SageMaker AI の MNIST データセットで Kmeans を使用して分類モデルをトレーニングします。ワークフローでは、Kubeflow Pipelines をオーケストレーターとして使用し、SageMaker AI をワークフローの各ステップを実行するために使用します。この例は既存の [SageMaker AI の例](https://github.com/aws/amazon-sagemaker-examples/blob/8279abfcc78bad091608a4a7135e50a0bd0ec8bb/sagemaker-python-sdk/1P_kmeans_highlevel/kmeans_mnist.ipynb)から抜粋したもので、SageMaker AI Components for Kubeflow Pipelines と連携するように変更されています。

を使用して Python でパイプラインを定義 AWS SDK for Python (Boto3) し、KFP ダッシュボード、KFP CLI、または Boto3 を使用してワークフローをコンパイル、デプロイ、実行できます。サンプルの MNIST 分類パイプラインの完全なコードについては、「[Kubeflow Github リポジトリ](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples/mnist-kmeans-sagemaker#mnist-classification-with-kmeans)」を参照してください。パイプラインを使用するには、Python ファイルのクローンをゲートウェイノードに作成します。

その他の [SageMaker AI Kubeflow Pipelines の例](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples) は GitHub で確認できます。使用するコンポーネントの詳細については、「[KubeFlow Pipelines GitHub リポジトリ](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker)」を参照してください。

分類パイプラインの例を実行するには、トレーニングジョブに AWS リソースへのアクセス許可を付与する SageMaker AI IAM 実行ロールを作成し、デプロイオプションに対応するステップに進みます。

## SageMaker AI 実行ロールを作成する
<a name="create-an-amazonsagemaker-execution-role"></a>

`kfp-example-sagemaker-execution-role` IAM ロールは、SageMaker AI ジョブが AWS リソースにアクセスするために引き受けるランタイムロールです。次のコマンドでは、 という名前の IAM 実行ロールを作成し`kfp-example-sagemaker-execution-role`、2 つの管理ポリシー (AmazonSageMakerFullAccess、AmazonS3FullAccess) をアタッチし、SageMaker AI との信頼関係を作成して、SageMaker AI ジョブにそれらの AWS リソースへのアクセスを許可します。

このロールは、パイプラインの実行時に入力パラメータとして指定します。

次のコマンドを実行してロールを作成します。出力で返される ARN を書き留めておきます。

```
SAGEMAKER_EXECUTION_ROLE_NAME=kfp-example-sagemaker-execution-role

TRUST="{ \"Version\": \"2012-10-17		 	 	 \", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"sagemaker.amazonaws.com\" }, \"Action\": \"sts:AssumeRole\" } ] }"
aws iam create-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --assume-role-policy-document "$TRUST"
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess

aws iam get-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --output text --query 'Role.Arn'
```

## AWS デプロイ時のフル Kubeflow
<a name="run-pipelines-on-full-kubeflow-deployment"></a>

[K-Means を使用した MNIST 分類のための SageMaker トレーニングパイプラインチュートリアル](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)の手順に従います。

## Kubeflow Pipelines のスタンドアロンデプロイ
<a name="run-pipelines-on-standalone-kubeflow-pipelines-deployment"></a>

### データセットを準備する
<a name="prepare-datasets"></a>

パイプラインを実行するには、データ抽出前処理スクリプトを Amazon S3 バケットにアップロードする必要があります。このバケットとこのサンプルのすべてのリソースは、`us-east-1` リージョンに配置する必要があります。 バケットの作成については、「[バケットを作成する](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)」を参照してください。

ゲートウェイノードでクローンを作成した Kubeflow リポジトリの `mnist-kmeans-sagemaker` フォルダから、以下のコマンドを実行して Amazon S3 バケットに `kmeans_preprocessing.py` ファイルをアップロードします。「`<bucket-name>`」を Amazon S3 バケットの名前に変更します。

```
aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://<bucket-name>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
```

### パイプラインをコンパイルしてデプロイする
<a name="compile-and-deploy-your-pipeline"></a>

パイプラインを定義したら、中間表現にコンパイルしてから、クラスターの Kubeflow Pipelines サービスに送信する必要があります。中間表現は、tar.gz ファイルに圧縮された YAML ファイルの形式のワークフロー仕様です。パイプラインをコンパイルするには KFP SDK が必要です。

#### KFP SDK をインストールする
<a name="install-kfp-sdk"></a>

ゲートウェイノードのコマンドラインから以下を実行します。

1. 「[Kubeflow pipelines のドキュメント](https://www.kubeflow.org/docs/pipelines/sdk/install-sdk/)」の手順を実行して、KFP SDK をインストールします。

1. 以下のコマンドを使用して、KFP SDK がインストールされたことを確認します。

   ```
   pip show kfp
   ```

1. 以下を使用して、`dsl-compile` が正しくインストールされたことを確認します。

   ```
   which dsl-compile
   ```

#### パイプラインをコンパイルする
<a name="compile-your-pipeline"></a>

Kubeflow Pipelines とのやり取りには、KFP UI、KFP CLI、KFP SDK の 3 つの方法を使用できます。以下のセクションでは、KFP UI と CLI を使用したワークフローについて説明します。

ゲートウェイノードから以下の手順を実行します。

1. 使用する Amazon S3 バケット名と IAM ロール ARN で Python ファイルを変更します。

1. 以下のように、コマンドラインから `dsl-compile` コマンドを実行して、パイプラインをコンパイルします。`<path-to-python-file>` はパイプラインのパスに、`<path-to-output>` は tar.gz ファイルの保存先の場所に置き換えます。

   ```
   dsl-compile --py <path-to-python-file> --output <path-to-output>
   ```

#### KFP CLI を使用してパイプラインをアップロードして実行する
<a name="upload-and-run-the-pipeline-using-the-kfp-cli"></a>

ゲートウェイノードのコマンドラインから以下の手順を実行します。KFP では、パイプラインの実行は実験として整理されます。実験名を指定することもできます。実験名を指定しない場合は、**[Default]** (デフォルト) の実験の下に実行が一覧表示されます。

1. 以下のようにパイプラインをアップロードします。

   ```
   kfp pipeline upload --pipeline-name <pipeline-name> <path-to-output-tar.gz>
   ```

   出力は次のようになります。パイプライン `ID` を書き留めておきます。

   ```
   Pipeline 29c3ff21-49f5-4dfe-94f6-618c0e2420fe has been submitted
   
   Pipeline Details
   ------------------
   ID           29c3ff21-49f5-4dfe-94f6-618c0e2420fe
   Name         sm-pipeline
   Description
   Uploaded at  2020-04-30T20:22:39+00:00
   ...
   ...
   ```

1. 以下のコマンドを使用して実行を作成します。現在のところ、KFP CLI の run コマンドは、実行作成中の入力パラメータの指定をサポートしていません。コンパイルする前に、 AWS SDK for Python (Boto3) パイプラインファイルのパラメータを更新する必要があります。`<experiment-name>` と `<job-name>` を任意の名前に置き換えます。`<pipeline-id>` を、送信済みのパイプラインの ID に置き換えます。`<your-role-arn>` を、`kfp-example-pod-role` の ARN に置き換えます。`<your-bucket-name>` を、作成した Amazon S3 バケットの名前に置き換えます。

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --pipeline-id <pipeline-id> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

   `dsl-compile` コマンドの出力として作成されたコンパイル済みパイプラインパッケージを使用して、実行を直接送信することもできます。

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --package-file <path-to-output> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

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

   ```
   Creating experiment aws.
   Run 95084a2c-f18d-4b77-a9da-eba00bf01e63 is submitted
   +--------------------------------------+--------+----------+---------------------------+
   | run id                               | name   | status   | created at                |
   +======================================+========+==========+===========================+
   | 95084a2c-f18d-4b77-a9da-eba00bf01e63 | sm-job |          | 2020-04-30T20:36:41+00:00 |
   +--------------------------------------+--------+----------+---------------------------+
   ```

1. UI に移動して、ジョブの進行状況をチェックします。

#### KFP UI を使用してパイプラインをアップロードして実行します。
<a name="upload-and-run-the-pipeline-using-the-kfp-ui"></a>

1. 左パネルで、**[Pipelines]** (パイプライン) タブを選択します。

1. 右上にある **[\$1UploadPipeline]** を選択します。

1. パイプラインの名前と説明を入力します。

1. **[ファイルのアップロード]** を選択し、CLI または AWS SDK for Python (Boto3)を使用して作成した tar.gz ファイルへのパスを入力します。

1. 左パネルで、**[Pipelines]** (パイプライン) タブを選択します。

1. 作成したパイプラインを見つけます。

1. **[\$1CreateRun]** を選択します。

1. 入力パラメータを入力します。

1. **[Run]** (実行) を選択します。

### 予測を実行する
<a name="running-predictions"></a>

分類パイプラインがデプロイされると、デプロイコンポーネントによって作成されたエンドポイントに対して分類予測を実行できます。KFP UI を使用して、`sagemaker-deploy-model-endpoint_name` の出力アーティファクトをチェックします。.tgz ファイルをダウンロードしてエンドポイント名を抽出するか、使用したリージョンで SageMaker AI コンソールをチェックします。

#### 予測を実行するアクセス許可を設定する
<a name="configure-permissions-to-run-predictions"></a>

予測をゲートウェイノードから実行する場合は、このセクションをスキップしてください。

**他のマシンを使用して予測を実行するには、クライアントマシンの使用する IAM ロールに `sagemaker:InvokeEndpoint` アクセス許可を割り当てます。**

1. ゲートウェイノードで、以下のコマンドを実行して IAM ポリシーファイルを作成します。

   ```
   cat <<EoF > ./sagemaker-invoke.json
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:InvokeEndpoint"
               ],
               "Resource": "*"
           }
       ]
   }
   EoF
   ```

1. クライアントノードの IAM ロールにポリシーをアタッチします。

   以下のコマンドを実行してください。`<your-instance-IAM-role>` を IAM ロールの名前に置き換えます。`<path-to-sagemaker-invoke-json>` は、作成したポリシーファイルへのパスに置き換えます。

   ```
   aws iam put-role-policy --role-name <your-instance-IAM-role> --policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>
   ```

#### 予測を実行する
<a name="run-predictions"></a>

1. 次の内容`mnist-predictions.py`で、 という名前のクライアントマシンから AWS SDK for Python (Boto3) ファイルを作成します。`ENDPOINT_NAME` 変数を置き換えます。このスクリプトは MNIST データセットをロードし、それらの数字から CSV を作成し、予測のためにエンドポイントに送信して結果をプリントします。

   ```
   import boto3
   import gzip
   import io
   import json
   import numpy
   import pickle
   
   ENDPOINT_NAME='<endpoint-name>'
   region = boto3.Session().region_name
   
   # S3 bucket where the original mnist data is downloaded and stored
   downloaded_data_bucket = f"jumpstart-cache-prod-{region}"
   downloaded_data_prefix = "1p-notebooks-datasets/mnist"
   
   # Download the dataset
   s3 = boto3.client("s3")
   s3.download_file(downloaded_data_bucket, f"{downloaded_data_prefix}/mnist.pkl.gz", "mnist.pkl.gz")
   
   # Load the dataset
   with gzip.open('mnist.pkl.gz', 'rb') as f:
       train_set, valid_set, test_set = pickle.load(f, encoding='latin1')
   
   # Simple function to create a csv from our numpy array
   def np2csv(arr):
       csv = io.BytesIO()
       numpy.savetxt(csv, arr, delimiter=',', fmt='%g')
       return csv.getvalue().decode().rstrip()
   
   runtime = boto3.Session(region).client('sagemaker-runtime')
   
   payload = np2csv(train_set[0][30:31])
   
   response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                      ContentType='text/csv',
                                      Body=payload)
   result = json.loads(response['Body'].read().decode())
   print(result)
   ```

1. 次のように AWS SDK for Python (Boto3) ファイルを実行します。

   ```
   python mnist-predictions.py
   ```

### 結果とログを表示する
<a name="view-results-and-logs"></a>

パイプラインの実行中は、コンポーネントを選択することによって、入力や出力などの実行の詳細をチェックできます。作成されたリソースの名前が一覧表示されます。

KFP リクエストが正常に処理され、SageMaker AI ジョブが作成されると、KFP UI のコンポーネントログに SageMaker AI で作成されたジョブへのリンクが記載されます。ジョブが正常に作成されると、CloudWatch ログも提供されます。

同じクラスターで実行するパイプラインジョブが多すぎると、十分なポッドを利用できないことを示すエラーメッセージが表示されることがあります。これを修正するには、ゲートウェイノードにログインし、使用していないパイプラインで作成されたポッドを削除します。

```
kubectl get pods -n kubeflow
kubectl delete pods -n kubeflow <name-of-pipeline-pod>
```

### クリーンアップ
<a name="cleanup"></a>

パイプラインの処理が終了したら、リソースをクリーンアップする必要があります。

1. パイプラインが正常に終了しない場合は、KFP ダッシュボードで **[Terminate]** (終了) を選択して、パイプラインの実行を終了します。

1. **[終了]** オプションが機能しない場合は、ゲートウェイノードにログインし、パイプラインによって作成されたすべてのポッドを以下のように手動で終了します。

   ```
   kubectl get pods -n kubeflow
   kubectl delete pods -n kubeflow <name-of-pipeline-pod>
   ```

1.  AWS アカウントを使用して、SageMaker AI サービスにログインします。すべてのトレーニング、バッチ変換、HPO のジョブを手動で停止します。モデル、データバケット、エンドポイントを削除して、追加コストが発生しないようにします。パイプライン実行を終了しても SageMaker AI のジョブは停止しません。

# SageMaker ノートブックジョブ
<a name="notebook-auto-run"></a>

Amazon SageMaker AI を使用すると、任意の JupyterLab 環境で Jupyter Notebook から機械学習モデルをインタラクティブに構築、トレーニング、デプロイできます。ただし、ノートブックをスケジュール済みの非インタラクティブなジョブとして実行する必要があるさまざまなシナリオがあります。例えば、特定の期間内に実行されるすべてのトレーニングジョブを分析し、それらのモデルを本番環境にデプロイすることのビジネス価値を分析する定期的な監査レポートを作成する必要があるかもしれません。あるいは、データの小さなサブセットでデータ変換ロジックをテストした後に、特徴量エンジニアリングの仕事をスケールアップする必要があるかもしれません。他の一般的ユースケースには以下などがあります。
+ モデルドリフトモニタリング用ジョブのスケジュール設定
+ より良いモデルのためのパラメーター空間の探索

このようなシナリオでは、SageMaker AI ノートブックジョブを使用して、オンデマンドまたはスケジュールに沿って実行される非インタラクティブなジョブ (SageMaker AI が基盤となるトレーニングジョブとして実行するジョブ) を作成できます。SageMaker Notebook Jobs には直感的なユーザーインターフェイスが用意されているため、ノートブックの Notebook Jobs ウィジェット(![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/notebook-schedule.png)) を選択して JupyterLab から直接ジョブをスケジュールできます。SageMaker AI Python SDK を使用してジョブをスケジュールすることもできます。これにより、パイプラインワークフローで複数のノートブックジョブを柔軟にスケジュールできます。複数のノートブックを並列に実行し、ノートブック内のセルをパラメータ化して入力パラメータをカスタマイズできます。

この機能は、Amazon EventBridge サービス、SageMaker Training サービス、Pipelines サービスを活用し、以下のいずれかの環境の Jupyter Notebook で使用できます。
+ Studio、Studio Lab、Studio Classic、またはノートブックインスタンス
+ JupyterLab を実行するローカルマシンなどのローカル設定

**前提条件**

ノートブックジョブをスケジュールするには、次の基準を満たしていることを確認してください。
+ Jupyter Notebook と初期化スクリプトまたは起動スクリプトが、コードとソフトウェアパッケージに関して自己完結型であることを確認してください。そうでないと、非インタラクティブジョブでエラーが発生する可能性があります。
+ Jupyter Notebook、ネットワーク設定、コンテナ設定が適切に設定されるように [制約と考慮事項](notebook-auto-run-constraints.md) を確認します。
+ ノートブックが Amazon EMR クラスターなどの必要な外部リソースにアクセスできることを確認します。
+ ローカル Jupyter Notebook で Notebook Jobs を設定する場合は、インストールを完了してください。手順については、「[インストールガイド](scheduled-notebook-installation.md)」を参照してください。
+ ノートブックで Amazon EMR クラスターに接続して、Amazon EMR 接続コマンドをパラメータ化する場合は、環境変数を使用してパラメータを渡す回避策を適用する必要があります。詳細については、「[ノートブックから Amazon EMR クラスターに接続する](scheduled-notebook-connect-emr.md)」を参照してください。
+ Kerberos、LDAP、または HTTP Basic Auth 認証を使用して Amazon EMR クラスターに接続する場合は、 を使用してセキュリティ認証情報 AWS Secrets Manager を Amazon EMR 接続コマンドに渡す必要があります。詳細については、「[ノートブックから Amazon EMR クラスターに接続する](scheduled-notebook-connect-emr.md)」を参照してください。
+ (オプション) ノートブックの起動時に実行するスクリプトを UI に事前ロードさせる場合は、管理者がライフサイクル設定 (LCC) を使用してスクリプトをインストールする必要があります。LCC スクリプトの使用方法については、「[Customize a Notebook Instance Using a Lifecycle Configuration Script](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)」を参照してください。

# インストールガイド
<a name="scheduled-notebook-installation"></a>

以下に、JupyterLab 環境でノートブックジョブを使用するためにインストールする必要があるものについて説明します。

**Amazon SageMaker Studio と Amazon SageMaker Studio Lab の場合**

ノートブックが Amazon SageMaker Studio または Amazon SageMaker Studio Lab にある場合は、追加のインストールを行う必要はありません。SageMaker Notebook Jobs はプラットフォームに組み込まれています。Studio に必要なアクセス許可を設定する方法については、「[Studio のポリシーとアクセス許可を設定する](scheduled-notebook-policies-studio.md)」を参照してください。

**ローカル Jupyter Notebook の場合**

ローカルの JupyterLab 環境で SageMaker Notebook Jobs を使用する場合は、追加インストールを実行する必要があります。

SageMaker Notebook Jobs をインストールするには、次の手順を実行します。

1. Python 3 をインストールします。詳細については、「[Installing Python 3 and Python Packages](https://www.codecademy.com/article/install-python3)」を参照してください。

1. JupyterLab バージョン 4 以降をインストールします。詳細については、[JupyterLab SDK ドキュメント](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)を参照してください。

1. をインストールします AWS CLI。詳細については、「[AWS CLI CLI の最新バージョンを使用してインストールまたは更新を行う](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 2 セットのアクセス許可をインストールします。IAM ユーザーは SageMaker AI にジョブを送信するためのアクセス許可を必要とし、送信されると、ノートブックジョブ自体が IAM ロールを引き継ぎます。このロールには、ジョブタスクに応じてリソースにアクセスするためのアクセス許可が必要です。

   1. IAM ユーザーをまだ作成していない場合は、「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。

   1. ノートブックジョブロールをまだ作成していない場合は、「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

   1. 必要なアクセス許可と信頼ポリシーをユーザーとロールにアタッチします。手順とアクセス許可の詳細については、「[ローカル Jupyter 環境にポリシーとアクセス許可をインストールする](scheduled-notebook-policies-other.md)」を参照してください。

1. 新しく作成した IAM ユーザーの AWS 認証情報を生成し、JupyterLab 環境の認証情報ファイル (\$1/.aws/credentials) に保存します。これは CLI コマンド `aws configure` で行うことができます。手順については、「[設定ファイルと認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」の「コマンドを使用した構成設定の設定と表示」を参照してください。**

1. (オプション) デフォルトでは、スケジューラー拡張機能は Python 2.0 で事前構築済みの SageMaker AI Docker イメージを使用します。ノートブックで使用されているデフォルト以外のカーネルは、すべてコンテナにインストールする必要があります。ノートブックをコンテナまたは Docker イメージで実行する場合は、Amazon Elastic Container Registry (Amazon ECR) イメージを作成する必要があります。Docker イメージを Amazon ECR にプッシュする方法については、「[Docker イメージをプッシュする](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)」を参照してください。

1. SageMaker Notebook Jobs 用の JupyterLab 拡張機能を追加します。コマンド `pip install amazon_sagemaker_jupyter_scheduler` を使用して JupyterLab 環境に追加できます。コマンド `sudo systemctl restart jupyter-server` を使用して Jupyter サーバーを再起動する必要がある場合があります。

1. 次のコマンド `jupyter lab` を使用して JupyterLab を起動します。

1. Jupyter Notebook タスクバーに Notebook Jobs ウィジェット (![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/notebook-schedule.png)) が表示されていることを確認します。

# Studio のポリシーとアクセス許可を設定する
<a name="scheduled-notebook-policies-studio"></a>

最初のノートブックの実行をスケジュールする前に、適切なポリシーとアクセス許可をインストールする必要があります。以下は、次のアクセス許可を設定する手順を説明しています。
+ ジョブ実行ロールの信頼関係
+ ジョブ実行ロールにアタッチされた追加の IAM アクセス許可
+ (オプション) カスタム KMS キーを使用するための AWS KMS アクセス許可ポリシー

**重要**  
 AWS アカウントがサービスコントロールポリシー (SCP) が設定されている組織に属している場合、有効なアクセス許可は、SCPs で許可されているものと IAM ロールとユーザーポリシーで許可されているものの論理的な共通部分です。例えば、組織の SCP で、`us-east-1` と `us-west-1` のリソースのみにアクセスできると指定されており、ポリシーでは `us-west-1` と `us-west-2` のリソースのみにアクセスが許可されている場合、最終的には `us-west-1` のリソースにのみアクセスできます。ロールポリシーとユーザーポリシーで許可されているアクセス許可をすべて行使したい場合は、組織の SCP が独自の IAM ユーザーおよびロールポリシーと同じアクセス許可セットを付与する必要があります。許可されるリクエストを確認する方法の詳細については、「[Determining whether a request is allowed or denied within an account](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)」を参照してください。

**信頼関係**

信頼関係を変更するには、次の手順を実行します。

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

1. 左側のパネルの **[ロール]** を選択します。

1. ノートブックジョブのジョブ実行ロールを検索し、ロール名を選択します。

1. **[信頼関係]** タブを選択します。

1. **[Edit trust policy]** (信頼ポリシーを編集) を選択します。

1. 以下のポリシーをコピーして、貼り付けます。

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

****  

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

------

1. [**[ポリシーの更新]** を選択します。

## 追加の IAM アクセス許可
<a name="scheduled-notebook-policies-add"></a>

以下の状況では、追加の IAM アクセス許可を含める必要がある場合がある
+ Studio の実行ロールとノートブックジョブのロールは異なる
+ S3 VPC エンドポイント経由で Amazon S3 リソースにアクセスする必要がある
+ カスタム KMS キーを使用して、入出力の Amazon S3 バケットを暗号化する必要がある

以下の説明では、それぞれのケースに必要なポリシーについて取り上げます。

### Studio の実行ロールとノートブックジョブのロールが異なる場合に必要なアクセス許可
<a name="scheduled-notebook-policies-add-diffrole"></a>

次の JSON スニペットは、Studio 実行ロールをノートブックジョブロールとして使用しない場合に Studio 実行ロールとノートブックジョブロールに追加する必要があるポリシーの例です。権限をさらに制限する必要がある場合は、このポリシーを確認して変更してください。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"iam:PassRole",
         "Resource":"arn:aws:iam::*:role/*",
         "Condition":{
            "StringLike":{
               "iam:PassedToService":[
                  "sagemaker.amazonaws.com",
                  "events.amazonaws.com"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "events:TagResource",
            "events:DeleteRule",
            "events:PutTargets",
            "events:DescribeRule",
            "events:PutRule",
            "events:RemoveTargets",
            "events:DisableRule",
            "events:EnableRule"
         ],
         "Resource":"*",
         "Condition":{
            "StringEquals":{
               "aws:ResourceTag/sagemaker:is-scheduling-notebook-job":"true"
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:CreateBucket",
            "s3:PutBucketVersioning",
            "s3:PutEncryptionConfiguration"
         ],
         "Resource":"arn:aws:s3:::sagemaker-automated-execution-*"
      },
      {
            "Sid": "S3DriverAccess",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::sagemakerheadlessexecution-*"
            ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:ListTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:user-profile/*",
            "arn:aws:sagemaker:*:*:space/*",
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "sagemaker:AddTags"
         ],
         "Resource":[
            "arn:aws:sagemaker:*:*:training-job/*",
            "arn:aws:sagemaker:*:*:pipeline/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSubnets",
            "ec2:DescribeVpcEndpoints",
            "ec2:DescribeVpcs",
            "ecr:BatchCheckLayerAvailability",
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetAuthorizationToken",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:GetEncryptionConfiguration",
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:GetObject",
            "sagemaker:DescribeApp",
            "sagemaker:DescribeDomain",
            "sagemaker:DescribeUserProfile",
            "sagemaker:DescribeSpace",
            "sagemaker:DescribeStudioLifecycleConfig",
            "sagemaker:DescribeImageVersion",
            "sagemaker:DescribeAppImageConfig",
            "sagemaker:CreateTrainingJob",
            "sagemaker:DescribeTrainingJob",
            "sagemaker:StopTrainingJob",
            "sagemaker:Search",
            "sagemaker:CreatePipeline",
            "sagemaker:DescribePipeline",
            "sagemaker:DeletePipeline",
            "sagemaker:StartPipelineExecution"
         ],
         "Resource":"*"
      }
   ]
}
```

------

### S3 VPC エンドポイント経由で Amazon S3 リソースにアクセスするのに必要なアクセス許可
<a name="scheduled-notebook-policies-add-vpc"></a>

SageMaker Studio をプライベート VPC モードで実行し、S3 VPC エンドポイントから S3 にアクセスする場合、VPC エンドポイントポリシーにアクセス許可を追加して、VPC エンドポイントからアクセス可能な S3 リソースを制御できます。以下のアクセス許可を VPC エンドポイントポリシーに追加します。アクセス許可をさらに制限する必要がある場合 (例えば、`Principal` フィールドの仕様を絞り込むなど)、ポリシーを変更できます。

```
{
    "Sid": "S3DriverAccess",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::sagemakerheadlessexecution-*"
}
```

S3 VPC エンドポイントポリシーの設定方法の詳細については、「[Edit the VPC endpoint policy](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#edit-vpc-endpoint-policy-s3)」を参照してください。

### カスタム KMS キーを使用するために必要なアクセス許可 (オプション)
<a name="scheduled-notebook-policies-add-kms"></a>

デフォルトでは、入出力の Amazon S3 バケットはサーバー側の暗号化を使用して暗号化されますが、カスタム KMS キーを指定して、出力 Amazon S3 バケットとノートブックジョブにアタッチされたストレージボリュームのデータを暗号化できます。

カスタム KMS キーを使用する場合は、次のポリシーをアタッチし、独自の KMS キー ARN を指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

# ローカル Jupyter 環境にポリシーとアクセス許可をインストールする
<a name="scheduled-notebook-policies-other"></a>

ローカル Jupyter 環境でノートブックジョブをスケジュールするには、必要なアクセス許可とポリシーを設定する必要があります。IAM ユーザーには SageMaker AI にジョブを送信するためのアクセス許可が必要であり、ノートブックジョブ自体が引き受ける IAM ロールにはジョブタスクに応じてリソースにアクセスするためのアクセス許可が必要です。以下では、必要なアクセス許可とポリシーを設定する方法について説明します。

2 セットのアクセス許可をインストールする必要があります。次の図は、ローカル Jupyter 環境でノートブックジョブをスケジュールするためのアクセス許可構造を説明しています。IAM ユーザーが SageMaker AI にジョブを送信するためには、IAM アクセス許可を設定する必要があります。ユーザーがノートブックジョブを送信すると、ノートブックジョブ自体が IAM ロールを引き受けます。このロールには、ジョブタスクに応じてリソースにアクセスするためのアクセス許可があります。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/notebook-jobs-permissions.png)


以下のセクションでは、IAM ユーザーとジョブ実行ロールの両方に必要なポリシーとアクセス許可をインストールするのに役立ちます。

## IAM ユーザー許可
<a name="scheduled-notebook-policies-other-user"></a>

**SageMaker AI にジョブを送信するためのアクセス許可**

ジョブを送信する許可を追加するには、次の手順を実行します。

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

1. 左のパネルの **[ユーザー]** を選択します。

1. ノートブックジョブの IAM ユーザーを検索し、ユーザー名を選択します。

1. **[アクセス許可の追加]** と **[インラインポリシーを作成]** の順に選択します。

1. **JSON** タブを選択します。

1. 以下のポリシーをコピーして、貼り付けます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EventBridgeSchedule",
               "Effect": "Allow",
               "Action": [
                   "events:TagResource",
                   "events:DeleteRule",
                   "events:PutTargets",
                   "events:DescribeRule",
                   "events:EnableRule",
                   "events:PutRule",
                   "events:RemoveTargets",
                   "events:DisableRule"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "IAMPassrole",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "sagemaker.amazonaws.com",
                           "events.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "IAMListRoles",
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "*"
           },
           {
               "Sid": "S3ArtifactsAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:PutEncryptionConfiguration",
                   "s3:CreateBucket",
                   "s3:PutBucketVersioning",
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetEncryptionConfiguration",
                   "s3:DeleteObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemaker-automated-execution-*"
               ]
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:DescribeTrainingJob",
                   "sagemaker:StopTrainingJob",
                   "sagemaker:DescribePipeline",
                   "sagemaker:CreateTrainingJob",
                   "sagemaker:DeletePipeline",
                   "sagemaker:CreatePipeline"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/sagemaker:is-scheduling-notebook-job": "true"
                   }
               }
           },
           {
               "Sid": "AllowSearch",
               "Effect": "Allow",
               "Action": "sagemaker:Search",
               "Resource": "*"
           },
           {
               "Sid": "SagemakerTags",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:ListTags",
                   "sagemaker:AddTags"
               ],
               "Resource": [
                   "arn:aws:sagemaker:*:*:pipeline/*",
                   "arn:aws:sagemaker:*:*:space/*",
                   "arn:aws:sagemaker:*:*:training-job/*",
                   "arn:aws:sagemaker:*:*:user-profile/*"
               ]
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchGetImage"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

**AWS KMS アクセス許可ポリシー (オプション)**

デフォルトでは、入出力の Amazon S3 バケットはサーバー側の暗号化を使用して暗号化されますが、カスタム KMS キーを指定して、出力 Amazon S3 バケットとノートブックジョブにアタッチされたストレージボリュームのデータを暗号化できます。

カスタム KMS キーを使用する場合は、前の手順を繰り返し、次のポリシーをアタッチして独自の KMS キー ARN を指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
         "Effect":"Allow",
         "Action":[
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey",
            "kms:CreateGrant"
         ],
         "Resource":"arn:aws:kms:us-east-1:111122223333:key/key-id"
      }
   ]
}
```

------

## ジョブ実行ロールのアクセス許可
<a name="scheduled-notebook-policies-other-job"></a>

**信頼関係**

ジョブ実行ロールの信頼関係を変更するには、次の手順を実行します。

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

1. 左側のパネルの **[ロール]** を選択します。

1. ノートブックジョブのジョブ実行ロールを検索し、ロール名を選択します。

1. **[信頼関係]** タブを選択します。

1. **[Edit trust policy]** (信頼ポリシーを編集) を選択します。

1. 以下のポリシーをコピーして、貼り付けます。

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

****  

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

------

**追加のアクセス許可**

送信されたノートブックジョブには、リソースにアクセスするためのアクセス許可が必要です。次の手順は、最小限のアクセス許可セットを追加する方法を示します。必要に応じて、ノートブックジョブのニーズに基づいてさらにアクセス許可を追加します。ジョブ実行ロールにアクセス許可を追加するには、次の手順を実行します。

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

1. 左側のパネルの **[ロール]** を選択します。

1. ノートブックジョブのジョブ実行ロールを検索し、ロール名を選択します。

1. **[アクセス許可の追加]** と **[インラインポリシーを作成]** の順に選択します。

1. **JSON** タブを選択します。

1. 以下のポリシーをコピーして、貼り付けます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PassroleForJobCreation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": "sagemaker.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "S3ForStoringArtifacts",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::sagemaker-automated-execution-*"
           },
           {
               "Sid": "S3DriverAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::sagemakerheadlessexecution-*"
               ]
           },
           {
               "Sid": "SagemakerJobs",
               "Effect": "Allow",
               "Action": [
                   "sagemaker:StartPipelineExecution",
                   "sagemaker:CreateTrainingJob"
               ],
               "Resource": "*"
           },
           {
               "Sid": "ECRImage",
               "Effect": "Allow",
               "Action": [
                   "ecr:GetDownloadUrlForLayer",
                   "ecr:BatchGetImage",
                   "ecr:GetAuthorizationToken",
                   "ecr:BatchCheckLayerAvailability"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. ノートブックジョブがアクセスする他のリソースにアクセス許可を追加します。

1. **[ポリシーの確認]** を選択します。

1. ポリシーの名前を入力します。

1. [**Create policy**] (ポリシーの作成) を選択します。

# ノートブックジョブを作成できる場所
<a name="create-notebook-auto-run"></a>

ノートブックジョブを作成する場合は、複数のオプションがあります。以下は、ノートブックジョブを作成するための SageMaker AI でのオプションです。

Studio UI の JupyterLab ノートブックでジョブを作成することも、SageMaker Python SDK を使用してプログラムでジョブを作成することもできます。
+ Studio UI でノートブックジョブを作成する場合は、イメージとカーネル、セキュリティ設定、カスタム変数またはスクリプトに関する詳細を指定すると、ジョブがスケジュールされます。SageMaker ノートブックジョブをスケジュールする方法の詳細については、「[Studio でノートブックジョブを作成する](create-notebook-auto-run-studio.md)」を参照してください。
+ SageMaker Python SDK を使用してノートブックジョブを作成するには、ノートブックジョブステップを使用してパイプラインを作成し、オンデマンド実行を開始するか、オプションでパイプラインスケジューリング機能を使用して将来の実行をスケジュールします。SageMaker SDK を使用すると、パイプラインをカスタマイズする柔軟性が得られ、パイプラインを複数のノートブックジョブステップを含むワークフローに拡張できます。SageMaker ノートブックジョブステップとパイプラインの両方を作成するために、SageMaker ノートブックジョブのジョブダッシュボードでパイプラインの実行ステータスを追跡し、Studio でパイプライングラフを表示することもできます。SageMaker Python SDK を使用してジョブをスケジュールする方法とサンプルノートブックへのリンクの詳細については、「[SageMaker AI Python SDK を使用したノートブックジョブの作成例](create-notebook-auto-run-sdk.md)」を参照してください。

# SageMaker AI Python SDK を使用したノートブックジョブの作成例
<a name="create-notebook-auto-run-sdk"></a>

SageMaker Python SDK を使用してスタンドアロンのノートブックを実行するには、ノートブックジョブステップを作成し、そのステップをパイプラインにアタッチして、Pipelines が提供するユーティリティを使ってオンデマンドでジョブを実行するか、必要に応じて単一または複数の将来のジョブをスケジュールする必要があります。以降のセクションでは、オンデマンドまたはスケジュールされたノートブックジョブを作成し、実行を追跡するための基本的な手順について説明します。さらに、ノートブックジョブにパラメータを渡す必要がある場合や、ノートブックで Amazon EMR に接続する必要がある場合は、以下の説明を参照してください。このような場合は、追加の Jupyter Notebook の準備が必要です。`NotebookJobStep` の引数のサブセットにデフォルトを適用して、ノートブックジョブステップを作成する都度指定する必要を回避することもできます。

SageMaker AI Python SDK を使用してノートブックジョブをスケジュールする方法を説明するサンプルノートブックを表示するには、「[ノートブックジョブのサンプルノートブック](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/notebook-job-step)」を参照してください。

**Topics**
+ [ノートブックジョブを作成するステップ](#create-notebook-auto-run-overall)
+ [Studio UI ダッシュボードでノートブックジョブを表示する](#create-notebook-auto-run-dash)
+ [Studio でパイプライングラフを表示する](#create-notebook-auto-run-graph)
+ [パラメータのノートブックへの受け渡し](#create-notebook-auto-run-passparam)
+ [入力ノートブックから Amazon EMR クラスターに接続する](#create-notebook-auto-run-emr)
+ [デフォルトのオプションを設定する](#create-notebook-auto-run-intdefaults)

## ノートブックジョブを作成するステップ
<a name="create-notebook-auto-run-overall"></a>

直ちに実行するノートブックジョブか、スケジュールに従って実行するノートブックジョブを作成できます。以下の手順では、両方の方法を説明します。

**ノートブックジョブをスケジュールするには、次の基本的な手順を実行します。**

1. `NotebookJobStep` インスタンスを作成します。`NotebookJobStep` パラメータの詳細については、「[sagemaker.workflow.steps.NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep)」を参照してください。次のコードスニペットに示されるとおり、少なくとも、次の引数を指定できます。
**重要**  
SageMaker Python SDK を使用してノートブックジョブをスケジュールする場合、ノートブックジョブを実行するために指定できるのは特定のイメージのみです。詳細については、「[SageMaker AI Python SDK ノートブックジョブのイメージに関する制約](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk)」を参照してください。

   ```
   notebook_job_step = NotebookJobStep(
       input_notebook=input-notebook,
       image_uri=image-uri,
       kernel_name=kernel-name
   )
   ```

1. 次のスニペットに示されるとおり、`NotebookJobStep` を単一のステップとしてパイプラインを作成します。

   ```
   pipeline = Pipeline(
       name=pipeline-name,
       steps=[notebook_job_step],
       sagemaker_session=sagemaker-session,
   )
   ```

1. パイプラインをオンデマンドで実行するか、必要に応じて将来のパイプライン実行をスケジュールします。即時実行を開始するには、次のコマンドを使用します。

   ```
   execution = pipeline.start(
       parameters={...}
   )
   ```

   必要に応じて、将来のパイプライン実行を 1 回スケジュールすることも、事前指定の間隔で複数の実行をスケジュールすることもできます。スケジュールの指定は `PipelineSchedule` で行い、`put_triggers` を使用してスケジュール オブジェクトをパイプラインに渡します。パイプラインのスケジュールの詳細については、「[SageMaker Python SDK でパイプラインをスケジュールする](pipeline-eventbridge.md#build-and-manage-scheduling)」を参照してください。

   次の例では、パイプラインが 2023 年 12 月 12 日 午前 10:31:32 UTC に 1 回実行されるようにスケジュールします。

   ```
   my_schedule = PipelineSchedule(  
       name="my-schedule“,  
       at=datetime(year=2023, month=12, date=25, hour=10, minute=31, second=32) 
   )  
   pipeline.put_triggers(triggers=[my_schedule])
   ```

   次の例では、パイプラインが 2022 年から 2023 年までの各月の最終金曜日の午前 10:15 UTC に実行されるようにスケジュールします。cron ベースのスケジュールの詳細については、「[Cron-based schedules](https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html#cron-based)」を参照してください。

   ```
   my_schedule = PipelineSchedule(  
       name="my-schedule“,  
       cron="15 10 ? * 6L 2022-2023"
   )  
   pipeline.put_triggers(triggers=[my_schedule])
   ```

1. (オプション) SageMaker ノートブックジョブダッシュボードでノートブックジョブを表示します。Studio UI がジョブをキャプチャして表示する方法は、ノートブックジョブステップの `tags` 引数で指定する値によって制御できます。詳細については、「[Studio UI ダッシュボードでノートブックジョブを表示する](#create-notebook-auto-run-dash)」を参照してください。

## Studio UI ダッシュボードでノートブックジョブを表示する
<a name="create-notebook-auto-run-dash"></a>

パイプラインステップとして作成するノートブックジョブは、特定のタグを指定すると Studio ノートブックジョブダッシュボードに表示されます。

**注記**  
Studio またはローカル JupyterLab 環境で作成されたノートブックジョブのみがジョブ定義を作成します。このため、SageMaker Python SDK を使用してノートブックジョブを作成した場合、ノートブックジョブダッシュボードにジョブ定義は表示されません。ただし、「[ノートブックジョブを表示](view-notebook-jobs.md)」の説明に従ってノートブックジョブを表示することができます。

次のタグを使用すると、ノートブックジョブを表示できるチームメンバーを制御できます。
+ ドメイン内のすべてのユーザープロファイルまたは[スペース](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl-user-guide.html)にノートブックを表示するには、ドメイン名でドメインタグを追加します。例を以下に示します。
  + キー: `sagemaker:domain-name`、値: `d-abcdefghij5k`
+ ノートブックジョブをドメイン内の特定のユーザープロファイルに表示するには、ユーザープロファイルとドメインタグの両方を追加します。ユーザープロファイルタグの例は以下の通りです。
  + キー: `sagemaker:user-profile-name`、値: `studio-user`
+ ノートブックジョブを[スペース](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl-user-guide.html)に表示するには、スペースタグとドメインタグの両方を追加します。スペースタグの例は以下の通りです。
  + キー: `sagemaker:shared-space-name`、値: `my-space-name`
+ ドメインタグ、ユーザープロファイルタグ、またはスペースタグをアタッチしない場合、パイプラインステップで作成されたノートブックジョブは Studio UI に表示されません。この場合、トレーニングジョブコンソールで基盤となるトレーニングジョブを表示するか、[パイプライン実行のリスト](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-studio-view-execution.html)でステータスを表示できます。

ダッシュボードでジョブを表示するために必要なタグを設定した後の、ジョブを表示して出力をダウンロードする方法の詳細については、「[ノートブックジョブを表示](view-notebook-jobs.md)」を参照してください。

## Studio でパイプライングラフを表示する
<a name="create-notebook-auto-run-graph"></a>

ノートブックジョブステップはパイプラインの一部であるため、Studio でパイプライングラフ (DAG) を表示できます。パイプライングラフでは、パイプライン実行のステータスを表示し、リネージを追跡できます。詳細については、「[パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)」を参照してください。

## パラメータのノートブックへの受け渡し
<a name="create-notebook-auto-run-passparam"></a>

ノートブックジョブにパラメータを渡す場合 (`NotebookJobStep` の `parameters` 引数を使用)、パラメータを受け取るように入力ノートブックを準備する必要があります。

Papermill ベースのノートブックジョブエグゼキュータは、`parameters` タグでタグ付けされた Jupyter セルを検索し、このセルの直後に新しいパラメータまたはパラメータの上書きを適用します。詳細については、「[ノートブックをパラメータ化する](notebook-auto-run-troubleshoot-override.md)」を参照してください。

このステップを実行したら、次の例に示されるとおり、パラメータを `NotebookJobStep` に渡します。

```
notebook_job_parameters = {
    "company": "Amazon"
}

notebook_job_step = NotebookJobStep(
    image_uri=image-uri,
    kernel_name=kernel-name,
    role=role-name,
    input_notebook=input-notebook,
    parameters=notebook_job_parameters,
    ...
)
```

## 入力ノートブックから Amazon EMR クラスターに接続する
<a name="create-notebook-auto-run-emr"></a>

Studio で Jupyter Notebook から Amazon EMR クラスターに接続する場合は、Jupyter Notebook をさらに変更する必要がある場合があります。ノートブックで次のいずれかのタスクを実行する必要がある場合は、「[ノートブックから Amazon EMR クラスターに接続する](scheduled-notebook-connect-emr.md)」を参照してください。
+ **Amazon EMR 接続コマンドにパラメータを渡します**。Studio では Papermill を使用してノートブックを実行します。SparkMagic カーネルでは、Papermill が SparkMagic に情報を渡す方法が原因で、Amazon EMR 接続コマンドに渡すパラメータが期待どおりに機能しない場合があります。
+ **Kerberos、LDAP、または HTTP ベーシック認証を受けた Amazon EMR クラスターにユーザー認証情報を渡します**。ユーザー認証情報は、 AWS Secrets Managerを介してを渡す必要があります。

## デフォルトのオプションを設定する
<a name="create-notebook-auto-run-intdefaults"></a>

SageMaker SDK は、パラメータのサブセットのデフォルトを設定するオプションが提供されているため、`NotebookJobStep` インスタンスを作成する都度、次のとおりのパラメータを指定する必要はありません。このようなパラメータは、`role`、`s3_root_uri`、`s3_kms_key`、`volume_kms_key`、`subnets`、`security_group_ids` です。ステップのデフォルトを指定するには、SageMaker AI の設定ファイルを使用します。SageMaker AI 設定ファイルの詳細については、「[SageMaker Python SDK を使用してデフォルトを設定して使用する](https://sagemaker.readthedocs.io/en/stable/overview.html#configuring-and-using-defaults-with-the-sagemaker-python-sdk)」を参照してください。

ノートブックジョブのデフォルトを指定するには、次のスニペットに示されるとおり、設定ファイルのノートブックジョブセクションに新しいデフォルトを適用します。

```
SageMaker:
  PythonSDK:
    Modules:
      NotebookJob:
        RoleArn: 'arn:aws:iam::555555555555:role/IMRole'
        S3RootUri: 's3://amzn-s3-demo-bucket/my-project'
        S3KmsKeyId: 's3kmskeyid'
        VolumeKmsKeyId: 'volumekmskeyid1'
        VpcConfig:
          SecurityGroupIds:
            - 'sg123'
          Subnets:
            - 'subnet-1234'
```

# Studio でノートブックジョブを作成する
<a name="create-notebook-auto-run-studio"></a>

**注記**  
ノートブックスケジューラは、Amazon EventBridge サービス、SageMaker Training サービス、Pipelines サービスから構築されます。ノートブックジョブが失敗した場合、これらのサービスに関連するエラーが表示されることがあります。Studio UI でノートブックジョブを作成する方法について説明します。

SageMaker ノートブックジョブは、ノートブックジョブウィジェットを使用して非インタラクティブなノートブックジョブを作成して管理するためのツールを提供しています。ジョブの作成、作成したジョブの表示、既存のジョブの一時停止、停止、再開を行うことができます。ノートブックのスケジュールを変更することもできます。

ウィジェットを使用してスケジュールされたノートブックジョブを作成すると、スケジューラは直ちに開始できるように、デフォルトのオプションの選択を推測し、フォームに自動的に入力します。Studio を使用している場合は、少なくともオプションを設定せずにオンデマンドジョブを送信できます。また、時間指定のスケジュール情報だけを提供する (スケジュール済み) ノートブックジョブ定義を送信することもできます。ただし、スケジュール済みジョブに特別な設定が必要な場合は、他のフィールドをカスタマイズできます。ローカルの Jupyter Notebook を実行している場合、スケジューラー拡張機能には独自のデフォルト (オプションのサブセット) を指定できる機能が用意されているため、毎回同じ値を手動で挿入する必要がありません。

ノートブックジョブを作成する際は、データセット、画像、ローカルスクリプトなどの追加ファイルを含めることができます。これを行うには、**[入力フォルダを使用してジョブを実行する]** を選択します。これにより、ノートブックジョブは入力ファイルのフォルダーの下にあるすべてのファイルにアクセスできるようになります。ノートブックジョブの実行中、ディレクトリのファイル構造が変更されることはありません。

ノートブックジョブをスケジュールするには、次の手順を実行します。

1. **[ジョブの作成]** フォームを開きます。

   ローカル JupyterLab 環境のタスクバーで **[ノートブックジョブの作成]** アイコン (![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/notebook-schedule.png)) を選択します。アイコンが表示されない場合は、「[インストールガイド](scheduled-notebook-installation.md)」の手順に従ってインストールします。

   Studio で、次の 2 つの方法のいずれかでフォームを開きます。
   + **[ファイルブラウザ]** を使用する

     1. 左パネルの **[ファイルブラウザ]** で、スケジュール済みジョブとして実行したいノートブックを右クリックします。

     1. **[ノートブックジョブの作成]** を選択します。
   +  Studio ノートブックで開く
     + スケジュール済みジョブとして実行する Studio ノートブック内で、Studio ツールバーの **[ノートブックジョブの作成]** アイコン (![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/notebook-schedule.png)) を選択します。

1. ポップアップフォームに入力します。フォームには以下のフィールドが表示されます。
   + **ジョブ名**: ジョブに指定するわかりやすい名前。
   + **入力ファイル**: 非インタラクティブモードでの実行を予定しているノートブックの名前。
   + **コンピューティングタイプ**: ノートブックを実行する Amazon EC2 インスタンスのタイプ。
   + **パラメータ**: ノートブックへの入力としてオプションで指定できるカスタムパラメータ。この機能を使用する際、必要に応じて Jupyter Notebook 内の特定のセルに **parameters** タグを付けて、パラメータが適用される場所を制御できます。詳細については、[ノートブックをパラメータ化する](notebook-auto-run-troubleshoot-override.md)を参照してください。
   + (オプション) **入力フォルダを使用してジョブを実行する**: これを選択すると、スケジュールされたジョブは**入力ファイル**と同じフォルダにあるすべてのファイルにアクセスできます。
   + **追加オプション**: ジョブに合わせて追加のカスタマイズを指定できます。例えば、イメージまたはカーネル、入出力フォルダ、ジョブの再試行とタイムアウトのオプション、暗号化の詳細、カスタム初期化スクリプトを指定できます。適用できるカスタマイズの全リストについては、「[利用可能なオプション](create-notebook-auto-execution-advanced.md)」を参照してください。

1. ジョブをスケジュールします。ノートブックはオンデマンドで実行することも、決まったスケジュールで実行することもできます。
   + オンデマンドでノートブックを実行するには、以下の手順に従います。
     + **[今すぐ実行]** を選択します。
     + **[作成]** を選択します。
     + **[ノートブックジョブ]** タブが表示されます。**[再ロード]** を選択すると、ジョブがダッシュボードに読み込まれます。
   + 決まったスケジュールでノートブックを実行するには、以下の手順に従います。
     + **[スケジュールに従って実行**] を選択します。
     + **[間隔]** ドロップダウンリストを選択し、時間間隔を選択します。間隔の範囲は、1 分ごとから毎月までです。**[カスタムスケジュール]** を選択することもできます。
     + 選択した間隔に基づいて、希望する実行日時をさらに詳しく指定するのに役立つ追加のフィールドが表示されます。例えば、毎日実行するために **[日]** を選択すると、希望する時間を指定する追加フィールドが表示されます。指定する時刻は UTC 形式であることに注意してください。また、1 分などの短い間隔を選択した場合、次のジョブの開始時に前のジョブが完了していないと、ジョブが重複することにも注意してください。

       カスタムスケジュールを選択した場合は、式ボックスで cron 構文を使用して正確な実行日時を指定します。cron 構文はスペースで区切られた数字のリストで、各桁は秒から年までの時間単位を表します。cron 構文に関するヘルプが必要な場合は、式ボックスの **[Get help with cron 構文に関するヘルプを入手する]** を選択します。
     + **[作成]** を選択します。
     + **[ノートブックジョブ定義]** タブが表示されます。**[再ロード]** を選択すると、ジョブ定義がダッシュボードに読み込まれます。

# ローカルノートブックのデフォルトオプションをセットアップ
<a name="create-notebook-auto-execution-advanced-default"></a>

**重要**  
2023 年 11 月 30 日以降、従来の Amazon SageMaker Studio のエクスペリエンスは Amazon SageMaker Studio Classic と名前が変更されました。以下のセクションは、Studio Classic アプリケーションの使用を前提とした内容です。更新後の Studio エクスペリエンスを使用する場合は、「[Amazon SageMaker Studio](studio-updated.md)」を参照してください。  
Studio Classic は既存のワークロードでも維持されていますが、オンボーディングに利用できなくなりました。既存の Studio Classic アプリケーションのみを停止または削除でき、新しいアプリケーションを作成することはできません。[ワークロードを新しい Studio エクスペリエンスに移行](studio-updated-migrate.md)することをお勧めします。

ノートブックジョブを作成する際に、デフォルトオプションを設定できます。これにより、提供されたデフォルトとは異なるオプションを使用して複数のノートブックジョブを作成する予定がある場合に時間を節約できます。以下は、ローカルノートブックのデフォルトオプションを設定する方法についての説明です。

**[ジョブの作成]** フォームにカスタム値を手動で入力 (または貼り付け) する必要がある場合は、新しいデフォルト値を保存できます。新しいジョブ定義を作成するたびに、スケジューラー拡張機能によって新しい値が挿入されます。この機能は以下のオプションで利用できます。
+ **ロールの ARN**
+ **S3 入力フォルダ**
+ **S3 出力フォルダ**
+ **暗号化 KMS キーを出力** (**[ジョブの暗号化を設定]** を有効にした場合)
+ **ジョブインスタンスのボリューム暗号化 KMS キー** (**[ジョブの暗号化を設定]** を有効にした場合)

この機能により、提供されているデフォルトとは異なる値を挿入し、今後のジョブ実行で引き続きその値を使用すると時間を節約できます。選択したユーザー設定は JupyterLab サーバーを実行するマシンに保存され、ネイティブ API を使用して取得されます。5 つのオプションすべてではなく、単数または複数のオプションに新しいデフォルト値を指定した場合、カスタマイズしていなかったオプションには以前のデフォルト値が使用されます。

次の手順は、ノートブックジョブの既存のデフォルト値をプレビューし、新しいデフォルト値を設定して、デフォルト値をリセットする方法を説明しています。

**ノートブックジョブの既存のデフォルト値をプレビューするには、次の手順を実行します。**

1. 「[Amazon SageMaker Studio Classic を起動する](studio-launch.md)」の手順に従って、Amazon SageMaker Studio Classic コンソールを開きます。

1. 左パネルの **[ファイルブラウザ]** で、スケジュール済みジョブとして実行したいノートブックを右クリックします。

1. **[ノートブックジョブの作成]** を選択します。

1. ノートブックジョブ設定のタブを展開するには、**[その他のオプション]** を選択します。デフォルト設定はここで確認できます。

**将来のノートブックジョブに新しいデフォルト値を設定するには、次の手順を実行します。**

1. 「[Amazon SageMaker Studio Classic を起動する](studio-launch.md)」の手順に従って、Amazon SageMaker Studio Classic コンソールを開きます。

1. Studio Classic の上部にあるメニューから **[設定]** を選択し、**[詳細設定エディタ]** を選択します。

1. **[設定]** の下にあるリストから **[Amazon SageMaker Scheduler]** を選択します。これはデフォルトで既に開いている場合があります。

1. デフォルト設定は、この UI ページで直接更新することも、JSON エディタを使用して更新することもできます。
   + UI では、**[ロール ARN]**、**[S3 入力フォルダ]**、**[S3 出力フォルダ]**、**[KMS 暗号化キーを出力]**、または**[ジョブインスタンスのボリューム暗号化 KMS キー]** に新しい値を挿入できます。このような値を変更すると、次回のノートブックジョブを作成する際、**[その他のオプション]** にこれらのフィールドの新しいデフォルトが表示されます。
   + (オプション) **[JSON 設定エディタ]** を使用してユーザーのデフォルトを更新するには、次の手順を実行します。

     1. 右上隅にある **[JSON 設定エディタ]** を選択します。

     1. **[設定]** の左側のサイドバーで、**[Amazon SageMaker AI スケジューラー]** を選択します。これはデフォルトで既に開いている場合があります。

        現在のデフォルト値は、**[ユーザー設定]** パネルで確認できます。

        システムのデフォルト値は、**[システムのデフォルト]** パネルで確認できます。

     1. デフォルト値を更新するには、JSON スニペットを**[システムデフォルト]** パネルから **[ユーザー設定]** パネルにコピーして貼り付け、フィールドを更新します。

     1. デフォルト値を更新した場合は、右上隅にある **[ユーザー設定を保存]** アイコン (![\[Icon of a cloud with an arrow pointing upward, representing cloud upload functionality.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/Notebook_save.png)) をクリックします。エディタを閉じた場合、変更は保存されません。

**以前に変更した後でユーザー定義のデフォルト値をリセットしたい場合は、次の手順を実行します。**

1. Studio Classic の上部にあるメニューから **[設定]** を選択し、**[詳細設定エディタ]** を選択します。

1. **[設定]** の下にあるリストから **[Amazon SageMaker Scheduler]** を選択します。これはデフォルトで既に開いている場合があります。

1. デフォルト値に戻すには、この UI ページを直接使用することも、JSON エディタを使用することもできます。
   + UI では、右上隅の**[デフォルトに復元]** をクリックします。デフォルトは空の文字列に復元されます。このオプションが表示されるのは、以前にデフォルト値を変更したことがある場合だけです。
   + (オプション) **[JSON 設定エディタ]** を使用してデフォルト設定の使用を再開するには、次の手順を実行します。

     1. 右上隅にある **[JSON 設定エディタ]** を選択します。

     1. **[設定]** の左側のサイドバーで、**[Amazon SageMaker AI スケジューラー]** を選択します。これはデフォルトで既に開いている場合があります。

        現在のデフォルト値は、**[ユーザー設定]** パネルで確認できます。

        システムのデフォルト値は、**[システムのデフォルト]** パネルで確認できます。

     1. 現在のデフォルト設定を復元するには、**[システムのデフォルト]** パネルのコンテンツを **[ユーザー設定]** パネルにコピーします。

     1. 右上隅にある **[ユーザー設定を保存]** アイコン (![\[Icon of a cloud with an arrow pointing upward, representing cloud upload functionality.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/Notebook_save.png)) をクリックします。エディタを閉じた場合、変更は保存されません。

# ノートブックジョブのワークフロー
<a name="create-notebook-auto-run-dag"></a>

ノートブックジョブはカスタムコードを実行するため、単一または複数のノートブックジョブステップを含むパイプラインを作成できます。ML ワークフローには、多くの場合、データの前処理を実行する処理ステップ、モデルを構築するトレーニングステップ、モデル評価ステップなど、複数のステップが含まれます。ノートブックジョブの使用法の 1 つに、前処理の処理が挙げられます。データ変換または取り込みを実行するノートブック、データクリーニングを実行する EMR ステップ、トレーニングステップを開始する前に入力の特徴量化を実行する別のノートブックジョブがある場合があります。ノートブックジョブでは、パイプラインの前のステップからの情報や、入力ノートブックのパラメータとしてユーザー指定のカスタマイズからの情報が必要になる場合があります。環境変数とパラメータをノートブックに渡し、前のステップから情報を取得する方法の例については、「[ノートブックステップとの間で情報を受け渡しする](create-notebook-auto-run-dag-seq.md)」を参照してください。

別のユースケースでは、ノートブックジョブの 1 つが別のノートブックを呼び出して、ノートブックの実行中にいくつかのタスクを実行する場合があります。このようなシナリオでは、これらのソースノートブックをノートブックジョブステップの依存関係として指定する必要があります。別のノートブックを呼び出す方法の詳細については、「[ノートブックジョブで別のノートブックを呼び出す](create-notebook-auto-run-dag-call.md)」を参照してください。

SageMaker AI Python SDK を使用してノートブックジョブをスケジュールする方法を説明するサンプルノートブックを表示するには、「[ノートブックジョブのサンプルノートブック](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/notebook-job-step)」を参照してください。

# ノートブックステップとの間で情報を受け渡しする
<a name="create-notebook-auto-run-dag-seq"></a>

以下のセクションでは、情報を環境変数とパラメータとしてノートブックに渡す方法について説明します。

## 環境変数を渡す
<a name="create-notebook-auto-run-dag-seq-env-var"></a>

次の例に示されるとおり、環境変数をディクショナリとして `NotebookJobStep` の `environment_variable` 引数に渡します。

```
environment_variables = {"RATE": 0.0001, "BATCH_SIZE": 1000}

notebook_job_step = NotebookJobStep(
    ...
    environment_variables=environment_variables,
    ...
)
```

次の例で示されるとおり、ノートブックで `os.getenv()` を使って、環境変数を使用できます。

```
# inside your notebook
import os
print(f"ParentNotebook: env_key={os.getenv('env_key')}")
```

## パラメータの受け渡し
<a name="create-notebook-auto-run-dag-seq-param"></a>

`NotebookJobStep` インスタンスの最初のノートブックジョブステップにパラメータを渡す際、必要に応じて Jupyter Notebook のセルにタグを付けて、新しいパラメータまたはパラメータの上書きを適用する場所を示すことができます。Jupyter Notebook のセルにタグを付ける方法の詳細については、「[ノートブックをパラメータ化する](notebook-auto-run-troubleshoot-override.md)」を参照してください。

次のスニペットに示されるとおり、ノートブックジョブステップの `parameters` パラメータを介してパラメータを渡します。

```
notebook_job_parameters = {
    "company": "Amazon",
}

notebook_job_step = NotebookJobStep(
    ...
    parameters=notebook_job_parameters,
    ...
)
```

入力ノートブック内では、`parameters` でタグ付けされたセルの後、タグ付けされたセルがない場合はノートブックの先頭に、パラメータが適用されます。

```
# this cell is in your input notebook and is tagged with 'parameters'
# your parameters and parameter overrides are applied after this cell
company='default'
```

```
# in this cell, your parameters are applied
# prints "company is Amazon"
print(f'company is {company}')
```

## 前のステップから情報を取得する
<a name="create-notebook-auto-run-dag-seq-interstep"></a>

以下では、前のステップからデータを抽出してノートブックジョブステップに渡す方法について説明します。

**`properties` 属性を使用する**

前のステップの `properties` 属性では、以下のプロパティを使用できます。
+ `ComputingJobName`— トレーニングジョブ名
+ `ComputingJobStatus`— トレーニングジョブのステータス
+ `NotebookJobInputLocation`— 入力 Amazon S3 の場所
+ `NotebookJobOutputLocationPrefix`— トレーニングジョブ出力へのパス、具体的には `{NotebookJobOutputLocationPrefix}/{training-job-name}/output/output.tar.gz` に出力が保存される
+ `InputNotebookName`— 入力ノートブックのファイル名
+ `OutputNotebookName`— 出力ノートブックファイル名 (ジョブが失敗した場合、トレーニングジョブ出力フォルダに存在しない場合があります)

次のコードスニペットは、プロパティ属性からパラメータを抽出する方法を説明しています。

```
notebook_job_step2 = NotebookJobStep(
    ....
    parameters={
        "step1_JobName": notebook_job_step1.properties.ComputingJobName,
        "step1_JobStatus": notebook_job_step1.properties.ComputingJobStatus,
        "step1_NotebookJobInput": notebook_job_step1.properties.NotebookJobInputLocation,
        "step1_NotebookJobOutput": notebook_job_step1.properties.NotebookJobOutputLocationPrefix,
    }
```

**JsonGet を使用する**

上記のパラメータ以外のパラメータを渡す場合や、前のステップの JSON 出力が Amazon S3 に存在する場合は、`JsonGet` を使用します。`JsonGet` は、Amazon S3 の JSON ファイルから直接データを抽出できる一般的なメカニズムです。

`JsonGet` を使用して Amazon S3 の JSON ファイルを抽出するには、次の手順を実行します。

1. JSON ファイルを Amazon S3 にアップロードします。データが既に Amazon S3 にアップロードされている場合は、このステップをスキップします。次の例は、JSON ファイルを Amazon S3 にアップロードする方法を説明しています。

   ```
   import json
   from sagemaker.s3 import S3Uploader
   
   output = {
       "key1": "value1", 
       "key2": [0,5,10]
   }
               
   json_output = json.dumps(output)
   
   with open("notebook_job_params.json", "w") as file:
       file.write(json_output)
   
   S3Uploader.upload(
       local_path="notebook_job_params.json",
       desired_s3_uri="s3://path/to/bucket"
   )
   ```

1. 抽出する値への S3 URI と JSON パスを指定します。次の例では、`JsonGet` はキー `key2` (`10`) に関連付けられた値のインデックス 2 を表すオブジェクトを返します。

   ```
   NotebookJobStep(
       ....
       parameters={
           # the key job_key1 returns an object representing the value 10
           "job_key1": JsonGet(
               s3_uri=Join(on="/", values=["s3:/", ..]),
               json_path="key2[2]" # value to reference in that json file
           ), 
           "job_key2": "Amazon" 
       }
   )
   ```

# ノートブックジョブで別のノートブックを呼び出す
<a name="create-notebook-auto-run-dag-call"></a>

あるノートブックジョブが別のノートブックを呼び出すようなパイプラインを設定できます。以下では、ノートブックが他の 2 つのノートブックを呼び出す、ノートブックジョブステップを含むパイプラインの例を設定します。入力ノートブックには次の行が含まれます。

```
%run 'subfolder/notebook_to_call_in_subfolder.ipynb'
%run 'notebook_to_call.ipynb'
```

次のスニペットに示されるとおり、`additional_dependencies` を使用してこれらのノートブックを `NotebookJobStep` インスタンスに渡します。`additional_dependencies` でノートブックに提供されるパスは、ルートの場所から指定されていることに注意が必要です。SageMaker AI が依存ファイルとフォルダーを Amazon S3 にアップロードして、依存関係へのパスを適切に提供できるようにする方法については、[NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep) の「`additional_dependencies`」の説明を参照してください。

```
input_notebook = "inputs/input_notebook.ipynb"
simple_notebook_path = "inputs/notebook_to_call.ipynb"
folder_with_sub_notebook = "inputs/subfolder"

notebook_job_step = NotebookJobStep(
    image_uri=image-uri,
    kernel_name=kernel-name,
    role=role-name,
    input_notebook=input_notebook,
    additional_dependencies=[simple_notebook_path, folder_with_sub_notebook],
    tags=tags,
)
```

# 利用可能なオプション
<a name="create-notebook-auto-execution-advanced"></a>

次の表には、ノートブックジョブを Studio、ローカル Jupyter 環境で実行するか、SageMaker Python SDK を使用して実行するかを問わず、ノートブックジョブをカスタマイズするために使用できるすべてのオプションが表示されています。この表には、カスタムオプションのタイプ、説明、オプションの使用方法に関する追加のガイドライン、Studio のオプションのフィールド名 (利用可能な場合)、SageMaker Python SDK のノートブックジョブステップのパラメータ名 (利用可能な場合) が記載されています。

オプションによっては、ノートブックジョブを設定する都度指定する必要がないように、カスタムのデフォルト値を事前に設定することもできます。Studio の場合、このようなオプションは **[ロール]**、**[入力フォルダ]**、**[出力フォルダ]**、**[KMS キー ID]**であり、次の表で説明されています。このようなオプションのカスタムデフォルトを事前に設定すると、ノートブックジョブを作成する際に、これらのフィールドが **[ジョブの作成]** フォームに事前入力されます。Studio およびローカル Jupyter 環境でカスタムデフォルトを作成する方法の詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。

SageMaker SDK は、`NotebookJobStep` を作成する際にこのようなパラメータを指定する必要がないように、インテリジェントなデフォルトを設定するオプションも提供しています。これらのパラメータは、`role`、`s3_root_uri`、`s3_kms_key`、`volume_kms_key`、`subnets`、`security_group_ids` であり、次の表で説明されています。インテリジェントなデフォルトの設定方法については、「[デフォルトのオプションを設定する](create-notebook-auto-run-sdk.md#create-notebook-auto-run-intdefaults)」を参照してください。


| カスタムオプション | 説明 | Studio 固有のガイドライン | Jupyter のローカル環境ガイドライン | SageMaker Python SDK ガイドライン | 
| --- | --- | --- | --- | --- | 
| ジョブ名 | Notebook Jobs ダッシュボードに表示されるジョブ名 | [ジョブ名] フィールド | Studio と同様です。 | notebook\$1job\$1name パラメータ。デフォルトは None です。 | 
| イメージ | 選択したコンピューティングタイプでノートブックを非インタラクティブに実行するために使用されるコンテナイメージ。 | [イメージ] フィールド このフィールドのデフォルトはノートブックの現在のイメージになります。必要に応じて、このフィールドをデフォルト値からカスタム値に変更します。Studio がこの値を推測できない場合、フォームに検証エラーが表示され、その値を指定するよう求められます。このイメージは、[独自のイメージを導入](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)することも、使用可能な Amazon SageMaker イメージにすることもできます。ノートブックスケジューラーがサポートする使用可能な SageMaker イメージのリストは、「[Studio Classic ノートブックで使用できる Amazon SageMaker イメージ](notebooks-available-images.md)」を参照してください。 | [イメージ] フィールド このフィールドには、指定したノートブックを選択したコンピューティングタイプで実行できる Docker イメージの ECR URI が必要です。(オプション) デフォルトでは、スケジューラ拡張機能は事前に構築された SageMaker AI Docker イメージ (Python 2.0 ベース) を使用します。これは、boto3 と Python 3 カーネルを含む DockerHub の公式 AWS CLI Python 3.8 イメージです。ノートブックのカスタムイメージ仕様を満たす任意の ECR URI を指定することもできます。詳細については、「[Amazon SageMaker Studio Classic でのカスタム SageMaker イメージの仕様](studio-byoi-specs.md)」を参照してください。このイメージには、ノートブックの実行に必要なカーネルとライブラリがすべて含まれている必要があります。 | 必須。image\$1uri パラメータ。ECR 上の Docker イメージの URI の場所。特定の SageMaker ディストリビューションイメージ、これらのイメージに基づくカスタムイメージ、または追加要件を満たすノートブックジョブの依存関係がプリインストールされた独自のイメージを使用できます。詳細については、「[SageMaker AI Python SDK ノートブックジョブのイメージに関する制約](notebook-auto-run-constraints.md#notebook-auto-run-constraints-image-sdk)」を参照してください。 | 
| インスタンスタイプ | ノートブックジョブを実行するために使用する EC2 インスタンスタイプ。ノートブックジョブは SageMaker トレーニングジョブをコンピューティングレイヤーとして使用するため、指定するインスタンスタイプは SageMaker トレーニングでサポートされているインスタンスタイプである必要があります。 | [コンピューティングタイプ] フィールド。デフォルトは ml.m5.large です。 | Studio と同様です。 | instance\$1type パラメータ。デフォルトは ml.m5.large です。 | 
| カーネル | ノートブックジョブの実行に使用される Jupyter カーネル。 | [カーネル] フィールド。このフィールドのデフォルトはノートブックの現在のカーネルになります。必要に応じて、このフィールドをデフォルト値からカスタム値に変更します。Studio がこの値を推測できない場合、フォームに検証エラーが表示され、その値を指定するよう求められます。 | [カーネル] フィールド。このカーネルはイメージ内に存在し、Jupyter カーネルの仕様に従っている必要があります。このフィールドのデフォルトは、Python 2.0 SageMaker のベースイメージにある Python3 カーネルです。必要に応じて、このフィールドをカスタム値に変更します。 | 必須。kernel\$1name パラメータ。このカーネルはイメージ内に存在し、Jupyter カーネルの仕様に従っている必要があります。イメージのカーネル識別子を確認するには、(LINK) を参照してください。 | 
| SageMaker AI セッション | SageMaker AI サービスコールが委任される、基盤となる SageMaker AI セッション | 該当なし | 該当なし | sagemaker\$1session パラメータ。指定しない場合は、デフォルト設定チェーンを使用してセッションが作成されます。 | 
| ロールの ARN | ノートブックジョブで使用されるロールの Amazon リソースネーム (ARN)。 | [ロール ARN] フィールド。このフィールドのデフォルトは Studio 実行ロールです。必要に応じて、このフィールドをカスタム値に変更します。 Studio がこの値を推測できない場合、**[ロールの ARN]** フィールドは空白になります。この場合は、使用する ARN を挿入します。  | [ロール ARN] フィールド。このフィールドはデフォルトで SagemakerJupyterScheduler のプレフィックスが付いた任意のロールになります。プレフィックスが付いたロールが複数ある場合、拡張子は 1 つを選択します。必要に応じて、このフィールドをカスタム値に変更します。このフィールドには、新しいジョブ定義を作成するたびに事前入力される独自のユーザーデフォルトを設定できます。詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。 | role パラメータ。SDK が SageMaker Notebooks または SageMaker Studio Notebooks で実行されている場合、デフォルトで SageMaker AI のデフォルトの IAM ロールに設定されます。それ以外の場合は、ValueError をスローします。インテリジェントなデフォルトを許可します。 | 
| 入力ノートブック | 実行をスケジュールしているノートブックの名前 | 必須。[入力ファイル] フィールド。 | Studio と同様です。 | Required.Parameter input\$1notebook | 
| 入力フォルダ | 入力が保存されているフォルダ。入力ノートブックや、オプションの起動スクリプトや初期化スクリプトを含むジョブ入力は、このフォルダに格納されます。 | [入力フォルダ] フィールド。フォルダを指定しない場合、スケジューラーは入力用にデフォルトの Amazon S3 バケットを作成します。 | Studio と同様です。このフィールドには、新しいジョブ定義を作成するたびに事前入力される独自のユーザーデフォルトを設定できます。詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。 | 該当なし。入力フォルダは、パラメータ s3\$1root\$1uri で指定された場所内に配置されます。 | 
| 出力フォルダ | 出力が保存されているフォルダ。出力ノートブックとログを含むジョブの出力は、このフォルダに格納されます。 | [出力フォルダ] フィールド。フォルダを指定しない場合、スケジューラーは出力用にデフォルトの Amazon S3 バケットを作成します。 | Studio と同様です。このフィールドには、新しいジョブ定義を作成するたびに事前入力される独自のユーザーデフォルトを設定できます。詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。 | 該当なし。出力フォルダは、パラメータ s3\$1root\$1uri で指定された場所内に配置されます。 | 
| パラメータ | ノートブックジョブに渡す変数と値のディクショナリ | [パラメータ] フィールド。パラメータを受け入れるには、[ノートブックをパラメータ化する](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-auto-run-troubleshoot-override.html)必要があります。 | Studio と同様です。 | parameters パラメータ。パラメータを受け入れるには、[ノートブックをパラメータ化する](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-auto-run-troubleshoot-override.html)必要があります。 | 
| 追加の (ファイルまたはフォルダ) 依存関係 | ノートブックジョブが S3 ステージフォルダにアップロードするファイルまたはフォルダの依存関係のリスト | サポート外。 | サポート外。 | additional\$1dependencies パラメータ。ノートブックジョブは、これらの依存関係を実行時に利用できるように、S3 ステージフォルダにアップロードします。 | 
| S3 ルート URI | 入力が保存されているフォルダ。入力ノートブックや、オプションの起動スクリプトや初期化スクリプトを含むジョブ入力は、このフォルダに格納されます。この S3 バケットは、ノートブックジョブの実行に使用している AWS アカウント と同じアカウントに配置されている必要があります。 | 該当なし。[入力フォルダ] と [出力フォルダ] を使用します。 | Studio と同様です。 | s3\$1root\$1uri パラメータ。デフォルト S3 バケットにデフォルト設定されています。インテリジェントなデフォルトを許可します。 | 
| 環境変数 | 上書きしたい既存の環境変数、またはノートブックに導入して使用したい新しい環境変数。 | [環境変数] フィールド | Studio と同様です。 | environment\$1variables パラメータ。デフォルトは None です。 | 
| タグ | ジョブに追加するタグのリスト | 該当なし | 該当なし | tags パラメータ。デフォルトは None です。タグは、パイプラインが作成したジョブを Studio UI がキャプチャして表示する方法を制御します。詳細については、「[Studio UI ダッシュボードでノートブックジョブを表示する](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)」を参照してください。 | 
| 起動スクリプト | ノートブックの起動メニューに事前に読み込まれているスクリプトで、ノートブックを実行する前に実行を選択できます。 | [開始スクリプト] フィールド。起動時にイメージ上で実行されるライフサイクル設定 (LCC) スクリプトを選択します。 起動スクリプトは Studio 環境外のシェルで実行されます。したがって、このスクリプトは Studio のローカルストレージ、環境変数、またはアプリのメタデータ (`/opt/ml/metadata` 内) に依存できません。また、起動スクリプトと初期化スクリプトを使用すると、起動スクリプトが最初に実行されます。   | サポート外。 | サポート外。 | 
| 初期化スクリプト | ノートブックの起動時に実行できるローカルスクリプトへのパス。 | [初期スクリプト] フィールド。ローカルスクリプトまたはライフサイクル設定 (LCC) スクリプトが保存されている EFS ファイルパスを入力します。起動スクリプトと初期化スクリプトを使用すると、起動スクリプトが最初に実行されます。 初期化スクリプトは、ノートブックジョブと同じシェルから取得されます。これは、前に説明した起動スクリプトには当てはまりません。また、起動スクリプトと初期化スクリプトを使用すると、起動スクリプトが最初に実行されます。   | [初期スクリプト] フィールド。ローカルスクリプトまたはライフサイクル設定 (LCC) スクリプトが保存されているローカルファイルパスを入力します。 | initialization\$1script パラメータ。デフォルトは None です。 | 
| 最大再試行回数 | Studio が失敗したジョブ実行の再実行を試行する回数。 | [最大再試行回数] フィールド。デフォルトは 1 です。 | Studio と同様です。 | max\$1retry\$1attempts パラメータ。デフォルトは 1 です。 | 
| 最大実行時間 (秒単位) | ノートブックジョブを停止するまでに実行できる時間の最大長 (秒単位)。[最大実行時間] と [最大再試行回数] の両方を設定した場合、実行時間は各再試行に適用されます。この時間内にジョブが完了しない場合、そのステータスは Failed に設定されます。 | [最大実行時間 (秒単位)] フィールド。デフォルトは 172800 seconds (2 days) です。 | Studio と同様です。 | max\$1runtime\$1in\$1seconds パラメータ。デフォルトは 172800 seconds (2 days) です。 | 
| 再試行ポリシー | 再試行ポリシーのリスト。失敗した場合に実行するアクションを管理します。 | サポート外。 | サポート外。 | retry\$1policies パラメータ。デフォルトは None です。 | 
| Step または StepCollection の依存関係の追加 | ジョブが依存する Step 名のリスト、StepCollection 名のリスト、またはインスタンスのリスト。 | サポート外。 | サポート外。 | depends\$1on パラメータ。デフォルトは None です。これを使用して、パイプライングラフ内のステップ間の明示的な依存関係を定義します。 | 
| ボリュームサイズ | トレーニング中に入出力データを保存するためのストレージボリュームの GB 単位のサイズ | サポート外。 | サポート外。 | volume\$1size パラメータ。デフォルトは 30GB です。 | 
| コンテナ間のトラフィックの暗号化 | トレーニングジョブのトレーニングコンテナ間のトラフィックが暗号化されるかどうかを指定するフラグ | 該当なし。デフォルトでは有効になっています。 | 該当なし。デフォルトでは有効になっています。 | encrypt\$1inter\$1container\$1traffic パラメータ。デフォルトは True です。 | 
| ジョブの暗号化の設定 | ノートブックのジョブ出力、ジョブインスタンスボリューム、またはその両方を暗号化することを示すインジケータ。 | [ジョブの暗号化を設定] フィールド。暗号化を選択するには、このボックスにチェックを入れます。チェックを入れないと、ジョブ出力はアカウントのデフォルトの KMS キーで暗号化され、ジョブインスタンスボリュームは暗号化されません。 | Studio と同様です。 | サポート外。 | 
| 出力暗号化 KMS キー | ノートブックジョブの出力に使用する暗号化キーをカスタマイズする場合に使用する KMS キー。このフィールドは、[ジョブの暗号化を設定] をオンにした場合にのみ適用されます。 | [出力暗号化 KMS キー] フィールド。このフィールドを指定しない場合、ノートブックジョブの出力はデフォルトの Amazon S3 KMS キーを使用して SSE-KMS で暗号化されます。また、Amazon S3 バケットを独自に作成して暗号化を使用する場合、暗号化方法は保持されます。 | Studio と同様です。このフィールドには、新しいジョブ定義を作成するたびに事前入力される独自のユーザーデフォルトを設定できます。詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。 | s3\$1kms\$1key パラメータ。デフォルトは None です。インテリジェントなデフォルトを許可します。 | 
| Job インスタンスボリューム暗号化 KMS キー | ジョブインスタンスボリュームを暗号化する場合に使用する KMS キー。このフィールドは、[ジョブの暗号化を設定] をオンにした場合にのみ適用されます。 | [ジョブのインスタンスボリューム暗号化 KMS キー] フィールド | [ジョブのインスタンスボリューム暗号化 KMS キー] フィールド。このフィールドには、新しいジョブ定義を作成するたびに事前入力される独自のユーザーデフォルトを設定できます。詳細については、「[ローカルノートブックのデフォルトオプションをセットアップ](create-notebook-auto-execution-advanced-default.md)」を参照してください。 | volume\$1kms\$1key パラメータ。デフォルトは None です。インテリジェントなデフォルトを許可します。 | 
| 仮想プライベートクラウドを使用してこのジョブを実行する (VPC ユーザー向け) | このジョブを 仮想プライベートクラウド (VPC) で実行することを示すインジケーター。セキュリティを強化するために、プライベート VPC を使用することをお勧めします。 | [Virtual Private Cloud を使用してこのジョブを実行する] フィールド VPC を使用する場合は、このボックスをオンにします。ノートブックジョブがそれらの AWS リソースにプライベートに接続できるようにするには、少なくとも次の VPC エンドポイントを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/create-notebook-auto-execution-advanced.html)VPC を使用する場合は、以下のオプションで少なくとも 1 つのプライベートサブネットと少なくとも 1 つのセキュリティグループを指定する必要があります。プライベートサブネットを使用しない場合は、他の設定オプションを検討する必要があります。詳細については、「[制約と考慮事項](notebook-auto-run-constraints.md)」でサポートされていないパブリック VPC サブネットを参照してください。 | Studio と同様です。 | 該当なし | 
| サブネット (VPC ユーザー用) | 自分のサブネット。このフィールドには少なくとも 1 つ、最大で 5 つ含める必要があり、指定するサブネットはすべてプライベートにする必要があります。詳細については、「[制約と考慮事項](notebook-auto-run-constraints.md)」でサポートされていないパブリック VPC サブネットを参照してください。 | [サブネット] フィールド。このフィールドのデフォルトは Studio ドメインに関連付けられたサブネットですが、必要に応じて変更できます。 | [サブネット] フィールド。スケジューラーはサブネットを検出できないため、VPC に設定したサブネットをすべて入力する必要があります。 | subnets パラメータ。デフォルトは None です。インテリジェントなデフォルトを許可します。 | 
| セキュリティグループ (VPC ユーザー用) | 自分のセキュリティグループ。このフィールドには、少なくとも 1 つ、最大で 15 含める必要があります。詳細については、「[制約と考慮事項](notebook-auto-run-constraints.md)」でサポートされていないパブリック VPC サブネットを参照してください。 | [セキュリティグループ] フィールド。このフィールドのデフォルトは、ドメイン VPC に関連付けられたセキュリティグループですが、必要に応じて変更できます。 | [セキュリティグループ] フィールド。スケジューラーはセキュリティグループを検出できないため、VPC に設定したセキュリティグループをすべて入力する必要があります。 | security\$1group\$1ids パラメータ。デフォルトは None です。インテリジェントなデフォルトを許可します。 | 
| 名前 | ノートブックジョブステップの名前 | 該当なし | 該当なし | name パラメータ。指定しない場合、ノートブックファイル名から派生したものが使用されます。 | 
| Display name (表示名) | パイプライン実行のリストに表示されるジョブ名 | 該当なし | 該当なし | display\$1name パラメータ。デフォルトは None です。 | 
| 説明 | ジョブについての説明 | 該当なし | 該当なし | description パラメータ。 | 

# ノートブックをパラメータ化する
<a name="notebook-auto-run-troubleshoot-override"></a>

セルの後の新しいパラメータ値を適用する場合、スケジュールされたノートブックジョブに新しいパラメータを渡したり、パラメータを上書きするために、必要に応じて Jupyter Notebook を変更することができます。パラメータを渡すと、ノートブックジョブエグゼキュータは Papermill が適用する方法を使用します。ノートブックジョブエグゼキュータは、`parameters` タグでタグ付けされた Jupyter セルを検索し、このセルの直後に新しいパラメータまたはパラメータの上書きを適用します。`parameters` でタグ付けされたセルがない場合、パラメータはノートブックの先頭に適用されます。`parameters` でタグ付けされたセルが複数ある場合、パラメータは `parameters` でタグ付けされた最初のセルの後に適用されます。

ノートブック内のセルに `parameters` タグを付けるには、次の手順を実行します。

1. パラメータ化するセルを選択します。

1. 右側のサイドバーで、**[Property Inspector]** アイコン (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/icons/gears.png)) をクリックします。

1. **[タグを追加]** ボックスに **parameters** と入力します。

1. **\$1** 記号を選択します。

1. `parameters` タグは **[セルタグ]** の下にチェックマーク付きで表示されます。これは、タグがセルに適用されていることを意味します。

# ノートブックから Amazon EMR クラスターに接続する
<a name="scheduled-notebook-connect-emr"></a>

Studio の Jupyter Notebook から Amazon EMR クラスターに接続する場合、追加のセットアップを実行する必要がある場合があります。特に、以下の説明では 2 つの問題を取り上げています。
+ **Amazon EMR 接続コマンドにパラメータを渡します**。SparkMagic カーネルでは、Papermill がパラメータを渡す方法と SparkMagic がパラメータを受け取る方法が異なるため、Amazon EMR 接続コマンドに渡すパラメータが期待どおりに動作しない場合があります。この制限に対処する回避策は、パラメータを環境変数として渡すことです。問題と回避策の詳細については、「[EMR 接続コマンドにパラメータを渡す](#scheduled-notebook-connect-emr-pass-param)」を参照してください。
+ **Kerberos、LDAP、または HTTP ベーシック認証を受けた Amazon EMR クラスターにユーザー認証情報を渡します**。インタラクティブモードでは、Studio はサインイン認証情報を入力できるポップアップフォームで認証情報を要求します。スケジュール済み非インタラクティブなノートブックでは、認証情報を AWS Secrets Manager経由で渡す必要があります。スケジュールされたノートブックジョブ AWS Secrets Manager で を使用する方法の詳細については、「」を参照してください[Kerberos、LDAP、または HTTP ベーシック認証を受けた Amazon EMR クラスターにユーザー認証情報を渡します。](#scheduled-notebook-connect-emr-credentials)。

## EMR 接続コマンドにパラメータを渡す
<a name="scheduled-notebook-connect-emr-pass-param"></a>

SparkMagic PySpark と Spark カーネルでイメージを使用していて、EMR 接続コマンドをパラメータ化する場合は、[ジョブの作成] フォーム (**[追加オプション]** ドロップダウンメニュー) の [パラメータ] フィールドではなく、**[環境変数]** フィールドにパラメータを指定します。Jupyter Notebook の EMR 接続コマンドがこれらのパラメータを環境変数として渡すことを確認してください。例えば、ジョブの作成時に環境変数として `cluster-id` を渡したとします。EMR 接続コマンドは、以下の例のようになります。

```
%%local
import os
```

```
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None
```

SparkMagic と Papermill の要件を満たすには、この回避策が必要です。バックグラウンドコンテキストでは、SparkMagic カーネルはユーザーが定義したローカル変数に `%%local` magic コマンドが伴うことを想定しています。ただし、Papermill はオーバーライド時に `%%local` magic コマンドを渡しません。この Papermill の制限を回避するには、**[環境変数]** フィールドに環境変数としてパラメータを指定する必要があります。

## Kerberos、LDAP、または HTTP ベーシック認証を受けた Amazon EMR クラスターにユーザー認証情報を渡します。
<a name="scheduled-notebook-connect-emr-credentials"></a>

Kerberos、LDAP、または HTTP Basic Auth 認証を使用する Amazon EMR クラスターへの安全な接続を確立するには、 AWS Secrets Manager を使用してユーザー認証情報を接続コマンドに渡します。Secrets Manager シークレットの作成については、「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。シークレットには、ユーザー名とパスワードが含まれている必要があります。次の例に示すように、`--secrets` 引数を使用してシークレットを渡します。

```
%sm_analytics emr connect --cluster-id j_abcde12345 
    --auth Kerberos 
    --secret aws_secret_id_123
```

管理者は、特別なタグに基づいてアクセスを割り当てる属性ベースのアクセス制御 (ABAC) メソッドを使用して柔軟なアクセスポリシーを設定できます。柔軟なアクセスを設定して、アカウント内のすべてのユーザーに 1 つのシークレットを作成したり、ユーザーごとにシークレットを作成したりできます。以下のコードサンプルはこれらのシナリオを示しています。

**アカウントのすべてのユーザーに 1 つのシークレットを作成する**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------

**ユーザーごとに異なるシークレットを作成する**

次の例で示すように、`PrincipleTag` タグを使用してユーザーごとに異なるシークレットを作成できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"
            },
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/user-identity": "${aws:PrincipalTag/user-identity}"
                }
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------

# Amazon SageMaker Studio でのノートブックジョブの詳細
<a name="track-jobs-jobdefs"></a>

SageMaker Notebook Jobs ダッシュボードは、スケジュールしたジョブ定義を整理したり、ジョブ定義から実行された実際のジョブを追跡したりするのに役立ちます。ノートブックジョブをスケジュールする際に理解しておくべき重要な概念は、ジョブ定義とジョブ実行の 2 つです。****ジョブ定義は、特定のノートブックを実行するように設定するスケジュールです。例えば、毎週水曜日にノートブック XYZ.ipynb を実行するジョブ定義を作成できます。このジョブ定義は、今度の水曜日、来週の水曜日、その次の水曜日などに実際に発生するジョブ実行を開始します。

**注記**  
SageMaker Python SDK ノートブックジョブステップでは、ジョブ定義は作成されません。ただし、ノートブックジョブダッシュボードでジョブを表示することはできます。JupyterLab 環境でジョブをスケジュールすると、ジョブとジョブ定義の両方を利用できます。

インターフェイスには、既存のジョブ定義とジョブ実行を追跡するのに役立つ 2 つの主要なタブがあります。
+ **ノートブックジョブ**タブ: このタブには、オンデマンドジョブとジョブ定義から実行されたすべてのジョブのリストが表示されます。このタブから、1 つのジョブ実行の詳細に直接アクセスできます。例えば、2 日前の水曜日に発生した 1 つのジョブ実行を表示できます。
+ **ノートブックジョブ定義**タブ: このタブには、すべてのジョブ定義のリストが表示されます。このタブから、1 つジョブ定義の詳細に直接アクセスできます。例えば、XYZ.ipynb を毎週水曜日に実行するために作成したスケジュールを表示できます。

**[ノートブックジョブ]** タブの詳細については、「[ノートブックジョブを表示](view-notebook-jobs.md)」を参照してください。

**[ノートブックジョブ定義]** タブの詳細については、「[ノートブックジョブ定義の表示](view-def-detail-notebook-auto-run.md)」を参照してください。

# ノートブックジョブを表示
<a name="view-notebook-jobs"></a>

**注記**  
Studio UI からノートブックジョブをスケジュールした場合、ノートブックジョブが自動的に表示されます。SageMaker Python SDK を使用してノートブックジョブをスケジュールする場合は、ノートブックジョブステップを作成する際に追加のタグを指定する必要があります。詳細については、「[Studio UI ダッシュボードでノートブックジョブを表示する](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)」を参照してください。

次のトピックでは、**[ノートブックジョブ]** タブと、単一のノートブックジョブの詳細を表示する方法について説明します。**[ノートブックジョブ]** タブ (Studio ツールバーの **[ノートブックジョブの作成]** アイコン (![\[Blue icon of a calendar with a checkmark, representing a scheduled task or event.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/notebook-schedule.png)) をクリックしてアクセス) には、オンデマンドジョブの履歴と、作成したジョブ定義から実行されるすべてのジョブが表示されます。このタブは、オンデマンドジョブを作成した後に開きます。または、このタブを自分で表示して、過去と現在のジョブの履歴を確認することもできます。任意のジョブの **[ジョブ名]** を選択すると、その **[ジョブの詳細]** ページに 1 つのジョブの詳細が表示されます。**[ジョブの詳細]** ページの詳細については、以下の「[1 つのジョブを表示](#view-jobs-detail-notebook-auto-run)」のセクションを参照してください。

**[ノートブックジョブ]** タブには、各ジョブに関する以下の情報が含まれます。
+ **出力ファイル**: 出力ファイルの可用性を表示します。この列には、次のいずれかを含めることができます。
  + ダウンロードアイコン (![\[Cloud icon with downward arrow, representing download or cloud storage functionality.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/File_download.png)): 出力されたノートブックとログはダウンロードできます。ダウンロードするにはこのボタンをクリックします。ファイルの作成後に障害が発生しても、失敗したジョブは出力ファイルを生成できることに注意してください。この場合は、出力ノートブックを確認して障害点を特定すると便利です。
  + **ノートブック**と**出力ログ**へのリンク: ノートブックと出力ログがダウンロードされます。リンクを選択して、内容を表示します。
  + (空白): ジョブがユーザーによって停止されたか、出力ファイルを生成する前にジョブの実行中に障害が発生しました。例えば、ネットワーク障害によりジョブが開始できない可能性があります。

  出力ノートブックは、ノートブック内のすべてのセルを実行した結果であり、追加した新しいパラメータやオーバーライドされるパラメータ、環境変数もすべて組み込まれます。出力ログには実行されたジョブの詳細が記録され、失敗したジョブのトラブルシューティングに役立ちます。
+ **作成日**: オンデマンドジョブまたはスケジュール済みジョブが作成された日時。
+ **ステータス**: ジョブの現在のステータス。以下の値のいずれかになります。
  + **進行中**: ジョブは実行中です
  + **失敗**: 設定エラーまたはノートブックロジックエラーによりジョブが失敗しました
  + **停止**: ジョブはユーザーによって停止されました
  + **完了**: ジョブは完了しました
+ **アクション**: このコラムには、インターフェイスでジョブを直接停止または削除できるショートカットが表示されます。

## 1 つのジョブを表示
<a name="view-jobs-detail-notebook-auto-run"></a>

**[ノートブックジョブ]** タブでは、ジョブ名を選択して特定のジョブの **[ジョブの詳細]** ページを表示できます。**[ジョブの詳細]** ページには、**[ジョブの作成]** フォームに入力したすべての詳細が表示されます。このページを使用して、ジョブ定義を作成したときに指定した設定を確認します。

また、ページ自体から次のアクションを実行するのに役立つショートカットにアクセスできます。
+ **ジョブを削除**: **[ノートブックジョブ]** タブからジョブを削除します。
+ **ジョブを停止**: 実行中のジョブを停止します。

# ノートブックジョブ定義の表示
<a name="view-def-detail-notebook-auto-run"></a>

**注記**  
SageMaker Python SDK でノートブックジョブをスケジュールした場合は、このセクションをスキップします。Studio またはローカル JupyterLab 環境で作成されたノートブックジョブのみがジョブ定義を作成します。このため、SageMaker Python SDK を使用してノートブックジョブを作成した場合、ノートブックジョブダッシュボードにジョブ定義は表示されません。ただし、「[ノートブックジョブを表示](view-notebook-jobs.md)」の説明に従ってノートブックジョブを表示することができます。

ジョブ定義を作成すると、ジョブのスケジュールが作成されます。**[ノートブックジョブ定義]** タブには、これらのスケジュールと、特定のノートブックジョブ定義に関する情報が表示されます。例えば、特定のノートブックを毎分実行するジョブ定義を作成できます。このジョブ定義がアクティブになると、**[ノートブックジョブ]** タブに新しいジョブ 1 分ごとにが表示されます。次のページでは、**[ノートブックジョブ定義]** タブに関する情報と、ノートブックジョブ定義の表示方法について説明します。

**[ノートブックジョブの定義]** タブには、入力ノートブック、作成時間、スケジュール、各ジョブ定義のステータスなど、すべてのジョブ定義を含むダッシュボードが表示されます。**[ステータス]** 列の値には、次のいずれかの値が表示されます。
+ **一時停止**: ジョブ定義を一時停止しました。Studio は、定義を再開するまでジョブを開始しません。
+ **アクティブ**: スケジュールは有効で、Studio は指定されたスケジュールに従ってノートブックを実行できます。

また、**[アクション]** 列には、以下のタスクをインターフェイスで直接実行するのに役立つショートカットが用意されています。
+ 一時停止: ジョブ定義を一時停止します。Studio は、定義を再開するまでジョブを開始しません。
+ 削除: **[ノートブックジョブ定義]** タブからジョブ定義を削除します。
+ 再開: ジョブを開始できるように、一時停止したジョブ定義を継続します。

ジョブ定義を作成してもジョブが開始されない場合は、「[トラブルシューティングガイド](notebook-auto-run-troubleshoot.md)」の「[ジョブ定義でジョブが作成されない](notebook-auto-run-troubleshoot.md#notebook-auto-run-troubleshoot-no-jobs)」を参照してください。

## 1 つのジョブ定義を表示
<a name="view-job-definition-detail-page"></a>

**[ノートブックジョブ定義]** タブでジョブ定義名を選択すると、ジョブ定義の特定の詳細を表示できる **[ジョブ定義]** ページが表示されます。このページを使用して、ジョブ定義を作成したときに指定した設定を確認します。ジョブ定義から作成されたジョブが表示されない場合は、「[トラブルシューティングガイド](notebook-auto-run-troubleshoot.md)」の「[ジョブ定義でジョブが作成されない](notebook-auto-run-troubleshoot.md#notebook-auto-run-troubleshoot-no-jobs)」を参照してください。

このページには、このジョブ定義から実行されるジョブを一覧表示するセクションもあります。すべてのジョブ定義のすべてのジョブを結合する **[ノートブックジョブ]** タブでジョブを表示するよりも、**[ジョブ定義]** ページでジョブを表示した方がより生産的にジョブを整理できることがあります。

また、このページには以下のアクションのショートカットがあります。
+ **一時停止/再開**: ジョブ定義を一時停止するか、一時停止した定義を再開します。この定義に対してジョブが現在実行されている場合、Studio はそのジョブを停止しないことに注意してください。
+ **実行**: このジョブ定義から 1 つのオンデマンドジョブを実行します。このオプションでは、ジョブを開始する前にノートブックにさまざまな入力パラメータを指定することもできます。
+ **ジョブ定義を編集**: ジョブ定義のスケジュールを変更します。別の時間間隔を選択することも、cron 構文を使用してカスタムスケジュールを選択することもできます。
+ **ジョブ定義を削除**: **[ノートブックジョブ定義]** タブからジョブ定義を削除します。この定義に対してジョブが現在実行されている場合、Studio はそのジョブを停止しないことに注意してください。

# トラブルシューティングガイド
<a name="notebook-auto-run-troubleshoot"></a>

このトラブルシューティングガイドを参照すると、スケジュール済みノートブックジョブの実行時に発生する可能性のある障害をデバッグするのに役立ちます。

## ジョブ定義でジョブが作成されない
<a name="notebook-auto-run-troubleshoot-no-jobs"></a>

ジョブ定義がジョブを開始しない場合、ノートブックまたはトレーニングジョブが Amazon SageMaker Studio の左側のナビゲーションバーの **[ジョブ]** セクションに表示されない場合があります。この場合、Studio の左側のナビゲーションバーの **[パイプライン]** セクションにエラーメッセージが表示されます。各ノートブックまたはトレーニングジョブ定義は、実行パイプラインに属します。以下は、ノートブックジョブの開始に失敗する場合の一般的な原因です。

**アクセス許可がない**
+ ジョブ定義に割り当てられたロールに、Amazon EventBridge との信頼関係はありません。つまり、EventBridge がその役割を引き受けることはできません。
+ ジョブ定義に割り当てられたロールには、`SageMaker AI:StartPipelineExecution` を呼び出すアクセス許可がありません。
+ ジョブ定義に割り当てられたロールには、`SageMaker AI:CreateTrainingJob` を呼び出すアクセス許可がありません。

**EventBridge のクォータを超過**

次の例のような `Put*` エラーが表示された場合は、EventBridge のクォータを超過しています。これを解決するには、未使用の EventBridge 実行をクリーンアップするか、クォータの引き上げ AWS サポート を に依頼します。

```
LimitExceededException) when calling the PutRule operation: 
The requested resource exceeds the maximum number allowed
```

EventBridge のクォータの詳細については、「[Amazon EventBridge クォータ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html)」を参照してください。

**パイプラインのクォータ制限を超過**

次の例のようなエラーが表示される場合は、実行できるパイプラインの数を超過しています。この問題を解決するには、アカウント内の未使用のパイプラインをクリーンアップするか、割り当てを増やすよう AWS サポート に依頼します。

```
ResourceLimitExceeded: The account-level service limit 
'Maximum number of pipelines allowed per account' is XXX Pipelines, 
with current utilization of XXX Pipelines and a request delta of 1 Pipelines.
```

パイプラインのクォータの詳細については、「[Amazon SageMaker AI エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)」を参照してください。

**トレーニングジョブの制限を超過**

次の例のようなエラーが表示される場合は、実行できるトレーニングジョブの数を超過しています。これを解決するには、アカウントのトレーニングジョブの数を減らすか、クォータの引き上げ AWS サポート を に依頼します。

```
ResourceLimitExceeded: The account-level service limit 
'ml.m5.2xlarge for training job usage' is 0 Instances, with current 
utilization of 0 Instances and a request delta of 1 Instances. 
Please contact AWS support to request an increase for this limit.
```

トレーニングジョブのクォータの詳細については、「[Amazon SageMaker AI エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)」を参照してください。

## SparkMagic ノートブックで無効化された自動可視化
<a name="notebook-auto-run-troubleshoot-visualization"></a>

ノートブックが SparkMagic PySpark カーネルを使用していて、ノートブックをノートブックジョブとして実行している場合、出力で自動可視化が無効になっている場合があります。自動可視化を有効にするとカーネルがハングするため、現時点では、ノートブックジョブエグゼキュタは、回避策として自動可視化を無効にします。

# 制約と考慮事項
<a name="notebook-auto-run-constraints"></a>

以下の制約を確認して、ノートブックジョブが正常に完了するようにします。Studio では Papermill を使用してノートブックを実行します。Papermill の要件に合わせるために Jupyter Notebook を更新する必要がある場合があります。LCC スクリプトの内容には制限があり、VPC 設定に関して理解しておくべき重要な詳細事項もあります。

## JupyterLab のバージョン
<a name="notebook-auto-run-constraints-jpt"></a>

JupyterLab バージョン 4.0 はサポート対象です。

## カーネルの再起動が必要なパッケージのインストール
<a name="notebook-auto-run-constraints-pmill-pkg"></a>

Papermill は、カーネルの再起動が必要なパッケージをインストールする `pip install` の呼び出しをサポートしていません。このような場合は、初期化スクリプトで `pip install` を使用します。カーネルの再起動を必要としないパッケージインストールでも、ノートブックに `pip install` を含めることができます。

## Jupyter に登録されているカーネル名と言語名
<a name="notebook-auto-run-constraints-pmill-names"></a>

Papermill は特定のカーネルと言語のトランスレーターを登録します。独自のインスタンス (BYOI) を持ち込む場合は、以下のスニペットに示す標準カーネル名を使用します。

```
papermill_translators.register("python", PythonTranslator)
papermill_translators.register("R", RTranslator)
papermill_translators.register("scala", ScalaTranslator)
papermill_translators.register("julia", JuliaTranslator)
papermill_translators.register("matlab", MatlabTranslator)
papermill_translators.register(".net-csharp", CSharpTranslator)
papermill_translators.register(".net-fsharp", FSharpTranslator)
papermill_translators.register(".net-powershell", PowershellTranslator)
papermill_translators.register("pysparkkernel", PythonTranslator)
papermill_translators.register("sparkkernel", ScalaTranslator)
papermill_translators.register("sparkrkernel", RTranslator)
papermill_translators.register("bash", BashTranslator)
```

## パラメータと環境変数の制限
<a name="notebook-auto-run-constraints-var-limits"></a>

**パラメータと環境変数の制限。**ノートブックジョブを作成すると、指定したパラメータと環境変数がジョブに届きます。最大 100 個のパラメータを渡すことができます。各パラメータ名の長さは最大 256 文字、関連値は最大 2500 文字です。環境変数を渡す場合、最大 28 個の変数を渡すことができます。変数名と関連値の長さは 512 文字までです。28 個を超える環境変数が必要な場合は、使用できる環境変数の数に制限のない初期化スクリプトで追加の環境変数を使用します。

## ジョブとジョブ定義の表示
<a name="notebook-auto-run-constraints-view-job"></a>

**ジョブとジョブ定義の表示** JupyterLab ノートブックの Studio UI でノートブックジョブをスケジュールする場合、Studio UI で[ノートブックジョブ](https://docs.aws.amazon.com/sagemaker/latest/dg/view-notebook-jobs.html)と[ノートブックジョブ定義](https://docs.aws.amazon.com/sagemaker/latest/dg/view-def-detail-notebook-auto-run.html)を表示できます。SageMaker Python SDK でノートブックジョブをスケジュールした場合に表示できるのは、ジョブのみです。SageMaker Python SDK ノートブックジョブステップではジョブ定義は作成されません。ジョブを表示するには、ノートブックジョブステップインスタンスに追加のタグを指定する必要もあります。詳細については、「[Studio UI ダッシュボードでノートブックジョブを表示する](create-notebook-auto-run-sdk.md#create-notebook-auto-run-dash)」を参照してください。

## 画像
<a name="notebook-auto-run-constraints-image"></a>

Studio でノートブックジョブを実行するか、パイプラインで SageMaker Python SDK ノートブックジョブステップを実行するかに応じて、イメージの制約を管理する必要があります。

### SageMaker AI ノートブックジョブのイメージに関する制約 (Studio)
<a name="notebook-auto-run-constraints-image-studio"></a>

**イメージとカーネルのサポート。**ノートブックジョブを起動するドライバーは、以下を前提としています。
+ 基本の Python ランタイム環境は Studio または 自分で持ち込む (BYO) イメージにインストールされ、シェルのデフォルトとなります。
+ 基本の Python ランタイム環境には、カーネルスペックが適切に設定された Jupyter クライアントが含まれています。
+ 基本の Python ランタイム環境には `pip` 関数が含まれているため、ノートブックジョブはシステムの依存関係をインストールできます。
+ 複数の環境を含むイメージの場合、ノートブック固有のパッケージをインストールする前に、初期化スクリプトを適切なカーネル固有の環境に切り替える必要があります。カーネルの Python ランタイム環境を設定した後に、カーネルランタイム環境と異なる場合は、デフォルトの Python ランタイム環境に戻す必要があります。

ノートブックジョブを起動するドライバーは bash スクリプトであり、Bash v4 は /bin/bash で利用できる必要があります。

**自分のイメージ持ち込み (BYOI) に対するルート権限。**独自の Studio イメージに対しては、ルートユーザーとして、または `sudo` アクセスを通じてルート権限を持っている必要があります。ルートユーザーではないが `sudo` 経由で ルート権限にアクセスする場合は、`UID/GID` として **1000/100** を使用します。

### SageMaker AI Python SDK ノートブックジョブのイメージに関する制約
<a name="notebook-auto-run-constraints-image-sdk"></a>

ノートブックジョブステップでは、以下のイメージがサポートされています。
+ 「[Studio Classic ノートブックで使用できる Amazon SageMaker イメージ](notebooks-available-images.md)」に一覧表示されている SageMaker Distribution イメージ
+ 以前のリストの SageMaker Distribution イメージに基づくカスタムイメージ。[SageMaker Distribution イメージ](https://github.com/aws/sagemaker-distribution)をベースとして使用します。
+ ノートブックジョブの依存関係 ([sagemaker-headless-execution-driver](https://pypi.org/project/sagemaker-headless-execution-driver/) など) がプリインストールされたカスタムイメージ (BYOI)。イメージは、以下の要件を満たしている必要があります。
  + イメージにはノートブックジョブの依存関係がプリインストールされています。
  + 基盤となる Python ランタイム環境がインストールされており、デフォルトがシェル環境になっています。
  + 基本の Python ランタイム環境には、カーネルスペックが適切に設定された Jupyter クライアントが含まれています。
  + ユーザーには、ルートユーザーとして、または `sudo` アクセスを介してルート権限が付与されています。ルートユーザーではないが `sudo` 経由で ルート権限にアクセスする場合は、`UID/GID` として **1000/100** を使用します。

## ジョブの作成時に使用される VPC サブネット
<a name="notebook-auto-run-constraints-vpc"></a>

VPC を使用する場合、Studio はプライベートサブネットを使用してジョブを作成します。1～5 つのプライベートサブネット (および 1～15 のセキュリティグループ) を指定します。

プライベートサブネットで VPC を使用する場合、ノートブックジョブが依存するサービスまたはリソースに接続できるように、以下のオプションのいずれかを選択する必要があります。
+ ジョブがインターフェイス VPC エンドポイントをサポートする AWS サービスにアクセスする必要がある場合は、サービスに接続するためのエンドポイントを作成します。インターフェイスエンドポイントをサポートするサービスのリストについては、 [AWS と統合されている のサービス AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html)を参照してください。インターフェイス VPC エンドポイントの作成については、[「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。少なくとも Amazon S3 VPC エンドポイントゲートウェイが提供されている必要があります。
+ ノートブックジョブがインターフェイス VPC エンドポイントをサポートしていない AWS サービスまたは 外のリソースにアクセスする必要がある場合は AWS、NAT ゲートウェイを作成し、アウトバウンド接続を許可するようにセキュリティグループを設定します。VPC 用の NAT ゲートウェイのセットアップについては、Amazon Virtual Private Cloud ユーザーガイドの「*パブリックサブネットとプライベートサブネットを持つ VPC (NAT)*」を参照してください。

## サービス制限
<a name="notebook-auto-run-constraints-service-limit"></a>

ノートブックジョブスケジューラは、Pipelines サービス、SageMaker Training サービス、Amazon EventBridge サービスから構築されているため、ノートブックジョブにはこのようなサービス固有のクォータが適用されます。これらのクォータを超えると、これらのサービスに関連するエラーメッセージが表示されることがあります。例えば、一度に実行できるパイプラインの数や、1 つのイベントバスに設定できるルールの数には制限があります。SageMaker AI クォータの詳細については、「[Amazon SageMaker AI エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)」を参照してください。EventBridge のクォータの詳細については、「[Amazon EventBridge クォータ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html)」を参照してください。

# SageMaker ノートブックジョブの料金
<a name="notebook-auto-run-pricing"></a>

ノートブックジョブをスケジュールすると、Jupyter Notebook は SageMaker トレーニングインスタンスで実行されます。**[ジョブの作成]** フォームで **[イメージ]** と **[カーネル]** を選択すると、フォームには使用可能なコンピューティングタイプのリストが表示されます。ジョブ定義から実行されるすべてのノートブックジョブの合計使用期間をもとにして、選択したコンピューティングタイプに対して課金されます。コンピューティングタイプを指定しない場合、SageMaker AI はデフォルトの Amazon EC2 インスタンスタイプ `ml.m5.large` を割り当てます。コンピューティングタイプ別の SageMaker AI の料金の内訳については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing)」を参照してください。

# ML ワークフローをスケジュールする
<a name="workflow-scheduling"></a>

Amazon SageMaker AI を使用すると、データセットの作成、データ変換の実行、データからのモデルの構築、推論用のエンドポイントへのモデルのデプロイなど、ML ワークフロー全体を管理できます。ワークフローのステップのサブセットを定期的に実行する場合は、これらのステップをスケジュールに沿って実行することもできます。例えば、SageMaker Canvas でジョブをスケジュールして、1 時間ごとに新しいデータに対して変換を実行することができます。別のシナリオとしては、デプロイしたモデルのモデルドリフトをモニタリングするためのジョブを毎週スケジュールできます。任意の時間間隔の定期的なスケジュールを指定できます。1 秒ごと、1 分ごと、毎日、毎週、毎月、または毎月第 3 金曜日の午後 3 時に繰り返すことができます。

**次のシナリオは、ユースケースに応じて利用できるオプションをまとめています。**
+ ユースケース 1: **ノーコード環境で ML ワークフローを構築してスケジュールします**。初心者や SageMaker AI を初めて使用する場合は、Amazon SageMaker Canvas を使用して ML ワークフローを構築し、Canvas UI ベースのスケジューラーを使用してスケジュールされた実行を作成できます。
+ ユースケース 2: **単一の Jupyter Notebook でワークフローを構築して、ノーコードスケジューラを使用します**。経験豊富な ML 実務者は、コードを使用して Jupyter Notebook で ML ワークフローを構築し、ノートブックジョブウィジェットで利用できるノーコードのスケジューリングオプションを使用できます。ML ワークフローが複数の Jupyter Notebook で構成されている場合は、ユースケース 3 で説明されている Pipelines Python SDK のスケジュール機能を使用できます。
+ ユースケース 3: **Pipelines を使用して ML ワークフローを構築し、スケジュールを設定します**。上級ユーザーは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)、Amazon SageMaker Pipelines ビジュアルエディタ、または Pipelines で利用可能な Amazon EventBridge スケジュールオプションを使用できます。Amazon EMR などのさまざまな SageMaker AI 機能や AWS サービスを使用したオペレーションを含むステップで構成される ML ワークフローを構築できます。


| Descriptor | ユースケース 1 | ユースケース 2 | ユースケース 3 | 
| --- | --- | --- | --- | 
| SageMaker AI の機能 | Amazon SageMaker Canvas データ処理と ML ワークフローのスケジューリング | ノートブックジョブスケジュールウィジェット (UI) | Pipelines Python SDK スケジューリングオプション | 
| 説明 | Amazon SageMaker Canvas を使用すると、データ処理ステップの自動実行をスケジュールし、別の手順でデータセットの自動更新をスケジュールできます。特定のデータセットが更新される都度、バッチ予測を実行する設定を行うと、ML ワークフロー全体にわたって間接的にスケジュールを指定することもできます。自動データ処理とデータセットの更新の両方について、SageMaker Canvas は、開始日時と実行間隔 (データ処理ステップをスケジュールする場合は cron 式) を選択できる基本フォームを提供します。データ処理ステップをスケジュールする方法の詳細については、「[新しいデータを自動的に処理するスケジュールを作成する](canvas-data-export-schedule-job.md)」を参照してください。データセットとバッチ予測の更新をスケジュールする方法については、「[自動化の管理方法](canvas-manage-automations.md)」を参照してください。 | データ処理とパイプラインのワークフローを単一の Jupyter Notebook で構築した場合は、ノートブックジョブウィジェットを使用して、ノートブックをオンデマンドまたはスケジュールに沿って実行できます。ノートブックジョブウィジェットには、コンピューティングタイプ、実行スケジュール、オプションのカスタム設定を指定する基本フォームが表示されます。実行スケジュールを定義するには、時間ベースの間隔を選択するか、cron 式を挿入します。このウィジェットは、Studio に自動的にインストールされます。ローカル JupyterLab 環境でこの機能を使用するには、追加のインストールを実行することもできます。ノートブックジョブの詳細については、「[SageMaker ノートブックジョブ](notebook-auto-run.md)」を参照してください。 | Pipelines を使用して ML ワークフローを実装した場合は、SageMaker SDK のスケジューリング機能を使用できます。パイプラインには、ファインチューニング、データ処理、デプロイなどのステップを含めることができます。Pipelines は、パイプラインをスケジュールする方法を 2 種類サポートしています。Amazon EventBridge ルールを作成するか、SageMaker SDK [PipelineSchedule](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.triggers.PipelineSchedule) コンストラクタまたは Amazon SageMaker Pipelines ビジュアルエディタを使用してスケジュールを定義できます。Pipelines で 利用可能なさまざまなスケジューリングオプションの詳細については、「[パイプライン実行をスケジュールする](pipeline-eventbridge.md)」を参照してください。 | 
| 最適化の対象 | SageMaker Canvas ML ワークフローのスケジューリングオプションを提供します | Jupyter Notebook ベースの ML ワークフローに UI ベースのスケジューリングオプションを提供します | SageMaker SDK または ML ワークフロー向けの EventBridge スケジューリングオプションを提供します | 
| 考慮事項 | Canvas ノーコードフレームワークを使用してワークフローをスケジュールできます。データセットの更新とバッチ変換の更新については、最大 5GB のデータを処理できます。 | UI ベースのスケジューリングフォームを使用して 単一のノートブックをスケジュールできます。ただし、同じジョブで複数のノートブックをスケジュールすることはできません。複数のノートブックをスケジュールするには、ユースケース 3 で説明されている Pipelines SDK コードベースのソリューションを使用します。 | Pipelines が提供するより高度な (SDK ベースの) スケジューリング機能を使用できますが、UI ベースのオプションメニューから選択するのではなく、API ドキュメントを参照して、適切なオプションを指定する必要があります。 | 
| 推奨環境 | Amazon SageMaker Canvas | Studio、ローカル JupyterLab 環境 | Studio、ローカル JupyterLab 環境、任意のコードエディタ | 

## その他のリソース
<a name="workflow-scheduling-addit"></a>

**SageMaker AI は、ワークフローをスケジュールするための以下の追加オプションと提供しています。**
+ [Amazon EventBridge スケジューラとは](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html) このセクションで説明するスケジューリングオプションには、SageMaker Canvas、Studio、SageMaker AI Python SDK で利用可能な構築済みオプションなどがあります。すべてのオプションは Amazon EventBridge の機能を拡張します。EventBridge を使用して独自のカスタムスケジューリングソリューションを作成することもできます。
+ [Feature Processor パイプラインのスケジュール済みの実行とイベントベースの実行](feature-store-feature-processor-schedule-pipeline.md)。 Amazon SageMaker Feature Store Feature Processing では、Feature Processing パイプラインをスケジュールに従って実行するか、別の AWS サービスイベントの結果として実行するように設定できます。

# AWS Batch SageMaker AI トレーニングジョブのサポート
<a name="training-job-queues"></a>

[AWS Batch ジョブキュー](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html)は、送信されたジョブをコンピューティングリソースで実行する前に保存し、優先順位を付けます。が提供するサーバーレスジョブのスケジュールと優先順位付けツールを活用するために、SageMaker AI トレーニングジョブをジョブキューに送信できます AWS Batch。

## 仕組み
<a name="training-job-queues-how-it-works"></a>

次の手順では、SageMaker AI トレーニング AWS Batch ジョブで ジョブキューを使用する方法のワークフローについて説明します。詳細なチュートリアルとサンプルノートブックについては、「[はじめに](#training-job-queues-get-started)」セクションを参照してください。
+  AWS Batch と必要なアクセス許可を設定します。詳細については、[AWS Batchユーザーガイド](https://docs.aws.amazon.com/batch/latest/userguide/get-set-up-for-aws-batch.html) の「*AWS Batch のセットアップ*」を参照してください。
+ コンソールまたは を使用して、次の AWS Batch リソースを作成します AWS CLI。
  + [サービス環境](https://docs.aws.amazon.com/batch/latest/userguide/service-environments.html) – SageMaker AI と統合するための設定パラメータが含まれています。
  + [SageMaker AI トレーニングジョブキュー](https://docs.aws.amazon.com/batch/latest/userguide/create-sagemaker-job-queue.html) – SageMaker AI と統合してトレーニングジョブを送信します。
+ トレーニングコンテナイメージなど、SageMaker AI トレーニングジョブの詳細とリクエストを設定します。トレーニングジョブを AWS Batch キューに送信するには、 AWS CLI、 AWS SDK for Python (Boto3)、または SageMaker AI Python SDK を使用できます。
+ ジョブキューにトレーニングジョブを送信します。ジョブを送信するには、次のオプションを使用します。
  +  AWS Batch [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API を使用します。
  + SageMaker Python SDK の [`aws_batch` モジュール](https://github.com/aws/sagemaker-python-sdk/tree/master/src/sagemaker/aws_batch)を使用します。TrainingQueue オブジェクトとモデルトレーニングオブジェクト (推定ツールや ModelTrainer など) を作成したら、`queue.submit()` メソッドを使用してトレーニングジョブを TrainingQueue に送信できます。
+ ジョブを送信したら、 コンソール、 AWS Batch [DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) API、または SageMaker AI [DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) API を使用して AWS Batch ジョブキューとジョブステータスを表示します。

## コストと可用性
<a name="training-job-queues-cost-availability"></a>

トレーニングジョブの料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker-ai/pricing/)」を参照してください。では AWS Batch、Amazon EC2 インスタンスなど、使用された AWS リソースに対してのみ料金が発生します。詳細については、「[AWS Batch 料金表](https://aws.amazon.com/batch/pricing/)」を参照してください。

は、トレーニングジョブ AWS リージョン が利用可能な任意の で SageMaker AI トレーニングジョブ AWS Batch に使用できます。詳細については、「[Amazon SageMaker AI エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)」を参照してください。

必要に応じて必要なキャパシティを確保するために、SageMaker AI Flexible Training Plans (FTP) を使用できます。これらのプランでは、トレーニングジョブのキャパシティを予約できます。 AWS Batchをキューイング機能と組み合わせると、プランの期間中の使用率を最大化できます。詳細については、「[トレーニングジョブまたは HyperPod クラスターのトレーニングプランを予約する](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html)」を参照してください。

## はじめに
<a name="training-job-queues-get-started"></a>

 AWS Batch ジョブキューをセットアップして SageMaker AI トレーニングジョブを送信する方法のチュートリアルについては、「 *AWS Batch ユーザーガイド*」の「[Getting started AWS Batch with SageMaker AI](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-sagemaker.html)」を参照してください。

SageMaker AI Python SDK の `aws_batch` モジュールの使用方法を説明する Jupyter ノートブックについては、「[amazon-sagemaker-examples GitHub リポジトリ」の「SageMaker AI トレーニングジョブのAWS Batch ノートブックの例](https://github.com/aws/amazon-sagemaker-examples/tree/default/%20%20%20%20%20%20build_and_train_models/sm-training-queues)」を参照してください。