

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

# SageMaker AI での製品の準備
<a name="ml-prepare-your-product-in-sagemaker"></a>

AWS Marketplace で製品を公開する前に、Amazon SageMaker AI で製品を準備する必要があります。AWS Marketplace に出品される SageMaker AI 製品には、モデルパッケージとアルゴリズムの 2 種類があります。詳細については、「[AWS Marketplace の機械学習製品](machine-learning-products.md)」を参照してください。このトピックでは、製品を準備するために必要な 3 つのステップの概要を説明します。

1. [での機械学習製品のイメージへのコードのパッケージ化 AWS Marketplace](ml-packaging-your-code-into-images.md) - モデルパッケージまたはアルゴリズム製品を準備するには、製品用の Docker コンテナイメージを作成する必要があります。

1. [Amazon Elastic Container Registry へのイメージのアップロード](ml-uploading-your-images.md) - コードをコンテナイメージにパッケージ化してローカルでテストしたら、イメージをアップロードしてスキャンし、既知の脆弱性を持っていないかを確認します。続行する前に、すべての脆弱性を修正してください。

1.  [Amazon SageMaker AI リソースの作成](ml-creating-your-amazon-sagemaker-resource.md) - イメージが正常にスキャンされたら、SageMaker AI でそのイメージを使用してモデルパッケージまたはアルゴリズムリソースを作成できます。

# での機械学習製品のイメージへのコードのパッケージ化 AWS Marketplace
<a name="ml-packaging-your-code-into-images"></a>

の機械学習製品は、Amazon SageMaker AI AWS Marketplace を使用して、購入者に提供する機械学習ロジックを作成して実行します。SageMaker AI は、ロジックを含む Docker コンテナイメージを実行します。SageMaker AI は、これらのコンテナを安全でスケーラブルなインフラストラクチャで実行します。詳細については、「[Amazon SageMaker AI でのセキュリティと知的財産](ml-security-and-intellectual-property.md)」を参照してください。以下のセクションでは、SageMaker AI の Docker コンテナイメージにコードをパッケージ化する方法について説明します。

**Topics**
+ [どのタイプのコンテナイメージを作成すればよいですか?](#ml-which-type-of-container-image-do-i-create)
+ [モデルパッケージイメージの作成](ml-model-package-images.md)
+ [アルゴリズムイメージの作成](ml-algorithm-images.md)

## どのタイプのコンテナイメージを作成すればよいですか?
<a name="ml-which-type-of-container-image-do-i-create"></a>

 コンテナイメージには、推論イメージとトレーニングイメージの 2 つのタイプがあります。

 モデルパッケージ製品を作成するには、推論イメージのみが必要です。詳細な手順については、「[モデルパッケージイメージの作成](ml-model-package-images.md)」を参照してください。

 アルゴリズム製品を作成するには、トレーニングイメージと推論イメージの両方が必要です。詳細な手順については、「[アルゴリズムイメージの作成](ml-algorithm-images.md)」を参照してください。

 コードをコンテナイメージに正しくパッケージ化するには、コンテナが SageMaker AI のファイル構造に従っている必要があります。サービスがコンテナとデータをやり取りできるよう、コンテナは正しいエンドポイントを公開する必要があります。以下のセクションでは、このプロセスを詳しく説明します。

**重要**  
 セキュリティ上の理由から、コンテナ化された製品を購入者がサブスクライブすると、Docker コンテナはインターネット接続のない隔離された環境で実行されます。コンテナの作成時には、インターネット経由での呼び出しに依存しないでください。その呼び出しは失敗します。への呼び出しも失敗 AWS のサービス します。詳細については「[Amazon SageMaker AI でのセキュリティと知的財産](ml-security-and-intellectual-property.md)」セクションを参照してください。

 必要に応じて、推論イメージとトレーニングイメージを作成するときに、開始点として、[使用可能な深層学習コンテナイメージ](https://aws.amazon.com/releasenotes/available-deep-learning-containers-images/)のコンテナを使用します。イメージは既にさまざまな機械学習フレームワークで適切にパッケージ化されています。

# モデルパッケージイメージの作成
<a name="ml-model-package-images"></a>

Amazon SageMaker AI モデルパッケージは、予測を行う事前トレーニングされたモデルです。購入者はこれをさらにトレーニングする必要はありません。SageMaker AI でモデルパッケージを作成して、 AWS Marketplaceで機械学習製品を公開できます。以下のセクションでは、 のモデルパッケージを作成する方法について説明します AWS Marketplace。これには、コンテナイメージの作成、イメージのローカルでのビルドとテストが含まれます。

**Topics**
+ [概要:](#ml-model-package-images-overview)
+ [モデルパッケージ用の推論イメージの作成](#ml-creating-an-inference-image-for-model-packages)

## 概要:
<a name="ml-model-package-images-overview"></a>

 モデルパッケージには、次のコンポーネントが含まれています。
+  [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) (Amazon ECR) に保存された推論イメージ 
+  (オプション) [Amazon S3](https://aws.amazon.com/s3/) に個別に保存されているモデルアーティファクト 

**注記**  
モデルアーティファクトは、モデルが予測を行うために使用するファイルであり、通常は独自のトレーニングプロセスの結果です。アーティファクトは、モデルが必要とするどのようなファイルタイプでも構いませんが、.tar.gz 圧縮を使用する必要があります。モデルパッケージの場合、推論イメージにバンドルすることも、Amazon SageMaker AI に個別に保存することもできます。Amazon S3 に保存されているモデルアーティファクトは、実行時に推論コンテナにロードされます。モデルパッケージを公開すると、これらのアーティファクトは公開され、購入者が直接アクセスできない AWS Marketplace 所有の Amazon S3 バケットに保存されます。

**ヒント**  
推論モデルが Gluon、Keras、MXNet、PyTorch、TensorFlow、TensorFlow-Lite、ONNX などの深層学習フレームワークで構築されている場合は、Amazon SageMaker AI Neo の使用を検討してください。Neo は、`ml.c4`、`ml.p2` などの、クラウドインスタンスタイプの特定のファミリーにデプロイする推論モデルを自動的に最適化できます。詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[Neo を使用してモデルのパフォーマンスを最適化する](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)」を参照してください。

次の図は、モデルパッケージ製品を公開して使用するワークフローを示しています。

![\[販売者がモデルパッケージイメージを作成する方法と購入者がそれを使用する方法を示す図。\]](http://docs.aws.amazon.com/ja_jp/marketplace/latest/userguide/images/ml-model-package-images.png)


の SageMaker AI モデルパッケージを作成するワークフロー AWS Marketplace には、次のステップが含まれます。

1. 販売者は推論イメージ (デプロイ時のネットワークアクセス不可) を作成し、Amazon ECR レジストリにプッシュします。

   モデルアーティファクトは推論イメージにバンドルすることも S3 に個別に保存することもできます。

1. 次に、販売者は Amazon SageMaker AI でモデルパッケージリソースを作成し、ML 製品を AWS Marketplaceに公開します。

1. 購入者は ML 製品をサブスクライブしてモデルをデプロイします。
**注記**  
 このモデルは、リアルタイムの推論を行うエンドポイントとしてデプロイすることも、データセット全体の予測を一度に取得するバッチジョブとしてデプロイすることもできます。詳細については、「[推論のためのモデルをデプロイする](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)」を参照してください。

1. SageMaker AI は推論イメージを実行します。推論イメージにバンドルされていない販売者提供のモデルアーティファクトは、ランタイムに動的に読み込まれます。

1.  SageMaker AI は、コンテナの HTTP エンドポイントを使用して購入者の推論データをコンテナに渡し、予測結果を返します。

## モデルパッケージ用の推論イメージの作成
<a name="ml-creating-an-inference-image-for-model-packages"></a>

このセクションでは、推論コードをモデルパッケージ製品の推論イメージにパッケージ化する手順を説明します。そのプロセスは、以下のステップで構成されています。

**Topics**
+ [ステップ 1: コンテナイメージを作成する](#ml-step-1-creating-the-container-image)
+ [ステップ 2: イメージをローカルでビルドしてテストする](#ml-step-2-building-and-testing-the-image-locally)

推論イメージは、推論ロジックを含む Docker イメージです。コンテナは実行時に HTTP エンドポイントを公開し、SageMaker AI がコンテナとの間でデータをやり取りできるようにします。

**注記**  
 以下は、推論イメージのパッケージコードの一例です。詳細については、「[SageMaker AI で Docker コンテナを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html)」と GitHub の「[AWS Marketplace SageMaker AI example](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace)」を参照してください。  
以下の例ではわかりやすくするために [Flask](https://pypi.org/project/Flask/) というウェブサービスを使用していますが、本番環境に対応しているとは見なされていません。

### ステップ 1: コンテナイメージを作成する
<a name="ml-step-1-creating-the-container-image"></a>

 推論イメージに SageMaker AI との互換性を持たせるには、Docker イメージが HTTP エンドポイントを公開する必要があります。コンテナの実行中、SageMaker AI は推論用の、販売者による入力を、コンテナの HTTP エンドポイントに渡します。推論結果は HTTP レスポンスの本文で返されます。

 次のチュートリアルでは、Linux Ubuntu ディストリビューションを使用する開発環境で Docker CLI を使用します。
+ [ウェブサーバースクリプトを作成する](#ml-create-the-web-server-script)
+ [コンテナ実行用のスクリプトを作成する](#ml-create-the-script-for-the-container-run)
+ [`Dockerfile` の作成](#ml-create-the-dockerfile)
+ [モデルアーティファクトをパッケージ化またはアップロードする](#ml-package-or-upload-the-model-artifacts)

#### ウェブサーバースクリプトを作成する
<a name="ml-create-the-web-server-script"></a>

 この例では [Flask](https://pypi.org/project/Flask/) という Python サーバーを使用していますが、フレームワークに適した任意のウェブサーバーを使用できます。

**注記**  
ここではわかりやすくするために [Flask](https://pypi.org/project/Flask/) を使用しています。本番環境に対応するウェブサーバーとは見なされません。

 SageMaker AI が使用する TCP ポート 8080 で 2 つの HTTP エンドポイントを処理する Flask ウェブサーバースクリプトを作成します。想定されるエンドポイントは次の 2 つです。
+  `/ping` - SageMaker AI は、このエンドポイントに HTTP GET リクエストを送信して、コンテナが準備できているかどうかを確認します。コンテナの準備が完了すると、コンテナはこのエンドポイントでの HTTP GET リクエストに HTTP 200 レスポンスコードで応答します。
+  `/invocations` - SageMaker AI は、推論のためにこのエンドポイントに HTTP POST リクエストを送ります。推論用の入力データはリクエストの本文で送信されます。ユーザー指定のコンテンツタイプは HTTP ヘッダーで渡されます。レスポンスの本文は推論出力です。タイムアウトの詳細については、「[機械学習製品を作成するための要件とベストプラクティス](ml-listing-requirements-and-best-practices.md)」を参照してください。

 **`./web_app_serve.py`** 

```
# Import modules
import json
import re
from flask import Flask
from flask import request
app = Flask(__name__)

# Create a path for health checks
@app.route("/ping")
def endpoint_ping():
  return ""
 
# Create a path for inference
@app.route("/invocations", methods=["POST"])
def endpoint_invocations():
  
  # Read the input
  input_str = request.get_data().decode("utf8")
  
  # Add your inference code between these comments.
  #
  #
  #
  #
  #
  # Add your inference code above this comment.
  
  # Return a response with a prediction
  response = {"prediction":"a","text":input_str}
  return json.dumps(response)
```

前の例には、実際の推論ロジックはありません。実際の推論イメージについては、ウェブアプリに推論ロジックを追加し、入力を処理して実際の予測を返します。

推論イメージには、インターネットアクセスも、 への呼び出しもできないため、必要な依存関係がすべて含まれている必要があります AWS のサービス。

**注記**  
これと同じコードがリアルタイム推論とバッチ推論の両方で呼び出されます。

#### コンテナ実行用のスクリプトを作成する
<a name="ml-create-the-script-for-the-container-run"></a>

 Docker コンテナイメージの実行時に SageMaker AI が実行する `serve` というスクリプトを作成します。次のスクリプトは HTTP ウェブサーバーを起動します。

 **`./serve`** 

```
#!/bin/bash

# Run flask server on port 8080 for SageMaker
flask run --host 0.0.0.0 --port 8080
```

#### `Dockerfile` の作成
<a name="ml-create-the-dockerfile"></a>

 ビルドコンテキストに `Dockerfile` を作成します。この例では Ubuntu 18.04 を使用していますが、フレームワークに適していれば、どのベースイメージからでも開始できます。

 `./Dockerfile` 

```
FROM ubuntu:18.04

# Specify encoding
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# Install python-pip
RUN apt-get update \
&& apt-get install -y python3.6 python3-pip \
&& ln -s /usr/bin/python3.6 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip;

# Install flask server
RUN pip install -U Flask;

# Add a web server script to the image
# Set an environment to tell flask the script to run
COPY /web_app_serve.py /web_app_serve.py
ENV FLASK_APP=/web_app_serve.py

# Add a script that Amazon SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /serve /opt/program/serve
RUN chmod 755 /opt/program/serve
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` は、以前に作成した 2 つのスクリプトをイメージに追加します。`serve` スクリプトのディレクトリが PATH に追加されると、コンテナの実行時にそれを実行できるようになります。

#### モデルアーティファクトをパッケージ化またはアップロードする
<a name="ml-package-or-upload-the-model-artifacts"></a>

 モデルのトレーニングから推論イメージまで、モデルアーティファクトを提供する方法には、以下の 2 つがあります。
+  推論イメージと共に静的にパッケージ化します。
+  ランタイムに動的にロードします。動的に読み込まれるため、同じイメージをさまざまな機械学習モデルのパッケージ化に使用できます。

 モデルのアーティファクトを推論イメージと一緒にパッケージ化する場合は、アーティファクトを `Dockerfile` に含めてください。

 モデルアーティファクトを動的にロードする場合は、それらのアーティファクトを Amazon S3 の圧縮ファイル (.tar.gz) に個別に保存します。モデルパッケージを作成するときに圧縮ファイルの場所を指定すると、SageMaker AI はコンテナを実行するときにその内容を抽出してコンテナディレクトリ `/opt/ml/model/` にコピーします。モデルパッケージを公開すると、それらのアーティファクトは、購入者が直接アクセスできない、 AWS Marketplace 所有の Amazon S3 バケットに公開および保存されます。

### ステップ 2: イメージをローカルでビルドしてテストする
<a name="ml-step-2-building-and-testing-the-image-locally"></a>

 ビルドコンテキストには、現在、以下のファイルが存在します。
+  `./Dockerfile` 
+  `./web_app_serve.py` 
+  `./serve` 
+  推論ロジックと (オプションの) 依存関係 

 次に、コンテナイメージをビルド、実行、テストします。

#### イメージを構築する
<a name="ml-build-the-image"></a>

 ビルドコンテキストで Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグ `my-inference-image` を使用します。

```
sudo docker build --tag my-inference-image ./
```

 この Docker コマンドを実行してイメージをビルドすると、`Dockerfile` の各行に基づいて Docker がイメージをビルドするときの出力が表示されます。終了すると、次のようなものが表示されます。

```
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
```

#### をローカルで実行する
<a name="ml-run-locally"></a>

 ビルドが完了したら、イメージをローカルでテストできます。

```
sudo docker run \
  --rm \
  --publish 8080:8080/tcp \
  --detach \
  --name my-inference-container \
  my-inference-image \
  serve
```

 コマンドの詳細は次のとおりです。
+ `--rm` - コンテナが停止したら自動的に削除します。
+ `--publish 8080:8080/tcp` - ポート 8080 を公開して、SageMaker AI が HTTP リクエストを送信する先のポートをシミュレートします。
+ `--detach` - コンテナをバックグラウンドで実行します。
+ `--name my-inference-container` - 実行中のこのコンテナに名前を付けます。
+ `my-inference-image` - ビルドされたイメージを実行します。
+ `serve` - コンテナの実行時に、SageMaker AI が実行するスクリプトと同じものを実行します。

 このコマンドを実行すると、Docker は、ビルドした推論イメージからコンテナを作成してバックグラウンドで実行します。コンテナは `serve` スクリプトを実行し、テスト目的でウェブサーバーを起動します。

#### HTTP エンドポイントへの ping をテストします。
<a name="ml-test-the-ping-http-endpoint"></a>

 SageMaker AI はコンテナを実行すると定期的にエンドポイントに ping を送信します。エンドポイントがステータスコード 200 の HTTP レスポンスを返すと、コンテナが推論できる状態になったことを SageMaker AI に通知します。これをテストするには、次のコマンドを実行します。このコマンドはエンドポイントをテストしてレスポンスヘッダーを含めます。

```
curl --include http://127.0.0.1:8080/ping
```

出力例は次のとおりです。

```
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
```

#### 推論 HTTP エンドポイントをテストします。
<a name="ml-test-the-inference-http-endpoint"></a>

 コンテナが ping に対して 200 ステータスコードを返して準備完了を示すと、SageMaker AI は `POST` リクエストを介して `/invocations` HTTP エンドポイントに推論データを渡します。以下のコマンドを実行して、推論ポイントをテストします。

```
curl \
  --request POST \
  --data "hello world" \
  http://127.0.0.1:8080/invocations
```

 出力例は次のとおりです。

 `{"prediction": "a", "text": "hello world"}` 

 これら 2 つの HTTP エンドポイントが機能するようになり、推論イメージは SageMaker AI との互換性を持っています。

**注記**  
 モデルパッケージ製品のモデルは、リアルタイムとバッチの 2 つの方法でデプロイできます。どちらのデプロイでも、SageMaker AI は Docker コンテナの実行中に同じ HTTP エンドポイントを使用します。

 コンテナを停止するには、次のコマンドを実行します。

```
sudo docker container stop my-inference-container
```

 推論イメージの準備とテストが完了したら、次の「[Amazon Elastic Container Registry へのイメージのアップロード](ml-uploading-your-images.md)」に進むことができます。

# アルゴリズムイメージの作成
<a name="ml-algorithm-images"></a>

Amazon SageMaker AI アルゴリズムでは、購入者が予測を行う前に独自のデータをトレーニングに持ち込む必要があります。 AWS Marketplace 販売者は、SageMaker AI を使用して、購入者がデプロイできる機械学習 (ML) アルゴリズムとモデルを作成できます AWS。以下のセクションでは、アルゴリズムイメージを作成する方法について説明します AWS Marketplace。これには、アルゴリズムをトレーニングするための Docker トレーニングイメージと、推論ロジックを含む推論イメージの作成が含まれます。アルゴリズム製品を公開するには、トレーニングイメージと推論イメージの両方が必要です。

**Topics**
+ [概要:](#ml-algorithm-images-overview)
+ [アルゴリズム用のトレーニングイメージの作成](#ml-creating-a-training-image-for-algorithms)
+ [アルゴリズムの推論イメージの作成](#ml-creating-an-inference-image-for-algorithms)

## 概要:
<a name="ml-algorithm-images-overview"></a>

アルゴリズムには以下のコンポーネントが含まれています。
+  [Amazon ECR](https://aws.amazon.com/ecr/) に保存されたトレーニングイメージ 
+  Amazon Elastic Container Registry (Amazon ECR) に保存された推論イメージ 

**注記**  
 アルゴリズム製品では、トレーニングコンテナによってモデルアーティファクトが生成され、モデルのデプロイ時に推論コンテナに読み込まれます。

次の図は、アルゴリズム製品を公開して使用するワークフローを示しています。

![\[販売者がアルゴリズムパッケージイメージを作成する方法と購入者がそれを使用する方法を示す図。\]](http://docs.aws.amazon.com/ja_jp/marketplace/latest/userguide/images/ml-algorithm-package-images.png)


の SageMaker AI アルゴリズムを作成するためのワークフロー AWS Marketplace には、次のステップが含まれます。

1. 販売者はトレーニングイメージと推論イメージ (デプロイ時のネットワークアクセス不可) を作成し、Amazon ECR レジストリにアップロードします。

1. 次に、販売者は Amazon SageMaker AI でアルゴリズムリソースを作成し、ML 製品を AWS Marketplaceに公開します。

1. 購入者は ML 製品をサブスクライブします。

1. 購入者は、互換性のあるデータセットと適切なハイパーパラメータ値を使用してトレーニングジョブを作成します。SageMaker AI はトレーニングイメージを実行し、トレーニングデータとハイパーパラメータをトレーニングコンテナに読み込みます。トレーニングジョブが完了すると、`/opt/ml/model/` にあるモデルアーティファクトが圧縮され、購入者の [Amazon S3](https://aws.amazon.com/s3/) バケットにコピーされます。

1. 購入者は Amazon S3 に保存されているトレーニングのモデルアーティファクトを含むモデルパッケージを作成し、モデルをデプロイします。

1. SageMaker AI は推論イメージを実行して、圧縮されたモデルアーティファクトを抽出し、ファイルを推論コンテナのディレクトリパス `/opt/ml/model/` にロードします。このパスは、推論を提供するコードによって使用されます。

1.  モデルがエンドポイントとして展開されるかバッチ変換ジョブとしてデプロイされるかにかかわらず、SageMaker AI は購入者に代わってコンテナの HTTP エンドポイント経由で推論用データをコンテナに渡し、予測結果を返します。

**注記**  
 詳細については、「[モデルのトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/train-model.html)」を参照してください。

## アルゴリズム用のトレーニングイメージの作成
<a name="ml-creating-a-training-image-for-algorithms"></a>

 このセクションでは、トレーニングコードをトレーニングイメージにパッケージ化する手順を説明します。アルゴリズム製品を作成するには、トレーニングイメージが必要です。

 *トレーニングイメージは*、トレーニングアルゴリズムを含む Docker イメージです。コンテナは特定のファイル構造に準拠しているため、SageMaker AI はコンテナとの間でデータをコピーできます。

 アルゴリズム製品を公開する際は、トレーニングイメージと推論イメージの両方が必要です。トレーニングイメージを作成したら、推論イメージを作成する必要があります。2 つのイメージは 1 つのイメージに結合することも、個別のイメージのままにしておくこともできます。イメージを結合するか個別のイメージのままにするかは、ユーザーしだいです。通常、推論は学習よりも単純です。イメージを結合せずに個別のイメージのままにすると、推論のパフォーマンスが向上することがあります。

**注記**  
 以下は、トレーニングイメージのパッケージコードの一例です。詳細については、「[AWS Marketplaceで独自のアルゴリズムとモデルを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)」および GitHub の「[AWS Marketplace SageMaker AI サンプル](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace)」を参照してください。

**Topics**
+ [ステップ 1: コンテナイメージを作成する](#ml-step-1-creating-the-container-image-1)
+ [ステップ 2: イメージをローカルでビルドしてテストする](#ml-step-2-building-and-testing-the-image-locally-1)

### ステップ 1: コンテナイメージを作成する
<a name="ml-step-1-creating-the-container-image-1"></a>

 トレーニングイメージに Amazon SageMaker AI との互換性を持たせるには、SageMaker AI で特定のファイル構造を遵守して、トレーニングデータと設定入力をコンテナ内の特定のパスにコピーできるようにする必要があります。トレーニングが完了すると、生成されたモデルアーティファクトは、SageMaker AI がコピーする元のコンテナ内の特定のディレクトリパスに保存されます。

 以下では、Linux の Ubuntu ディストリビューションの開発環境にインストールされた Docker CLI が使用されています。
+ [設定入力を読み取れるようプログラムを準備します。](#ml-prepare-your-program-to-read-configuration-inputs)
+ [データ入力を読み取れるようプログラムを準備します。](#ml-prepare-your-program-to-read-data-inputs)
+ [トレーニング出力を書き込めるようプログラムを準備します。](#ml-prepare-your-program-to-write-training-outputs)
+ [コンテナ実行用のスクリプトを作成する](#ml-create-the-script-for-the-container-run-1)
+ [`Dockerfile` の作成](#ml-create-the-dockerfile-1)

#### 設定入力を読み取れるようプログラムを準備します。
<a name="ml-prepare-your-program-to-read-configuration-inputs"></a>

 トレーニングプログラムで購入者提供の設定入力が必要な場合は、実行時に以下がコンテナ内にコピーされます。必要に応じて、プログラムはこれらの特定のファイルパスから読み取りを行う必要があります。
+  `/opt/ml/input/config` は、プログラムの実行方法を制御する情報が保存されているディレクトリです。
  +  `hyperparameters.json` は、ハイパーパラメータ名とハイパーパラメータ値の、JSON 形式の辞書です。値は文字列のため、変換が必要になる場合があります。
  +  `resourceConfig.json` は JSON 形式のファイルで、[分散型トレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)に使用されるネットワークレイアウトを記述しています。トレーニングイメージが分散型トレーニングをサポートしていない場合、このファイルは無視してかまいません。

**注記**  
 設定入力の詳細については、「[Amazon SageMaker AI がトレーニング情報を提供する方法](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html)」を参照してください。

#### データ入力を読み取れるようプログラムを準備します。
<a name="ml-prepare-your-program-to-read-data-inputs"></a>

 トレーニングデータは、次の 2 つのモードのいずれかでコンテナに渡すことができます。コンテナ内で実行されるトレーニングプログラムは、これら 2 つのモードのいずれかでトレーニングデータのダイジェストを作成します。

 **ファイルモード** 
+  `/opt/ml/input/data/<channel_name>/` にそのチャネルの入力データが含まれます。チャネルは `CreateTrainingJob` オペレーションの呼び出しに基づいて作成されますが、一般的にはアルゴリズムが期待するものとチャネルが一致することが重要です。各チャネルのファイルは [Amazon S3](https://aws.amazon.com/s3/) からこのディレクトリにコピーされ、Amazon S3 のキー構造によって示されるツリー構造が保持されます。

 **パイプモード** 
+  `/opt/ml/input/data/<channel_name>_<epoch_number>` は特定のエポックのパイプです。エポックは 0 から始まり、読み込まれるたびに 1 ずつ増えていきます。実行できるエポックの数に制限はありませんが、次のエポックを読み込む前に各パイプを閉じる必要があります。

#### トレーニング出力を書き込めるようプログラムを準備します。
<a name="ml-prepare-your-program-to-write-training-outputs"></a>

 トレーニングの出力は次のコンテナディレクトリに書き込まれます。
+  `/opt/ml/model/` はトレーニングアルゴリズムが生成するモデルまたはモデルアーティファクトが書き込まれるディレクトリです。モデルはどのような形式でもかまいません。1 つのファイルでもディレクトリツリー全体でもかまいません。SageMaker AI は、このディレクトリ内のすべてのファイルを圧縮ファイル (.tar.gz) にパッケージ化します。このファイルは、`DescribeTrainingJob` API オペレーションによって返される、Amazon S3 の場所にあります。
+  `/opt/ml/output/` は、ジョブが失敗した理由が記述された `failure` ファイルをアルゴリズムが書き込むことができるディレクトリです。このファイルの内容は `DescribeTrainingJob` の結果の `FailureReason` フィールドに返されます。ジョブが成功してもこのファイルは無視されるため、このファイルを書き込む理由はありません。

#### コンテナ実行用のスクリプトを作成する
<a name="ml-create-the-script-for-the-container-run-1"></a>

 Docker コンテナイメージの実行時に SageMaker AI が実行する `train` シェルスクリプトを作成します。トレーニングが完了し、モデルアーティファクトがそれぞれのディレクトリに書き込まれたら、スクリプトを終了します。

 **`./train`** 

```
#!/bin/bash

# Run your training program here
#
#
#
#
```

#### `Dockerfile` の作成
<a name="ml-create-the-dockerfile-1"></a>

 ビルドコンテキストに `Dockerfile` を作成します。この例ではベースイメージとして Ubuntu 18.04 を使用していますが、フレームワークに適していれば、どのベースイメージからでも開始できます。

 **`./Dockerfile`** 

```
FROM ubuntu:18.04

# Add training dependencies and programs
#
#
#
#
#
# Add a script that SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /train /opt/program/train
RUN chmod 755 /opt/program/train
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` は以前に作成した `train` スクリプトをイメージに追加します。スクリプトのディレクトリが PATH に追加され、コンテナの実行時にスクリプトを実行できるようになります。

 前の例には、実際のトレーニングロジックはありません。実際のトレーニングイメージでは、トレーニングの依存関係を `Dockerfile` に追加し、トレーニング入力を読み取るロジックを追加してトレーニングを行い、モデルアーティファクトを生成します。

 トレーニングイメージはインターネットにアクセスできないため、必要な依存関係がすべて含まれている必要があります。

 詳細については、「[AWS Marketplaceで独自のアルゴリズムとモデルを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)」および GitHub の「[AWS Marketplace SageMaker AI サンプル](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace)」を参照してください。

### ステップ 2: イメージをローカルでビルドしてテストする
<a name="ml-step-2-building-and-testing-the-image-locally-1"></a>

 ビルドコンテキストには、現在、以下のファイルが存在します。
+ `./Dockerfile`
+ `./train`
+ トレーニングの依存関係とロジック

 次に、このコンテナイメージをビルド、実行、テストできます。

#### イメージを構築する
<a name="ml-build-the-image-1"></a>

 ビルドコンテキストで Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグ `my-training-image` を使用します。

```
sudo docker build --tag my-training-image ./
```

 この Docker コマンドを実行してイメージをビルドすると、`Dockerfile` の各行に基づいて Docker がイメージをビルドするときの出力が表示されます。終了すると、次のようなものが表示されます。

```
Successfully built abcdef123456
Successfully tagged my-training-image:latest
```

#### をローカルで実行する
<a name="ml-run-locally-1"></a>

 完了したら、次の例に示すようにイメージをローカルでテストします。

```
sudo docker run \
  --rm \
  --volume '<path_to_input>:/opt/ml/input:ro' \
  --volume '<path_to_model>:/opt/ml/model' \
  --volume '<path_to_output>:/opt/ml/output' \
  --name my-training-container \
  my-training-image \
  train
```

 コマンドの詳細は次のとおりです。
+  `--rm` - コンテナが停止したら自動的に削除します。
+  `--volume '<path_to_input>:/opt/ml/input:ro'` - テスト入力ディレクトリをコンテナが読み取り専用で使用できるようにします。
+  `--volume '<path_to_model>:/opt/ml/model'` - トレーニングテストが完了したら、モデルアーティファクトが保存されているパスをホストマシンでバインドマウントします。
+  `--volume '<path_to_output>:/opt/ml/output'` - 障害理由が書き込まれる `failure` ファイル内のパスをホストマシンでバインドマウントします。
+  `--name my-training-container` - 実行中のこのコンテナに名前を付けます。
+  `my-training-image` - ビルドされたイメージを実行します。
+  `train` - コンテナの実行時に、SageMaker AI が実行するスクリプトと同じものを実行します。

 このコマンドを実行すると、Docker は、ビルドされたトレーニングイメージからコンテナを作成して実行します。コンテナは `train` スクリプトを実行します。これで、トレーニングプログラムが起動します。

 トレーニングプログラムが終了し、コンテナが終了したら、出力モデルのアーティファクトが正しいことを確認します。さらに、ログ出力をチェックして、トレーニングジョブに関する十分な情報が提供されていることを確認し、併せて、不要なログが生成されていないことを確認します。

 これで、アルゴリズム製品用のトレーニングコードのパッケージ化が完了しました。アルゴリズム製品には推論イメージも含まれるため、次のセクション、「[アルゴリズムの推論イメージの作成](#ml-creating-an-inference-image-for-algorithms)」に進んでください。

## アルゴリズムの推論イメージの作成
<a name="ml-creating-an-inference-image-for-algorithms"></a>

 このセクションでは、推論コードをアルゴリズム製品の推論イメージにパッケージ化する手順を説明します。

 推論イメージは、推論ロジックを含む Docker イメージです。コンテナは実行時に HTTP エンドポイントを公開し、SageMaker AI がコンテナとの間でデータをやり取りできるようにします。

 アルゴリズム製品を公開する際は、トレーニングイメージと推論イメージの両方が必要です。これをまだ確認していない場合は、「[アルゴリズム用のトレーニングイメージの作成](#ml-creating-a-training-image-for-algorithms)」に関する前のセクションを参照してください。2 つのイメージは 1 つのイメージに結合することも、個別のイメージのままにしておくこともできます。イメージを結合するか個別のイメージのままにするかは、ユーザーしだいです。通常、推論は学習よりも単純です。イメージを結合せずに個別のイメージのままにすると、推論のパフォーマンスが向上することがあります。

**注記**  
 以下は、推論イメージのパッケージコードの一例です。詳細については、「[AWS Marketplaceで独自のアルゴリズムとモデルを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-marketplace.html)」および GitHub の「[AWS Marketplace SageMaker AI サンプル](https://github.com/aws/amazon-sagemaker-examples/tree/master/aws_marketplace)」を参照してください。  
以下の例ではわかりやすくするために [Flask](https://pypi.org/project/Flask/) というウェブサービスを使用していますが、本番環境に対応しているとは見なされていません。

**Topics**
+ [ステップ 1: 推論イメージを作成する](#ml-step-1-creating-the-inference-image)
+ [ステップ 2: イメージをローカルでビルドしてテストする](#ml-step-2-building-and-testing-the-image-locally-2)

### ステップ 1: 推論イメージを作成する
<a name="ml-step-1-creating-the-inference-image"></a>

 推論イメージに SageMaker AI との互換性を持たせるには、Docker イメージが HTTP エンドポイントを公開する必要があります。コンテナの実行中、SageMaker AI は購入者から提供された推論用の入力をコンテナの HTTP エンドポイントに渡します。推論の結果は HTTP レスポンスの本文で返されます。

 以下では、Linux の Ubuntu ディストリビューションの開発環境にインストールされた Docker CLI が使用されています。
+ [ウェブサーバースクリプトを作成する](#ml-create-the-web-server-script-1) 
+ [コンテナ実行用のスクリプトを作成する](#ml-create-the-script-for-the-container-run-2)
+ [`Dockerfile` の作成](#ml-create-the-dockerfile-2)
+ [モデルアーティファクトを動的に読み込むためのプログラムを準備する](#ml-preparing-your-program-to-dynamically-load-model-artifacts)

#### ウェブサーバースクリプトを作成する
<a name="ml-create-the-web-server-script-1"></a>

 この例では [Flask](https://pypi.org/project/Flask/) という Python サーバーを使用していますが、フレームワークに適した任意のウェブサーバーを使用できます。

**注記**  
ここではわかりやすくするために [Flask](https://pypi.org/project/Flask/) を使用しています。本番環境に対応するウェブサーバーとは見なされません。

 SageMaker AI が使用する TCP ポート 8080 で 2 つの HTTP エンドポイントを処理する Flask ウェブサーバースクリプトを作成します。想定されるエンドポイントは次の 2 つです。
+  `/ping` - SageMaker AI は、このエンドポイントに HTTP GET リクエストを送信して、コンテナが準備できているかどうかを確認します。コンテナの準備が完了すると、コンテナはこのエンドポイントでの HTTP GET リクエストに HTTP 200 レスポンスコードで応答します。
+  `/invocations` - SageMaker AI は、推論のためにこのエンドポイントに HTTP POST リクエストを送ります。推論用の入力データはリクエストの本文で送信されます。ユーザー指定のコンテンツタイプは HTTP ヘッダーで渡されます。レスポンスの本文は推論出力です。

 **`./web_app_serve.py`** 

```
# Import modules
import json
import re
from flask import Flask
from flask import request
app = Flask(__name__)

# Create a path for health checks
@app.route("/ping")
def endpoint_ping():
  return ""
 
# Create a path for inference
@app.route("/invocations", methods=["POST"])
def endpoint_invocations():
  
  # Read the input
  input_str = request.get_data().decode("utf8")
  
  # Add your inference code here.
  #
  #
  #
  #
  #
  # Add your inference code here.
  
  # Return a response with a prediction
  response = {"prediction":"a","text":input_str}
  return json.dumps(response)
```

 前の例には、実際の推論ロジックはありません。実際の推論イメージについては、ウェブアプリに推論ロジックを追加し、入力を処理して予測を返します。

 推論イメージはインターネットにアクセスできないため、必要な依存関係がすべて含まれている必要があります。

#### コンテナ実行用のスクリプトを作成する
<a name="ml-create-the-script-for-the-container-run-2"></a>

 Docker コンテナイメージの実行時に SageMaker AI が実行する `serve` というスクリプトを作成します。このスクリプトでは、HTTP ウェブサーバーを起動します。

 **`./serve`** 

```
#!/bin/bash

# Run flask server on port 8080 for SageMaker AI
flask run --host 0.0.0.0 --port 8080
```

#### `Dockerfile` の作成
<a name="ml-create-the-dockerfile-2"></a>

 ビルドコンテキストに `Dockerfile` を作成します。この例では Ubuntu 18.04 を使用していますが、フレームワークに適していれば、どのベースイメージからでも開始できます。

 **`./Dockerfile`** 

```
FROM ubuntu:18.04

# Specify encoding
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# Install python-pip
RUN apt-get update \
&& apt-get install -y python3.6 python3-pip \
&& ln -s /usr/bin/python3.6 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip;

# Install flask server
RUN pip install -U Flask;

# Add a web server script to the image
# Set an environment to tell flask the script to run
COPY /web_app_serve.py /web_app_serve.py
ENV FLASK_APP=/web_app_serve.py

# Add a script that Amazon SageMaker AI will run
# Set run permissions
# Prepend program directory to $PATH
COPY /serve /opt/program/serve
RUN chmod 755 /opt/program/serve
ENV PATH=/opt/program:${PATH}
```

 `Dockerfile` は以前に作成した 2 つのスクリプトをイメージに追加します。`serve` スクリプトのディレクトリが PATH に追加されると、コンテナの実行時にそれを実行できるようになります。

#### モデルアーティファクトを動的に読み込むためのプログラムを準備する
<a name="ml-preparing-your-program-to-dynamically-load-model-artifacts"></a>

 アルゴリズム製品の場合、購入者は独自のデータセットとトレーニングイメージを使用して、独自のモデルアーティファクトを生成します。トレーニングプロセスが完了すると、トレーニングコンテナはモデルアーティファクトをコンテナディレクトリ ` /opt/ml/model/` に出力します。SageMaker AI はそのディレクトリ内のコンテンツを .tar.gz ファイルに圧縮し、Amazon S3 の購入者の AWS アカウント に保存します。

 モデルがデプロイされると、SageMaker AI は推論イメージを実行し、購入者の Amazon S3 のアカウントに保存されている .tar.gz ファイルからモデルアーティファクトを抽出して、`/opt/ml/model/` ディレクトリの推論コンテナにロードします。実行時、推論コンテナコードはモデルデータを使用します。

**注記**  
 モデルアーティファクトファイルに含まれる可能性のある知的財産を保護するために、ファイル出力前の暗号化を選択できます。詳細については、「[Amazon SageMaker AI でのセキュリティと知的財産](ml-security-and-intellectual-property.md)」を参照してください。

### ステップ 2: イメージをローカルでビルドしてテストする
<a name="ml-step-2-building-and-testing-the-image-locally-2"></a>

 ビルドコンテキストには、現在、以下のファイルが存在します。
+ `./Dockerfile`
+ `./web_app_serve.py`
+ `./serve`

 次に、このコンテナイメージをビルド、実行、テストできます。

#### イメージを構築する
<a name="ml-build-the-image-2"></a>

 Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグ `my-inference-image` を使用します。

```
sudo docker build --tag my-inference-image ./
```

 この Docker コマンドを実行してイメージをビルドすると、`Dockerfile` の各行に基づいて Docker がイメージをビルドするときの出力が表示されます。終了すると、次のようなものが表示されます。

```
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
```

#### をローカルで実行する
<a name="ml-run-locally-2"></a>

 ビルドが完了したら、イメージをローカルでテストできます。

```
sudo docker run \
  --rm \
  --publish 8080:8080/tcp \
  --volume '<path_to_model>:/opt/ml/model:ro' \
  --detach \
  --name my-inference-container \
  my-inference-image \
  serve
```

 コマンドの詳細は次のとおりです。
+  `--rm` - コンテナが停止したら自動的に削除します。
+  `--publish 8080:8080/tcp` - ポート 8080 を公開して、SageMaker AI が HTTP リクエストを送信する先のポートをシミュレートします。
+  `--volume '<path_to_model>:/opt/ml/model:ro'` - テストモデルアーティファクトが保存されているホストマシン上のパスを、コンテナ内の推論コードで使用できるよう読み取り専用としてバインドマウントします。
+  `--detach` - コンテナをバックグラウンドで実行します。
+  `--name my-inference-container` - 実行中のこのコンテナに名前を付けます。
+  `my-inference-image` - ビルドされたイメージを実行します。
+  `serve` - コンテナの実行時に、SageMaker AI が実行するスクリプトと同じものを実行します。

 このコマンドを実行すると、Docker は、推論イメージからコンテナを作成してバックグラウンドで実行します。コンテナは `serve` スクリプトを実行し、テスト目的でウェブサーバーを起動します。

#### HTTP エンドポイントへの ping をテストします。
<a name="ml-test-the-ping-http-endpoint-1"></a>

 SageMaker AI はコンテナを実行すると定期的にエンドポイントに ping を送信します。エンドポイントがステータスコード 200 の HTTP レスポンスを返すと、コンテナが推論できる状態になったことを SageMaker AI に通知します。

 次のコマンドを実行してエンドポイントをテストし、レスポンスヘッダーを含めます。

```
curl --include http://127.0.0.1:8080/ping
```

 以下の例に、出力例を示します。

```
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
```

#### 推論 HTTP エンドポイントをテストします。
<a name="ml-test-the-inference-http-endpoint-1"></a>

 コンテナが 200 ステータスコードを返して準備完了を示すと、SageMaker AI は `POST` リクエストを介して `/invocations` HTTP エンドポイントに推論データを渡します。

 以下のコマンドを実行して、推論エンドポイントをテストします。

```
curl \
  --request POST \
  --data "hello world" \
  http://127.0.0.1:8080/invocations
```

 以下の例に、出力例を示します。

```
{"prediction": "a", "text": "hello world"}
```

 これら 2 つの HTTP エンドポイントが機能するようになり、推論イメージは SageMaker AI との互換性を持っています。

**注記**  
 アルゴリズム製品のモデルは、リアルタイムとバッチの 2 つの方法でデプロイできます。どちらのデプロイでも、SageMaker AI は Docker コンテナの実行中に同じ HTTP エンドポイントを使用します。

 コンテナを停止するには、次のコマンドを実行します。

```
sudo docker container stop my-inference-container
```

 アルゴリズム製品のトレーニングイメージと推論イメージの両方の準備とテストが完了したら、「[Amazon Elastic Container Registry へのイメージのアップロード](ml-uploading-your-images.md)」に進みます。

# Amazon Elastic Container Registry へのイメージのアップロード
<a name="ml-uploading-your-images"></a>

推論イメージとトレーニングイメージを作成したら、Amazon Elastic Container Registry にアップロードできます。[Amazon ECR](https://aws.amazon.com/ecr/) は、フルマネージドの Docker レジストリです。Amazon SageMaker AI は、Amazon ECR からイメージをプルして、推論用のモデルパッケージまたはトレーニングジョブ用のアルゴリズムを作成します。 AWS Marketplace は、Amazon ECR からこれらのイメージを取得し、モデルパッケージとアルゴリズム製品を公開します。このトピックでは、推論イメージとトレーニングイメージを Amazon ECR にアップロードする手順を説明します。

**Topics**
+ [アップロードする必要があるイメージ](#ml-which-images-must-i-upload)
+ [必要となる IAM アクセス許可](#ml-what-iam-permissions-are-required)
+ [Docker クライアントを にログインする AWS](#ml-log-in-your-docker-client)
+ [リポジトリを作成してイメージをアップロードします。](#ml-create-repository-and-upload-image)
+ [アップロードしたイメージをスキャンします。](#ml-scan-your-uploaded-image)

## アップロードする必要があるイメージ
<a name="ml-which-images-must-i-upload"></a>

 モデルパッケージを公開する場合は、推論イメージのみをアップロードします。アルゴリズムを公開する場合は、推論イメージとトレーニングイメージの両方をアップロードします。推論イメージとトレーニングイメージを結合する場合は、結合されたイメージを 1 回だけアップロードしてください。

## 必要となる IAM アクセス許可
<a name="ml-what-iam-permissions-are-required"></a>

 以下の手順では、ローカルマシンに販売者の AWS Identity and Access Management (IAM) ロールまたはユーザーの正しい AWS 認証情報があることを前提としています AWS アカウント。ロールまたはユーザーは、 AWS Marketplace と Amazon ECR の両方に正しいポリシーを設定する必要があります。たとえば、次の AWS 管理ポリシーを使用できます。
+  [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceSellerProductsFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceSellerProductsFullAccess.html) – へのアクセス用 AWS Marketplace 
+  [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryFullAccess.html) - Amazon ECR へのアクセス用 

**注記**  
リンクをクリックすると、*AWS マネージドポリシーリファレンス*が表示されます。

## Docker クライアントを にログインする AWS
<a name="ml-log-in-your-docker-client"></a>

 発行元の の変数を設定します ( AWS リージョン 「」を参照[公開 AWS リージョン でサポート](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing))。この例では、米国東部 (オハイオ) リージョンを使用します。

```
region=us-east-2
```

 次のコマンドを実行して、 AWS アカウント ID を持つ変数を設定します。この例では、current AWS Command Line Interface (AWS CLI) 認証情報が販売者の認証情報に属していることを前提としています AWS アカウント。

```
account=$(aws sts get-caller-identity --query Account --output text)
```

 リージョンの AWS アカウント Amazon ECR Docker レジストリを使用して Docker CLI クライアントを認証するには、次のコマンドを実行します。

```
aws ecr get-login-password \
--region ${region} \
| sudo docker login \
--username AWS \
--password-stdin \
${account}.dkr.ecr.${region}.amazonaws.com
```

## リポジトリを作成してイメージをアップロードします。
<a name="ml-create-repository-and-upload-image"></a>

 アップロードしたイメージのタグに変数を設定し、アップロードしたイメージリポジトリの名前に別の変数を設定します。

```
image=my-inference-image
repo=my-inference-image
```

**注記**  
 **推論イメージとトレーニングイメージを作成した、このガイドの前のセクションで、これらのイメージは **my-inference-image** および my-training-image** としてそれぞれタグ付けされていました。この例では、推論イメージを作成して同じ名前のリポジトリにアップロードします。

 次のコマンドを実行して、Amazon ECR にイメージリポジトリを作成します。

```
aws ecr --region ${region} create-repository --repository-name "${repo}"
```

 Amazon ECR リポジトリの場所のフルネームは、次のパーツで構成されています。` <account-id>.dkr.ecr.<region>.amazonaws.com/<image-repository-name>`

 イメージをリポジトリにプッシュするには、リポジトリの場所のフルネームをイメージにタグ付けする必要があります。

 イメージリポジトリの場所のフルネームとして変数を `latest` タグと共に設定します。

```
fullname="${account}.dkr.ecr.${region}.amazonaws.com/${repo}:latest"
```

 イメージにフルネームをタグ付けします。

```
sudo docker tag ${image} ${fullname}
```

 最後に、Amazon ECR のリポジトリに推論イメージをプッシュします。

```
sudo docker push ${fullname}
```

 アップロードが完了すると、公開元のリージョンの [Amazon ECR コンソールのリポジトリリスト](https://console.aws.amazon.com/ecr/repositories?region=us-east-2)にイメージが表示されます。前の例では、イメージは米国東部 (オハイオ) リージョンにプッシュされました。

## アップロードしたイメージをスキャンします。
<a name="ml-scan-your-uploaded-image"></a>

 [Amazon ECR コンソール](https://console.aws.amazon.com/ecr/repositories?region=us-east-2)で、公開 AWS リージョン 元の を選択し、イメージがアップロードされたリポジトリを開きます。アップロードしたイメージを選択し、スキャンを開始して既知の脆弱性を確認します。 は、Amazon SageMaker AI リソースで使用されるコンテナイメージの Amazon ECR スキャン結果を公開前に AWS Marketplace チェックします。製品を作成するには、重要度が「重大」または「高」の脆弱性があるコンテナイメージを修正する必要があります。

 イメージが正常にスキャンされたら、そのイメージを使用してモデルパッケージまたはアルゴリズムリソースを作成できます。

商品のスキャン中に誤検出のエラーがあったと思われる場合は、[AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us) チームに連絡し、エラーの関する情報を伝えてください。

 **次のステップ** 
+  [機械学習製品を作成するための要件とベストプラクティス](ml-listing-requirements-and-best-practices.md) におけるファイルサイズ制限を確認する 
+  「[Amazon SageMaker AI リソースの作成](ml-creating-your-amazon-sagemaker-resource.md)」に進む 

# Amazon SageMaker AI リソースの作成
<a name="ml-creating-your-amazon-sagemaker-resource"></a>

 モデルパッケージまたはアルゴリズム製品を公開するには、Amazon SageMaker AI でそれぞれの[モデルパッケージリソース](https://docs.aws.amazon.com/marketplace/latest/userguide/ml-creating-your-amazon-sagemaker-resource.html#ml-creating-your-model-package-product)または[アルゴリズムリソース](https://docs.aws.amazon.com/marketplace/latest/userguide/ml-creating-your-amazon-sagemaker-resource.html#ml-creating-your-algorithm-product)を作成する必要があります。 AWS Marketplace 製品用のリソースを作成するときは、検証ステップを通じて認定を受ける必要があります。検証ステップでは、公開前にモデルパッケージまたはアルゴリズムリソースをテストするためのデータを提供する必要があります。以下のセクションでは、モデルパッケージリソースまたはアルゴリズムリソースのいずれかの SageMaker AI リソースを作成する方法を示します。これには、SageMaker AI に検証の実行方法を指示する検証仕様が含まれます。

**注記**  
製品のイメージをまだ作成しておらず、Amazon Elastic Container Registry (Amazon ECR) にアップロードしていない場合は、その方法の情報について、「[での機械学習製品のイメージへのコードのパッケージ化 AWS Marketplace](ml-packaging-your-code-into-images.md)」および「[Amazon Elastic Container Registry へのイメージのアップロード](ml-uploading-your-images.md)」を参照してください。

**Topics**
+ [モデルパッケージの作成](#ml-creating-your-model-package-product)
+ [アルゴリズムの作成](#ml-creating-your-algorithm-product)

## モデルパッケージの作成
<a name="ml-creating-your-model-package-product"></a>

 AWS Marketplaceのモデルパッケージを作成するための要件は次のとおりです。
+  [Amazon ECR](https://aws.amazon.com/ecr/) に保存されている推論イメージ 
+  (オプション) [Amazon S3](https://aws.amazon.com/s3/) に個別に保存されているモデルアーティファクト 
+ Amazon Simple Storage Service に保存されている、推論に使用されるテストデータ 

**注記**  
 以下は、モデルパッケージ製品の作成に関するものです。SageMaker AI のモデルパッケージの詳細については、「[モデルパッケージリソースの作成](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-create-model-package.html)」を参照してください。

### モデルパッケージリソースの作成
<a name="ml-create-model-package"></a>

以下の手順では、モデルパッケージリソースを作成する方法を順を追って説明します。

**ステップ 1: モデルパッケージリソースを作成する**

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

1. ページの右上を見て、発行元の AWS リージョンにいることを確認します。公開については、「[公開 AWS リージョン でサポート](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing)」セクションを参照してください。前のステップで Amazon ECR にアップロードした推論イメージが同じリージョンに存在する必要があります。

1. 左側のナビゲーションメニューから **[モデルパッケージ]** を選択します。

1. [**Create model package (モデルパッケージの作成)**] を選択します。

パッケージを作成したら、推論パッケージの仕様を設定する必要があります。

**ステップ 2: 推論の仕様を設定する**

1.  モデルパッケージの **[名前]** (例えば、*my-model-package*) を指定します。

1.  **[推論イメージの場所]** には、Amazon ECR にアップロードされた推論イメージの URI を入力します。URI は [Amazon ECR コンソール](https://us-east-2.console.aws.amazon.com/ecr/repositories)でイメージを検索すると取得できます。

1.  トレーニングで得たモデルアーティファクトが推論イメージのロジックにバンドルされている場合、**モデルデータアーティファクトの場所**は空欄のままにしておきます。それ以外の場合は、モデルアーティファクトの圧縮ファイル (.tar.gz) の、Amazon S3 の完全な場所を指定します。

1.  ドロップダウンボックスを使用して、リアルタイム推論 (*エンドポイント*とも呼ばれる) ジョブとバッチ変換ジョブの両方でサポートされる推論イメージのインスタンスタイプを選択します。

1.  [**次へ**] を選択します。

 モデルパッケージを作成して公開するには、期待どおりに機能するかを確認するための検証が必要です。そのためには、提供した推論用テストデータを使用してバッチ変換ジョブを実行する必要があります。検証仕様は、SageMaker AI に検証の実行方法を指示します。

**ステップ 3: 検証仕様を設定する**

1.  **[ AWS Marketplaceでこのモデルパッケージを公開する]** を **[はい]** に設定します。これを **[いいえ]** に設定すると、このモデルパッケージを後で公開することはできません。**Yes** を選択すると[、 のモデルパッケージが認定](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-CertifyForMarketplace) AWS Marketplace され、検証ステップが必要です。

1.  このプロセスを初めて完了する場合は、**IAM ロール**の **[新規ロールの作成]** を選択します。Amazon SageMaker AI はモデルパッケージをデプロイするときにこのロールを使用します。これには、Amazon ECR からのイメージの取得や Amazon S3 からのアーティファクトの取得などのアクションが含まれます。設定を確認し、**[ロールを作成]** を選択します。ここでロールを作成すると、作成したロールに、[AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) IAM ポリシーに記述されているアクセス許可が付与されます。

1.  検証プロファイルの **JSON** を編集します。許可される値の詳細については、「[TransformJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformJobDefinition.html)」を参照してください。

   1.  `TransformInput.DataSource.S3Uri`: 推論用のテストデータを保存する場所を設定します。

   1.  `TransformInput.ContentType`: テストデータのコンテンツタイプ (`application/json`、`text/plain`、`image/png `、またはその他の値など) を指定します。SageMaker AI は実際の入力データを検証しません。この値は、`Content-type` ヘッダー値としてコンテナの HTTP エンドポイントに渡されます。

   1.  `TransformInput.CompressionType`: Amazon S3 の推論用テストデータが圧縮されていない場合は `None` に設定します。

   1.  `TransformInput.SplitType`: `None` に設定して、Amazon S3 内の各オブジェクトを推論用にまとめて渡します。

   1.  `TransformOutput.S3OutputPath`: 推論出力が保存される場所に設定します。

   1.  `TransformOutput.AssembleWith`: `None` に設定して、各推論を Amazon S3 の個別のオブジェクトとして出力します。

1.  [**Create model package (モデルパッケージの作成)**] を選択します。

 SageMaker AI は Amazon ECR から推論イメージを取得して、すべてのアーティファクトを推論コンテナにコピーし、テストデータを推論に使用してバッチ変換ジョブを実行します。検証が成功すると、ステータスは **[完了済み]** に変わります。

**注記**  
 検証ステップでは、テストデータによるモデルの精度は評価されません。検証ステップでは、コンテナが実行されて期待どおりに応答するかどうかが確認されます。

 モデル製品リソースの作成が完了しました。「[での製品の一覧表示 AWS Marketplace](ml-publishing-your-product-in-aws-marketplace.md)」に進みます。

## アルゴリズムの作成
<a name="ml-creating-your-algorithm-product"></a>

 AWS Marketplaceのアルゴリズムを作成するための要件は次のとおりです。
+ Amazon ECR に保存された推論イメージ 
+ Amazon ECR に保存されたトレーニングイメージ 
+  Amazon S3 に保存されたトレーニング用テストデータ 
+ Amazon S3 に保存された推論用テストデータ 

**注記**  
 次のウォークスルーでは、アルゴリズム製品を作成します。詳細については、「[アルゴリズムリソースを作成する](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-create-algo.html)」を参照してください。

### アルゴリズムリソースの作成
<a name="ml-create-algorithm"></a>

以下の手順では、アルゴリズムパッケージのリソースを作成する方法を順を追って説明します。

**ステップ 1: アルゴリズムリソースを作成する**

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

1.  ページの右上を見て、発行元の AWS リージョンにいることを確認します (「」を参照[公開 AWS リージョン でサポート](ml-service-restrictions-and-limits.md#ml-supported-aws-regions-for-publishing))。前のステップで Amazon ECR にアップロードしたトレーニングイメージと推論イメージが同じリージョンに存在する必要があります。

1.  左のナビゲーションペインで **[アルゴリズム]** をクリックします。

1.  [**Create algorithm (アルゴリズムの作成)**] を選択します。

アルゴリズムパッケージを作成したら、モデルのトレーニングとチューニングの仕様を設定する必要があります。

**ステップ 2: トレーニングとチューニングの仕様を設定する**

1.  アルゴリズムの**[名前]** (例えば *my-algorithm*) を入力します。

1.  **[トレーニングイメージ]** には、Amazon ECR にアップロードされたトレーニングイメージの、完全な URI の場所を貼り付けます。URI は [Amazon ECR コンソール](https://us-east-2.console.aws.amazon.com/ecr/repositories)でイメージを検索すると取得できます。

1.  ドロップダウンボックスを使用して、トレーニングイメージがサポートする**トレーニング用のインスタンスタイプ**を選択します。

1.  **[チャネルの仕様]**セクションで、アルゴリズムがサポートする各入力データセットに 1 つのチャネルを追加します (入力ソースの最大数は 20 チャネル)。詳細については、「[入力データ設定](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-inputdataconfig)」を参照してください。

1.  [**次へ**] を選択します。

1. アルゴリズムがハイパーパラメータとハイパーパラメータ調整をサポートしている場合は、調整パラメータを指定する必要があります。

1.  [**次へ**] を選択します。

**注記**  
 アルゴリズムがハイパーパラメータ調整をサポートして適切なパラメータを調整できるようになっていることが、強く推奨されます。これにより、データサイエンティストはモデルを調整して最良の結果を得ることができます。

調整パラメータがある場合、そのパラメータを設定したら、推論イメージの仕様を設定する必要があります。

**ステップ 3: 推論イメージ仕様を設定する**

1.  **[推論イメージの場所]** には、Amazon ECR にアップロードされた推論イメージの URI を貼り付けます。URI は [Amazon ECR コンソール](https://us-east-2.console.aws.amazon.com/ecr/repositories)でイメージを検索すると取得できます。

1.  ドロップダウンボックスを使用して、リアルタイム推論 (*エンドポイント*とも呼ばれる) ジョブとバッチ変換ジョブの両方でサポートされる推論イメージのインスタンスタイプを選択します。

1.  [**次へ**] を選択します。

 アルゴリズムを作成して公開するには、期待どおりに機能するかを確認するための検証が必要です。そのためには、トレーニング用のテストデータを使用するトレーニングジョブと、提供した推論用テストデータを使用してバッチ変換ジョブの両方を実行する必要があります。検証仕様は、SageMaker AI に検証の実行方法を指示します。

**ステップ 4: 検証仕様を設定する**

1.  **[ AWS Marketplaceでこのアルゴリズムを公開する]**を **[はい]** に設定します。これを **[いいえ]** に設定すると、このアルゴリズムを後で公開することができません。**Yes** を選択すると[、 のアルゴリズムが認定](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateAlgorithm.html#sagemaker-CreateAlgorithm-request-CertifyForMarketplace) AWS Marketplace され、検証仕様が必要です。

1.  の機械学習パッケージを初めて作成する場合は AWS Marketplace、**IAM** **ロールの新しいロールを作成する**を選択します。Amazon SageMaker AI は、アルゴリズムをトレーニングして後続のモデルパッケージをデプロイするときにこのロールを使用します。これには、Amazon ECR からのイメージの取得、Amazon S3 へのアーティファクトの保存、Amazon S3 からのトレーニングデータのコピーなどのアクションが含まれます。設定を確認し、**[ロールを作成]** を選択します。ここでロールを作成すると、作成したロールに、[AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) IAM ポリシーに記述されているアクセス許可が付与されます。

1.  **[トレーニングジョブ定義]** の検証プロファイルの **[JSON]** ファイルを編集します。許可される値の詳細については、「[ TrainingJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobDefinition.html)」を参照してください。

   1.  `InputDataConfig`: この JSON 配列に、トレーニング仕様のステップで指定した各チャネルの [[チャネルオブジェクト]](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html) を追加します。チャネルごとに、トレーニング用のテストデータを保存する場所を指定します。

   1.  `OutputDataConfig`: トレーニングが完了すると、トレーニングコンテナディレクトリパス `/opt/ml/model/` 内のモデルアーティファクトが圧縮され、Amazon S3 にコピーされます。圧縮ファイル (.tar.gz) が保存されている Amazon S3 の場所を指定します。

1.  **[変換ジョブの定義]** の検証プロファイルの JSON ファイルを編集します。許可される値の詳細については、「[TransformJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformJobDefinition.html)」を参照してください。

   1.  `TransformInput.DataSource.S3Uri`: 推論用のテストデータを保存する場所を設定します。

   1.  `TransformInput.ContentType`: テストデータのコンテンツタイプを指定します。例えば、`application/json`、`text/plain`、`image/png`、またはその他の値です。Amazon SageMaker AI は実際の入力データを検証しません。この値は、`Content-type` ヘッダー値としてコンテナの HTTP エンドポイントに渡されます。

   1.  `TransformInput.CompressionType`: Amazon S3 の推論用テストデータが圧縮されていない場合は `None` に設定します。

   1.  `TransformInput.SplitType`: S3 内のオブジェクトをどのように分割するかを選択します。例えば、`None` では、Amazon S3 内の各オブジェクトが推論用にまとめて渡されます。詳細については、「Amazon SageMaker AI API リファレンス」の「[SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#sagemaker-Type-TransformInput-SplitType)」を参照してください。

   1.  `TransformOutput.S3OutputPath`: 推論出力が保存される場所に設定します。

   1.  `TransformOutput.AssembleWith`: `None` に設定して、各推論を Amazon S3 の個別のオブジェクトとして出力します。

1. **[アルゴリズムパッケージの作成]** を選択します。

 SageMaker AI は Amazon ECR からトレーニングイメージを取得して、データを使用してテストトレーニングジョブを実行し、モデルアーティファクトを Amazon S3 に保存します。次に、Amazon ECR から推論イメージを取得して、アーティファクトを Amazon S3 から推論コンテナにコピーし、推論用のテストデータを使用してバッチ変換ジョブを実行します。検証が成功すると、ステータスは **[完了済み]** に変わります。

**注記**  
 検証ステップでは、テストデータによるトレーニングまたはモデルの精度は評価されません。検証ステップでは、コンテナが実行されて期待どおりに応答するかどうかが確認されます。  
検証ステップではバッチ処理のみが検証されます。リアルタイム処理が製品で機能することを検証するのはユーザーしだいです。

 アルゴリズム製品リソースの作成が完了しました。「[での製品の一覧表示 AWS Marketplace](ml-publishing-your-product-in-aws-marketplace.md)」に進みます。