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 毫秒以上的時間,根據模型的大小,在單一請求中傳遞太多時間序列可能會造成逾時。建議在每個請求中傳遞較少數量的時間序列,並傳送更多請求。因為 DeepAR 演算法針對每個執行個體使用多個工作者,您可以透過平行傳送多個請求來取得更高的輸送量。

根據預設,DeepAR 會針對每個 CPU 使用一個工作者進行推論 (若每個 CPU 有足夠的記憶體)。若模型較大且沒有足夠的記憶體來在每個 CPU 上執行模型,便會減少工作者的數量。呼叫 SageMaker CreateModelAPI 時,可以使用環境變數覆寫用MODEL_SERVER_WORKERS於推論的 Worker 數目。MODEL_SERVER_WORKERS=1

使用 DeepAR 演算法進行批次轉換

DeepAR 預測支援使用 JSON Lines 格式,利用批次轉換從資料取得推論。在此格式中,每個記錄都會在單行上以 JSON 物件表示,每一行則會由換行字元分隔。其格式與用於模型訓練的 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,因為預設值目前會導致導致執行期錯誤。

與託管端點推論請求格式相似,若符合下列條件,則每個執行個體的 catdynamic_feat 都是必要項目:

  • 模型是在同時包含 catdynamic_feat 欄位的資料集上訓練。

  • 訓練任務中所使用的對應 cardinalitynum_dynamic_feat 值並未設為 "".

與託管端點推論不同,組態欄位只會使用名為 DEEPAR_INFERENCE_CONFIG 的環境變數,為整個批次推論任務設定一次。DEEPAR_INFERENCE_CONFIG 的值可以在呼叫 CreateTransformJob API 建立模型時傳遞。若容器環境中遺失 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 格式,每一行代表每一個預測,其順序則與對應輸入檔案中的執行個體順序相同。預測會編碼成物件,並且和線上推論模式中回應所傳回的物件完全相同。例如:

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

請注意,在 SageMaker CreateTransformJob請求的TransformInput配置中,客戶端必須明確地將AssembleWith值設置為Line,因為默認值None將所有 JSON 對象連接在同一行上。

例如,下面是一個具有自定義DEEPAR_INFERENCE_CONFIG功能的 DeepAR 作業的 SageMaker CreateTransformJob請求:

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