Formati di inferenza DeepAR - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Formati di inferenza DeepAR

Formati della richiesta JSON DeepAR

Esegui la query a un modello addestrato utilizzando l'endpoint del modello. L'endpoint necessita del seguente formato di richiesta JSON.

Nella richiesta, il campo instances corrisponde alla serie temporale che deve essere prevista dal modello.

Se il modello è stato sottoposto a training con categorie, devi fornire un cat per ogni istanza. Se il modello è stato addestrato senza il campo cat, il modello deve essere omesso.

Se il modello è stato addestrato con una serie temporale di caratteristiche personalizzate (dynamic_feat), devi fornire lo stesso numero di valori dynamic_feat per ogni istanza. Ognuno di essi deve avere una lunghezza data da length(target) + prediction_length, dove gli ultimi valori prediction_length corrispondono ai punti temporali futuri che saranno previsti. Se il modello è stato addestrato senza serie temporali personalizzate, il campo non deve essere incluso nella richiesta.

{ "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"] } }

Il campo configuration è facoltativo. configuration.num_samples imposta il numero di percorsi di esempio generati dal modello per stimare la media e i quantili. configuration.output_types descrive le informazioni che vengono restituite nella richiesta. I valori validi sono "mean""quantiles" e "samples". Se specifichi "quantiles", ciascuno dei valori di quantili in configuration.quantiles viene restituito come serie temporale. Se specifichi "samples", il modello restituisce anche i campioni non elaborati utilizzati per calcolare le altre uscite.

Formati della risposta JSON DeepAR

Di seguito è riportato il formato di una risposta, dove [...] sono matrici di numeri:

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

DeepAR ha un timeout di risposta di 60 secondi. Quando si passano più serie temporali in una singola richiesta, le previsioni vengono generate in modo sequenziale. Poiché la previsione per ciascuna serie temporale richiede in genere da 300 ad almeno 1000 millisecondi a seconda delle dimensioni del modello, il passaggio di troppe serie temporali in una singola richiesta può causare il timeout. È meglio inviare meno serie temporali per richiesta e inviare più richieste. Dal momento che l'algoritmo DeepAR utilizza più worker per istanza, è possibile ottenere un throughput molto più elevato inviando più richieste in parallelo.

Per impostazione predefinita, DeepAR utilizza un worker per CPU per l'inferenza, se c'è sufficiente memoria per CPU. Se il modello è di grandi dimensioni e non c'è abbastanza memoria per eseguire un modello su ciascuna CPU, il numero di worker è ridotto. Il numero di worker utilizzati per l'inferenza può essere sovrascritto utilizzando la variabile di ambiente (ad MODEL_SERVER_WORKERS esempio, impostandoMODEL_SERVER_WORKERS=1) quando si chiama l' SageMaker CreateModelAPI.

Trasformazione in batch con l'algoritmo DeepAR

La previsione DeepAR supporta l'inferenza utilizzando la trasformazione in batch dai dati utilizzando il formato JSON Lines. In questo formato, ogni record è rappresentato su una singola riga come oggetto JSON e le righe sono separate da caratteri di nuova riga. Il formato è identico al formato JSON Lines utilizzato per l’addestramento del modello. Per informazioni, consulta Interfaccia di input/output per l'algoritmo DeepAR. Per esempio:

{"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]]}
Nota

Quando crei il processo di trasformazione con CreateTransformJob, imposta il valore BatchStrategy su SingleRecord e il valore SplitType nella configurazione TransformInput su Line, poiché al momento i valori di default provocano errori di runtime.

Simile al formato della richiesta di inferenza dell'endpoint ospitato, il cat e i campi dynamic_feat per ogni istanza sono obbligatori se sono vere entrambe le seguenti condizioni:

  • Il modello viene addestrato su un set di dati che contiene il cat e i campi dynamic_feat.

  • I valori corrispondenti cardinality e num_dynamic_feat utilizzati nel processo di addestramento non sono impostati su "".

Diversamente dall'inferenza dell'endpoint ospitato, il campo di configurazione viene impostato una volta per l'intero processo di inferenza batch utilizzando una variabile di ambiente denominata DEEPAR_INFERENCE_CONFIG. Il valore di DEEPAR_INFERENCE_CONFIG può essere passato quando il modello viene creato da una chiamata all'API CreateTransformJob. Se DEEPAR_INFERENCE_CONFIG non è specificato nell'ambiente del container, il container di inferenza utilizza il seguente valore predefinito:

{ "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"] }

Anche l'output è in formato JSON Lines, con una riga per previsione, nell'ordine identico all'ordine di istanza nel file di input corrispondente. Le previsioni sono codificate come oggetti identici a quelli restituiti dalle risposte in modalità di inferenza online. Per esempio:

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

Nota che nella TransformInputconfigurazione della SageMaker CreateTransformJobrichiesta i client devono impostare esplicitamente il valore suLine, poiché il AssembleWith valore predefinito None concatena tutti gli oggetti JSON sulla stessa riga.

Ad esempio, ecco una SageMaker CreateTransformJobrichiesta per un job DeepAr con una personalizzazione: DEEPAR_INFERENCE_CONFIG

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