

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

# ステップを追加する
<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]
    ),
)
```

------