Modellmonitoring einrichten

Bevor Sie mit dem Monitoring eines Modells beginnen können, müssen Sie das Modell bei Vertex AI Model Registry registrieren und anschließend die Monitoring-Details konfigurieren, indem Sie einem Modellmonitor erstellen. Auf dieser Seite wird beschrieben, wie ein Modell registriert wird und die Spezifikationen erklärt, die Sie in Rahmen einer Monitoring-Konfiguration definieren können.

Model Monitoring v2 unterstützt nur tabellarische Modelle. Diese Modelle können auf Vertex AI bereitgestellt werden oder auf einer anderen Bereitstellungsinfrastruktur.

Modell registrieren

Sie können Modelle überwachen, die auf jeder Bereitstellungsinfrastruktur bereitgestellt werden, z. B. auf Vertex AI-Endpunkten, GKE oder BigQuery. Um ein Modell zu registrieren, das Sie in Vertex AI bereitstellen, siehe Modelle importieren.

Für Modelle, die Sie außerhalb von Vertex AI bereitstellen, können Sie ein Referenzmodell registrieren, das als Platzhalter für Modelle fungiert, die auf anderen Ressourcen bereitgestellt werden. Wenn Sie ein Referenzmodell registrieren, registrieren Sie die den Namen des Modells wie im folgenden Beispiel gezeigt:

Python SDK

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

Für Referenzmodelle unterstützt das Modellmonitoring Datasets aus Cloud Storage oder BigQuery. Sie können keine Feature-Attributionen für Referenzmodelle überwachen.

Datenquellen

Sie können Messwerte in Daten überwachen, die in den folgenden Quellen gespeichert sind. Verschachtelte Features werden nicht unterstützt. Um verschachtelte Daten zu analysieren, müssen Sie diese zuerst zusammenfassen. Wenn sich Ihre Daten beispielsweise in BigQuery befinden, können Sie verschachtelte Features mit SQL transformieren.

BigQuery
Sie können einen BigQuery-Tabellen-URI oder eine SQL-Abfrage angeben. Um ein Zeitfenster anzugeben oder kontinuierliches Monitoring einzurichten, muss die Tabelle eine Zeitstempelspalte aufweisen, die Sie im Dataset als timestamp_field angeben.
Cloud Storage
Daten müssen entweder im CSV- oder JSONL-Format gespeichert werden. Geben Sie bei CSV-Dateien eine Überschrift Ihrer Spaltennamen in der ersten Zeile der Datei an.
Batchvorhersagejobs in Vertex AI
Geben Sie den voll qualifizierten Ressourcennamen des Batchvorhersagejobs an, um diesen zu überwachen. Sie können einen Monitoringjob ausführen, sobald Sie den Batchvorhersagejob erstellt haben. Sie müssen nicht warten bis der Batchjob abgeschlossen ist. Model Monitoring v2 führt den Monitoringjob aus sobald der Batchvorhersagejobs abgeschlossen ist.
Vertex AI-Endpunkt-Logging

Sie müssen das Anfrage-/Antwort-Logging auf dem Endpunkt aktivieren, bevor Sie mit dem Monitoring beginnen können. Private Endpunkte werden nicht unterstützt, da sie das Anfrage/Antwort-Logging nicht unterstützen.

Model Monitoring v2 erwartet, dass das JSON-Format von Vertex AI-Endpunktanfragen und -Antworten dem Format entspricht, das von der predict-Methode verwendet wird. Die instances-Objekte werden in die Logging-Tabelle in der Spalte request_payload als Array eingefügt: [INSTANCE_1, INSTANCE_2]. Ähnlich verhält es sich mit predictions-Objekten: Sie werden in die Logging-Tabelle in der Spalte response_payload als Array eingefügt: [PREDICTION_1, PREDICTION_2].

Andere Methoden werden unterstützt (wie Rohvorhersagen), aber Ihre Daten müssen dem JSON-Format für Anfragen und Antworten entsprechen, wie in der API-Referenz für die predict-Methode dokumentiert.

Verwaltetes Vertex AI-Dataset

Datasets, die in Vertex AI verwaltet werden. Weitere Informationen finden Sie im tabellarischen Dataset-Format.

Unterbrechungsfreies Monitoring

Kontinuierliches Monitoring (auch als geplante Ausführungen bezeichnet) ermöglicht es Ihnen, Monitoringjobs nach einem von Ihnen festgelegten Zeitplan auszuführen. Kontinuierliches Modellmonitoring mit Zeitangaben unterstützt nur BigQuery- und Vertex AI-Endpunkt-Logging als Datenquellen.

Um BigQuery als Quelle für ein kontinuierliches Monitoring mit Zeitangaben zu verwenden, muss die Tabelle eine Zeitstempelspalte haben. Bei von Vertex AI-Endpunkt-Logging generierten BigQuery-Tabellen enthalten die Tabellen bereits die Zeitstempelspalte logging_time.

Als allgemeine BigQuery-Optimierungstechnik empfehlen wir das Partitionieren Ihrer Tabelle nach Zeitstempel, um die Abfrageleistung zu verbessern und Kosten zu kontrollieren, indem Sie die Anzahl der von einer Abfrage gelesenen Byte reduzieren.

Unterstützte Datentypen

Es werden sowohl numerische als auch kategoriale Funktionen unterstützt. Sie können Spalten mit Arrays aufnehmen, z. B. Arrays mit booleschen, kategorialen, String- oder ganzzahligen Werten. Model Monitoring v2 vereinfacht das Array, sodass jedes Element im Array ein spezifischer Wert ist.

Numerische Merkmale sind den folgenden Datentypen zugeordnet:

  • Float
  • Ganzzahl

Kategoriale Merkmale werden den folgenden Datentypen zugeordnet:

  • Boolesch
  • String
  • Kategorial

Modellschema

Model Monitoring v2 verwendet das Modellschema, um Ihre Daten zu parsen. Dieses Schema ist erforderlich, wenn Sie einen Modellmonitor erstellen. Für AutoML Tables müssen Sie kein Modellschema angeben, da Vertex AI Model Monitoring es automatisch abruft.

Das folgende Beispiel zeigt die allgemeine Struktur des erwarteten Schemas:

Python SDK

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
      )
  ]
)

Wenn eine Spalte ein Array von Werten enthält, setzen Sie repeated auf true.

Wenn Model Monitoring v2 bei AutoML Tables das Modellschema abruft, werden die Features im Trainings-Dataset mit Ausnahme der Zielspalte als Eingabefeatures verwendet. Die Vorhersageausgabe ist auf die Spalte predicted_{target_column} festgelegt. Die Extraktionsmethode von Model Monitoring v2 für den Vorhersageausgabewert hängt vom Modelltyp ab. Bei AutoML Tables-Klassifizierungsmodellen überwacht Vertex AI Model Monitoring die Labelverteilung „argmax“. Bei AutoML Tables-Regressionsmodellen überwacht Vertex AI Model Monitoring die Werteverteilung.

Baseline- und Ziel-Datasets

Das Baseline-Dataset stellt einen Ausgangspunkt dar, mit dem Sie Messwerte im Zeitverlauf ermitteln. Das Ziel-Dataset enthält aktuellere Daten, die Sie verwenden, um sie mit dem Baseline-Dataset zu vergleichen. Model Monitoring v2 berechnet die Messwerte zwischen den beiden Datasets, um die Qualität Ihrer Modelle zu verfolgen. Die Baseline- und Ziel-Datasets können aus jeder unterstützten Datenquelle stammen.

Als Beispiele für Ziel- und Baseline-Werte können Sie Ihr Bereitstellungs-Dataset (Ziel) mit dem Trainings-Dataset (Baseline) Ihres Modells vergleichen oder Ihr Bereitstellungs-Dataset (Ziel) mit einem Bereitstellungs-Dataset eines früheren Zeitraums (Baseline) vergleichen.

Ziel-Dataset

Wenn Sie Ihr Ziel-Dataset auswählen, kann Model Monitoring v2 das gesamte Dataset verarbeiten oder Sie können ein Fenster festlegen, das die von Model Monitoring v2 zu untersuchende Datenmenge angibt. Wenn Sie beispielsweise ein 24-Stunden-Fenster angeben, vergleicht Model Monitoring v2 nur die Daten der letzten 24 Stunden mit dem Baseline-Dataset.

Bei der Datenabweichungsanalyse kann die Abweichung flüchtig sein, wenn nicht genügend Volumendaten verarbeitet werden. Ein größeres Zeitfenster kann dazu beitragen, Benachrichtigungen zu vermeiden, die als Folge einer geringen Stichprobenzahl ausgelöst werden.

Baseline-Dataset

Sie können für das Baseline-Dataset jede unterstützte Datenquelle verwenden, z. B. ein von Vertex AI verwaltetes Dataset, das die Trainingsdaten Ihres Modells enthält. Ähnlich wie bei Ziel-Datasets können Sie Model Monitoring v2 so konfigurieren, dass das ganze Dataset oder ein bestimmtes Fenster verarbeitet wird.

Zeitangabe

Sie können die Zeitangaben für das Monitoring auf zwei Arten festlegen:

  • Zeitraum, der ein Start- und Endzeitpaar enthält.
  • Zeitfenster und Offset, wodurch die einzubeziehende Datenmenge und der Zeitraum zwischen den verglichenen Datasets angegeben wird.

Wenn Sie z. B. aktuelle Daten mit Daten vergleichen möchten, die zu einem früheren Zeitpunkt erfasst wurden, können Sie einen Offset festlegen. Der Offset gibt den Zeitraum zwischen Ziel- und Baseline-Datasets an. Beispiel: Sie legen Ihr Ziel-Dataset auf ein Zeitfenster von einem Tag fest und Ihre Baseline mit einem Offset von einer Woche und ebenfalls einem Zeitfenster von einem Tag.

In diesem Fall enthält das Ziel-Dataset Daten aus den 24 Stunden, die vor der Startzeit des Monitoringjobs liegen. Das Baseline-Dataset enthält Daten aus denselben 24 Stunden, aber genau eine Woche früher.

Modellmonitor erstellen

Erstellen Sie einen Modellmonitor, um Monitoring-Details einer Modellversion zuzuordnen, die in Vertex AI Model Registry registriert wurde. Die resultierende Ressource wird als Modellmonitor bezeichnet. Sie können nur einen Modellmonitor pro Modellversion erstellen.

Geben Sie beim Erstellen eines Modellmonitors den Modellnamen, die Version und das Schema an. Bei einigen Modellen, z. B. AutoML-Modellen, wird das Schema für Sie bereitgestellt.

Optional können Sie Monitoring-Ziele, ein Trainings-Dataset, den Monitoring-Ausgabeort und Benachrichtigungseinstellungen im Modellmonitor angeben. Wenn Sie einen Monitoringjob ausführen, verwendet Model Monitoring v2 diese Einstellungen als Standardeinstellungen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Monitoring auf.

    Zu Monitoring

  2. Klicken Sie auf Monitoring konfigurieren.

  3. Wählen Sie ein Modell und die zugehörige Version aus, die überwacht werden soll.

  4. Definieren Sie gegebenenfalls das Schema Ihrer Eingabefeatures, Ihrer Vorhersageausgaben und, sofern verfügbar, die Grundwahrheit.

  5. Optional: Geben Sie zum Überwachen der Abweichung von Ihrem Trainings-Dataset den Speicherort des Datasets an.

  6. Optional: Um einen vorhandenen Cloud Storage-Bucket zum Exportieren von Monitoring-Ergebnissen anzugeben, maximieren Sie Erweiterte Optionen und wählen Sie einen Bucket.

  7. Klicken Sie zum Konfigurieren von Monitoringzielen auf Weiter oder Einrichten, um den Modellmonitor zu erstellen.

    Diese Konfiguration wird beim Ausführen eines Jobs als Standardeinstellungen verwendet.

  8. Wählen Sie die zu überwachenden Ziele aus. Für jedes Ziel können Sie den zu überwachenden Messwert und einen Schwellenwert für Benachrichtigungen festzulegen.

  9. Geben Sie die E-Mail-Adressen und optional Benachrichtigungskanäle in Cloud Monitoring an, um Warnungen und Benachrichtigungen zu erhalten.

Python SDK

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
)