Formats d'inférence DeepAR - Amazon SageMaker

Formats d'inférence DeepAR

Formats de demande JSON DeepAR

Interrogez un modèle entraîné à l'aide du point de terminaison du modèle. Le point de terminaison accepte le format de demande JSON suivant.

Dans la demande, le champ instances correspond à la série chronologique qui doit être prévue par le modèle.

Si le modèle a été entraîné avec des catégories, vous devez fournir un paramètre cat dans chaque instance. Si le modèle a été entraîné sans le champ cat, il doit être omis.

Si le modèle a été entraîné avec une série chronologique de caractéristiques personnalisées (dynamic_feat), vous devez fournir le même nombre de valeurs dynamic_feat pour chaque instance. Chacune d'entre elles doit avoir une longueur spécifiée par length(target) + prediction_length, où les dernières valeurs prediction_length correspondent aux points temporels dans le futur qui seront prédits. Si le modèle a été entraîné sans série chronologique de caractéristiques personnalisées, le champ ne doit pas être inclus dans la demande.

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

Le champ configuration est facultatif. configuration.num_samples définit le nombre d'exemples de chemins que le modèle génère pour estimer la moyenne et les quantiles. configuration.output_types décrit les informations qui seront renvoyées dans la demande. Les valeurs valides sont "mean""quantiles" et "samples". Si vous spécifiez "quantiles", chacune des valeurs de quantiles dans configuration.quantiles est renvoyée sous la forme d'une série chronologique. Si vous spécifiez "samples", le modèle renvoie également les échantillons bruts utilisés pour calculer les autres sorties.

Formats de réponse JSON DeepAR

Voici le format d'une réponse, où [...] sont les ensembles de nombres :

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

Le temps de réponse de DeepAR est de 60 secondes. Lors de la transmission de plusieurs séries chronologiques dans une seule demande, les prévisions sont générées de manière séquentielle. Puisque la prévision pour chaque série chronologique dure généralement entre 300 et 1 000 millisecondes environ (ou plus), la transmission d'un trop grand nombre de séries chronologiques dans une seule demande peut entraîner des dépassements de délai, selon la taille du modèle. Il est préférable d'envoyer moins de séries chronologiques par demande et d'envoyer davantage de demandes. Puisque l'algorithme DeepAR utilise plusieurs instances de travail par instance, vous pouvez obtenir un débit beaucoup plus élevé en envoyant plusieurs demandes en parallèle.

Par défaut, si la mémoire par UC est suffisante, DeepAR utilise une application de travail par UC pour l'inférence. Si le modèle est volumineux et que la mémoire est insuffisante pour exécuter un modèle sur chaque UC, le nombre d'applications de travail est réduit. Le nombre d'applications de travail utilisées pour l'inférence peut être remplacé en utilisant la variable d'environnement MODEL_SERVER_WORKERS. Par exemple, en définissant MODEL_SERVER_WORKERS=1 lors de l'appel de l'API CreateModel SageMaker.

Transformation par lots avec l'algorithme DeepAR

L'algorithme de prévisions DeepAR prend en charge l'obtention d'inférences en utilisant la transformation par lots depuis des données au format JSON Lines. Dans ce format, chaque enregistrement est représenté sur une seule ligne sous la forme d'un objet JSON ; les lignes sont séparées par des caractères de saut de ligne. Le format est identique au format JSON Lines utilisé pour l'entraînement du modèle. Pour plus d'informations, consultez Interface d'entrée/de sortie pour l'algorithme DeepAR. Par exemple :

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

Lors de la création de la tâche de transformation à l'aide de CreateTransformJob, définissez la valeur de BatchStrategy sur SingleRecord et la valeur de SplitType de la configuration TransformInput sur Line, étant donné que les valeurs par défaut provoquent actuellement des échecs de l'exécution.

De même que pour le format de demande d'inférence du point de terminaison hébergé, les champs cat et dynamic_feat pour chaque instance sont requis si les deux conditions suivantes sont vraies :

  • Le modèle est entraîné sur un ensemble de données contenant les champs cat et dynamic_feat.

  • Les valeurs cardinality et num_dynamic_feat correspondantes utilisées dans la tâche d'entraînement ne sont pas définies sur "".

Contrairement à l'inférence du point de terminaison hébergé, le champ de configuration est défini une fois pour la totalité de la tâche d'inférence par lots à l'aide d'une variable d'environnement nommée DEEPAR_INFERENCE_CONFIG. La valeur de DEEPAR_INFERENCE_CONFIG peut être transmise lorsque le modèle est créé en appelant l'API CreateTransformJob. Si DEEPAR_INFERENCE_CONFIG est manquant dans l'environnement du conteneur, le conteneur d'inférence utilise la valeur par défaut suivante :

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

La sortie est également définie au format JSON Lines, avec une ligne par prédiction, dans un ordre identique à celui de l'instance dans le fichier d'entrée correspondant. Les prédictions sont encodées en tant qu'objets identiques à ceux retournés par les réponses dans le mode d'inférence en ligne. Par exemple :

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

Notez que dans la configuration TransformInput de la demande SageMaker CreateTransformJob, les clients doivent explicitement définir la valeur AssembleWith sur Line, car la valeur par défaut None concatène tous les objets JSON sur la même ligne.

Par exemple, voici une demande CreateTransformJob SageMaker pour une tâche DeepAR avec un DEEPAR_INFERENCE_CONFIG personnalisé :

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