ML Observability : suivi du comportement du modèle dans le temps

Le comportement du modèle peut changer au fil du temps en raison de la migration des entrées, des hypothèses de formation obsolètes et des problèmes de pipeline de données, ainsi que les facteurs habituels, avec des modifications du matériel et des logiciels sous-jacents et de la nature fluide du trafic. ML Observability vous permet de suivre la qualité des modèles de production que vous avez déployés via le Snowflake Model Registry à travers plusieurs dimensions, comme la performance, la migration et le volume. En outre, vous pouvez surveiller les performances du modèle pour différents segments de vos données à l’aide de colonnes catégorielles de chaînes.

Actuellement, le moniteur de modèles prend en charge les modèles de régression et de classification binaire.

Note

Pour vous plonger dans l’utilisation de ML Observability, consultez le démarrage rapide.

Flux de travail de ML Observability

Lorsque vous utilisez un modèle qui a été connecté au Snowflake Model Registry pour l’inférence, vous recevez les résultats sous la forme d’un DataFrame Snowpark ou pandas, en fonction du DataFrame de type d’entrée transmis à la méthode d’inférence. Ces données proviennent généralement de Snowflake. Même dans les cas où l’inférence est exécutée en dehors de Snowflake, il est courant de stocker les résultats dans Snowflake. ML Observability vous permet de contrôler la performance de votre modèle dans ces deux scénarios en travaillant sur les données d’inférence stockées. Le flux de travail typique est illustré ci-dessous.

Flux de travail de ML Observability

Les journaux de surveillance stockent les données d’inférence et les prédictions de sorte que la fonction de ML Observability puisse observer les changements dans les prédictions au fil du temps. Les journaux de surveillance sont stockés dans une table qui contient un ID, un horodatage, des fonctions, des prédictions et de la réalité de terrain, qui indique si une ligne donnée est une prédiction ou des données observées. La structure de base est présentée ci-dessous.

ML Observability en action

Vous devez créer explicitement un objet moniteur de modèle pour chaque version de modèle que vous souhaitez contrôler. Chaque version de modèle peut avoir exactement un moniteur, et chaque moniteur peut surveiller exactement une version de modèle ; ils ne peuvent pas être partagés. L’objet moniteur actualise automatiquement les journaux de surveillance en interrogeant les données sources et met à jour les rapports de surveillance sur la base des journaux.

Chaque moniteur contient les informations suivantes :

  • La version du modèle à surveiller.

  • La table dans laquelle sont connectés les journaux du moniteur.

  • La granularité temporelle minimale à laquelle les données sont stockées (fenêtre d’agrégation), actuellement 1 jour minimum.

  • Une table de référence facultative pour les opérations métriques comparatives telles que la migration.

Conditions préalables

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un compte Snowflake.

  • La version 1.7.1 ou ultérieure du paquet Python snowflake-ml-python.

  • Connaissances de Snowflake Model Registry.

Création d’un moniteur de modèle

Créez un moniteur de modèle à l’aide de la commande CREATE MODEL MONITOR. Le moniteur de modèle doit être créé dans le même schéma que la version du modèle à surveiller. Vous devez disposer du privilège CREATE MODEL MONITOR sur le schéma où le moniteur est créé. Vous pouvez créer un maximum de 250 moniteurs de modèles par compte.

Voir CREATE MODEL MONITOR pour plus de détails sur la commande CREATE MODEL MONITOR.

Astuce

Pour plus de détails sur les autres commandes SQL que vous pouvez utiliser avec les moniteurs de modèle, voir Commandes du moniteur de modèles.

Arrêt temporaire et reprise de la surveillance

Vous pouvez suspendre (arrêter temporairement) un moniteur de modèle en utilisant ALTER MODEL MONITOR … SUSPEND. Pour reprendre la surveillance, émettez ALTER MODEL MONITOR … RESUME.

Suspension automatique en cas de défaut d’actualisation

Les moniteurs de modèles suspendent automatiquement les actualisations lorsqu’ils rencontrent cinq échecs consécutifs d’actualisation liés aux tables sources. Vous pouvez voir le statut et la cause de la suspension de l’actualisation avec la commande DESCRIBE MODEL MONITOR. La sortie comprend notamment les colonnes suivantes :

  • aggregation_status : la valeur de cette colonne est un objet JSON. Une ou plusieurs valeurs de cet objet seront SUSPENDED si le moniteur de modèle est suspendu.

  • aggregation_last_error : la valeur de cette colonne est un objet JSON qui contient l’erreur SQL spécifique à l’origine de la suspension.

Après avoir résolu la cause racine de l’échec de l’actualisation, reprenez le moniteur en émettant ALTER MODEL MONITOR … RESUME.

Ajout de segments à un moniteur de modèles

Les moniteurs de modèles prennent en charge la segmentation, ce qui vous permet de contrôler la qualité des modèles dans le temps pour des sous-ensembles spécifiques de vos données, en plus de surveiller tous les ensembles de données. Les segments sont utilisés pour regrouper les données en unités logiques, telles que différentes régions ou différents groupes d’utilisateurs.

Création de moniteurs avec des segments

Lors de la création d’un moniteur de modèle, vous pouvez spécifier des colonnes de segment à l’aide du paramètre SEGMENT_COLUMNS. Les colonnes de segment doivent être des colonnes de chaînes dans vos données sources.

Important

Pour créer des segments sur des colonnes numériques, placez-les dans des catégories valides avant de créer le moniteur. Par exemple, vous pouvez transformer une colonne numérique TEMPERATURE en valeurs catégorielles comme “COLD” (< 32°F), “MODERATE” (32-80°F), and “HOT” (> 80 °F) avant de l’utiliser comme colonne de segment.

CREATE [OR REPLACE] MODEL MONITOR [IF NOT EXISTS] <NAME> WITH
    --- all other existing parameters of CREATE MODEL MONITOR
    SEGMENT_COLUMNS = (<segment_column_name_array>)
Copy

Pour plus de détails sur la syntaxe et les paramètres, consultez CREATE MODEL MONITOR.

Ajout de segments à des moniteurs existants ou à de nouveaux moniteurs

Vous pouvez ajouter des colonnes de segments aux moniteurs existants en utilisant la commande ALTER MODEL MONITOR :

ALTER MODEL MONITOR <NAME> ADD SEGMENT_COLUMN = <segment_column_name>
Copy

Vous pouvez également supprimer des colonnes de segment dans des moniteurs existants :

ALTER MODEL MONITOR <NAME> DROP SEGMENT_COLUMN = <segment_column_name>
Copy

Pour la syntaxe et les options complètes, consultez ALTER MODEL MONITOR.

Définition du segment dans le paramètre Surveillance des segments dans l’UI

Vous pouvez configurer et gérer des segments via les paramètres Surveillance des segments dans l’UI :

Paramètres des segments de ML Observability

L” interface des paramètres des segments vous permet de définir et de configurer les segments à surveiller pour votre modèle.

Choisir le segment dans le sélecteur de segments dans le tableau de bord du moniteur du modèles

Dans le tableau de bord du moniteur de modèles, vous pouvez utiliser le sélecteur de segments pour afficher les métriques de segments spécifiques de vos données :

Sélecteur de segments ML Observability

Considérations relatives aux performances des segments

Les performances dépendent de nombreux facteurs, tels que le nombre de fonctionnalités, le nombre de colonnes de segments, les valeurs uniques par colonne de segments, la taille des entrepôts, le type d’entrepôt, la fenêtre agrégation, le nombre total de lignes et les lignes par fenêtre d’agrégation.

  • L’impact au niveau des performances de CREATE avec SEGMENT_COLUMNS est directement proportionnel au nombre de colonnes de segments dans la requête

  • Si la performanceCREATE est lente avec de nombreuses colonnes de segments. pensez à ajouter des colonnes de segments, une à la fois, en utilisant la commande ALTER

  • Chaque colonne de segment et chaque combinaison de valeurs sont interrogées indépendamment, et il peut y avoir des différences de temps dans la date de la dernière mise à jour des données en fonction de la planification et d’autres facteurs. Mais nous faisons de notre mieux pour mettre à jour toutes les données en même temps.

Vue des rapports de suivi

Pour voir les rapports de suivi, rendez-vous sur le tableau de bord ML Monitoring dans l’Snowsight. Dans le menu de navigation, sélectionnez AI & ML » Models. La liste obtenue contient tous les modèles du Snowflake Model Registry dans toutes les bases de données et tous les schémas auxquels votre rôle actuel a accès.

Ouvrez la page de détails d’un modèle en sélectionnant la ligne correspondante dans la liste Models. La page de détails affiche des informations clés sur le modèle, notamment sa description, ses balises, ses versions et ses moniteurs.

La liste Monitors de la page de détails affiche la liste des moniteurs de modèle, les versions de modèle auxquelles ils sont rattachés, leur statut et la date de leur création.

Ouvrez la page du tableau de bord d’un moniteur de modèle en sélectionnant la ligne correspondante dans la liste des moniteurs. Le tableau de bord est alimenté par des graphiques affichant les mesures clés du modèle au fil du temps. Les graphiques exacts affichés dépendent du type de modèle sur lequel repose le moniteur (c’est-à-dire la classification binaire ou la régression).

Dans le tableau de bord, vous pouvez effectuer les actions suivantes :

  • Modifiez l’étendue des graphiques en cliquant sur le sélecteur d’étendue temporelle.

  • Modifiez les graphiques affichés en cliquant sur le bouton Settings. (Passez la souris sur le nom d’une métrique pour obtenir plus d’informations à son sujet)

  • Comparez les modèles de moniteurs en cliquant sur le menu déroulant du sélecteur de modèles Compare.

  • Affichez plus d’informations sur le modèle de moniteur en sélectionnant Display monitor details.

Interrogation des résultats de surveillance

Chaque moniteur de modèle que vous créez possède les métriques suivantes :

  • Métriques de dérive : Changements de distribution ou déplacement des données

  • Métriques de performance : Changements de distribution ou déplacement des données

  • Métriques statistiques : Dénombrements ou valeurs nulles

Pour interroger les métriques calculées par le moniteur, utilisez les fonctions de métrique du moniteur. Les fonctions de métrique obtiennent les métriques des objets du moniteur de modèle. Vous pouvez utiliser les résultats des fonctions de métrique pour créer des tableaux de bord personnalisés dans Streamlit ou d’autres outils de surveillance centralisée.

Important

Vous devez disposer des privilèges suivants pour travailler avec les objets du moniteur de modèle :

Commande

Privilèges requis

CREATE MODEL MONITOR

  • Le privilège CREATEMODELMONITOR sur le schéma dans lequel vous souhaitez créer le modèle.

  • SELECT sur la source de données (table ou vue)

  • USAGE sur la base de données, le schéma, l’entrepôt et le modèle

SHOW MODEL MONITORS

Tout privilège sur le modèle de moniteur

DESCRIBE MODEL MONITOR

Tout privilège sur le modèle de moniteur

ALTER MODEL MONITOR

MODIFY sur le moniteur du modèle

DROP MODEL MONITOR

OWNERSHIP sur le moniteur du modèle

Utilisez le modèle SQL suivant pour obtenir la métrique de dérive de votre moniteur de modèle.

SELECT *
FROM TABLE(MODEL_MONITOR_DRIFT_METRIC (
                                        <model_monitor_name>,
                                        <drift_metric_name>,
                                        <column_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

Utilisez le modèle SQL suivant pour obtenir la métrique de performance de votre moniteur de modèle.

SELECT *
FROM TABLE(MODEL_MONITOR_PERFORMANCE_METRIC (
                                        <model_monitor_name>,
                                        <metric_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

Utiliser le modèle SQL suivant pour obtenir la métrique statistique à partir de votre moniteur de modèles.

SELECT *
FROM TABLE(MODEL_MONITOR_STAT_METRIC (
                                        <model_monitor_name>,
                                        <metric_name>,
                                        <granularity>,
                                        <start_time>,
                                        <end_time>,
                                        <extra_args>
                                      )
          )
Copy

Interrogation de métriques spécifiques au segment

Pour interroger les métriques de segments spécifiques, utiliser le paramètre <extra_args> parameter with a JSON format that specifies the segment column and value. The <extra_args> est facultatif - s’il n’est pas fourni, la requête renvoie les métriques de toutes les données (requête sans segment).

Note

Actuellement, les requêtes de segment ne prennent en charge qu’une seule paire colonne et valeur de segment par requête. Vous ne pouvez pas interroger plusieurs segments simultanément dans un seul appel de fonction.

Pour les requêtes de segment, utilisez ce format pour le paramètre <extra_args> :

'{"SEGMENTS": [{"column": "<segment_column_name>", "value": "<segment_value>"}]}'
Copy

Par exemple, pour obtenir des métriques de dérive pour les clients premium uniquement :

SELECT *
FROM TABLE(MODEL_MONITOR_DRIFT_METRIC (
                                        'my_customer_monitor',
                                        'PSI',
                                        'FEATURE_1',
                                        'DAY',
                                        '2024-01-01'::TIMESTAMP_NTZ,
                                        '2024-01-31'::TIMESTAMP_NTZ,
                                        '{"SEGMENTS": [{"column": "CUSTOMER_TIER", "value": "PREMIUM"}]}'
                                      )
          )
Copy

Les tables de résultats pour les requêtes de segment comprennent deux colonnes supplémentaires :

  • SEGMENT_COLUMN : Nom de la colonne de segment pour laquelle la métrique est calculée (ou NULL pour les requêtes autres que des segments).

  • SEGMENT_VALUE : Valeur du segment pour lequel la métrique est calculée (ou NULL pour les requêtes autres que des segments).

Pour plus d’informations sur les segments, consultez Ajout de segments à un moniteur de modèles.

Vous pouvez ensemble mettre en place des alertes et des notifications pour vos métriques de surveillance. Pour plus d’informations, voir Alertes et notifications.

Limitations connues

Les limites suivantes s’appliquent aux modèles de moniteurs :

  • Les moniteurs doivent résider dans la même base de données et le même schéma que la version du modèle.

  • Seuls les modèles de régression à sortie unique et de classification binaire sont pris en charge.

  • Au moins une colonne de prédiction (classe ou score) est exigée ; les colonnes réelles sont facultatives mais nécessaires pour les métriques de précision.

  • Le calcul de la dérive nécessite des données de référence. Sans celles-ci, pour ajouter des données de référence, vous devez supprimer le moniteur et le créer à nouveau.

  • Chaque colonne ne peut être utilisée qu’une seule fois dans le moniteur. Par exemple, vous ne pouvez pas utiliser la même colonne que la colonne ID et la colonne de prédiction.

  • Les données ne peuvent pas contenir de valeurs non valides (des valeurs nulles, NaNs, +/-Inf, des scores de probabilité en dehors de l’intervalle 0-1, des classes non binaires, ou plus de deux classes dans une colonne PREDICTION_CLASS_COLUMNS) afin d’éviter l’échec et la suspension du moniteur.

  • Les colonnes d’horodatage doivent être du type TIMESTAMP_NTZ ; les colonnes de prédiction et réelles doivent être du type NUMBER.

  • Vous devez spécifier les fenêtres d’agrégation en jours.

  • Un maximum de 500 fonctions peut être surveillé.

  • Il est possible de créer jusqu’à 250 moniteurs.

  • Les colonnes de segment doivent uniquement être des colonnes catégorielles de chaîne.

  • Un maximal de 5 colonnes de segments par moniteur de modèles (limite stricte).

  • Chaque colonne de segment doit avoir moins de 25 valeurs uniques (limite recommandée).

  • Les valeurs des segments sont sensibles à la casse et les caractères spéciaux ne sont pas pris en charge pour les requêtes de segments.

  • Le filtrage NULL n’est pas pris en charge pour les requêtes de segment.

Considérations relatives aux clients

Calcul de l’entrepôt virtuel :

  • Les moniteurs de modèles utilisent un entrepôt virtuel, ce qui entraîne des coûts lors de la création et de chaque actualisation.

  • Le chargement du tableau de bord Snowsight fait également appel à un entrepôt virtuel, ce qui entraîne des frais supplémentaires.

Stockage :

  • Les moniteurs de modèles matérialisent les données sources dans une table stockée dans votre compte.

  • Les colonnes de segment ajoutent une table matérialisée supplémentaire stockée dans votre compte.

Calcul des services Cloud :

  • Les moniteurs de modèles utilisent le calcul des services cloud pour déclencher des actualisations lorsqu’un objet de base sous-jacent a changé. Le coût de calcul des services Cloud n’est facturé que si le coût quotidien des services cloud est supérieur à 10 % du coût quotidien de l’entrepôt pour le compte.