Formatos de inferência do DeepAR - SageMaker IA da Amazon

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

A página a seguir descreve os formatos de solicitação e resposta para inferência com o modelo Amazon SageMaker AI 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_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 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 trabalhadores usados para inferência pode ser sobrescrito usando a variável de ambiente (MODEL_SERVER_WORKERSpor exemplo, por configuraçãoMODEL_SERVER_WORKERS=1) ao chamar a SageMaker API de IA 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 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 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 TransformInputconfiguração da CreateTransformJobsolicitação de SageMaker IA, os clientes devem definir explicitamente o AssembleWith valor comoLine, pois o valor padrão None concatena todos os objetos JSON na mesma linha.

Por exemplo, aqui está uma CreateTransformJobsolicitação de SageMaker IA para um trabalho DeepAR com um personalizado: DEEPAR_INFERENCE_CONFIG

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