

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

# 独自の処理コンテナを構築する方法 (高度なシナリオ)
<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-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` に含まれているホスト名に関する情報は、正確ではない可能性があるため、使わないでください。

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