samedi, décembre 9, 2023

Implémenter la gestion des versions de modèles avec Amazon Redshift ML


Amazon Redshift ML permet aux analystes de données, aux développeurs et aux data scientists de former des modèles d’apprentissage automatique (ML) à l’aide de SQL. Dans les articles précédents, nous avons montré comment utiliser la capacité de formation automatique de modèles de Redshift ML pour former classification et régression des modèles. Redshift ML vous permet de créer un modèle à l’aide de SQL et de spécifier votre algorithme, tel que XGBoost. Vous pouvez utiliser Redshift ML pour automatiser la préparation des données, le prétraitement et la sélection de votre type de problème (pour plus d’informations, reportez-vous à Créez, entraînez et déployez des modèles d’apprentissage automatique dans Amazon Redshift à l’aide de SQL avec Amazon Redshift ML). Vous pouvez également amener un modèle préalablement formé à Amazon SageMaker dans Amazon Redshift via Redshift ML pour l’inférence locale. Pour l’inférence locale sur les modèles créés dans SageMaker, le type de modèle ML doit être pris en charge par Redshift ML. Cependant, inférence à distance est disponible pour les types de modèles qui ne sont pas disponibles nativement dans Redshift ML.

Au fil du temps, les modèles ML vieillissent et même si rien de radical ne se produit, de petits changements s’accumulent. Les raisons courantes pour lesquelles les modèles ML doivent être recyclés ou audités incluent :

  • Dérive des données – Étant donné que vos données ont changé au fil du temps, la précision des prédictions de vos modèles ML peut commencer à diminuer par rapport à la précision affichée lors des tests.
  • Dérive conceptuelle – L’algorithme ML initialement utilisé devra peut-être être modifié en raison de différents environnements commerciaux et d’autres besoins changeants.

Vous devrez peut-être actualiser le modèle régulièrement, automatiser le processus et réévaluer la précision améliorée de votre modèle. Au moment d’écrire ces lignes, Amazon Redshift ne prend pas en charge la gestion des versions des modèles ML. Dans cet article, nous montrons comment vous pouvez utiliser la fonctionnalité Bring Your Own Model (BYOM) de Redshift ML pour implémenter la gestion des versions des modèles Redshift ML.

Nous utilisons l’inférence locale pour implémenter la gestion des versions de modèles dans le cadre de l’opérationnalisation des modèles ML. Nous supposons que vous avez une bonne compréhension de vos données et du type de problème le plus applicable à votre cas d’utilisation, et que vous avez créé et déployé des modèles en production.

Vue d’ensemble de la solution

Dans cet article, nous utilisons Redshift ML pour créer un modèle de régression qui prédit le nombre de personnes susceptibles d’utiliser le service de partage de vélos de la ville de Toronto à une heure donnée de la journée. Le modèle prend en compte divers aspects, notamment les vacances et les conditions météorologiques, et comme nous devons prédire un résultat numérique, nous avons utilisé un modèle de régression. Nous utilisons la dérive des données comme raison pour recycler le modèle et utilisons la gestion des versions du modèle dans le cadre de la solution.

Une fois qu’un modèle est validé et utilisé régulièrement pour exécuter des prédictions, vous pouvez créer des versions des modèles, ce qui nécessite de recycler le modèle à l’aide d’un ensemble d’entraînement mis à jour et éventuellement d’un algorithme différent. La gestion des versions répond à deux objectifs principaux :

  • Vous pouvez vous référer aux versions antérieures d’un modèle à des fins de dépannage ou d’audit. Cela vous permet de vous assurer que votre modèle conserve toujours une grande précision avant de passer à une version de modèle plus récente.
  • Vous pouvez continuer à exécuter des requêtes d’inférence sur la version actuelle d’un modèle pendant le processus de formation du modèle de la nouvelle version.

Au moment d’écrire ces lignes, Redshift ML ne dispose pas de fonctionnalités de gestion de versions natives, mais vous pouvez toujours réaliser une gestion de versions en implémentant quelques techniques SQL simples en utilisant la fonctionnalité BYOM. BYOM a été introduit pour prendre en charge les modèles SageMaker pré-entraînés afin d’exécuter vos requêtes d’inférence dans Amazon Redshift. Dans cet article, nous utilisons la même technique BYOM pour créer une version d’un modèle existant construit à l’aide de Redshift ML.

La figure suivante illustre ce flux de travail.

Dans les sections suivantes, nous vous montrons comment créer une version à partir d’un modèle existant, puis effectuer un recyclage du modèle.

Conditions préalables

Comme condition préalable à la mise en œuvre de l’exemple de cet article, vous devez configurer un Cluster Redshift ou Amazon Redshift sans serveur point final. Pour connaître les étapes préliminaires permettant de démarrer et de configurer votre environnement, reportez-vous à Créez, entraînez et déployez des modèles d’apprentissage automatique dans Amazon Redshift à l’aide de SQL avec Amazon Redshift ML.

Nous utilisons le modèle de régression créé dans l’article Créez des modèles de régression avec Amazon Redshift ML. Nous supposons qu’il a déjà été déployé et utilisons ce modèle pour créer de nouvelles versions et recycler le modèle.

Créer une version à partir du modèle existant

La première étape consiste à créer une version du modèle existant (ce qui signifie enregistrer les modifications de développement du modèle) afin qu’un historique soit conservé et que le modèle soit disponible pour comparaison ultérieure.

Le code suivant est le format générique de la syntaxe de la commande CREATE MODEL ; à l’étape suivante, vous obtenez les informations nécessaires pour utiliser cette commande pour créer une nouvelle version :

CREATE MODEL model_name
    FROM ('job_name' | 's3_path' )
    FUNCTION function_name ( data_type [, ...] )
    RETURNS data_type
    IAM_ROLE { default }
    [ SETTINGS (
      S3_BUCKET 'bucket', | --required
      KMS_KEY_ID 'kms_string') --optional
    ];

Ensuite, nous collectons et appliquons les paramètres d’entrée au code CREATE MODEL précédent au modèle. Nous avons besoin du nom du travail et des types de données des valeurs d’entrée et de sortie du modèle. Nous les collectons en exécutant le show model commande sur notre modèle existant. Exécutez la commande suivante dans Amazon Redshift Query Editor v2 :

show model predict_rental_count;

Notez les valeurs de Nom de la tâche AutoML, Types de paramètres de fonctionet le Colonne cible (trip_count) à partir de la sortie du modèle. Nous utilisons ces valeurs dans la commande CREATE MODEL pour créer la version.

L’instruction CREATE MODEL suivante crée une version du modèle actuel en utilisant les valeurs collectées à partir de notre show model commande. Nous ajoutons la date (le format d’exemple est AAAAMMJJ) à la fin des noms de modèle et de fonction pour savoir quand cette nouvelle version a été créée.

CREATE MODEL predict_rental_count_20230706 
FROM 'redshiftml-20230706171639810624' 
FUNCTION predict_rental_count_20230706 (int4, int4, int4, int4, int4, int4, int4, numeric, numeric, int4)
RETURNS float8 
IAM_ROLE default
SETTINGS (
S3_BUCKET '<<your S3 Bucket>>');

Cette commande peut prendre quelques minutes. Une fois terminé, exécutez la commande suivante :

show model predict_rental_count_20230706;

Nous pouvons observer ce qui suit dans le résultat :

  • Nom de la tâche AutoML est le même que la version originale du modèle
  • Nom de la fonction affiche le nouveau nom, comme prévu
  • Type d’inférence montre Localqui désigne qu’il s’agit de BYOM avec inférence locale

Vous pouvez exécuter des requêtes d’inférence à l’aide des deux versions du modèle pour valider les sorties d’inférence.

La capture d’écran suivante montre le résultat de l’inférence du modèle en utilisant la version originale.

La capture d’écran suivante montre le résultat de l’inférence de modèle à l’aide de la copie de version.

Comme vous pouvez le constater, les résultats d’inférence sont les mêmes.

Vous avez maintenant appris à créer une version d’un modèle Redshift ML préalablement formé.

Recycler votre modèle Redshift ML

Après avoir créé une version d’un modèle existant, vous pouvez recycler le modèle existant en créant simplement un nouveau modèle.

Vous pouvez créer et entraîner un nouveau modèle à l’aide de la même commande CREATE MODEL mais en utilisant différents paramètres d’entrée, ensembles de données ou types de problèmes, selon le cas. Pour cet article, nous reformons le modèle sur des ensembles de données plus récents. Nous ajoutons _new au nom du modèle afin qu’il soit similaire au modèle existant à des fins d’identification.

Dans le code suivant, nous utilisons la commande CREATE MODEL avec un nouvel ensemble de données disponible dans le training_data tableau:

CREATE MODEL predict_rental_count_new
FROM training_data
TARGET trip_count
FUNCTION predict_rental_count_new
IAM_ROLE 'arn:aws:iam::<accountid>:role/RedshiftML'
PROBLEM_TYPE regression
OBJECTIVE 'mse'
SETTINGS (s3_bucket 'redshiftml-<your-account-id>',
          s3_garbage_collect off,
          max_runtime 5000);

Exécutez la commande suivante pour vérifier l’état du nouveau modèle :

show model predict_rental_count_new;

Remplacer le modèle Redshift ML existant par le modèle recyclé

La dernière étape consiste à remplacer le modèle existant par le modèle recyclé. Nous faisons cela en supprimant la version originale du modèle et en recréant un modèle en utilisant la technique BYOM.

Tout d’abord, vérifiez votre modèle recyclé pour vous assurer que les scores MSE/RMSE restent stables entre les exécutions d’entraînement du modèle. Pour valider les modèles, vous pouvez exécuter des inférences par chacune des fonctions du modèle sur votre ensemble de données et comparer les résultats. Nous utilisons les requêtes d’inférence fournies dans Créez des modèles de régression avec Amazon Redshift ML.

Après validation, vous pourrez remplacer votre modèle.

Commencez par collecter les détails du predict_rental_count_new modèle.

Noter la Nom de la tâche AutoML valeur, le Types de paramètres de fonction valeurs, et les Colonne cible nom dans la sortie du modèle.

Remplacez le modèle d’origine en supprimant le modèle d’origine, puis en créant le modèle avec les noms de modèle et de fonction d’origine pour vous assurer que les références existantes aux noms de modèle et de fonction fonctionnent :

drop model predict_rental_count;
CREATE MODEL predict_rental_count
FROM 'redshiftml-20230706171639810624' 
FUNCTION predict_rental_count(int4, int4, int4, int4, int4, int4, int4, numeric, numeric, int4)
RETURNS float8 
IAM_ROLE default
SETTINGS (
S3_BUCKET ’<<your S3 Bucket>>’);

La création du modèle devrait se terminer dans quelques minutes. Vous pouvez vérifier l’état du modèle en exécutant la commande suivante :

show model predict_rental_count;

Lorsque le statut du modèle est readyla version la plus récente predict_rental_count de votre modèle existant est disponible pour l’inférence et la version originale du modèle ML predict_rental_count_20230706 est disponible pour référence si nécessaire.

Veuillez vous référer à ceci Dépôt GitHub pour des exemples de scripts permettant d’automatiser la gestion des versions de modèles.

Conclusion

Dans cet article, nous avons montré comment utiliser la fonctionnalité BYOM de Redshift ML pour effectuer la gestion des versions de modèles. Cela vous permet d’avoir un historique de vos modèles afin de pouvoir comparer les scores des modèles au fil du temps, répondre aux demandes d’audit et exécuter des inférences tout en entraînant un nouveau modèle.

Pour plus d’informations sur la création de différents modèles avec Redshift ML, reportez-vous à Amazon Redshift ML.


à propos des auteurs

Rohit Bansal est un architecte de solutions spécialisé en analyse chez AWS. Il se spécialise dans Amazon Redshift et travaille avec les clients pour créer des solutions d’analyse de nouvelle génération à l’aide d’autres services AWS Analytics.

Phil Bates est architecte de solutions spécialiste senior de l’analyse chez AWS. Il possède plus de 25 ans d’expérience dans la mise en œuvre de solutions d’entrepôt de données à grande échelle. Il est passionné par l’idée d’aider les clients tout au long de leur parcours cloud et d’utiliser la puissance du ML au sein de leur entrepôt de données.

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles