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 算法的每个实例使用多个工作线程,您可以通过并行发送多个请求来实现更高的吞吐量。

默认情况下,如果每个 CPU 有足够的内存,DeepAR 为每个工作线程使用一个 CPU 进行推理。如果模型很大,并且没有足够的内存来在每个 CPU 上运行模型,则会减少工作线程的数量。在调用 API 时,可以使用环境变量(例如,通过设置MODEL_SERVER_WORKERS=1)覆盖MODEL_SERVER_WORKERS用于推理的工作程序数量。 SageMaker CreateModel

批量转换与 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,因为默认值当前会导致运行时故障。

与托管终端节点推理请求格式类似,如果满足以下两个条件,则每个实例的 catdynamic_feat 字段都是必填的:

  • 模型在同时包含 catdynamic_feat 字段的数据集上训练。

  • 训练作业中使用的对应 cardinalitynum_dynamic_feat 值未设置为 "".

与托管终端节点推理不同,使用名为 DEEPAR_INFERENCE_CONFIG 的环境变量为整个批量推理作业设置一次配置字段。在通过调用 CreateTransformJob API 创建模型时,可以传递 DEEPAR_INFERENCE_CONFIG 的值。如果容器环境中缺少 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 对象连接在同一行上。

例如,以下是对带有自定义的 Deepar 任务的 SageMaker CreateTransformJob请求:DEEPAR_INFERENCE_CONFIG

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