

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

# モデルコンテナの事前チェック
<a name="clarify-online-explainability-precheck"></a>

このセクションでは、エンドポイントを設定する前に、モデルコンテナの入力と出力の互換性を事前にチェックする方法を説明します。SageMaker Clarify の説明機能は**モデルに依存しません**が、モデルコンテナの入出力に関する要件があります。

**注記**  
1 回のリクエストで 2 つ以上のレコードをサポートするバッチリクエストをサポートするようにコンテナを設定すると、効率を高めることができます。例えば、1 つのレコードは 1 行の CSV データ、または 1 行の JSON Lines データです。SageMaker Clarify は、単一レコードのリクエストにフォールバックする前に、まずミニバッチのレコードをモデルコンテナに送信しようとします。

## モデルコンテナ入力
<a name="clarify-online-explainability-input"></a>

------
#### [ CSV ]

モデルコンテナは MIME タイプの CSV (`text/csv`) での入力をサポートします。次の表は、SageMaker Clarify がサポートする入力例を示しています。


| モデルコンテナ入力 (文字列表現) | コメント | 
| --- | --- | 
| '1,2,3,4' | 4 つの数値特徴を使用する 1 つのレコード。 | 
| '1,2,3,4\\n5,6,7,8' | 改行 '\\n' で区切られた 2 つのレコード。 | 
| '"This is a good product",5' | テキスト特徴量と数値特徴量を含む 1 つのレコード。 | 
| ‘"This is a good product",5\\n"Bad shopping experience",1' | 2 つのレコード。 | 

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

SageMaker AI は、次の表に示すように、[MIME タイプの JSON Lines 高密度形式 (`application/jsonlines`)](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-jsonlines) での入力もサポートしています。


| モデルコンテナ入力 | コメント | 
| --- | --- | 
| '{"data":{"features":[1,2,3,4]}}' | 単一レコード。特徴量のリストは JMESPath 式 `data.features` で抽出できます。 | 
| '{"data":{"features":[1,2,3,4]}}\\n{"data":{"features":[5,6,7,8]}}' | 2 つのレコード。 | 
| '{"features":["This is a good product",5]}' | 単一レコード。特徴量のリストは JMESPath 式 `features` で抽出できます。 | 
| '{"features":["This is a good product",5]}\\n{"features":["Bad shopping experience",1]}' | 2 つのレコード。 | 

------

## モデルコンテナ出力
<a name="clarify-online-explainability-output"></a>

モデルコンテナの出力も CSV または JSON Lines 高密度形式である必要があります。さらに、モデルコンテナには、SageMaker Clarify が特徴量属性の計算に使用する入力レコードの確率を含める必要があります。

以下のデータ例は **CSV 形式**のモデルコンテナ出力用です。

------
#### [ Probability only ]

リグレッションと二項分類の問題では、モデルコンテナは予測ラベルの単一の確率値 (スコア) を出力します。これらの確率は、列インデックス 0 を使用して抽出できます。マルチクラス問題の場合、モデルコンテナは確率 (スコア) のリストを出力します。マルチクラス問題では、インデックスが提供されない場合、すべての値が抽出されます。


| モデルコンテナ入力 | モデルコンテナ出力 (文字列表現) | 
| --- | --- | 
| 1 つのレコード | '0.6' | 
| 2 つのレコード (結果は 1 行) | '0.6,0.3' | 
| 2 つのレコード (結果は 2 行) | '0.6\\n0.3' | 
| マルチクラスモデル の 1 つのレコード (3 つのクラス) | '0.1,0.6,0.3' | 
| マルチクラスモデルの 2 つのレコード (3 つのクラス) | '0.1,0.6,0.3\\n0.2,0.5,0.3' | 

------
#### [ Predicted label and probabilities ]

モデルコンテナは、予測ラベルの後にその確率を **CSV 形式**で出力します。確率はインデックス `1` を使用して抽出できます。


| モデルコンテナ入力 | モデルコンテナ出力 | 
| --- | --- | 
| シングルレコード | '1,0.6' | 
| 2 つのレコード | '1,0.6\\n0,0.3' | 

------
#### [ Predicted labels header and probabilities ]

Autopilot でトレーニングされたマルチクラスモデルコンテナは、予測ラベルと確率のリストの**文字列表現**を **CSV** 形式で出力するように設定できます。次の例では、確率をインデックス `1` で抽出できます。ラベルヘッダーはインデックス `1` で抽出でき、ラベルヘッダーはインデックス `0` を使用して抽出できます。


| モデルコンテナ入力 | モデルコンテナ出力 | 
| --- | --- | 
| 単一レコード | '"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"' | 
| 2 つのレコード | '"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"\\n"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.2,0.5,0.3]"' | 

------

以下は、**JSON Lines** 形式のモデルコンテナ出力のデータ例です。

------
#### [ Probability only ]

この例では、モデルコンテナは [https://jmespath.org/](https://jmespath.org/) 式 `score` で抽出できる確率を **JSON Lines** 形式で出力しています。


| モデルコンテナ入力 | モデルコンテナ出力 | 
| --- | --- | 
| シングルレコード | '{"score":0.6}' | 
| 2 つのレコード | '{"score":0.6}\\n{"score":0.3}' | 

------
#### [ Predicted label and probabilities ]

この例では、マルチクラスモデルコンテナは、ラベルヘッダーのリストと確率のリストを **JSON Lines** 形式で出力します。確率は `JMESPath` 式 `probability` で抽出でき、ラベルヘッダーは `JMESPath` 式 `predicted labels` で抽出できます。


| モデルコンテナ入力 | モデルコンテナ出力 | 
| --- | --- | 
| 単一レコード | '{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}' | 
| 2 つのレコード | '{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}\\n{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}' | 

------
#### [ Predicted labels header and probabilities ]

この例では、マルチクラスモデルコンテナは、ラベルヘッダーと確率のリストを **JSON Lines** 形式で出力します。確率は `JMESPath` 式 `probability` で抽出でき、ラベルヘッダーは `JMESPath` 式 `predicted labels` で抽出できます。


| モデルコンテナ入力 | モデルコンテナ出力 | 
| --- | --- | 
| 単一レコード | '{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}' | 
| 2 つのレコード | '{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}\\n{"predicted\_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}' | 

------

## モデルコンテナの検証
<a name="clarify-online-explainability-container-validation"></a>

モデルを SageMaker AI リアルタイム推論エンドポイントにデプロイし、エンドポイントにリクエストを送信することをお勧めします。リクエスト (モデルコンテナ入力) とレスポンス (モデルコンテナ出力) を手動で確認し、両方が**モデルコンテナ入力**セクションと**モデルコンテナ出力**セクションの要件に準拠していることを確認します。モデルコンテナがバッチリクエストをサポートしている場合は、1 つのレコードリクエストから始めて、2 つ以上のレコードを試してみることができます。

次のコマンドは、 AWS CLIを使用してレス本スをリクエストする方法を示します。 AWS CLI は SageMaker Studio Classic インスタンスと SageMaker ノートブックインスタンスにプリインストールされています。をインストールする必要がある場合は AWS CLI、この[インストールガイド](https://aws.amazon.com/cli/)に従ってください。

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name $ENDPOINT_NAME \
  --content-type $CONTENT_TYPE \
  --accept $ACCEPT_TYPE \
  --body $REQUEST_DATA \
  $CLI_BINARY_FORMAT \
  /dev/stderr 1>/dev/null
```

パラメータの定義は次のとおりです。
+ `$ENDPOINT NAME`: エンドポイントの名前。
+ `$CONTENT_TYPE`: リクエストの MIME タイプ (モデルコンテナ入力)。
+ `$ACCEPT_TYPE`: レスポンスの MIME タイプ (モデルコンテナ出力)。
+ `$REQUEST_DATA`: リクエストされたペイロード文字列。
+ `$CLI_BINARY_FORMAT`: コマンドラインインターフェイス (CLI) パラメータの形式。v1 AWS CLI の場合、このパラメータは空白のままにする必要があります。v2 では、このパラメータは `--cli-binary-format raw-in-base64-out` に設定する必要があります。

**注記**  
AWS CLI v2 は、base64 でエンコードされた文字列の[デフォルト](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-binaryparam)としてバイナリパラメータを渡します。

次の例では v1 AWS CLI を使用しています。

------
#### [ Request and response in CSV format ]
+ リクエストは 1 つのレコードで構成され、レスポンスはその確率値です。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.6`
+ リクエストは 2 つのレコードで構成され、レスポンスにはそれぞれの確率が含まれ、モデルは確率をカンマで区切ります。`--body` 内の `$'content'` 式は、コンテンツの `\n` を改行として解釈するようにコマンドに指示します。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.6,0.3`
+ リクエストは 2 つのレコードで構成され、レスポンスにはそれぞれの確率が含まれ、モデルは確率を改行で区切ります。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.6`

  `0.3`
+ リクエストは 1 つのレコードで構成され、レスポンスは確率値 (マルチクラスモデル、3 クラス) です。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.1,0.6,0.3`
+ リクエストは 2 つのレコードで構成され、レスポンスにはそれぞれの確率値 (マルチクラスモデル、3 クラス) が含まれます。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.1,0.6,0.3`

  `0.2,0.5,0.3`
+ リクエストは 2 つのレコードで構成され、レスポンスには予測ラベルと確率が含まれます。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-2 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `1,0.6`

  `0,0.3`
+ リクエストは 2 つのレコードで構成され、レスポンスにはラベルヘッダーと確率が含まれます。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-3 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `"['cat','dog','fish']","[0.1,0.6,0.3]"`

  `"['cat','dog','fish']","[0.2,0.5,0.3]"`

------
#### [ Request and response in JSON Lines format ]
+ リクエストは 1 つのレコードで構成され、レスポンスはその確率値です。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body '{"features":["This is a good product",5]}' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `{"score":0.6}`
+ リクエストには 2 つのレコードが含まれ、レスポンスには予測ラベルと確率が含まれます。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-2 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `{"predicted_label":1,"probability":0.6}`

  `{"predicted_label":0,"probability":0.3}`
+ リクエストには 2 つのレコードが含まれ、レスポンスにはラベルヘッダーと確率が含まれます。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-3 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}`

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}`

------
#### [ Request and response in different formats ]
+ リクエストは CSV 形式で、レスポンスは JSON Lines 形式です。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-in-jsonlines-out \
    --content-type text/csv \
    --accept application/jsonlines \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `{"probability":0.6}`

  `{"probability":0.3}`
+ リクエストは JSON Lines 形式で、レスポンスは CSV 形式です。

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-in-csv-out \
    --content-type application/jsonlines \
    --accept text/csv \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  出力:

  `0.6`

  `0.3`

------

検証が完了したら、テストエンドポイントを[削除](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-delete-resources.html)します。