

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

# DeepAR 推理格式
<a name="deepar-in-formats"></a>

以下页面描述了使用 Amazon A SageMaker I Deepar 模型进行推理的请求和响应格式。

## DeepAR JSON 请求格式
<a name="deepar-json-request"></a>

使用模型的终端节点查询经过训练的模型。终端节点采用以下 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 响应格式
<a name="deepar-json-response"></a>

以下是响应的格式，其中 `[...]` 是数字数组：

```
{
    "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 上运行模型，则会减少工作线程的数量。在调用 AI AP SageMaker I [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)时，可以使用环境变量（例如，通过设置`MODEL_SERVER_WORKERS=1`）覆盖`MODEL_SERVER_WORKERS`用于推理的工作程序数量。

## 批量转换与 DeepAR 算法
<a name="deepar-batch"></a>

DeepAR 预测支持对 JSON 行格式的数据，使用批量转换来获取推理。在此格式中，每条记录在一个行上表示为 JSON 对象，并且行由换行符分隔。该格式与用于模型训练的 JSON 行格式相同。有关信息，请参阅[DeepAR 算法的输入/输出接口](deepar.md#deepar-inputoutput)。例如：

```
{"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]]}
```

**注意**  
在使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 创建转换作业时，将 `BatchStrategy` 值设置为 `SingleRecord` 并将[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html) 配置中的 `SplitType` 值设置为 `Line`，因为默认值当前会导致运行时故障。

与托管终端节点推理请求格式类似，如果满足以下两个条件，则每个实例的 `cat` 和 `dynamic_feat` 字段都是必填的：
+ 模型在同时包含 `cat` 和 `dynamic_feat` 字段的数据集上训练。
+ 训练作业中使用的对应 `cardinality` 和 `num_dynamic_feat` 值未设置为 `"".`

与托管终端节点推理不同，使用名为 `DEEPAR_INFERENCE_CONFIG` 的环境变量为整个批量推理作业设置一次配置字段。在通过调用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 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 AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)请求的[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html)配置中，客户端必须将该`AssembleWith`值显式设置为`Line`，因为默认值`None`会将所有 JSON 对象连接在同一行上。

例如，以下是针对带有自定义的 Deepar 任务的 A SageMaker I [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)请求：`DEEPAR_INFERENCE_CONFIG`

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