モデルコンテナの事前チェック - Amazon SageMaker

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

モデルコンテナの事前チェック

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

注記

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

モデルコンテナ入力

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 は、次の表に示すようにapplication/jsonlines、 MIME タイプ: の JSON Lines 高密度形式の入力もサポートします。

モデルコンテナ入力 コメント

'{"data":{"features":[1,2,3,4]}}'

単一レコード。特徴量のリストはJMESPath式 で抽出できますdata.features

'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}'

2 つのレコード。

'{"features":["これはよい製品です",5]}'

単一レコード。特徴量のリストはJMESPath式 で抽出できますfeatures

'{"features":["これはよい製品です",5]}\n{"features":["悪いショッピング体験",1]}'

2 つのレコード。

モデルコンテナ出力

モデルコンテナの出力も、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\ n 0,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]"'

次のデータ例は、JSONLines 形式のモデルコンテナ出力用です。

Probability only

この例では、モデルコンテナは、JMESPath式で抽出できる確率を score JSON Lines 形式で出力します。

モデルコンテナ入力 モデルコンテナ出力

シングルレコード

'{"score":0.6}'

2 つのレコード

'{"score":0.6}\n{"score":0.3}'

Predicted label and probabilities

この例では、多クラスモデルコンテナは、ラベルヘッダーのリストと確率のリストを JSON Lines 形式で出力します。確率は JMESPathprobability で抽出でき、ラベルヘッダーは JMESPathpredicted 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 形式で出力します。確率は JMESPathprobability で抽出でき、ラベルヘッダーは JMESPathpredicted 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]}'

モデルコンテナの検証

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

次のコマンドは、 AWS CLIを使用してレス本スをリクエストする方法を示します。は SageMaker Studio Classic インスタンスと SageMaker Notebook AWS CLI インスタンスにプリインストールされています。をインストールする必要がある場合は AWS 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) パラメータの形式。 AWS CLI v1 の場合、このパラメータは空白のままにする必要があります。v2 では、このパラメータは --cli-binary-format raw-in-base64-out に設定する必要があります。

注記

AWS CLI v2 はバイナリパラメータを base64 でエンコードされた文字列のデフォルト として渡します。

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

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 行形式です。

    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

検証が完了したら、テストエンドポイントを削除します。