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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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例如,通过设置MODEL_SERVER_WORKERS=1)在调用 SageMaker 时CreateModelAPI。

批量转换与 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并设置SplitTypeTransformInput配置到Line,因为默认值当前会导致运行时失败。

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

  • 模型在包含catdynamic_feat字段之间没有不同。

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

与托管终端节点推理不同,使用名为 DEEPAR_INFERENCE_CONFIG 的环境变量为整个批量推理作业设置一次配置字段。的值DEEPAR_INFERENCE_CONFIG可以在模型通过调用CreateTransformJobAPI。如果容器环境中缺少 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": [...] }

请注意,在TransformInputSageMaker 的配置CreateTransformJob请求客户端必须明确将AssembleWith值为Line,默认值为None将所有 JSON 对象连接在同一行上。

例如,这是 SageMakerCreateTransformJob具有自定义针对 DeepAR 作业的请求DEEPAR_INFERENCE_CONFIG

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