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

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

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

使用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 CreateTransformJob API 创建模型时,可以传递 的值。如果容器环境中缺少 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 对象。

例如,下面是具有自定义 SageMaker 的任务CreateTransformJobDeepAR的请求DEEPAR_INFERENCE_CONFIG

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