推論の共通データ形式 - Amazon SageMaker

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

推論の共通データ形式

Amazon SageMaker アルゴリズムは、オンラインのミニバッチ予測取得に使用される、HTTP ペイロード用の異なる MIME タイプをいくつか受け入れて生成します。あなたは様々なAWSサービスを使用して、推論を実行する前にレコードの変換または事前処理を行います。少なくとも、以下のデータを変換する必要があります。

  • 推論リクエストのシリアル化 (ユーザーによる処理)

  • 推論リクエストの逆シリアル化 (アルゴリズムによる処理)

  • 推論レスポンスのシリアル化 (アルゴリズムによる処理)

  • 推論レスポンスの逆シリアル化 (ユーザーによる処理)

推論リクエストのシリアル化のためにデータを変換する

Amazon SageMaker アルゴリズムの推論リクエストのコンテンツタイプオプションには、以下が含まれます。text/csv,application/json, およびapplication/x-recordio-protobuf。これらのすべてのタイプをサポートしていないアルゴリズムは、他のタイプをサポートできます。たとえば、XGBoost はこのリストの text/csv のみをサポートしていますが、text/libsvm もサポートしています。

を使用する場合text/csvの場合、Body 引数の値をinvoke_endpointは、各機能の値をコンマで区切った文字列である必要があります。たとえば、4 つの機能があるモデルのレコードは次のようになります。1.5,16.0,14,23.0。トレーニングデータに対して実行された変換はすべて、推論を取得する前にデータに実行される必要があります。機能の順序は重要であるため、変更せずそのままにしておく必要があります。

application/json では、大幅に柔軟性が向上しており、開発者がアプリケーションで使用するための複数の有効な形式を提供しています。高いレベルで、JavaScript のペイロードは次のようになります。

let request = { // Instances might contain multiple rows that predictions are sought for. "instances": [ { // Request and algorithm specific inference parameters. "configuration": {}, // Data in the specific format required by the algorithm. "data": { "<field name>": dataElement } } ] }

dataElement を指定するために、次のオプションがあります。

同等のプロトコルバッファ

// Has the same format as the protocol buffers implementation described for training. let dataElement = { "keys": [], "values": [], "shape": [] }

単純な数値ベクトル

// An array containing numeric values is treated as an instance containing a // single dense vector. let dataElement = [1.5, 16.0, 14.0, 23.0] // It will be converted to the following representation by the SDK. let converted = { "features": { "values": dataElement } }

複数のレコードの場合

let request = { "instances": [ // First instance. { "features": [ 1.5, 16.0, 14.0, 23.0 ] }, // Second instance. { "features": [ -2.0, 100.2, 15.2, 9.2 ] } ] }

推論レスポンスの逆シリアル化のためにデータを変換する

Amazon SageMaker アルゴリズムは、いくつかのレイアウトで JSON を返します。高いレベルで、構造は次のようになります。

let response = { "predictions": [{ // Fields in the response object are defined on a per algorithm-basis. }] }

予測に含まれるフィールドはアルゴリズムで異なります。以下は、k-means アルゴリズムの出力例です。

単一レコード推論

let response = { "predictions": [{ "closest_cluster": 5, "distance_to_cluster": 36.5 }] }

複数レコード推論

let response = { "predictions": [ // First instance prediction. { "closest_cluster": 5, "distance_to_cluster": 36.5 }, // Second instance prediction. { "closest_cluster": 2, "distance_to_cluster": 90.3 } ] }

protobuf 入力を使用した複数レコード推論

{ "features": [], "label": { "closest_cluster": { "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0 }, "distance_to_cluster": { "values": [ 36.5 ] } }, "uid": "abc123", "metadata": "{ "created_at": '2017-06-03' }" }

SageMaker アルゴリズムは JSONLINES 形式もサポートします。この形式では、レコードごとのレスポンスコンテンツが JSON 形式と同じです。複数レコード構造は、レコードごとのレスポンスオブジェクトが改行文字で区切られて連結されたものです。2 つの入力データポイントに対する組み込み kmeans アルゴリズムのレスポンスコンテンツは、次のとおりです。

{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0} {"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}

バッチ変換の実行中に、jsonlinesレスポンスタイプを設定することで、AcceptフィールドのCreateTransformJobRequestapplication/jsonlines

すべてのアルゴリズムに共通のリクエスト形式

ほとんどのアルゴリズムは、次の推論リクエスト形式の中のいくつかを使用します。

JSON リクエストの形式

コンテンツタイプ:アプリケーション/ JSON

高密度形式

let request = { "instances": [ { "features": [1.5, 16.0, 14.0, 23.0] } ] } let request = { "instances": [ { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } } ] }

疎形式

{ "instances": [ {"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }, {"data": {"features": { "keys": [0, 182, 232, 243, 431], "shape": [2000], "values": [13, 1, 1, 4, 1] } } }, ] }

JSONLINES リクエストの形式

コンテンツタイプ:アプリケーション/JSON lines

高密度形式

高密度形式の単一レコードは、次のいずれかで表すことができます。

{ "features": [1.5, 16.0, 14.0, 23.0] }

または:

{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }

疎形式

疎形式の単一レコードは、次のように表されます。

{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }

複数のレコードは、上記の単一レコード表現が改行文字で区切られて連結されたものとして表されます。

{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } } { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } { "features": [1.5, 16.0, 14.0, 23.0] }

CSV リクエストの形式

コンテンツタイプ:テキスト/CSV; label_size=0

注記

CSV のサポートは因数分解機では利用できません。

RECORDIO リクエストの形式

コンテンツタイプ:アプリケーション/ x-recordio-protobuf

組み込みアルゴリズムでのBatch 変換の使用

バッチ変換の実行中は、JSON ではなく JSONLINES レスポンスタイプを使用することをお勧めします (ただし、アルゴリズムでサポートされている場合)。これを実現するには、CreateTransformJobRequestAccept フィールドを application/jsonlines に設定します。

変換ジョブを作成するときには、SplitType を入力データの ContentType に応じて設定する必要があります。同様に、CreateTransformJobRequestAccept フィールドに応じて AssembleWith を設定する必要があります。次の表を使用して、これらのフィールドを適切に設定してください。

ContentType 推奨される SplitType
application/x-recordio-protobuf RecordIO
text/csv Line
application/jsonlines Line
application/json None
application/x-image None
image/* None
Accept 推奨される AssembleWith
application/x-recordio-protobuf None
application/json None
application/jsonlines Line

特定のレスポンス形式の詳細については、アルゴリズムについては、以下を参照してください。