DeepAR 推論の形式 - Amazon SageMaker

DeepAR 推論の形式

DeepAR JSON リクエストの形式

モデルのエンドポイントを使用して、トレーニング済みモデルのクエリを実行します。エンドポイントは次の JSON リクエストの形式になっています。

このリクエストでは、instances フィールドはモデルによって予測されるべき時系列に対応しています。

モデルがカテゴリを使用してトレーニングされた場合は、インスタンスごとに cat を指定する必要があります。モデルが cat フィールドなしでトレーニングされた場合は、省略する必要があります。

モデルがカスタム特徴時系列 (dynamic_feat) を使用してトレーニングされた場合は、各インスタンスに同数の dynamic_feat 値を指定する必要があります。各インスタンスは、length(target) + prediction_length で算出される長さである必要があります。ここで、最後の prediction_length 値は、予測される未来の時間ポイントに対応します。モデルがカスタム特徴時系列なしでトレーニングされた場合は、フィールドをリクエストに含めないでください。

{ "instances": [ { "start": "2009-11-01 00:00:00", "target": [4.0, 10.0, "NaN", 100.0, 113.0], "cat": [0, 1], "dynamic_feat": [[1.0, 1.1, 2.1, 0.5, 3.1, 4.1, 1.2, 5.0, ...]] }, { "start": "2012-01-30", "target": [1.0], "cat": [2, 1], "dynamic_feat": [[2.0, 3.1, 4.5, 1.5, 1.8, 3.2, 0.1, 3.0, ...]] }, { "start": "1999-01-30", "target": [2.0, 1.0], "cat": [1, 3], "dynamic_feat": [[1.0, 0.1, -2.5, 0.3, 2.0, -1.2, -0.1, -3.0, ...]] } ], "configuration": { "num_samples": 50, "output_types": ["mean", "quantiles", "samples"], "quantiles": ["0.5", "0.9"] } }

configuration フィールドはオプションです。configuration.num_samples は、平均と分位数を推定するためにモデルが生成するサンプルパスの数を設定します。configuration.output_types は、リクエストで返される情報を記述します。有効な値は、"mean""quantiles""samples" です。"quantiles" を指定すると、configuration.quantiles のそれぞれの変位値は時系列として返されます。"samples" を指定した場合、モデルは、他の出力を計算するために使用した未加工サンプルも返します。

DeepAR JSON のレスポンス形式

以下はレスポンスの形式です。ここで、[...] は数字の配列です。

{ "predictions": [ { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] } ] }

DeepAR のレスポンスのタイムアウトは 60 秒です。単一のリクエストで複数の時系列を渡すと、予測は順次生成されます。各時系列の予測には通常、モデルのサイズに応じて約 300 ~ 1000 ミリ秒以上かかるため、1 回の要求であまりにも多くの時系列を渡すと、タイムアウトが生じる可能性があります。リクエストごとに送信する時系列を少なくして、送信するリクエストの数を増やすことをお勧めします。DeepAR アルゴリズムはインスタンスごとに複数のワーカーを使用するため、複数のリクエストを並行して送信することで、はるかに高いスループットを達成できます。

デフォルトでは、CPU ごとに十分なメモリがある場合、DeepAR は推論のために CPU ごとに 1 つのワーカーを使用します。モデルが大きく、各 CPU でモデルを実行するのに十分なメモリがない場合は、ワーカーの数が削減されます。推論に使用されるワーカーの数は、環境変数 MODEL_SERVER_WORKERS を使用して上書きできます。たとえば、Amazon SageMaker の CreateModel API を呼び出すときに MODEL_SERVER_WORKERS=1 を設定することで上書きできます。

DeepAR アルゴリズムを使用したバッチ変換

DeepAR の予測は、JSON Lines 形式を使用したデータのバッチ変換による推論の取得をサポートします。この形式では、各レコードは JSON オブジェクトとして 1 行で表され、各行は改行文字で区切られます。形式は、モデルのトレーニングに使用される JSON Lines 形式と同じです。詳細については、DeepAR アルゴリズムの入出力インターフェイス を参照してください。例:

{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ..]]} {"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]} {"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
注記

変換ジョブを CreateTransformJob で作成する場合は、BatchStrategy の値を SingleRecord に設定し、TransformInput 設定の SplitType の値を Line に設定してください。そうしないと、現在のデフォルト値ではランタイムエラーが発生します。

ホストエンドポイント推論リクエスト形式と同様に、以下の両方に該当する場合は、各インスタンスに cat フィールドと dynamic_feat フィールドが必要です。

  • モデルは、cat フィールドと dynamic_feat フィールドの両方を含むデータセットに関してトレーニングされている。

  • トレーニングジョブで使用される対応する cardinality 値と num_dynamic_feat 値が、"". に設定されていない。

ホストエンドポイントの推論とは異なり、設定フィールドは、DEEPAR_INFERENCE_CONFIG という名前の環境変数を使用して、バッチ推論ジョブ全体に対して 1 回設定されます。CreateTransformJob API を呼び出してモデルを作成するときに、DEEPAR_INFERENCE_CONFIG の値を渡すことができます。DEEPAR_INFERENCE_CONFIG がコンテナ環境で欠落している場合、推論コンテナは次のデフォルトを使用します。

{ "num_samples": 100, "output_types": ["mean", "quantiles"], "quantiles": ["0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9"] }

出力も JSON Lines 形式であり、各予測が 1 行で表され、対応する入力ファイルのインスタンスの順序と同じ順序で配置されます。予測は、オンライン推論モードのレスポンスによって返されるオブジェクトと同じオブジェクトとしてエンコードされます。例:

{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }

Amazon SageMaker の CreateTransformJob リクエストの TransformInput の設定では、デフォルト値の None によって同じ行の JSON オブジェクトがすべて連結されるため、クライアントは AssembleWith の値を明示的に Line に設定する必要があります。

たとえば、以下はカスタムの DEEPAR_INFERENCE_CONFIG を持つ DeepAR ジョブに対する Amazon SageMaker の CreateTransformJob リクエストです。

{ "BatchStrategy": "SingleRecord", "Environment": { "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }", ... }, "TransformInput": { "SplitType": "Line", ... }, "TransformOutput": { "AssembleWith": "Line", ... }, ... }