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, comme les points de terminaison Vertex AI, GKE ou BigQuery. Pour enregistrer un modèle que vous diffusez dans Vertex AI, consultez 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 son nom, comme indiqué dans l'exemple suivant :
SDK Python
model = aiplatform.Model.upload( display_name="MODEL_NAME" )
Pour les modèles de référence, Model Monitoring est compatible avec les 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 une surveillance continue, votre tableau doit inclure une colonne d'horodatage, que vous spécifiez dans votre ensemble de données en tant que
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 avec les noms de vos colonnes sur la première ligne de votre fichier.
- Jobs de prédiction par lots 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 objetsinstances
sont insérés dans la table de journalisation, dans la colonnerequest_payload
, sous forme de tableau :[INSTANCE_1, INSTANCE_2]
. De même, les objetspredictions
sont insérés dans la table de journalisation, dans la colonneresponse_payload
, sous forme de 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 page Format d'ensemble de données tabulaires.
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 spécifications temporelles n'est compatible qu'avec la journalisation des points de terminaison BigQuery et Vertex AI comme 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 tant que technique d'optimisation générale de BigQuery, nous vous recommandons de partitionner votre table par code temporel pour améliorer les performances des requêtes et maîtriser 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, comme un tableau de valeurs booléennes, catégorielles, de chaînes ou entières. La version 2 de la surveillance du modèle aplatit le tableau de sorte que chaque élément du tableau soit une valeur distincte.
Les caractéristiques numériques sont mappées aux types de données suivants :
- Nombre à virgule flottante
- Entier
Les caractéristiques catégorielles sont mappées 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 monitor 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 montre 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 Model Monitoring v2 récupère le schéma du modèle, il utilise les caractéristiques qui se trouvent dans l'ensemble de données d'entraînement comme caractéristiques d'entrée, à l'exclusion 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 utilisez pour les comparer à 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 cible peuvent provenir de n'importe quelle source de données compatible.
Par exemple, vous pouvez comparer votre ensemble de données de diffusion (cible) avec 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) avec 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 à 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 période plus longue 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 des spécifications de durée de surveillance de deux manières :
- Plage horaire, qui inclut une paire d'heures de début et de fin.
- Période 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 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 du job 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 plus tôt.
Créer une surveillance du modèle
Créez un monitor de modèle pour associer des informations de surveillance à une version de modèle enregistrée dans Vertex AI Model Registry. La ressource obtenue est appelée surveillance de modèle. Vous ne pouvez créer qu'un seul moniteur de modèle par version de modèle.
Lorsque vous créez un modèle de surveillance, 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.
Dans la surveillance de modèle, 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 les paramètres de notification. Lorsque vous exécutez un job de surveillance, Model Monitoring v2 utilise ces paramètres par défaut.
Console
Dans la console Google Cloud , accédez à la page Monitoring.
Cliquez sur Configurer la surveillance.
Sélectionnez un modèle et sa version à surveiller.
Le cas échéant, définissez le schéma de vos caractéristiques d'entrée, de vos résultats de prédiction et, si disponible, de la vérité terrain.
Facultatif : Pour surveiller la dérive à partir de votre ensemble de données d'entraînement, spécifiez l'emplacement de votre ensemble de données.
Facultatif : Pour spécifier un bucket Cloud Storage existant pour l'exportation des résultats de surveillance, développez Options avancées, puis sélectionnez un bucket.
Pour configurer les objectifs de surveillance, cliquez sur Continuer ou sur Configurer pour créer le moniteur de modèle.
Cette configuration est utilisée comme paramètre par défaut lors de l'exécution d'un job.
Sélectionnez les objectifs à surveiller. Pour chaque objectif, vous pouvez définir la métrique à surveiller et un seuil pour les alertes.
Spécifiez les adresses e-mail et, éventuellement, les canaux de notification dans Cloud Monitoring pour les alertes et notifications de surveillance.
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 )