Configurar o monitoramento de modelos

Antes de começar a monitorar um modelo, é preciso registrá-lo com o Vertex AI Model Registry e, em seguida, configurar os detalhes de monitoramento criando um monitor de modelo. Nesta página, descrevemos como registrar um modelo e explicamos todas as especificações que podem ser definidas em uma configuração de monitoramento.

O Model Monitoring v2 oferece suporte apenas a modelos tabulares. Esses modelos podem ser exibidos na Vertex AI ou em outra infraestrutura de disponibilização.

Registrar modelo

É possível monitorar modelos implantados em qualquer infraestrutura de exibição, como nos endpoints da Vertex AI, no GKE ou no BigQuery. Para registrar um modelo que você exibe no Vertex AI, consulte Importar modelos.

Para modelos veiculados fora da Vertex AI, é possível registrar um modelo de referência, que é um marcador de posição para modelos que estão sendo exibidos e outros recursos. Ao registrar um modelo de referência, você registra o nome do modelo como no exemplo a seguir:

SDK do Python

model = aiplatform.Model.upload(
 display_name="MODEL_NAME"
)

Para modelos de referência, o monitoramento de modelos oferece suporte do Cloud Storage ou do BigQuery. Não é possível monitorar atribuições de recursos para modelos de referência.

Fontes de dados

Você pode monitorar métricas em dados armazenados nas fontes a seguir. Recursos aninhados não são compatíveis. Para analisar dados aninhados, nivele-os primeiro. Se os dados estão, por exemplo, no BigQuery, é possível usar o SQL para transformar os atributos aninhados.

BigQuery
É possível fornecer um URI de tabela do BigQuery ou uma consulta SQL. Para especificar uma janela de tempo ou para configurar um monitoramento contínuo, a tabela deve incluir um de carimbo de data/hora especificada no conjunto de dados como timestamp_field.
Cloud Storage
Os dados precisam ser armazenados nos formatos CSV ou JSONL. Para arquivos CSV, inclua um cabeçalho dos nomes das colunas como a primeira linha do arquivo.
Jobs de predição em lote da Vertex AI
Forneça o nome totalmente qualificado do recurso do job de predição em lote para monitorar um job de predição em lote. Você pode executar um job de monitoramento assim que criar o job de predição em lote; não é necessário esperar a conclusão do job em lote. O monitoramento de modelos v2 executa o job de monitoramento logo após o job de predição em lote concluído.
Geração de registros de endpoint da Vertex AI

Ative a geração de registros de solicitação/resposta no endpoint antes de iniciar a monitorá-lo. Os endpoints particulares não têm suporte porque a geração de registros de solicitação e resposta não têm suporte.

O monitoramento de modelos v2 espera o formato JSON das solicitações de endpoint da Vertex AI e as respostas para seguir o formato usado pelo método predict. Os objetos instances são inseridos na tabela de geração de registros na coluna request_payload como uma matriz: [INSTANCE_1, INSTANCE_2]. Da mesma forma, os objetos predictions são inseridos na tabela de geração de registros na coluna response_payload como matriz: [PREDICTION_1, PREDICTION_2].

Há outros métodos compatíveis, como a previsão bruta, mas os dados precisam seguir o formato JSON de solicitação e resposta conforme documentado na Referência da API para o método predict.

Conjunto de dados gerenciado da Vertex AI

Conjuntos de dados gerenciados na Vertex AI Para mais informações, consulte o formato de conjunto de dados tabular.

Monitoramento contínuo

O monitoramento contínuo (também conhecido como execuções programadas) permite executar jobs de monitoramento em uma programação definida por você. Monitoramento contínuo de modelos com especificações de tempo só oferece suporte ao BigQuery e à geração de registros de endpoints da Vertex AI como fontes de dados.

Para usar o BigQuery como fonte para monitoramento contínuo ao longo das especificações de tempo, a tabela deve ter uma coluna de carimbo de data/hora. Para tabelas do BigQuery que foram geradas pela geração de registros de endpoint da Vertex AI, as tabelas já incluem uma coluna de carimbo de data/hora logging_time.

Como uma técnica geral de otimização do BigQuery, recomendamos particionar sua tabela por carimbo de data/hora para melhorar o desempenho da consulta e controlar os custos reduzindo o número de bytes lidos por uma consulta.

Tipos de dados compatíveis

Atributos numéricos e categóricos são aceitos. Você pode incluir colunas com matrizes, como uma matriz de valor booleano, categórico, string ou inteiro. O monitoramento de modelos v2 nivela a matriz para que cada elemento na matriz seja um valor distinto.

Os atributos numéricos são mapeados para os seguintes tipos de dados:

  • Ponto flutuante
  • Número inteiro

Atributos categóricos são mapeados para os seguintes tipos de dados:

  • Booleano
  • String
  • Categórico

Esquema do modelo

O monitoramento de modelos v2 usa o esquema do modelo para analisar os dados. Este esquema é necessário para criar um monitor de modelos. Para o AutoML Tables, não é necessário especificar o esquema do modelo; o monitoramento de modelos da Vertex AI faz a busca automática.

O exemplo a seguir mostra a estrutura geral desse esquema:

SDK do Python

ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="FEATURE_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
    prediction_fields = [
      model_monitor.spec.FieldSchema(
          name="PREDICTION_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
  ground_truth_fields = [
      model_monitor.spec.FieldSchema(
          feature="GROUND_TRUTH_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ]
)

Se uma coluna incluir uma matriz de valores, defina repeated como true.

Para o AutoML Tables, quando o monitoramento de modelos v2 busca o esquema do modelo, ele usa os recursos que estão no conjunto de dados de treinamento como os atributos de entrada, excluindo a coluna de destino. A saída da previsão é definida na coluna predicted_{target_column}. Além disso, o método de extração do monitoramento de modelos v2 para o valor de saída da previsão depende do tipo de modelo. Para modelos de classificação do AutoML Tables, o monitoramento de modelos da Vertex AI monitora a distribuição de rótulos argmax. Para modelos de regressão do AutoML Tables, o Vertex AI Model Monitoring monitora a distribuição de valor.

Conjuntos de dados de referência e de destino

O conjunto de dados de referência representa um ponto de referência usado para medir as métricas ao longo do tempo. O conjunto de dados de destino inclui dados mais recentes que você usa para comparar com o conjunto de dados de referência. O monitoramento de modelos v2 calcula as métricas entre dois conjuntos de dados para ajudar você a rastrear a qualidade dos modelos. Os conjuntos de dados de valor desejado e valor de referência podem ser de qualquer fonte de dados suportada.

Para exemplos de metas e valores de referência, é possível comparar o conjunto de dados de veiculação (valor desejado) com o conjunto de dados de treinamento do modelo (valor de referência) ou comparar conjunto de dados de exibição (valor desejado) com um conjunto de dados de exibição de um período anterior (valor de referência).

Conjunto de dados de destino

Quando você seleciona o conjunto de dados de destino, o monitoramento de modelos v2 pode processar todo o conjunto de dados ou é possível definir uma janela, que especifica a quantidade de dados que o monitoramento de modelos v2 terá que examinar. Por exemplo, se você especificar uma janela de 24 horas, o monitoramento de modelos v2 compara apenas os dados das últimas 24 horas em relação ao conjunto de dados de referência.

Na análise de deslocamento de dados, o deslocamento pode ser volátil se o volume de dados for processado. Uma janela de tempo maior pode ajudar a evitar alertas que foram acionados como resultado de baixas contagens de amostras.

Conjunto de dados de referência

É possível definir o conjunto de dados de referência para qualquer fonte de dados compatível, como um conjunto de dados gerenciado da Vertex AI que contém o treinamento do modelo de dados. Assim como nos conjuntos de dados de destino, é possível fazer com que o monitoramento de modelos v2 processe conjunto de dados inteiro ou uma janela específica.

Especificação de tempo

É possível definir especificações de tempo de monitoramento usando dois métodos:

  • O período que inclui uma série de horários de início e de término.
  • Janela de tempo e deslocamento, que especificam a quantidade de dados a serem incluídos e o período entre os conjuntos de dados de comparação.

Por exemplo, em casos em que você quer comparar dados recentes com dados que foram coletados anteriormente, é possível definir um deslocamento. O deslocamento especifica o período entre os conjuntos de dados de destino e de valor de referência. Como exemplo, imagine que você define conjunto de dados do valor de referência com uma janela de um dia e o valor de referência é definido com um deslocamento de uma semana também com uma janela de um dia.

Nesse caso, o conjunto de dados de destino inclui os dados das 24 horas anteriores ao horário de início do job de monitoramento. O conjunto de dados de referência inclui os dados do mesmo período de 24 horas, mas exatamente uma semana antes.

Criar um monitor de modelo

Crie um monitor de modelo para associar detalhes de monitoramento a uma versão de modelo que foi registrado no Vertex AI Model Registry. O recurso resultante é chamado de monitor do modelo. Só é possível criar um monitor por versão de modelo.

Ao criar um monitor de modelo, especifique o nome do modelo, sua versão e seu esquema. Para alguns modelos, como os do AutoML, o esquema é fornecido por você.

Também é possível definir objetivos de monitoramento, um conjunto de dados de treinamento, o local de saída do monitoramento e as configurações de notificação no monitor dos modelos. Quando você executar um job de monitoramento, o monitoramento de modelos v2 usará essas configurações como padrão.

Console

  1. No Console do Google Cloud, acesse a página Monitoring.

    Acessar Monitoring

  2. Clique em Configurar monitoramento.

  3. Selecione um modelo e a versão dele para monitorar.

  4. Se aplicável, defina o esquema dos atributos de entrada para sua previsão de entrada e, se disponíveis, as informações empíricas.

  5. Opcional: para monitorar o desvio do conjunto de dados de treinamento, especifique o local do conjunto de dados.

  6. Opcional: para especificar um bucket do Cloud Storage para exportar os resultados de monitoramento, expanda as Opções avançadas e selecione um bucket.

  7. Para configurar os objetivos de monitoramento, clique em Continuar ou em Configurar para criar o monitor de modelos.

    Essa configuração é usada como padrão ao executar um job.

  8. Selecione os objetivos a serem monitorados. Para cada objetivo, é possível definir a métrica ser monitorada e um limite para alertas.

  9. Especifique os endereços de e-mail e, se preferir, os canais de notificação no Cloud Monitoring para monitorar alertas e notificações.

SDK do Python

from vertexai.resources.preview import ml_monitoring
from google.cloud.aiplatform_v1beta1.types import ExplanationSpec, ExplanationParameters, ExplanationMetadata

# Define Monitoring Schema. For AutoML models, this is optional if the schema information is available.
MONITORING_SCHEMA=ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="sepal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="sepal_width_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_width_cm",
          data_type="float"
      )
  ],
  prediction_fields = [
      ml_monitoring.spec.FieldSchema(
          name="predicted_species",
          data_type="categorical"
      )
  ]
)

TRAINING_DATASET = ml_monitoring.spec.MonitoringInput(
  gcs_uri=GCS_INPUT_URI,
  data_format=DATA_FORMAT,
)

DEFAULT_FEATURE_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_FEATURE_ATTRIBUTION_SPEC=ml_monitoring.spec.FeatureAttributionSpec(
  default_alert_condition=0.0003,
  feature_alert_conditions={"sepal_length_cm":0.0001},
)

EXPLANATION_SPEC=ExplanationSpec(
  parameters=ExplanationParameters(
      {"sampled_shapley_attribution": {"path_count": 2}}
  ),
  metadata=ExplanationMetadata(
      inputs={
          "sepal_length_cm": ExplanationMetadata.InputMetadata({
              "input_tensor_name": "sepal_length_cm",
              "encoding": "IDENTITY",
              "modality": "numeric",
          }),
          ...
      },
      ...
  )
)

DEFAULT_OUTPUT_SPEC = ml_monitoring.spec.output.OutputSpec(
  gcs_base_dir=GCS_OUTPUT_BASE_DIR
)

DEFAULT_NOTIFICATION_SPEC = ml_monitoring.spec.NotificationSpec(
  user_emails=['email@example.com']
)

my_model_monitor = ml_monitoring.ModelMonitor.create(
  display_name=MONITORING_JOB_DISPLAY_NAME,
  model_name=MODEL_RESOURCE_NAME,
  model_version_id=MODEL_VERSION_ID,
  model_monitoring_schema=MONITORING_SCHEMA,
  # The following fields are optional for creating the model monitor.
  training_dataset=TRAINING_DATASET,
  tabular_objective_spec=ml_monitoring.spec.TabularObjective(
      feature_drift_spec=DEFAULT_FEATURE_DRIFT_SPEC,
      prediction_output_drift_spec=DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC,
      feature_attribution_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  ),
  explanation_config=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)