Partie 3 - construire Un pipeline MLO simplifié (ci/CT/CD)
Cet article présente un guide pour la création d'un pipeline MLOps avec les services AWS. Il se concentre sur la reconversion automatique de modèles, le déploiement et l'optimisation des coûts.
---
Auteur(s):
Jian Jian (Ken), scientifique senior en données et applications, NetApp
Introduction
Dans ce tutoriel, vous apprendrez à utiliser différents services AWS pour construire un pipeline MLOps simple qui englobe l'intégration continue (ci), la formation continue (CT) et le déploiement continu (CD). Contrairement aux pipelines DevOps classiques, le MLOps nécessite des considérations supplémentaires pour mener à bien le cycle opérationnel. En suivant ce tutoriel, vous allez apprendre à intégrer la tomodensitométrie dans la boucle MLOps, ce qui permet d'entraîner en continu vos modèles et de procéder à un déploiement transparent pour l'inférence. Ce tutoriel vous guidera tout au long du processus d'utilisation des services AWS pour établir ce pipeline MLOps de bout en bout.
Manifeste
Fonctionnalité | Nom | Commentaire |
---|---|---|
Stockage des données |
ONTAP AWS FSX |
Reportez-vous à la "1re partie : intégration d'Amazon FSX pour NetApp ONTAP (FSX ONTAP) en tant que compartiment S3 privé dans AWS SageMaker". |
IDE data science |
AWS SageMaker |
Ce tutoriel est basé sur le bloc-notes Jupyter présenté dans "Partie 2 - exploitation d'Amazon FSX pour NetApp ONTAP (FSX ONTAP) en tant que source de données pour l'entraînement des modèles dans SageMaker". |
Fonction permettant de déclencher le pipeline MLOps |
Fonction Lambda d'AWS |
- |
Déclencheur de tâche cron |
AWS EventBridge |
- |
Structure de deep learning |
PyTorch |
- |
Kit de développement logiciel AWS Python |
boto3 |
- |
Langage de programmation |
Python |
v3.10 |
Condition préalable
-
Un système de fichiers FSX ONTAP préconfiguré. Ce tutoriel utilise les données stockées dans FSX ONTAP pour le processus d'entraînement.
-
Une instance SageMaker Notebook configurée pour partager le même VPC que le système de fichiers FSX ONTAP mentionné ci-dessus.
-
Avant de déclencher la fonction AWS Lambda, assurez-vous que l'instance SageMaker Notebook est à l'état Arrêté.
-
Le type d'instance ml.g4dn.xlarge est requis pour exploiter l'accélération GPU nécessaire au calcul des réseaux neuronaux profonds.
Architecture
Ce pipeline MLOps est une implémentation pratique qui utilise un travail cron pour déclencher une fonction sans serveur, qui à son tour exécute un service AWS enregistré avec une fonction de rappel de cycle de vie. AWS EventBridge agit comme travail cron. Il invoque périodiquement une fonction AWS Lambda responsable du recyclage et du redéploiement du modèle. Ce processus implique l'exécution de l'instance AWS SageMaker Notebook pour effectuer les tâches nécessaires.
Configuration pas à pas
Configurations de cycle de vie
Pour configurer la fonction de rappel de cycle de vie pour l'instance d'ordinateur portable AWS SageMaker, vous devez utiliser Lifecycle configurations. Ce service vous permet de définir les actions à effectuer lors de l'activation de l'instance de bloc-notes. Plus précisément, un script shell peut être implémenté dans les configurations Lifecycle pour arrêter automatiquement l'instance de bloc-notes une fois les processus de formation et de déploiement terminés. Il s'agit d'une configuration requise, car le coût est l'un des principaux éléments à prendre en compte dans MLOps.
Il est important de noter que la configuration des configurations Lifecycle doit être configurée à l'avance. Par conséquent, il est recommandé de hiérarchiser la configuration de cet aspect avant de procéder à la configuration des autres pipelines MLOps.
-
Pour configurer une configuration Lifecycle, ouvrez le panneau Sagemaker et naviguez jusqu'à Lifecycle configurations sous la section Admin configurations.
-
Sélectionnez l'onglet Notebook instance et cliquez sur le bouton Créer une configuration
-
Collez le code ci-dessous dans la zone de saisie.
#!/bin/bash set -e sudo -u ec2-user -i <<'EOF' # 1. Retraining and redeploying the model NOTEBOOK_FILE=/home/ec2-user/SageMaker/tyre_quality_classification_local_training.ipynb echo "Activating conda env" source /home/ec2-user/anaconda3/bin/activate pytorch_p310 nohup jupyter nbconvert "$NOTEBOOK_FILE" --ExecutePreprocessor.kernel_name=python --execute --to notebook & nbconvert_pid=$! conda deactivate # 2. Scheduling a job to shutdown the notebook to save the cost PYTHON_DIR='/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.10' echo "Starting the autostop script in cron" (crontab -l 2>/dev/null; echo "*/5 * * * * bash -c 'if ps -p $nbconvert_pid > /dev/null; then echo \"Notebook is still running.\" >> /var/log/jupyter.log; else echo \"Notebook execution completed.\" >> /var/log/jupyter.log; $PYTHON_DIR -c \"import boto3;boto3.client(\'sagemaker\').stop_notebook_instance(NotebookInstanceName=get_notebook_name())\" >> /var/log/jupyter.log; fi'") | crontab - EOF
-
Ce script exécute le Jupyter Notebook, qui gère le recyclage et le redéploiement du modèle pour l'inférence. Une fois l'exécution terminée, l'ordinateur s'arrête automatiquement dans les 5 minutes. Pour en savoir plus sur l'énoncé du problème et l'implémentation du code, veuillez vous reporter à "Partie 2 - exploitation d'Amazon FSX pour NetApp ONTAP (FSX ONTAP) en tant que source de données pour l'entraînement des modèles dans SageMaker".
-
Après la création, naviguez jusqu'à instances de bloc-notes, sélectionnez l'instance cible, puis cliquez sur mettre à jour les paramètres dans la liste déroulante actions.
-
Sélectionnez la configuration Lifecycle créée et cliquez sur mettre à jour l'instance de bloc-notes.
Fonction sans serveur AWS Lambda
Comme mentionné précédemment, la fonction AWS Lambda est responsable de l'activation de l'instance AWS SageMaker Notebook.
-
Pour créer une fonction AWS Lambda, accédez au panneau correspondant, passez à l'onglet Functions et cliquez sur Create Function.
-
Veuillez classer toutes les entrées requises sur la page et n'oubliez pas de passer à Python 3.10.
-
Veuillez vérifier que le rôle désigné possède l'autorisation requise AmazonSageMakerFullAccess et cliquez sur le bouton Créer fonction.
-
Sélectionnez la fonction Lambda créée. Dans l'onglet Code, copiez et collez le code suivant dans la zone de texte. Ce code démarre l'instance d'ordinateur portable nommée fsxn-ontap.
import boto3 import logging def lambda_handler(event, context): client = boto3.client('sagemaker') logging.info('Invoking SageMaker') client.start_notebook_instance(NotebookInstanceName='fsxn-ontap') return { 'statusCode': 200, 'body': f'Starting notebook instance: {notebook_instance_name}' }
-
Cliquez sur le bouton déployer pour appliquer ce changement de code.
-
Pour spécifier comment déclencher cette fonction Lambda d'AWS, cliquez sur le bouton Ajouter un déclencheur.
-
Sélectionnez EventBridge dans le menu déroulant, puis cliquez sur le bouton radio Créer une nouvelle règle. Dans le champ expression du programme, entrez
rate(1 day)
, Puis cliquez sur le bouton Ajouter pour créer et appliquer cette nouvelle règle de travail cron à la fonction Lambda d'AWS.
Après avoir terminé la configuration en deux étapes, chaque jour, la fonction AWS Lambda lance le SageMaker Notebook, effectue une nouvelle formation du modèle à l'aide des données du référentiel FSX ONTAP, redéploie le modèle mis à jour dans l'environnement de production et arrête automatiquement l'instance SageMaker Notebook pour optimiser le coût. Cela permet de s'assurer que le modèle reste à jour.
Ceci conclut le tutoriel sur le développement d'un pipeline MLOps.