Configurare il monitoraggio del modello

Prima di poter iniziare a monitorare un modello, devi registrarlo in Vertex AI Model Registry e poi configurare i dettagli del monitoraggio creando un monitor del modello. Questa pagina descrive come registrare un modello e illustra tutte le specifiche che puoi definire in una configurazione di monitoraggio.

Model Monitoring 2 supporta solo i modelli tabulari. Questi modelli possono essere pubblicati su Vertex AI o su un'altra infrastruttura di pubblicazione.

Registra modello

Puoi monitorare i modelli di cui è stato eseguito il deployment su qualsiasi infrastruttura di pubblicazione, ad esempio su endpoint Vertex AI, GKE o BigQuery. Per registrare un modello che pubblichi in Vertex AI, consulta Importare i modelli.

Per i modelli pubblicati al di fuori di Vertex AI, puoi registrare un modello di riferimento, che funge da segnaposto per i modelli pubblicati su altre risorse. Quando registri un modello di riferimento, registri il nome del modello, come mostrato nell'esempio seguente:

SDK Python

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

Per i modelli di riferimento, il monitoraggio dei modelli può supportare set di dati di Cloud Storage o BigQuery. Non puoi monitorare le attribuzioni delle funzionalità per i modelli di riferimento.

Origini dati

Puoi monitorare le metriche nei dati archiviati nelle seguenti origini. Gli elementi nidificati non sono supportati. Per analizzare i dati nidificati, appiattili prima. Se i tuoi dati si trovano, ad esempio, in BigQuery, puoi utilizzare SQL per trasformare le funzionalità nidificate.

BigQuery
Puoi fornire un URI della tabella BigQuery o una query SQL. Per specificare una finestra temporale o per configurare il monitoraggio continuo, la tabella deve includere una colonna di timestamp, che devi specificare nel set di dati come timestamp_field.
Cloud Storage
I dati devono essere archiviati in formato CSV o JSONL. Per i file CSV, includi un'intestazione dei nomi delle colonne come prima riga del file.
Job di previsione batch di Vertex AI
Fornisci il nome completo della risorsa del job di previsione batch per monitorare un job di previsione batch. Puoi eseguire un job di monitoraggio non appena crei il job di previsione in batch; non devi attendere il completamento del job batch. Il monitoraggio dei modelli v2 esegue il job di monitoraggio subito dopo il completamento del job di previsione in batch.
Log degli endpoint Vertex AI

Per poter iniziare a monitorarlo, devi attivare il logging delle richieste e delle risposte sull'endpoint. Gli endpoint privati non sono supportati perché non supportano il logging delle richieste e delle risposte.

Model Monitoring 2.0 si aspetta che il formato JSON delle richieste e delle risposte degli endpoint Vertex AI segua il formato utilizzato dal metodo predict. Gli oggetti instances vengono inseriti nella tabella di registrazione nella colonna request_payload come array: [INSTANCE_1, INSTANCE_2]. Analogamente, gli oggetti predictions vengono inseriti nella tabella di registrazione nella colonna response_payload come array: [PREDICTION_1, PREDICTION_2].

Sono supportati altri metodi (ad esempio la previsione non elaborata), ma i dati devono seguire il formato JSON della richiesta e della risposta come descritto nella documentazione di riferimento dell'API per il metodo predict.

Set di dati gestito da Vertex AI

Set di dati gestiti in Vertex AI. Per ulteriori informazioni, consulta il formato del set di dati tabulare.

Monitoraggio continuo

Il monitoraggio continuo (noto anche come esecuzioni pianificate) ti consente di eseguire i job di monitoraggio in base a una pianificazione che hai impostato. Il monitoraggio continuo dei modelli con specifiche di tempo supporta solo il logging degli endpoint BigQuery e Vertex AI come origini dati.

Per utilizzare BigQuery come origine per il monitoraggio continuo con specifiche di tempo, la tabella deve avere una colonna timestamp. Per le tabelle BigQuery generate dal logging degli endpoint di Vertex AI, le tabelle includono già una colonna di timestamp logging_time.

Come tecnica generale di ottimizzazione di BigQuery, ti consigliamo di partizionare la tabella in base al timestamp per migliorare le prestazioni delle query e controllare i costi riducendo il numero di byte letti da una query.

Tipi di dati supportati

Sono supportate sia le caratteristiche numeriche sia quelle categoriche. Puoi includere colonne con array, ad esempio un array di valori booleani, categorici, di stringa o interi. La versione 2 di Model Monitoring appiattisce l'array in modo che ogni elemento dell'array sia un valore distinto.

Le funzionalità numeriche corrispondono ai seguenti tipi di dati:

  • Numero in virgola mobile
  • Numero intero

Le caratteristiche categoriche corrispondono ai seguenti tipi di dati:

  • Booleano
  • Stringa
  • Categorica

Schema modello

La versione 2 di Monitoraggio modelli utilizza lo schema del modello per analizzare i dati. Questo schema è obbligatorio quando crei un monitor dei modelli. Per AutoML Tables, non è necessario specificare lo schema del modello; Vertex AI Model Monitoring lo recupera automaticamente.

L'esempio seguente mostra la struttura generale dello schema previsto:

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 una colonna include un array di valori, imposta repeated su true.

Per AutoML Tables, quando Model Monitoring 2.0 recupera lo schema del modello, utilizza le funzionalità presenti nel set di dati di addestramento come funzionalità di input, escludendo la colonna target. L'output della previsione è impostato sulla colonna predicted_{target_column}. Inoltre, il metodo di estrazione di Model Monitoring 2.0 per il valore di output della previsione dipende dal tipo di modello. Per i modelli di classificazione di AutoML Tables, Vertex AI Model Monitoring monitora la distribuzione delle etichette argmax. Per i modelli di regressione di AutoML Tables, Vertex AI Model Monitoring monitora la distribuzione dei valori.

Set di dati di riferimento e target

Il set di dati di riferimento rappresenta un punto di riferimento utilizzato per misurare le metriche nel tempo. Il set di dati di destinazione include dati più recenti che utilizzi per il confronto con il set di dati di riferimento. Model Monitoring v2 calcola le metriche tra i due set di dati per aiutarti a monitorare la qualità dei modelli. I set di dati di riferimento e di destinazione possono provenire da qualsiasi origine dati supportata.

Come esempi di target e basi, puoi confrontare il set di dati di pubblicazione (target) con il set di dati di addestramento del modello (base) oppure puoi confrontare il set di dati di pubblicazione (target) con un set di dati di pubblicazione di un periodo di tempo precedente (base).

Set di dati di destinazione

Quando selezioni il set di dati di destinazione, Model Monitoring v2 può elaborare l'intero set di dati o puoi impostare una finestra, che specifica la quantità di dati da esaminare per Model Monitoring v2. Ad esempio, se specifichi una finestra di 24 ore, la versione 2 del monitoraggio dei modelli confronta solo i dati delle ultime 24 ore con il set di dati di riferimento.

Per l'analisi della deriva dei dati, la deriva può essere volatile se vengono elaborati dati su un volume inadeguato. Un intervallo di tempo più ampio può contribuire a evitare gli avvisi attivati a causa di conteggi dei campioni ridotti.

Set di dati di riferimento

Puoi impostare il set di dati di riferimento su qualsiasi origine dati supportata, ad esempio un set di dati gestito da Vertex AI contenente i dati di addestramento del modello. Come per i set di dati di destinazione, puoi scegliere di elaborare con Model Monitoring v2 l'intero set di dati o una determinata finestra.

Specifica dell'ora

Puoi impostare le specifiche relative al monitoraggio del tempo in due modi:

  • Intervallo di tempo, che include una coppia di ora di inizio e di fine.
  • Finestra temporale e offset, che specificano la quantità di dati da includere e il periodo di tempo tra i set di dati di confronto.

Ad esempio, se vuoi confrontare i dati recenti con quelli raccolti in precedenza, puoi impostare un offset. L'offset specifica il periodo di tempo tra i set di dati di destinazione e di riferimento. Ad esempio, immagina di impostare il set di dati di destinazione con una finestra di un giorno e la linea di base con un offset di una settimana, sempre con una finestra di un giorno.

In questo caso, il set di dati di destinazione include i dati delle 24 ore precedenti all'ora di inizio del job di monitoraggio. Il set di dati di riferimento include i dati dello stesso periodo di 24 ore, ma esattamente una settimana prima.

Crea un monitoraggio del modello

Crea un monitoraggio del modello per associare i dettagli del monitoraggio a una versione del modello che è stata registrata in Vertex AI Model Registry. La risorsa risultante è chiamata monitor dei modelli. Puoi creare un solo monitoraggio del modello per versione del modello.

Quando crei un monitoraggio del modello, specifica il nome, la versione e lo schema del modello. Per alcuni modelli, come i modelli AutoML, lo schema viene fornito per te.

Se vuoi, puoi impostare gli obiettivi di monitoraggio, un set di dati di addestramento, la posizione dell'output del monitoraggio e le impostazioni di notifica nel monitoraggio dei modelli. Quando esegui un job di monitoraggio, Model Monitoring v2 utilizza queste impostazioni come predefinite.

Console

  1. Nella console Google Cloud , vai alla pagina Monitoraggio.

    Vai a Monitoring

  2. Fai clic su Configura monitoraggio.

  3. Seleziona un modello e la relativa versione da monitorare.

  4. Se applicabile, definisci lo schema delle funzionalità di input, le uscite della previsione e, se disponibili, i dati empirici reali.

  5. (Facoltativo) Per monitorare la deriva dal set di dati di addestramento, specifica la posizione del set di dati.

  6. (Facoltativo) Per specificare un bucket Cloud Storage esistente per l'esportazione dei risultati del monitoraggio, espandi Opzioni avanzate e seleziona un bucket.

  7. Per configurare gli obiettivi di monitoraggio, fai clic su Continua o su Configura per creare il monitoraggio del modello.

    Questa configurazione viene utilizzata come valori predefiniti durante l'esecuzione di un job.

  8. Seleziona gli scopi da monitorare. Per ogni obiettivo, puoi impostare la metrica da monitorare e una soglia per gli avvisi.

  9. Specifica gli indirizzi email e, facoltativamente, i canali di notifica in Cloud Monitoring per il monitoraggio di avvisi e notifiche.

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_config=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)