本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
DeepAR 推理格式
以下页面描述了使用 Amazon Deep SageMaker ar 模型进行推理的请求和响应格式。
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 算法的每个实例使用多个工作线程,您可以通过并行发送多个请求来实现更高的吞吐量。
默认情况下,如果每个工作程序有足够的内存,Deepar 会使用每个工作程序CPU进行推理。CPU如果模型很大,并且没有足够的内存在每个模型上运行模型CPU,则工作人员的数量就会减少。在调用时,可以使用环境变量(例如,通过设置MODEL_SERVER_WORKERS=1
)覆盖MODEL_SERVER_WORKERS
用于推理的工作程序数量。 SageMaker CreateModel
API
批量转换与 DeepAR 算法
Deepar 预测支持使用线条格式从数据中使用批量变换来获取推论。JSON在这种格式中,每条记录都以JSON对象的形式在一行中表示,各行由换行符分隔。该格式与用于模型训练的 Lin JSON es 格式相同。有关信息,请参阅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
,因为默认值当前会导致运行时故障。
与托管终端节点推理请求格式类似,如果满足以下两个条件,则每个实例的 cat
和 dynamic_feat
字段都是必填的:
-
模型在同时包含
cat
和dynamic_feat
字段的数据集上训练。 -
训练作业中使用的对应
cardinality
和num_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"] }
输出也采用 Lin JSON es 格式,每个预测只有一行,顺序与相应输入文件中的实例顺序相同。对预测进行编码所用的格式,需要与在线推理模式中响应返回的对象格式相同。例如:
{ "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", ... }, ... }