Configura il monitoraggio del modello

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

Model Monitoring v2 supporta solo i modelli tabulari. Questi modelli possono essere forniti su Vertex AI o su altre infrastrutture di gestione.

Registra modello

Puoi monitorare i modelli di cui viene eseguito il deployment su qualsiasi infrastruttura di gestione, ad esempio su endpoint Vertex AI, su GKE o BigQuery. Per registrare un modello pubblicato in Vertex AI, consulta Importare modelli.

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

SDK Python

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

Per i modelli di riferimento, Model Monitoring può supportare i set di dati di Cloud Storage o BigQuery. Non puoi monitorare le attribuzioni delle caratteristiche per i modelli di riferimento.

Origini dati

Puoi monitorare le metriche nei dati archiviati nelle origini indicate di seguito. Le funzionalità nidificate non sono supportate. Per analizzare i dati nidificati, devi prima suddividerli. Ad esempio, se i tuoi dati si trovano in BigQuery, puoi utilizzare SQL per trasformare le caratteristiche nidificate.

BigQuery
Puoi fornire un URI della tabella BigQuery o una query SQL. Per specificare una finestra temporale o impostare il monitoraggio continuo, la tabella deve includere una colonna di timestamp, che specifichi 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 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 batch. Non devi attendere il completamento del job batch. Model Monitoring v2 esegue il job di monitoraggio poco dopo il completamento del job di previsione batch.
Logging degli endpoint Vertex AI

Devi abilitare il logging delle richieste e delle risposte nell'endpoint prima di poter iniziare a monitorarlo. Gli endpoint privati non sono supportati perché non supportano il logging delle richieste e risposte.

Model Monitoring v2 prevede che il formato JSON delle richieste e delle risposte degli endpoint Vertex AI sia conforme al formato utilizzato dal metodo predict. Gli oggetti instances vengono inseriti nella tabella di logging nella colonna request_payload come array: [INSTANCE_1, INSTANCE_2]. Allo stesso modo, gli oggetti predictions vengono inseriti nella tabella di logging nella colonna response_payload come array: [PREDICTION_1, PREDICTION_2].

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

Set di dati gestito da Vertex AI

Set di dati gestiti in Vertex AI. Per maggiori informazioni, consulta la pagina sul formato del set di dati tabulare.

Monitoraggio continuo

Il monitoraggio continuo (chiamato anche esecuzioni pianificate) consente di eseguire i job di monitoraggio in base a una pianificazione impostata da te. Il monitoraggio continuo del modello con specifiche temporali supporta solo il logging degli endpoint BigQuery e Vertex AI come origini dati.

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

Come tecnica di ottimizzazione generale 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 che categoriche. Puoi includere colonne con array, ad esempio un array di valori booleani, categorici, di stringa o interi. Model Monitoring v2 appiattisce l'array in modo che ogni elemento al suo interno sia un valore distinto.

Le caratteristiche numeriche sono mappate ai seguenti tipi di dati:

  • In virgola mobile
  • Integer

Le caratteristiche categoriche sono mappate ai seguenti tipi di dati:

  • Booleano
  • String
  • Valori categorici

Schema modello

Model Monitoring v2 utilizza lo schema del modello per analizzare i dati. Questo schema è obbligatorio quando crei un monitoraggio del modello. 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 v2 recupera lo schema del modello, vengono utilizzate le caratteristiche presenti nel set di dati di addestramento come caratteristiche di input, esclusa la colonna di destinazione. L'output della previsione è impostato sulla colonna predicted_{target_column}. Inoltre, il metodo di estrazione di Model Monitoring v2 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 di destinazione

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 da confrontare con il set di dati di riferimento. Model Monitoring v2 calcola le metriche tra i due set di dati per aiutarti a tenere traccia della qualità dei tuoi modelli. I set di dati di riferimento e di destinazione possono provenire da qualsiasi origine dati supportata.

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

Set di dati di destinazione

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

Per l'analisi della deviazione nei dati, la deviazione può essere volatile se viene elaborato un volume di dati inadeguato. Una finestra temporale più ampia può aiutare a evitare avvisi che sono stati attivati a causa di un numero ridotto di campioni.

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 che contiene i dati di addestramento del tuo modello. Analogamente ai set di dati di destinazione, puoi scegliere di lasciare che Model Monitoring v2 elabori l'intero set di dati o una finestra specifica.

Specifica temporale

Puoi impostare le specifiche del tempo di monitoraggio utilizzando due metodi:

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

Ad esempio, nei casi in cui 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 base di riferimento con un offset di una settimana anch'essa con una finestra di un giorno.

In questo caso, il set di dati di destinazione include i dati delle 24 ore precedenti l'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 di monitoraggio a una versione del modello che è stata registrata in Vertex AI Model Registry. La risorsa risultante è denominata monitoraggio del modello. Puoi creare un solo monitoraggio del modello per versione del modello.

Quando crei un monitoraggio del modello, specifica il nome del modello, la sua versione e il suo schema. Per alcuni modelli, come quelli AutoML, lo schema viene fornito automaticamente.

Facoltativamente, puoi impostare obiettivi di monitoraggio, un set di dati di addestramento, posizione di output per il monitoraggio e impostazioni di notifica nel monitoraggio del modello. Quando esegui un job di monitoraggio, Model Monitoring v2 utilizza queste impostazioni come predefinite.

Console

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

    Vai a Monitoring

  2. Fai clic su Configura il monitoraggio.

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

  4. Se applicabile, definisci lo schema dell'input che fornisce gli output delle previsioni e, se disponibile, i dati di fatto.

  5. (Facoltativo) Per monitorare la deviazione dal set di dati di addestramento, specifica la località del set di dati.

  6. (Facoltativo) Per specificare un bucket Cloud Storage esistente per l'esportazione dei risultati del monitoraggio, espandi Opzioni avanzate, quindi 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 predefinita durante l'esecuzione di un job.

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

  9. Specificare 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_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
)