Formatos de inferência do DeepAR
A página a seguir descreve os formatos de solicitação e resposta para inferência com o modelo Amazon SageMaker DeepAR.
Formatos de solicitação JSON do DeepAR
Para fazer a consulta de um modelo treinado, use o endpoint do modelo. O endpoint usa o seguinte formato de solicitação JSON:
Na solicitação, o campo instances
corresponde à série temporal que deve ser prevista pelo modelo.
Se o modelo tiver sido treinado com categorias, você deverá fornecer um cat
para cada instância. Se o modelo tiver sido treinado sem o campo cat
, este deverá ser omitido.
Se o modelo tiver sido treinado com uma série temporal de atributos personalizados (dynamic_feat
), você terá que fornecer o mesmo número de valores dynamic_feat
para cada instância. Cada um deles deve ter um comprimento dado por length(target) + prediction_length
, em que os últimos valores prediction_length
correspondem aos pontos de tempo no futuro que serão previstos. Se o modelo tiver sido treinado sem séries temporais de atributos personalizados, o campo não deverá ser incluído na solicitação.
{ "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"] } }
O campo configuration
é opcional. configuration.num_samples
define o número de caminhos de amostra gerados pelo modelo para estimar a média e os quantis. configuration.output_types
descreve as informações que serão retornadas na solicitação. Os valores válidos são "mean"
, "quantiles"
e "samples"
. Se você especificar "quantiles"
, cada um dos valores de quantil em configuration.quantiles
será retornado como uma série temporal. Se você especificar "samples"
, o modelo também retornará as amostras brutas usadas para calcular os outros resultados.
Formatos de resposta JSON do DeepAR
A seguir, exibimos o formato de uma resposta, em que [...]
são matrizes de números:
{ "predictions": [ { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] } ] }
O DeepAR tem um tempo limite de resposta de 60 segundos. Ao transmitir várias séries temporais em uma única solicitação, as previsões são geradas sequencialmente. Como a previsão para cada série temporal normalmente leva cerca de 300 a 1000 milissegundos ou mais, dependendo do tamanho do modelo, transmitir muitas séries temporais em uma única solicitação pode causar tempos limite. É melhor enviar menos séries temporais por solicitação e enviar mais solicitações. Como o algoritmo DeepAR usa vários operadores por instância, você pode obter um throughput muito maior enviando várias solicitações em paralelo.
Por padrão, o DeepAR usa um operador por CPU para inferência, caso haja memória suficiente por CPU. Se o modelo for grande e não houver memória suficiente para executar um modelo em cada CPU, o número de operadores será reduzido. O número de operadores usados para inferência pode ser substituído usando a variável de ambiente MODEL_SERVER_WORKERS
. Por exemplo, definindo MODEL_SERVER_WORKERS=1
ao chamar a API do SageMaker CreateModel
.
Transformação em lote com o algoritmo DeepAR
As previsões do DeepAR oferecem apoio para a obtenção de inferências usando a transformação em lote dos dados usando o formato JSON Lines. Nesse formato, cada registro é representado em uma única linha como um objeto JSON, e as linhas são separadas por caracteres de nova linha. O formato é idêntico ao formato JSON Lines usado para treinamentos de modelos. Para ter mais informações, consulte Interface de entrada/saída para o algoritmo DeepAR. Por exemplo:
{"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]]}
nota
Ao criar o trabalho de transformação com CreateTransformJob
, defina o valor de BatchStrategy
como SingleRecord
e defina o valor de SplitType
na configuração TransformInput
como Line
, pois, no momento, os valores padrão provocam falhas em runtime.
De forma semelhante ao formato de solicitação de inferência de endpoint hospedado, os campos cat
e dynamic_feat
para cada instância serão necessários se os dois fatores a seguir forem verdadeiros:
-
O modelo é treinado em um conjunto de dados que continha os campos
cat
edynamic_feat
. -
Os valores
cardinality
enum_dynamic_feat
correspondente usados no trabalho de treinamento não estão definidos como"".
Ao contrário da inferência de endpoints hospedados, o campo de configuração é definido uma vez para todo o trabalho de inferência em lote usando uma variável de ambiente denominada DEEPAR_INFERENCE_CONFIG
. O valor de DEEPAR_INFERENCE_CONFIG
pode ser transmitido quando o modelo é criado chamando a API CreateTransformJob
. Se DEEPAR_INFERENCE_CONFIG
estiver ausente no ambiente de contêiner, o contêiner de inferência usará o seguinte padrão:
{ "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"] }
A saída também está no formato JSON Lines, com uma linha por predição, em uma ordem idêntica à ordem de instâncias no arquivo de entrada correspondente. As predições são codificadas como objetos idênticos àqueles retornados por respostas no modo de inferência online. Por exemplo:
{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }
Observe que na configuração de TransformInput
do SageMaker CreateTransformJob
, os clientes da solicitação devem definir explicitamente o valor de AssembleWith
como Line
, pois o valor padrão None
concatena todos os objetos JSON na mesma linha.
Por exemplo, veja a seguir uma solicitação CreateTransformJob
do SageMaker para um trabalho do DeepAR com uma DEEPAR_INFERENCE_CONFIG
personalizada:
{ "BatchStrategy": "SingleRecord", "Environment": { "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }", ... }, "TransformInput": { "SplitType": "Line", ... }, "TransformOutput": { "AssembleWith": "Line", ... }, ... }