

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

# SageMaker Processing によるデータ変換ワークロード
<a name="processing-job"></a>

SageMaker Processing は、SageMaker AI のフルマネージドインフラストラクチャで、データの前処理と後処理、特徴量エンジニアリング、モデル評価のタスクを実行する SageMaker AI の機能です。これらのタスクは、[処理ジョブ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProcessingJob.html)として実行されます。以降では、SageMaker Processing に関する情報とリソースを説明します。

SageMaker Processing API を使用すると、データサイエンティストはスクリプトとノートブックを実行してデータセットを処理、変換、分析し、機械学習に備えることができます。SageMaker AI によって提供されるその他の重要な機械学習タスク (トレーニングやホスティングなど) と組み合わせると、Processing は、SageMaker AI に組み込まれたすべてのセキュリティおよびコンプライアンスのサポートを含む、フルマネージドの機械学習環境のメリットを提供します。柔軟性が高く、組み込みのデータ処理コンテナを使用したり、独自のコンテナでカスタム処理ロジックを使用し、ジョブを送信して SageMaker AI のマネージドインフラストラクチャで実行したりすることができます。

**注記**  
 処理ジョブをプログラムで作成するには、SageMaker AI がサポートする任意の言語で [CreateProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html) API アクションを呼び出すか、 AWS CLIを使用します。この API アクションが選択した言語の関数にどのように変換されるかについては、「CreateProcessingJob and choose an SDK」の[関連項目](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html#API_CreateProcessingJob_SeeAlso)セクションを参照してください。Python ユーザーの場合の一例として、「SageMaker Python SDK」の[「Amazon SageMaker Processing」](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html)セクションを参照してください。または、 AWS SDK for Python (Boto3)で [create\$1processing\$1job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_processing_job.html) の完全なリクエスト構文を参照してください。

下の図は、Amazon SageMaker AI が Processing ジョブをスピンアップする方法を示しています。Amazon SageMaker AI は、Amazon Simple Storage Service (Amazon S3) からスクリプトを取得し、データをコピーしてから、Processing コンテナをプルします。Processing ジョブの基盤となるのは、Amazon SageMaker AI のフルマネージドインフラストラクチャです。Processing ジョブを送信すると、SageMaker AI はコンピューティングインスタンスを起動し、入力データを処理および分析し、完了するとリソースを解放します。Processing ジョブの出力は、指定した Amazon S3 バケットに保存されます。

**注記**  
入力データは Amazon S3 バケットに保存されている必要があります。または、Amazon Athena または Amazon Redshift を入力ソースとして使用することもできます。

![\[処理ジョブの実行。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Processing-1.png)


**ヒント**  
機械学習 (ML) のトレーニングや処理ジョブ全般の分散コンピューティングのベストプラクティスについては、「[SageMaker AI による分散コンピューティングのベストプラクティス](distributed-training-options.md)」を参照してください。

## Amazon SageMaker Processing のサンプルノートブックを使う
<a name="processing-job-sample-notebooks"></a>

データの前処理、モデル評価、またはその両方を実行する方法を示す 2 つのサンプル Jupyter ノートブックが用意されています。

scikit-learn スクリプトを実行して、SageMaker Python SDK for Processing を使ってデータの前処理やモデルトレーニングと評価を行う方法を示したサンプルノートブックについては、「[scikit-learn 処理](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)」を参照してください。このノートブックでは、独自のカスタムコンテナを使用して、Python ライブラリやその他の特定の依存関係で処理ワークロードを実行する方法についても説明します。

Amazon SageMaker Processing を使い、Spark を使って分散データを前処理する方法を示したサンプルノートブックについては、「[分散処理 (Spark)](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/spark_distributed_data_processing/sagemaker-spark-processing.ipynb)」を参照してください。このノートブックでは、前処理されたデータセットで XGBoost を使用して回帰モデルをトレーニングする方法についても説明します。

SageMaker AI でこれらのサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成し、アクセスする方法については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

## CloudWatch のログとメトリクスを使って Amazon SageMaker Processing ジョブをモニタリングする
<a name="processing-job-cloudwatch"></a>

Processing ジョブをモニタリングするために、Amazon SageMaker Processing は Amazon CloudWatch のログとメトリクスを提供します。CloudWatch は、CPU、GPU、メモリ、GPU メモリ、ディスクメトリクス、イベントログを提供します。詳細については、「[Amazon CloudWatch における Amazon SageMaker AI メトリクス](monitoring-cloudwatch.md)」および「[Amazon SageMaker AI 用 CloudWatch Logs](logging-cloudwatch.md)」を参照してください。

# Apache Spark を使用して Processing ジョブを実行する
<a name="use-spark-processing-container"></a>

Apache Spark は、大規模データ処理のための統合分析エンジンです。Amazon SageMaker AI には Apache Spark や、分散データ処理ジョブの実行に必要なその他の依存関係が含まれた構築済みの Docker イメージが用意されています。Apache Spark を使用して Amazon SageMaker Processing ジョブを実行する方法の例を次に示します。

[Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk#installing-the-sagemaker-python-sdk) を使うと、Spark フレームワークを使って簡単にデータ変換を適用し、特徴を抽出 (特徴量エンジニアリング) できます。SageMaker Python SDK を使って Spark の処理ジョブを実行する方法については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/) の「[Spark を使ってデータを処理する](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html#data-processing-with-spark)」を参照してください。

Spark イメージのソースコードと Dockerfile を含むコードリポジトリは、[GitHub](https://github.com/aws/sagemaker-spark-container) にあります。

 [https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.spark.processing.PySparkProcessor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.spark.processing.PySparkProcessor) クラスまたは [https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.spark.processing.SparkJarProcessor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.spark.processing.SparkJarProcessor) クラスを使用して、処理ジョブ内で Spark アプリケーションを実行できます。MaxRuntimeInSeconds に設定できる最長のランタイム制限は 5 日間です。単純な Spark ワークロードでは、実行時間と使用インスタンス数に関して、インスタンス数と完了までの時間にほぼ直線的な関係が見られます。

 次のコード例は、PySpark スクリプト `preprocess.py` を呼び出す処理ジョブを実行する方法を示しています。

```
from sagemaker.spark.processing import PySparkProcessor

spark_processor = PySparkProcessor(
    base_job_name="spark-preprocessor",
    framework_version="2.4",
    role=role,
    instance_count=2,
    instance_type="ml.m5.xlarge",
    max_runtime_in_seconds=1200,
)

spark_processor.run(
    submit_app="preprocess.py",
    arguments=['s3_input_bucket', bucket,
               's3_input_key_prefix', input_prefix,
               's3_output_bucket', bucket,
               's3_output_key_prefix', output_prefix]
)
```

 詳細については、Apache Spark と SageMaker Processing を使った分散データ処理の[サンプルノートブック](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_processing/spark_distributed_data_processing/sagemaker-spark-processing.html)を参照してください。

 [Amazon SageMaker AI Python SDK](https://sagemaker.readthedocs.io/) とその Processor クラスのいずれかを使って構築済みのイメージを取得していない場合は、自分で取得できます。SageMaker の構築済み Docker イメージは、Amazon Elastic Container Registry (Amazon ECR) に保存されます。利用可能な事前構築済み Docker イメージの完全なリストについては、[使用できるイメージ](https://github.com/aws/sagemaker-spark-container/blob/master/available_images.md)のドキュメントを参照してください。

 Processing コンテナで SageMaker Python SDK を使う方法の詳細については、[Amazon SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/) を参照してください。

# scikit-learn で Processing ジョブを実行する
<a name="use-scikit-learn-processing-container"></a>

Amazon SageMaker Processing を使い、Amazon SageMaker AI が提供する Docker イメージの scikit-learn スクリプトを使ってデータを処理し、モデルを評価します。以下は、scikit-learn を使用して Amazon SageMaker Processing ジョブを実行する方法の例を示しています。

SageMaker AI で提供、保守されている Docker イメージを使って scikit-learn スクリプトを実行し、データを前処理してモデルを評価する方法を示すサンプルノートブックについては、[scikit-learn 処理](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)を参照してください。このノートブックを使うには、SageMaker AI Python SDK for Processing をインストールする必要があります。

このノートブックは、SageMaker Python SDK の `SKLearnProcessor` クラスを使って処理ジョブを実行し、提供される scikit-learn スクリプトを実行します。スクリプトはデータを前処理し、SageMaker トレーニングジョブを使ってモデルをトレーニングした後、処理ジョブを実行してトレーニング済みモデルを評価します。処理ジョブは、モデルが本番稼働環境でどのように実行されるかを見積もります。

Processing コンテナで SageMaker Python SDK を使う方法の詳細については、[SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/) を参照してください。処理ジョブに使用可能な構築済みの Docker イメージの完全なリストについては、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths)」を参照してください。

次のコード例では、ノートブックが `SKLearnProcessor` を使って、独自の Docker イメージではなく、SageMaker AI が提供、保守する Docker イメージを使い、独自の scikit-learn スクリプトを実行する方法を示します。

```
from sagemaker.sklearn.processing import SKLearnProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput

sklearn_processor = SKLearnProcessor(framework_version='0.20.0',
                                     role=role,
                                     instance_type='ml.m5.xlarge',
                                     instance_count=1)

sklearn_processor.run(code='preprocessing.py',
                      inputs=[ProcessingInput(
                        source='s3://path/to/my/input-data.csv',
                        destination='/opt/ml/processing/input')],
                      outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
                               ProcessingOutput(source='/opt/ml/processing/output/validation'),
                               ProcessingOutput(source='/opt/ml/processing/output/test')]
                     )
```

Amazon SageMaker Processing で scikit-learn を使ってデータを並列処理するには、`ProcessingInput` 内部で `s3_data_distribution_type='ShardedByS3Key'` を設定し、S3 キーを使って入力オブジェクトをシャードします。これにより、各インスタンスがほぼ同じ数の入力オブジェクトを受け取ることになります。

# フレームワークプロセッサによるデータ処理
<a name="processing-job-frameworks"></a>

`FrameworkProcessor` は、指定された機械学習フレームワークを使用して Processing ジョブを実行できます。これにより、選択した機械学習フレームワークに対応する Amazon SageMaker AI マネージドコンテナが提供されます。`FrameworkProcessor` は、Hugging Face、MXNet、PyTorch、TensorFlow、および XGBoost といった機械学習フレームワークのために事前に作成されたコンテナを提供します。

`FrameworkProcessor` クラスは、コンテナ設定のカスタマイズも提供します。`FrameworkProcessor` クラスは、処理スクリプトと依存関係のソースディレクトリ `source_dir` の指定をサポートしています。この機能により、1 つのスクリプトだけを指定する代わりに、プロセッサが 1 つのディレクトリ内の複数のスクリプトにアクセスできるようになります。また `FrameworkProcessor` は、`source_dir` に `requirements.txt` ファイルを含めて、コンテナにインストールするように Python ライブラリをカスタマイズすることもサポートしています。

`FrameworkProcessor` クラスとそのメソッドおよびパラメータの詳細については、*Amazon SageMaker AI Python SDK* の「[FrameworkProcessor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.processing.FrameworkProcessor)」を参照してください。

サポートされている各機械学習フレームワークでの `FrameworkProcessor` の使用例については、次のトピックを参照してください。

**Topics**
+ [Amazon SageMaker Python SDK で HuggingFaceProcessor を使用するコード例](processing-job-frameworks-hugging-face.md)
+ [MXNet フレームワークプロセッサ](processing-job-frameworks-mxnet.md)
+ [PyTorch フレームワークプロセッサ](processing-job-frameworks-pytorch.md)
+ [TensorFlow フレームワークプロセッサ](processing-job-frameworks-tensorflow.md)
+ [XGBoost フレームワークプロセッサ](processing-job-frameworks-xgboost.md)

# Amazon SageMaker Python SDK で HuggingFaceProcessor を使用するコード例
<a name="processing-job-frameworks-hugging-face"></a>

Hugging Face は、オープンソースの自然言語処理 (NLP) モデルのプロバイダです。Amazon SageMaker Python SDK の `HuggingFaceProcessor` は、Hugging Face スクリプトを使用して処理ジョブを実行する機能を提供します。`HuggingFaceProcessor` を使用すると、Amazon が構築した Docker コンテナと Hugging Face のマネージド環境を活用できるため、独自のコンテナを持ち込む必要がなくなります。

次のサンプルは、`HuggingFaceProcessor` を使用して、SageMaker AI が提供し、管理する Docker イメージを使った Processing ジョブを実行する方法を示しています。ジョブを実行するとき、`source_dir` 引数にスクリプトと依存関係を含むディレクトリを指定でき、処理スクリプトの依存関係を指定する `requirements.txt` ファイルを `source_dir` ディレクトリ内に置くことができることにご注意ください。SageMaker Processing は、コンテナの `requirements.txt` に依存関係をインストールします。

```
from sagemaker.huggingface import HuggingFaceProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role

#Initialize the HuggingFaceProcessor
hfp = HuggingFaceProcessor(
    role=get_execution_role(), 
    instance_count=1,
    instance_type='ml.g4dn.xlarge',
    transformers_version='4.4.2',
    pytorch_version='1.6.0', 
    base_job_name='frameworkprocessor-hf'
)

#Run the processing job
hfp.run(
    code='processing-script.py',
    source_dir='scripts',
    inputs=[
        ProcessingInput(
            input_name='data',
            source=f's3://{BUCKET}/{S3_INPUT_PATH}',
            destination='/opt/ml/processing/input/data/'
        )
    ],
    outputs=[
        ProcessingOutput(output_name='train', source='/opt/ml/processing/output/train/', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='test', source='/opt/ml/processing/output/test/', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='val', source='/opt/ml/processing/output/val/', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}')
    ]
)
```

`requirements.txt` ファイルがある場合、コンテナにインストールするライブラリのリストである必要があります。`source_dir` のパスは、相対パス、絶対パス、または Amazon S3 URI パスのいずれかになります。ただし、Amazon S3 URI を使用する場合は、tar.gz ファイルを指している必要があります。`source_dir` に指定したディレクトリには複数のスクリプトを入れることができます。`HuggingFaceProcessor` クラスの詳細については、*Amazon SageMaker AI Python SDK* の「[Hugging Face Estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/huggingface/sagemaker.huggingface.html)」を参照してください。

# MXNet フレームワークプロセッサ
<a name="processing-job-frameworks-mxnet"></a>

Apache MXNet は、一般的にニューラルネットワークのトレーニングとデプロイに使用されるオープンソースの深層学習フレームワークです。Amazon SageMaker Python SDK の `MXNetProcessor` は、MXNet スクリプトを使用して処理ジョブを実行する機能を提供します。`MXNetProcessor` を使用すると、Amazon が構築した Docker コンテナと MXNet のマネージド環境を活用できるため、独自のコンテナを持ち込む必要がなくなります。

次のサンプルは、`MXNetProcessor` を使用して、SageMaker AI が提供し、管理する Docker イメージを使った Processing ジョブを実行する方法を示しています。ジョブを実行するとき、`source_dir` 引数にスクリプトと依存関係を含むディレクトリを指定でき、処理スクリプトの依存関係を指定する `requirements.txt` ファイルを `source_dir` ディレクトリ内に置くことができることにご注意ください。SageMaker Processing は、コンテナの `requirements.txt` に依存関係をインストールします。

```
from sagemaker.mxnet import MXNetProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role

#Initialize the MXNetProcessor
mxp = MXNetProcessor(
    framework_version='1.8.0',
    py_version='py37',
    role=get_execution_role(), 
    instance_count=1,
    instance_type='ml.c5.xlarge',
    base_job_name='frameworkprocessor-mxnet'
)

#Run the processing job
mxp.run(
    code='processing-script.py',
    source_dir='scripts',
    inputs=[
        ProcessingInput(
            input_name='data',
            source=f's3://{BUCKET}/{S3_INPUT_PATH}',
            destination='/opt/ml/processing/input/data/'
        )
    ],
    outputs=[
        ProcessingOutput(
            output_name='processed_data',
            source='/opt/ml/processing/output/',
            destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'
        )
    ]
)
```

`requirements.txt` ファイルがある場合、コンテナにインストールするライブラリのリストである必要があります。`source_dir` のパスは、相対パス、絶対パス、または Amazon S3 URI パスのいずれかになります。ただし、Amazon S3 URI を使用する場合は、tar.gz ファイルを指している必要があります。`source_dir` に指定したディレクトリには複数のスクリプトを入れることができます。`MXNetProcessor` クラスの詳細については、Amazon SageMaker Python SDK の「[MXNet Estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html#mxnet-estimator)」を参照してください。

# PyTorch フレームワークプロセッサ
<a name="processing-job-frameworks-pytorch"></a>

PyTorch はオープンソースの機械学習フレームワークです。Amazon SageMaker Python SDK の `PyTorchProcessor` は、PyTorch スクリプトを使用して処理ジョブを実行する機能を提供します。`PyTorchProcessor` を使用すると、Amazon が構築した Docker コンテナと PyTorch のマネージド環境を活用できるため、独自のコンテナを持ち込む必要がなくなります。

次のサンプルは、`PyTorchProcessor` を使用して、SageMaker AI が提供し、管理する Docker イメージを使った Processing ジョブを実行する方法を示しています。ジョブを実行するとき、`source_dir` 引数にスクリプトと依存関係を含むディレクトリを指定でき、処理スクリプトの依存関係を指定する `requirements.txt` ファイルを `source_dir` ディレクトリ内に置くことができることにご注意ください。SageMaker Processing は、コンテナの `requirements.txt` に依存関係をインストールします。

SageMaker AI でサポートされている PyTorch バージョンについては、「[Available Deep Learning Container Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)」を参照してください。

```
from sagemaker.pytorch.processing import PyTorchProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role

#Initialize the PyTorchProcessor
pytorch_processor = PyTorchProcessor(
    framework_version='1.8',
    role=get_execution_role(),
    instance_type='ml.m5.xlarge',
    instance_count=1,
    base_job_name='frameworkprocessor-PT'
)

#Run the processing job
pytorch_processor.run(
    code='processing-script.py',
    source_dir='scripts',
    inputs=[
        ProcessingInput(
            input_name='data',
            source=f's3://{BUCKET}/{S3_INPUT_PATH}',
            destination='/opt/ml/processing/input'
        )
    ],
    outputs=[
        ProcessingOutput(output_name='data_structured', source='/opt/ml/processing/tmp/data_structured', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='train', source='/opt/ml/processing/output/train', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='validation', source='/opt/ml/processing/output/val', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='test', source='/opt/ml/processing/output/test', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'),
        ProcessingOutput(output_name='logs', source='/opt/ml/processing/logs', destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}')
    ]
)
```

`requirements.txt` ファイルがある場合、コンテナにインストールするライブラリのリストである必要があります。`source_dir` のパスは、相対パス、絶対パス、または Amazon S3 URI パスのいずれかになります。ただし、Amazon S3 URI を使用する場合は、tar.gz ファイルを指している必要があります。`source_dir` に指定したディレクトリには複数のスクリプトを入れることができます。`PyTorchProcessor` クラスの詳細については、Amazon SageMaker Python SDK の「[PyTorch Estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html)」を参照してください。

# TensorFlow フレームワークプロセッサ
<a name="processing-job-frameworks-tensorflow"></a>

TensorFlow は、オープンソースの機械学習と人工知能のライブラリです。Amazon SageMaker Python SDK の `TensorFlowProcessor` は、TensorFlow スクリプトを使用して処理ジョブを実行する機能を提供します。`TensorFlowProcessor` を使用すると、Amazon が構築した Docker コンテナと TensorFlow のマネージド環境を活用できるため、独自のコンテナを持ち込む必要がなくなります。

次のサンプルは、`TensorFlowProcessor` を使用して、SageMaker AI が提供し、管理する Docker イメージを使った Processing ジョブを実行する方法を示しています。ジョブを実行するとき、`source_dir` 引数にスクリプトと依存関係を含むディレクトリを指定でき、処理スクリプトの依存関係を指定する `requirements.txt` ファイルを `source_dir` ディレクトリ内に置くことができることにご注意ください。SageMaker Processing は、コンテナの `requirements.txt` に依存関係をインストールします。

```
from sagemaker.tensorflow import TensorFlowProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role

#Initialize the TensorFlowProcessor
tp = TensorFlowProcessor(
    framework_version='2.3',
    role=get_execution_role(),
    instance_type='ml.m5.xlarge',
    instance_count=1,
    base_job_name='frameworkprocessor-TF',
    py_version='py37'
)

#Run the processing job
tp.run(
    code='processing-script.py',
    source_dir='scripts',
    inputs=[
        ProcessingInput(
            input_name='data',
            source=f's3://{BUCKET}/{S3_INPUT_PATH}',
            destination='/opt/ml/processing/input/data'
        ),
        ProcessingInput(
            input_name='model',
            source=f's3://{BUCKET}/{S3_PATH_TO_MODEL}',
            destination='/opt/ml/processing/input/model'
        )
    ],
    outputs=[
        ProcessingOutput(
            output_name='predictions',
            source='/opt/ml/processing/output',
            destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'
        )
    ]
)
```

`requirements.txt` ファイルがある場合、コンテナにインストールするライブラリのリストである必要があります。`source_dir` のパスは、相対パス、絶対パス、または Amazon S3 URI パスのいずれかになります。ただし、Amazon S3 URI を使用する場合は、tar.gz ファイルを指している必要があります。`source_dir` に指定したディレクトリには複数のスクリプトを入れることができます。`TensorFlowProcessor` クラスの詳細については、Amazon SageMaker Python SDK の「[TensorFlow Estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)」を参照してください。

# XGBoost フレームワークプロセッサ
<a name="processing-job-frameworks-xgboost"></a>

XGBoost はオープンソースの機械学習フレームワークです。Amazon SageMaker Python SDK の `XGBoostProcessor` は、XGBoost スクリプトを使用して処理ジョブを実行する機能を提供します。XGBoostProcessor を使用すると、Amazon が構築した Docker コンテナと XGBoost のマネージド環境を活用できるため、独自のコンテナを持ち込む必要がなくなります。

次のサンプルは、`XGBoostProcessor` を使用して、SageMaker AI が提供し、管理する Docker イメージを使った Processing ジョブを実行する方法を示しています。ジョブを実行するとき、`source_dir` 引数にスクリプトと依存関係を含むディレクトリを指定でき、処理スクリプトの依存関係を指定する `requirements.txt` ファイルを `source_dir` ディレクトリ内に置くことができることにご注意ください。SageMaker Processing は、コンテナの `requirements.txt` に依存関係をインストールします。

```
from sagemaker.xgboost import XGBoostProcessor
from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role

#Initialize the XGBoostProcessor
xgb = XGBoostProcessor(
    framework_version='1.2-2',
    role=get_execution_role(),
    instance_type='ml.m5.xlarge',
    instance_count=1,
    base_job_name='frameworkprocessor-XGB',
)

#Run the processing job
xgb.run(
    code='processing-script.py',
    source_dir='scripts',
    inputs=[
        ProcessingInput(
            input_name='data',
            source=f's3://{BUCKET}/{S3_INPUT_PATH}',
            destination='/opt/ml/processing/input/data'
        )
    ],
    outputs=[
        ProcessingOutput(
            output_name='processed_data',
            source='/opt/ml/processing/output/',
            destination=f's3://{BUCKET}/{S3_OUTPUT_PATH}'
        )
    ]
)
```

`requirements.txt` ファイルがある場合、コンテナにインストールするライブラリのリストである必要があります。`source_dir` のパスは、相対パス、絶対パス、または Amazon S3 URI パスのいずれかになります。ただし、Amazon S3 URI を使用する場合は、tar.gz ファイルを指している必要があります。`source_dir` に指定したディレクトリには複数のスクリプトを入れることができます。`XGBoostProcessor` クラスの詳細については、Amazon SageMaker Python SDK の「[XGBoost Estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/xgboost.html)」を参照してください。

# 独自の処理コードを使用する
<a name="use-your-own-processing-code"></a>

独自の処理コンテナでスクリプトを実行するためのライブラリをインストールできます。あるいは、より高度なシナリオでは、Amazon SageMaker AI で実行するコントラクトを満たす独自の処理コンテナを構築できます。SageMaker AI のコンテナの詳細については、「[モデルのトレーニングとデプロイのための Docker コンテナ](docker-containers.md)」を参照してください。Amazon SageMaker Processing コンテナのコントラクトを定義する正式な仕様については、「[独自の処理コンテナを構築する方法 (高度なシナリオ)](build-your-own-processing-container.md)」を参照してください。

**Topics**
+ [独自の処理コンテナを使用したスクリプトの実行](processing-container-run-scripts.md)
+ [独自の処理コンテナを構築する方法 (高度なシナリオ)](build-your-own-processing-container.md)

# 独自の処理コンテナを使用したスクリプトの実行
<a name="processing-container-run-scripts"></a>

scikit-learn スクリプトを使用して、データを前処理し、モデルを評価できます。scikit-learn スクリプトを実行してこれらのタスクを実行する方法については、[scikit-learn 処理](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)サンプルノートブックを参照してください。このノートブックでは、Amazon SageMaker Python SDK for Processing の `ScriptProcessor` クラスを使います。

次の例は、独自の処理コンテナで `ScriptProcessor` クラスを使う場合の一般的なワークフローを示しています。このワークフローでは、独自のイメージを作成し、コンテナを構築し、そのコンテナで `ScriptProcessor` クラスを使って Python の前処理スクリプトを実行します。処理ジョブは入力データを処理し、処理済みデータを Amazon Simple Storage Service (Amazon S3) に保存します。

次のサンプルを使う前に、独自の入力データとデータ処理のための Python スクリプトを準備しておく必要があります。このプロセスのエンドツーエンドのガイド付きサンプルについては、[scikit-learn 処理](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)サンプルノートブックを参照してください。

1. Docker ディレクトリを作成し、処理コンテナを作成するために使用される Docker ファイルを追加します。pandas をインストールし、それに scikit-learn をインストールします (同様の `RUN` コマンドで独自の依存関係をインストールすることもできます)。

   ```
   mkdir docker
   
   %%writefile docker/Dockerfile
   
   FROM python:3.7-slim-buster
   
   RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3
   ENV PYTHONUNBUFFERED=TRUE
   
   ENTRYPOINT ["python3"]
   ```

1. Docker コマンドを使ってコンテナを構築し、Amazon Elastic Container Registry (Amazon ECR) リポジトリを作成して、イメージを Amazon ECR にプッシュします。

   ```
   import boto3
   
   account_id = boto3.client('sts').get_caller_identity().get('Account')
   region = boto3.Session().region_name
   ecr_repository = 'sagemaker-processing-container'
   tag = ':latest'
   processing_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)
   
   # Create ECR repository and push docker image
   !docker build -t $ecr_repository docker
   !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com
   !aws ecr create-repository --repository-name $ecr_repository
   !docker tag {ecr_repository + tag} $processing_repository_uri
   !docker push $processing_repository_uri
   ```

1. SageMaker Python SDK から `ScriptProcessor` をセットアップして、スクリプトを実行します。*image\$1uri* を、作成したイメージの URI に置き換え、*role\$1arn* をターゲット Amazon S3 バケットにアクセスできる AWS Identity and Access Management ロールの ARN に置き換えます。

   ```
   from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
   
   script_processor = ScriptProcessor(command=['python3'],
                   image_uri='image_uri',
                   role='role_arn',
                   instance_count=1,
                   instance_type='ml.m5.xlarge')
   ```

1. スクリプトを実行します。*preprocessing.py* を独自の Python 処理スクリプトの名前に置き換え、*s3://path/to/my/input-data.csv* を入力データへの Amazon S3 パスに置き換えます。

   ```
   script_processor.run(code='preprocessing.py',
                        inputs=[ProcessingInput(
                           source='s3://path/to/my/input-data.csv',
                           destination='/opt/ml/processing/input')],
                        outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
                                  ProcessingOutput(source='/opt/ml/processing/output/validation'),
                                  ProcessingOutput(source='/opt/ml/processing/output/test')])
   ```

他のライブラリやシステム依存関係でも同じ手順を使用できます。既存の Docker イメージも使えます。これには、[Kubernetes](https://kubernetes.io/) などの他のプラットフォームで実行するイメージも含まれます。

# 独自の処理コンテナを構築する方法 (高度なシナリオ)
<a name="build-your-own-processing-container"></a>

データ処理、特徴量エンジニアリング、モデル評価ワークロードを実行する独自のコードと依存関係を持つ Docker イメージを Amazon SageMaker Processing に提供できます。以下で、独自の処理コンテナを構築する方法を説明します。

次の Dockerfile の例では、処理ジョブとして実行できる Python ライブラリ scikit-learn と pandas を持つコンテナを構築します。

```
FROM python:3.7-slim-buster

# Install scikit-learn and pandas
RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3

# Add a Python script and configure Docker to run it
ADD processing_script.py /
ENTRYPOINT ["python3", "/processing_script.py"]
```

処理スクリプトの例については、「[Get started with SageMaker Processing](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb)」を参照してください。

この Docker イメージを構築して Amazon Elastic Container Registry (Amazon ECR) リポジトリにプッシュし、SageMaker AI IAM ロールが Amazon ECR からイメージをプルできるようにします。そうすると、Amazon SageMaker Processing でこのイメージを実行できます。

# Amazon SageMaker Processing が独自の処理コンテナイメージを実行する方法
<a name="byoc-run-image"></a>

Amazon SageMaker Processing は、次のコマンドと同様の方法で処理コンテナイメージを実行します。ここでは `AppSpecification.ImageUri` は `CreateProcessingJob` オペレーションで指定した Amazon ECR イメージの URI です。

```
docker run [AppSpecification.ImageUri]
```

このコマンドは、Docker イメージで設定された `ENTRYPOINT` コマンドを実行します。

また、イメージ内の entrypoint コマンドを上書きしたり、`CreateProcessingJob` リクエストの `AppSpecification.ContainerEntrypoint` および `AppSpecification.ContainerArgument` パラメータを使用して entrypoint コマンドにコマンドライン引数を指定することもできます。これらのパラメータを指定すると、次のコマンドと同様の方法でコンテナを実行するよう Amazon SageMaker Processing が設定されます。

```
 docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
```

例えば、`CreateProcessingJob ` リクエストで、`ContainerEntrypoint` を `[python3, -v, /processing_script.py]` に、`ContainerArguments` を `[data-format, csv]` に指定すると、Amazon SageMaker Processing は次のコマンドを使ってコンテナを実行します。

```
 python3 -v /processing_script.py data-format csv 
```

 処理コンテナを構築するときは、次の詳細に注意してください。
+ Amazon SageMaker Processing は、コマンド実行の終了コードに応じて、ジョブが完了しているか失敗しているかを判断できます。処理ジョブは、すべての処理コンテナが終了コード 0 で正常に終了すると完了し、いずれかのコンテナが 0 以外の終了コードで終了すると失敗します。
+  Amazon SageMaker Processing では、Docker API の場合と同じように、処理コンテナのエントリポイントを上書きし、コマンドライン引数を設定できます。Docker イメージは、`ENTRYPOINT` および CMD 命令を使用して、エントリポイントおよびコマンドライン引数を設定できます。`CreateProcessingJob` の `ContainerEntrypoint` および `ContainerArgument` パラメータが Docker イメージのエントリポイントと引数を設定する方法は、Docker が Docker API を介してエントリポイントと引数を上書きする方法を反映しています
  + `ContainerEntrypoint` も `ContainerArguments` も指定されていない場合、Processing はイメージ内のデフォルトの `ENTRYPOINT` または CMD を使います。
  + `ContainerEntrypoint` が指定され、`ContainerArguments` が指定されていない場合、Processing は指定されたエントリポイントを使ってイメージを実行し、イメージ内の `ENTRYPOINT` および CMD は無視されます。
  + `ContainerArguments` が指定され、`ContainerEntrypoint` が指定されていない場合、Processing はイメージ内のデフォルトの `ENTRYPOINT` と指定された引数を使ってイメージを実行します。
  + `ContainerEntrypoint` と `ContainerArguments` の両方が指定されている場合、Processing は指定されたエントリポイントと引数を使ってイメージを実行し、イメージ内の `ENTRYPOINT` および CMD は無視されます。
+ Dockerfile の `ENTRYPOINT` 命令の exec 形式 (shell 形式 (`ENTRYPOINT` ` command param1 param2`) ではなく `ENTRYPOINT` `["executable", "param1", "param2"])`) を使用する必要があります。これにより、処理コンテナは `SIGINT` 信号および `SIGKILL` 信号を受信できます。これらの信号は、Processing が `StopProcessingJob` API を使ってジョブの処理を停止するために使います。
+ `/opt/ml` およびそのすべてのサブディレクトリは SageMaker AI によって予約されています。Processing の Docker イメージを構築する際は、処理コンテナが必要とするデータをこれらのディレクトリに配置しないでください。
+ GPU デバイスを使用する場合は、コンテナが nvidia-docker と互換性があることを確認してください。CUDA ツールキットのみをコンテナに含めます。NVIDIA ドライバーをイメージにバンドルしないでください。nvidia-docker の詳細については、[NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker) を参照してください。

# Amazon SageMaker Processing が処理コンテナの入出力を設定する方法
<a name="byoc-input-and-output"></a>

`CreateProcessingJob` オペレーションを使用して処理ジョブを作成する場合、複数の `ProcessingInput` および `ProcessingOutput` の値を指定できます。

`ProcessingInput` パラメータを使って、データのダウンロード元の Amazon Simple Storage Service (Amazon S3) URI と、データのダウンロード先となる処理コンテナのパスを指定します。`ProcessingOutput` パラメータは、データのアップロード元となる処理コンテナ内のパスと、そのデータのアップロード先となる Amazon S3 の場所を設定します。`ProcessingInput` と `ProcessingOutput` の両方で、処理コンテナ内のパスは `/opt/ml/processing/ ` から始まる必要があります。

たとえば、`s3://your-data-bucket/path/to/input/csv/data` から処理コンテナの `/opt/ml/processing/csv` にデータをダウンロードする 1 つの `ProcessingInput` パラメータ、または `/opt/ml/processing/processed_csv` から `s3://your-data-bucket/path/to/output/csv/data` にデータをアップロードする `ProcessingOutput` パラメータで処理ジョブを作成するとします。処理ジョブは入力データを読み取り、出力データを `/opt/ml/processing/processed_csv` に書き込みます。次に、処理ジョブはこのパスに書き込まれたデータを、指定された Amazon S3 の出力場所にアップロードします。

**重要**  
シンボリックリンク (symlinks) は Amazon S3 への出力データのアップロードに使えません。出力データのアップロード時に、シンボリックリンクはフォローされません。

# Amazon SageMaker Processing が処理コンテナにログとメトリクスを提供する方法
<a name="byoc-logs-and-metrics"></a>

処理コンテナが `stdout` または `stderr` に書き込むと、Amazon SageMaker Processing は各処理コンテナからの出力を保存し、それを Amazon CloudWatch のログに記録します。ログ作成の詳細については、「[Amazon SageMaker AI 用 CloudWatch Logs](logging-cloudwatch.md)」を参照してください。

Amazon SageMaker Processing は、処理コンテナを実行する各インスタンスの CloudWatch メトリクスも提供します。メトリクスの詳細については、「[Amazon CloudWatch における Amazon SageMaker AI メトリクス](monitoring-cloudwatch.md)」を参照してください。

## Amazon SageMaker Processing が処理コンテナを設定する方法
<a name="byoc-config"></a>

Amazon SageMaker Processing は、環境変数と、コンテナ内で事前に定義された場所にある 2 つの JSON ファイル (`/opt/ml/config/processingjobconfig.json` および `/opt/ml/config/resourceconfig.json`) を使って、処理コンテナに設定情報を提供します。

処理ジョブが開始されると、`CreateProcessingJob` リクエスト内の `Environment` マップで指定した環境変数が使用されます。`/opt/ml/config/processingjobconfig.json` ファイルには、処理コンテナのホスト名に関する情報が含まれています。この情報は `CreateProcessingJob` リクエストでも指定されています。

以下の例は、`/opt/ml/config/processingjobconfig.json` ファイル形式を示しています。

```
{
    "ProcessingJobArn": "<processing_job_arn>",
    "ProcessingJobName": "<processing_job_name>",
    "AppSpecification": {
        "ImageUri": "<image_uri>",
        "ContainerEntrypoint": null,
        "ContainerArguments": null
    },
    "Environment": {
        "KEY": "VALUE"
    },
    "ProcessingInputs": [
        {
            "InputName": "input-1",
            "S3Input": {
                "LocalPath": "/opt/ml/processing/input/dataset",
                "S3Uri": "<s3_uri>",
                "S3DataDistributionType": "FullyReplicated",
                "S3DataType": "S3Prefix",
                "S3InputMode": "File",
                "S3CompressionType": "None",
                "S3DownloadMode": "StartOfJob"
            }
        }
    ],
    "ProcessingOutputConfig": {
        "Outputs": [
            {
                "OutputName": "output-1",
                "S3Output": {
                    "LocalPath": "/opt/ml/processing/output/dataset",
                    "S3Uri": "<s3_uri>",
                    "S3UploadMode": "EndOfJob"
                }
            }
        ],
        "KmsKeyId": null
    },
    "ProcessingResources": {
        "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "VolumeSizeInGB": 30,
            "VolumeKmsKeyId": null
        }
    },
    "RoleArn": "<IAM role>",
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 86400
    }
}
```

`/opt/ml/config/resourceconfig.json` ファイルには、処理コンテナのホスト名に関する情報が含まれています。分散処理コードを作成または実行するときは、以下のホスト名を使います。

```
{
  "current_host": "algo-1",
  "hosts": ["algo-1","algo-2","algo-3"]
}
```

`/etc/hostname` または `/etc/hosts` に含まれているホスト名に関する情報は、正確ではない可能性があるため、使わないでください。

ホスト名の情報は、処理コンテナですぐに利用できない場合があります。ノードがクラスター内で使用可能になった時点で、ホスト名解決操作に再試行ポリシーを追加することをお勧めします。

# 処理ジョブに関するメタデータ情報の保存とアクセス
<a name="byoc-metadata"></a>

終了後に処理コンテナからメタデータを保存するために、コンテナは UTF-8 でエンコードされたテキストを `/opt/ml/output/message` ファイルに書き込むことができます。処理ジョブが終了ステータス (「`Completed`」、「`Stopped`」または「`Failed`」) に変わった後、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html) の [`ExitMessage`] フィールドには、このファイルの最初の 1 KB が含まれます。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html) を呼び出して、ファイルの最初の部分にアクセスします。これにより、`ExitMessage` パラメータを通じてその部分が返されます。失敗した処理ジョブの場合、このフィールドを使用して、処理コンテナが失敗した理由に関する情報を伝えることができます。

**重要**  
`/opt/ml/output/message` ファイルに機密データを書き込まないでください。

このファイルのデータが UTF-8 でエンコードされていない場合、ジョブは失敗し、`ClientError` を返します。複数のコンテナが `ExitMessage,` で終了すると、各処理コンテナの`ExitMessage` の内容が連結され、1 KB に切り捨てられます。

# SageMaker AI Python SDK を使って処理コンテナを実行する
<a name="byoc-run"></a>

SageMaker Python SDK を使って、独自の処理イメージを、`Processor` クラスを使うことで実行できます。次の例は、Amazon Simple Storage Service (Amazon S3) から 1 つ入力し、Amazon S3 に 1 つ出力する、独自の処理コンテナを実行する方法を示しています。

```
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput

processor = Processor(image_uri='<your_ecr_image_uri>',
                     role=role,
                     instance_count=1,
                     instance_type="ml.m5.xlarge")

processor.run(inputs=[ProcessingInput(
                        source='<s3_uri or local path>',
                        destination='/opt/ml/processing/input_data')],
                    outputs=[ProcessingOutput(
                        source='/opt/ml/processing/processed_data',
                        destination='<s3_uri>')],
                    )
```

処理コードを処理イメージに組み込む代わりに、実行するイメージとコマンドを含む `ScriptProcessor` と、コンテナ内で実行するコードを提供することができます。例については、[独自の処理コンテナを使用したスクリプトの実行](processing-container-run-scripts.md)を参照してください。

Amazon SageMaker Processing が、scikit-learn スクリプトを実行するため `SKLearnProcessor` を介して提供する scikit-learn イメージを使うこともできます。例については、「[scikit-learn で Processing ジョブを実行する](use-scikit-learn-processing-container.md)」を参照してください。