Configurer la surveillance du modèle

Avant de pouvoir commencer à surveiller un modèle, vous devez l'enregistrer dans Vertex AI Model Registry, puis configurer les détails de la surveillance en créant un moniteur de modèle. Cette page explique comment enregistrer un modèle et décrit toutes les spécifications que vous pouvez définir dans une configuration de surveillance.

Model Monitoring v2 ne prend en charge que les modèles tabulaires. Ces modèles peuvent être diffusés sur Vertex AI ou sur une autre infrastructure de diffusion.

Enregistrer le modèle

Vous pouvez surveiller les modèles déployés sur n'importe quelle infrastructure de diffusion, par exemple sur des points de terminaison Vertex AI, GKE ou BigQuery. Pour enregistrer un modèle que vous diffusez dans Vertex AI, consultez la section Importer des modèles.

Pour les modèles que vous diffusez en dehors de Vertex AI, vous pouvez enregistrer un modèle de référence, qui est un espace réservé pour les modèles diffusés sur d'autres ressources. Lorsque vous enregistrez un modèle de référence, vous enregistrez le nom du modèle, comme illustré dans l'exemple suivant :

SDK Python

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

Pour les modèles de référence, la surveillance des modèles peut prendre en charge des ensembles de données provenant de Cloud Storage ou de BigQuery. Vous ne pouvez pas surveiller les attributions de caractéristiques pour les modèles de référence.

Sources de données

Vous pouvez surveiller les métriques dans les données stockées dans les sources suivantes. Les fonctionnalités imbriquées ne sont pas acceptées. Pour analyser des données imbriquées, commencez par les aplatir. Si vos données se trouvent, par exemple, dans BigQuery, vous pouvez utiliser SQL pour transformer les fonctionnalités imbriquées.

BigQuery
Vous pouvez fournir un URI de table BigQuery ou une requête SQL. Pour spécifier une période ou configurer la surveillance continue, votre table doit inclure une colonne d'horodatage, que vous spécifiez dans votre ensemble de données sous la forme timestamp_field.
Cloud Storage
Les données doivent être stockées au format CSV ou JSONL. Pour les fichiers CSV, incluez un en-tête contenant les noms de vos colonnes en tant que première ligne de votre fichier.
Tâches de prédiction par lot Vertex AI
Fournissez le nom complet de la ressource de job de prédiction par lot pour surveiller un job de prédiction par lot. Vous pouvez exécuter un job de surveillance dès que vous créez le job de prédiction par lot. Vous n'avez pas besoin d'attendre la fin du job par lot. Model Monitoring v2 exécute votre job de surveillance peu de temps après la fin du job de prédiction par lot.
Journalisation des points de terminaison Vertex AI

Vous devez activer la journalisation des requêtes/réponses sur le point de terminaison avant de pouvoir commencer à le surveiller. Les points de terminaison privés ne sont pas compatibles, car ils ne sont pas compatibles avec la journalisation des requêtes/réponses.

Model Monitoring v2 s'attend à ce que le format JSON des requêtes/réponses du point de terminaison Vertex AI suive le format utilisé par la méthode predict. Les objets instances sont insérés dans la table de journalisation de la colonne request_payload en tant que tableau : [INSTANCE_1, INSTANCE_2]. De même, les objets predictions sont insérés dans la table de journalisation de la colonne response_payload en tant que tableau : [PREDICTION_1, PREDICTION_2].

D'autres méthodes sont acceptées (telles que la prédiction brute), mais vos données doivent respecter le format JSON de la requête/réponse, comme indiqué dans la documentation de référence de l'API pour la méthode predict.

Ensemble de données géré Vertex AI

Ensembles de données gérés dans Vertex AI Pour en savoir plus, consultez la section Format d'ensemble de données tabulaire.

Surveillance continue

La surveillance continue (également appelée exécution planifiée) vous permet d'exécuter des jobs de surveillance selon une planification que vous définissez. La surveillance continue des modèles avec des spécifications de temps n'est compatible qu'avec la journalisation des points de terminaison BigQuery et Vertex AI en tant que sources de données.

Pour utiliser BigQuery comme source de surveillance continue avec des spécifications temporelles, votre table doit comporter une colonne d'horodatage. Pour les tables BigQuery générées par la journalisation des points de terminaison Vertex AI, les tables incluent déjà une colonne d'horodatage logging_time.

En règle générale, nous vous recommandons d'effectuer le partitionnement de votre table par code temporel pour améliorer les performances des requêtes et contrôler les coûts en réduisant le nombre d'octets lus par une requête.

Types de données acceptés

Les caractéristiques numériques et catégorielles sont acceptées. Vous pouvez inclure des colonnes avec des tableaux, tels qu'un tableau de valeurs booléennes, catégorielles, de chaîne ou d'entier. La version 2 de la surveillance des modèles aplatit le tableau de sorte que chaque élément du tableau soit une valeur distincte.

Les caractéristiques numériques correspondent aux types de données suivants :

  • Nombre à virgule flottante
  • Entier

Les caractéristiques catégorielles correspondent aux types de données suivants :

  • Booléen
  • Chaîne
  • Catégorielle

Schéma de modèle

Model Monitoring v2 utilise le schéma du modèle pour analyser vos données. Ce schéma est obligatoire lorsque vous créez un moniteur de modèle. Pour AutoML Tables, vous n'avez pas besoin de spécifier le schéma du modèle. Vertex AI Model Monitoring le récupère automatiquement.

L'exemple suivant illustre la structure générale du schéma attendu :

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

Si une colonne inclut un tableau de valeurs, définissez repeated sur true.

Pour AutoML Tables, lorsque la surveillance des modèles v2 récupère le schéma du modèle, elle utilise les caractéristiques de l'ensemble de données d'entraînement comme caractéristiques d'entrée, à l'exception de la colonne cible. Le résultat de la prédiction est défini sur la colonne predicted_{target_column}. De plus, la méthode d'extraction de la valeur du résultat de la prédiction de Model Monitoring v2 dépend du type de modèle. Pour les modèles de classification AutoML Tables, Vertex AI Model Monitoring surveille la distribution des libellés argmax. Pour les modèles de régression AutoML Tables, Vertex AI Model Monitoring surveille la distribution des valeurs.

Ensembles de données de référence et cibles

L'ensemble de données de référence représente un point de référence que vous utilisez pour mesurer les métriques au fil du temps. L'ensemble de données cible inclut des données plus récentes que vous comparez à l'ensemble de données de référence. Model Monitoring v2 calcule les métriques entre les deux ensembles de données pour vous aider à suivre la qualité de vos modèles. Les ensembles de données de référence et cibles peuvent provenir de n'importe quelle source de données compatible.

À titre d'exemple, vous pouvez comparer votre ensemble de données de diffusion (cible) à l'ensemble de données d'entraînement de votre modèle (référence), ou comparer votre ensemble de données de diffusion (cible) à un ensemble de données de diffusion d'une période antérieure (référence).

Ensemble de données cible

Lorsque vous sélectionnez votre ensemble de données cible, Model Monitoring v2 peut traiter l'intégralité de l'ensemble de données ou vous pouvez définir une fenêtre qui spécifie la quantité de données à examiner. Par exemple, si vous spécifiez une période de 24 heures, Model Monitoring v2 ne compare que les données des 24 dernières heures avec l'ensemble de données de référence.

Pour l'analyse de la dérive des données, la dérive peut être volatile si un volume de données insuffisant est traité. Une fenêtre temporelle plus large peut vous aider à éviter les alertes déclenchées en raison d'un faible nombre d'échantillons.

Ensemble de données de référence

Vous pouvez définir votre ensemble de données de référence sur n'importe quelle source de données compatible, comme un ensemble de données géré Vertex AI contenant les données d'entraînement de votre modèle. Comme pour les ensembles de données cibles, vous pouvez choisir de faire traiter l'intégralité de l'ensemble de données ou une fenêtre spécifique par Model Monitoring v2.

Spécification temporelle

Vous pouvez définir les spécifications de la période de surveillance de deux manières :

  • Plage horaire, qui comprend une paire d'heures de début et de fin.
  • Fenêtre temporelle et décalage, qui spécifient la quantité de données à inclure et la période entre les ensembles de données de comparaison.

Par exemple, si vous souhaitez comparer des données récentes avec des données collectées précédemment, vous pouvez définir un décalage. Le décalage spécifie la période de temps entre les ensembles de données cibles et de référence. Par exemple, imaginez que vous définissiez votre ensemble de données cible avec une fenêtre d'un jour et que votre référence soit définie avec un décalage d'une semaine, également avec une fenêtre d'un jour.

Dans ce cas, l'ensemble de données cible inclut les données des 24 heures précédant l'heure de début de la tâche de surveillance. L'ensemble de données de référence inclut les données de la même période de 24 heures, mais exactement une semaine auparavant.

Créer une surveillance du modèle

Créez un moniteur de modèle pour associer des détails de surveillance à une version de modèle enregistrée dans Vertex AI Model Registry. La ressource obtenue est appelée surveillance du modèle. Vous ne pouvez créer qu'un seul moniteur de modèle par version de modèle.

Lorsque vous créez une surveillance de modèle, spécifiez le nom du modèle, sa version et son schéma. Pour certains modèles, tels que les modèles AutoML, le schéma vous est fourni.

Vous pouvez éventuellement définir des objectifs de surveillance, un ensemble de données d'entraînement, l'emplacement des résultats de surveillance et des paramètres de notification dans la surveillance de modèle. Lorsque vous exécutez une tâche de surveillance, Model Monitoring v2 utilise ces paramètres par défaut.

Console

  1. Dans Google Cloud Console, accédez à la page Monitoring.

    Accéder à Monitoring

  2. Cliquez sur Configurer la surveillance.

  3. Sélectionnez un modèle et sa version à surveiller.

  4. Le cas échéant, définissez le schéma de vos caractéristiques d'entrée, vos sorties de prédiction et, le cas échéant, la vérité terrain.

  5. Facultatif : Pour surveiller la dérive de votre ensemble de données d'entraînement, spécifiez l'emplacement de votre ensemble de données.

  6. Facultatif : Pour spécifier un bucket Cloud Storage existant pour exporter les résultats de surveillance, développez Options avancées, puis sélectionnez un bucket.

  7. Pour configurer des objectifs de surveillance, cliquez sur Continuer ou sur Configurer pour créer la surveillance du modèle.

    Cette configuration est utilisée par défaut lors de l'exécution d'une tâche.

  8. Sélectionnez les objectifs à surveiller. Pour chaque objectif, vous pouvez définir la métrique à surveiller et un seuil d'alerte.

  9. Spécifiez les adresses e-mail et, éventuellement, les canaux de notification dans Cloud Monitoring pour surveiller les alertes et les notifications.

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
)