本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 CreateModel
工作者數量MODEL_SERVER_WORKERS
。例如,透過設定 MODEL_SERVER_WORKERS=1
)API。
使用 DeepAR 演算法進行批次轉換
DeepAR 預測支援透過使用JSON行格式從資料進行批次轉換來取得推論。在此格式中,每個記錄在單行上以JSON物件表示,且行以新行字元分隔。格式與用於模型訓練的JSON行格式相同。如需相關資訊,請參閱 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
的環境變數,為整個批次推論任務設定一次。值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行格式,每個預測都有一行,其順序與對應輸入檔案中的執行個體順序相同。預測會編碼成物件,並且和線上推論模式中回應所傳回的物件完全相同。例如:
{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }
請注意,在 SageMaker CreateTransformJob
請求用戶端的TransformInput
組態中,必須明確地將AssembleWith
值設定為 Line
,因為預設值None
會串連同一行上的所有JSON物件。
例如,以下是 SageMaker CreateTransformJob
使用自訂 的 DeepAR 任務請求DEEPAR_INFERENCE_CONFIG
:
{ "BatchStrategy": "SingleRecord", "Environment": { "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }", ... }, "TransformInput": { "SplitType": "Line", ... }, "TransformOutput": { "AssembleWith": "Line", ... }, ... }