DeepAR 推理格式 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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 上运行模型,则会减少工作线程的数量。推理中使用的工作线程数量,可以使用环境变量 MODEL_SERVER_WORKERS 覆盖。例如,通过在调用 SageMaker CreateModel API 时设置 MODEL_SERVER_WORKERS=1

批量转换与 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_INFERENCE_CONFIG,针对 DeepAR 作业的 SageMaker CreateTransformJob 请求:

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