Formatos de inferência do DeepAR - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Formatos de inferência do 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 recursos personalizados (dynamic_feat), você terá que fornecer o mesmo número de valores dynamic_featpara 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 recursos 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 trabalhadores por instância, você pode obter um throughput muito maior enviando várias solicitações em paralelo.

Por padrão, o DeepAR usa um trabalhador 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 trabalhadores 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 suporte 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 tempo de execução.

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 e dynamic_feat.

  • Os valores cardinality e num_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 previsão, em uma ordem idêntica à ordem de instâncias no arquivo de entrada correspondente. As previsõ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", ... }, ... }