Configure a monitorização de modelos

Antes de poder começar a monitorizar um modelo, tem de registar o modelo no Registo de modelos do Vertex AI e, em seguida, configurar os detalhes da monitorização criando um monitor de modelos. Esta página descreve como registar um modelo e explica todas as especificações que pode definir numa configuração de monitorização.

A monitorização de modelos v2 suporta apenas modelos tabulares. Estes modelos podem ser publicados no Vertex AI ou noutra infraestrutura de publicação.

Registe o modelo

Pode monitorizar modelos implementados em qualquer infraestrutura de publicação, como em pontos finais do Vertex AI, no GKE ou no BigQuery. Para registar um modelo que apresenta no Vertex AI, consulte o artigo Importar modelos.

Para modelos que apresenta fora do Vertex AI, pode registar um modelo de referência, que é um marcador de posição para modelos que estão a ser apresentados noutros recursos. Quando regista um modelo de referência, regista o nome do modelo, conforme mostrado no exemplo seguinte:

SDK Python

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

Para modelos de referência, a monitorização de modelos pode suportar conjuntos de dados do Cloud Storage ou do BigQuery. Não pode monitorizar as atribuições de funcionalidades para modelos de referência.

Origens de dados

Pode monitorizar métricas em dados armazenados nas seguintes origens. As funcionalidades aninhadas não são suportadas. Para analisar dados aninhados, primeiro, tem de os tornar simples. Se os seus dados estiverem, por exemplo, no BigQuery, pode usar o SQL para transformar funcionalidades aninhadas.

BigQuery
Pode fornecer um URI de tabela do BigQuery ou uma consulta SQL. Para especificar um período ou configurar a monitorização contínua, a tabela tem de incluir uma coluna de data/hora, que especifica no conjunto de dados como timestamp_field.
Cloud Storage
Os dados têm de ser armazenados no formato CSV ou JSONL. Para ficheiros CSV, inclua um cabeçalho dos nomes das colunas como a primeira linha do ficheiro.
Tarefas de previsão em lote da Vertex AI
Indique o nome do recurso da tarefa de previsão em lote totalmente qualificado para monitorizar uma tarefa de previsão em lote. Pode executar uma tarefa de monitorização assim que criar a tarefa de previsão em lote. Não tem de esperar que a tarefa em lote seja concluída. A monitorização de modelos v2 executa a tarefa de monitorização pouco depois de a tarefa de previsão em lote ter sido concluída.
Registo em registo do ponto final da Vertex AI

Tem de ativar o registo de pedidos-respostas no ponto final antes de poder começar a monitorizá-lo. Os pontos finais privados não são suportados porque não suportam o registo de pedidos e respostas.

O Model Monitoring v2 espera que o formato JSON dos pedidos e das respostas do ponto final da Vertex AI siga o formato usado pelo método predict. Os objetos instances são inseridos na tabela de registo na coluna request_payload como uma matriz: [INSTANCE_1, INSTANCE_2]. Da mesma forma, os objetos predictions são inseridos na tabela de registo na coluna response_payload como uma matriz: [PREDICTION_1, PREDICTION_2].

Outros métodos são suportados (como a previsão não processada), mas os seus dados têm de seguir o formato JSON de pedido e resposta, conforme documentado na referência da API para o método predict.

Conjunto de dados gerido do Vertex AI

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

Monitorização contínua

A monitorização contínua (também conhecida como execuções agendadas) permite-lhe executar tarefas de monitorização de acordo com um agendamento definido por si. A monitorização contínua de modelos com especificações de tempo só suporta o BigQuery e o registo de pontos finais do Vertex AI como origens de dados.

Para usar o BigQuery como origem para a monitorização contínua com especificações de tempo, a sua tabela tem de ter uma coluna de data/hora. Para as tabelas do BigQuery geradas pelo registo de pontos finais do Vertex AI, as tabelas já incluem uma coluna de data/hora logging_time.

Como técnica geral de otimização do BigQuery, recomendamos que crie partições na sua tabela por data/hora para melhorar o desempenho das consultas e controlar os custos reduzindo o número de bytes lidos por uma consulta.

Tipos de dados suportados

São suportadas funcionalidades numéricas e categóricas. Pode incluir colunas com matrizes, como uma matriz de valores booleanos, categóricos, de string ou inteiros. A monitorização de modelos v2 reduz a matriz para que cada elemento na matriz seja um valor distinto.

As caraterísticas numéricas são mapeadas para os seguintes tipos de dados:

  • Flutuante
  • Número inteiro

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

  • Booleano
  • String
  • Categórico

Esquema do modelo

A monitorização de modelos v2 usa o esquema do modelo para analisar os seus dados. Este esquema é necessário quando cria um monitor de modelos. Para o AutoML Tables, não precisa de especificar o esquema do modelo. O Vertex AI Model Monitoring obtém-no automaticamente.

O exemplo seguinte mostra a estrutura geral do esquema esperado:

SDK 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 a monitorização de modelos v2 obtém o esquema do modelo, usa as funcionalidades que estão no conjunto de dados de preparação como funcionalidades de entrada, excluindo a coluna de destino. O resultado da previsão está definido para a coluna predicted_{target_column}. Além disso, o método de extração da monitorização 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 Vertex AI Model Monitoring monitoriza a distribuição de etiquetas argmax. Para modelos de regressão do AutoML Tables, o Vertex AI Model Monitoring monitoriza a distribuição de valores.

Conjuntos de dados de base e de destino

O conjunto de dados de base representa um ponto de referência que usa para medir as métricas ao longo do tempo. O conjunto de dados de destino inclui dados mais recentes que usa para comparar com o conjunto de dados de base. A monitorização de modelos v2 calcula as métricas entre os dois conjuntos de dados para ajudar a acompanhar a qualidade dos seus modelos. Os conjuntos de dados de base e de destino podem ser provenientes de qualquer origem de dados suportada.

Como exemplos de alvos e bases, pode comparar o seu conjunto de dados de publicação (alvo) com o conjunto de dados de preparação do modelo (base) ou pode comparar o seu conjunto de dados de publicação (alvo) com um conjunto de dados de publicação de um período anterior (base).

Conjunto de dados de destino

Quando seleciona o conjunto de dados de destino, a monitorização de modelos v2 pode processar o conjunto de dados completo ou pode definir uma janela, que especifica a quantidade de dados que a monitorização de modelos v2 deve examinar. Por exemplo, se especificar um período de 24 horas, a monitorização de modelos v2 compara apenas os dados das últimas 24 horas com o conjunto de dados de base.

Para a análise da variação dos dados, a variação pode ser volátil se for processado um volume de dados inadequado. Um período mais longo pode ajudar a evitar alertas acionados devido a um número baixo de amostras.

Conjunto de dados de base

Pode definir o conjunto de dados de base para qualquer origem de dados suportada, como um conjunto de dados gerido do Vertex AI que contenha os dados de preparação do seu modelo. Tal como nos conjuntos de dados de destino, pode optar por que a monitorização de modelos v2 processe o conjunto de dados completo ou uma janela específica.

Especificação de tempo

Pode definir especificações de tempo de monitorização através de dois métodos:

  • Intervalo de tempo, que inclui um par de hora de início e hora de fim.
  • Período e desvio, que especifica a quantidade de dados a incluir e o período entre conjuntos de dados de comparação.

Por exemplo, nos casos em que quer comparar dados recentes com dados recolhidos anteriormente, pode definir um desvio. O desvio especifica o período entre os conjuntos de dados de destino e de base. Por exemplo, imagine que define o conjunto de dados de destino com um período de 1 dia e a base de referência com um desvio de uma semana e também com um período de 1 dia.

Neste caso, o conjunto de dados de destino inclui dados das 24 horas anteriores à hora de início da tarefa de monitorização. O conjunto de dados de base inclui dados do mesmo período de 24 horas, mas exatamente uma semana antes.

Crie uma monitorização de modelos

Crie uma monitorização de modelos para associar detalhes de monitorização a uma versão do modelo que tenha sido registada no Registo de modelos Vertex AI. O recurso resultante é denominado monitor de modelo. Só pode criar um monitor de modelo por versão do modelo.

Quando cria uma monitorização de modelos, especifique o nome do modelo, a respetiva versão e o esquema. Para alguns modelos, como os modelos do AutoML, o esquema é fornecido.

Opcionalmente, pode definir objetivos de monitorização, um conjunto de dados de treino, a localização de saída da monitorização e as definições de notificação no monitor de modelos. Quando executa uma tarefa de monitorização, o Model Monitoring v2 usa estas definições como predefinições.

Consola

  1. Na Google Cloud consola, aceda à página Monitorização.

    Aceder a Monitorização

  2. Clique em Configurar monitorização.

  3. Selecione um modelo e a respetiva versão para monitorizar.

  4. Se aplicável, defina o esquema das suas caraterísticas de entrada, os resultados da previsão e, se disponível, os dados reais.

  5. Opcional: para monitorizar a variação do conjunto de dados de preparação, especifique a localização do conjunto de dados.

  6. Opcional: para especificar um contentor do Cloud Storage existente para exportar os resultados da monitorização, expanda Opções avançadas e, de seguida, selecione um contentor.

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

    Esta configuração é usada como predefinição quando executa uma tarefa.

  8. Selecione os objetivos a monitorizar. Para cada objetivo, pode definir a métrica a monitorizar e um limite para os alertas.

  9. Especifique os endereços de email e, opcionalmente, os canais de notificação no Cloud Monitoring para alertas e notificações de monitorização.

SDK 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_threshold=0.0003,
  feature_alert_thresholds={"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_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)