DeepAR-Inferenzformate - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DeepAR-Inferenzformate

JSON-Anfrageformate für DeepAR

Führen Sie die Abfrage eines geschulten Modells über dessen Endpunkt aus. Der Endpunkt akzeptiert die Anfrage in folgendem JSON-Format:

In der Anforderung entspricht das Feld instances der Zeitreihe, für die das Modell eine Prognose generieren soll.

Wurde das Modell mit Kategorien geschult, müssen Sie für jede Instance eine cat angeben. Falls das Modell ohne das Feld cat geschult wurde, sollte es weggelassen werden.

Wenn das Modell mit einer benutzerdefinierten Funktionszeitreihe (dynamic_feat) geschult wurde, müssen Sie für jede Instance die gleiche Anzahl der dynamic_feat-Werte angeben. Jede sollte eine durch length(target) + prediction_length angegebene Länge besitzen, wobei die letzten prediction_length-Werte den Zeitpunkten in der Zukunft entsprechen, die vorausgesagt werden. Wenn das Modell ohne benutzerdefinierte Funktionszeitreihen geschult wurde, sollte das Feld nicht in der Anforderung enthalten sein.

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

Das configuration-Feld ist optional. configuration.num_samples legt die Anzahl der Stichprobenpfade fest, die das Modell zur Schätzung des Mittelwerts und der Quantile generiert. configuration.output_types beschreibt die Informationen, die in der Anforderung zurückgegeben werden. Gültige Werte sind "mean""quantiles" und "samples". Wenn Sie "quantiles" spezifizieren, wird jeder Quantilwert in configuration.quantiles als Zeitreihe zurückgegeben. Bei Angabe von "samples" gibt das Modell auch die Raw-Stichproben zurück, mit denen die anderen Ergebnisse berechnet wurden.

JSON-Antwortformate für DeepAR

Nachfolgend finden Sie das Format einer Antwort, wobei [...] Arrays von Zahlen angibt:

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

DeepAR verfügt über ein Antwort-Timeout von 60 Sekunden. Bei der Übergabe mehrerer Zeitreihen in einer einzigen Anforderung werden die Prognosen sequenziell generiert. Da die Prognose für jede Zeitreihe je nach Modellgröße in der Regel etwa 300 bis 1 000 Millisekunden oder länger dauert, können Timeouts auftreten, wenn zu viele Zeitreihen in einer einzigen Anforderung übergeben werden. Es ist besser, weniger Zeitreihen pro Anforderung und dafür mehr Anforderungen zu senden. Da der DeepAR-Algorithmus mehrere Workern pro Instance verwendet, können Sie einen wesentlich höheren Durchsatz erreichen, indem Sie mehrere Anforderungen parallel senden.

Standardmäßig verwendet DeepAR einen Worker pro CPU zur Inferenz, wenn pro CPU ausreichend Arbeitsspeicher zur Verfügung steht. Wenn das Modell groß ist und nicht genügend Arbeitsspeicher zum Ausführen eines Modells auf jeder CPU zur Verfügung steht, wird die Anzahl der Worker reduziert. Die Anzahl der Worker, die für die Inferenz verwendet werden, kann mit der Umgebungsvariablen überschrieben werden, MODEL_SERVER_WORKERS z. B. indem MODEL_SERVER_WORKERS=1 eingestellt wird, wenn die SageMaker CreateModel API aufgerufen wird.

Stapeltransformation mit dem DeepAR-Algorithmus

DeepAR-Prognosen unterstützen das Abrufen von Inferenzen mittels Stapelumwandlung aus Daten im JSON Lines-Format. In diesem Format wird jeder Datensatz in einer einzigen Zeile als JSON-Objekt dargestellt und Zeilen werden durch Zeilenumbruchzeichen getrennt. Das Format ist mit dem JSON Lines-Format, das für die Modelltraining verwendet wird, identisch. Weitere Informationen finden Sie unter Eingabe/Ausgabe-Schnittstelle für den DeepAR-Algorithmus. Beispiele:

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

Wenn Sie die Umwandlungsaufgabe mithilfe von CreateTransformJob erstellen, müssen Sie den BatchStrategy-Wert auf SingleRecord und den SplitType-Wert in der TransformInput-Konfiguration auf Line festlegen, da die Standardwerte derzeit Laufzeitfehler auslösen.

Ähnlich wie das Inferenzanforderungsformat des gehosteten Endpunkts sind die Felder cat und dynamic_feat für jede Instance erforderlich, wenn die beiden folgenden Bedingungen erfüllt sind:

  • Das Modell wird mit einem Dataset geschult, das die beiden Felder cat und dynamic_feat enthielt.

  • Die entsprechenden Werte cardinality und num_dynamic_feat, die im Schulungsauftrag verwendet werden, werden nicht auf "". festgelegt

Im Gegensatz zur Inferenz des gehosteten Endpunkts wird das Konfigurationsfeld für den gesamten Stapelinferenzauftrag mithilfe einer Umgebungsvariable mit der Bezeichnung DEEPAR_INFERENCE_CONFIG einmalig festgelegt. Der Wert von DEEPAR_INFERENCE_CONFIG kann durch Aufrufen der CreateTransformJob API übergeben werden, wenn das Modell erstellt wird. Wenn DEEPAR_INFERENCE_CONFIG in der Containerumgebung fehlt, verwendet der Inferenzcontainer die folgenden Standardeinstellung:

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

Die Ausgabe erfolgt auch im JSON Lines-Format, mit einer Zeile pro Voraussage, in einer Reihenfolge, die mit der Instance-Reihenfolge der entsprechenden Eingabedatei identisch ist. Voraussagen werden als Objekte codiert und sind identisch mit denen, die von Antworten im Online-Inferenzmodus zurückgegeben werden. Beispiele:

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

Beachten Sie, dass in der TransformInput Konfiguration der SageMaker-CreateTransformJobAnfrage Clients den AssembleWith Wert explizit auf Line setzen müssen, da der Standardwert None alle JSON-Objekte in derselben Zeile miteinander verkettet.

Hier ist z. B. eine SageMakerCreateTransformJob-Anfrage für einen DeepAR-Auftrag mit einer benutzerdefinierten DEEPAR_INFERENCE_CONFIG:

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