On évoque de manière toujours plus soutenue l’apprentissage automatique (ou Machine Learning) dans les entreprises, et ce dans tous les domaines: Prédiction de vente, Maintenance prédictive, assistance au support client…
Cependant, pour en faire le levier d’innovation et de compétitivité attendu, les entreprises doivent surmonter de nombreuses difficultés parmi lesquelles le manque de compétences, la complexité des plateformes, la capacité à explorer et transformer les données, l’intégration des phases d’apprentissage et de prédiction…
Les offres cloud, et aujourd’hui celle d’AWS que nous allons présenter, ont largement simplifié l’accès à des solutions favorisant l’agilité et la productivité. L’environnement pour Data Scientist d’AWS est le service Amazon SageMaker.
Cette offre est similaire aux initiatives des autres fournisseurs de cloud :
- Google : Colab + TensorFlow (évoqué dans notre dernier article)
- Microsoft : AI Platform
- OVHCloud : Prescience (en incubation et dont nous avions parlé ici)
- …et qu’on peut rapprocher de DataBricks ML Flow (ici).
Il s’agit de fournir un environnement de développement, d’entrainement et de déploiement pour le Machine Learning qui propose une intégration complète avec l’écosystème cloud:
- Accès aux données,
- Calculs sur des infrastructures adaptées (du simple serveur à un cluster de GPUs)
- Export des modèles,
- Création d’APIs scalables pour effectuer des prédictions à partir des modèles.
Fonctionnement de Amazon Sage Maker:
Amazon SageMaker comprend trois modules : Build, Train et Deploy
Le Module Build offre un environnement hébergé permettant de travailler sur vos données, d’expérimenter les algorithmes et de visualiser les résultats.
Ce module repose largement sur des Bloc-notes (ou notebooks): Amazon SageMaker propose des instances entièrement gérées qui exécutent des blocs-notes Jupyter pour l’exploration et le prétraitement des données Ces blocs-notes sont équipés:
- de pilotes CUDA et cuDNN pour les plateformes populaires de deep learning,
- de packages Anaconda
- de bibliothèques pour TensorFlow, Apache MXNet, PyTorch et Chainer.
Algorithmes: SageMaker fournit des packages d’algorithmes de Machine Learning qui se veulent optimisés en termes de rapidité, scalabilité et précision.
On peut également déployer dans Amazon SageMaker ses propres algorithmes.
Parmi les algorithmes prêts à l’emploi, on peut citer ceux dédiés aux séries temporelles sous la bannière Amazon Forecast
Amazon Forecast dispose de 4 algorithmes pour les séries temporelles via R (ARIMA et ETS) , Python(Prophet) et ses propres algorithmes d’apprentissage supervisé (DeepAR+) à l’aide de réseaux neuronaux récurrents (RNN) :
- Algorithmes DeepAR + : développés par l’équipe Amazon, pour adresser les cas où plusieurs séries temporelles sont à traiter, l’idée est de former un seul modèle commun pour toutes les séries.
- Algorithme des séries chronologiques non paramétriques (NTPS) : cet algorithme est particulièrement utilisé dans le cas des séries temporelles intermittentes (c’est à dire qu’il y a beaucoup des valeurs 0 dans la série historique )
Build intègre une large palette de frameworks:
Une des lignes directrices est de rester maître des librairies et technologies sous-jacentes, et SageMaker offre à ce titre une couverture très large des frameworks connus comme: TensorFlow, Apache MXNet, Chainer, PyTorch, Scikit-learn et SparkML
Module Train:
Automatic Model Tuning:
Les data scientists emploient habituellement la méthode GrisSearchCV dans le package scikit-learn pour optimiser les paramètres d’un modèle. Dans Amazon SageMaker, la recherche des paramètres optimaux pour l’algorithme utilisé est là aussi largement automatisée. Dans mon exemple, je souhaite optimiser un modèle basé sur l’algoritgme XGBoot sans connaissance a priori des valeurs d’hyperparamètres eta, alpha, min_child_weight et max_depth optimales. Amazon SageMaker prend en charge la recherche de la meilleure combinaison de valeurs des paramètres.Il faut cependant rester vigilant sur les impacts en termes de temps et coûts d’entraînement
https://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/xgboost_hyperparameters.html
Des modèles entraînés une seule fois exportés dans de multiples applications:
C’est le rôle de Amazon SageMaker Neo, qui part d’un entraînement dans le cloud pour le déployer dans les environnements cibles : Traitement batch, application mobile, application web, API… en particulier grâce à l‘intégration des technologies ONNX, Tensorflow et MXNet
Fonctionnalité de recherche de modèle:
Parce qu’un processus de Machine Learning peut générer d’innombrables modèles différents qu’il faut savoir organiser, sélectionner, documenter et retrouver (notamment pour trouver les raisons de traçabilité), SageMaker propose une fonction de recherche.
Module Deploy:
Nous pouvons déployer le modèle selon les modes Realtime Prediction et Batch.
Pour le temps réel, un des grands avantages est la création automatique de micro-services accessibles par appel REST, qui met en ligne le service de prédiction avec une intervention minimale !
Pour des prédictions en masse, le mode Batch sera privilégié, plus performant et économique sur les traitements par lots.
Illustration au travers d’un projet Data Science :
Nous allons maintenant suivre le déploiement d’un modèle de Machine Learning sur Amazon SageMaker. J’ai pris le dataset “Breast Cancer Wisconsion (Diagnostic)” disponible sur la plateforme Kaggle. Ce dataset contient 569 observations et 32 colonnes, la première colonne est le numéro identifiant de la patiente, la deuxième colonne est la variable expliquée binaire qui prend 2 catégories (M=Malin) et (Bénin) suivi de 30 variables explicatives. L’objectif est de prédire si le cancer est bénin ou malin.
Etape 1: Créer un bucket en S3 où on stocke les données et les résultats
Ici, j’ai créé un bucket qui s’appelle “xgboot-ml”
Etape 2: Lancer une instance de bloc-notes ASM:
Une instance de bloc-notes Amazon SageMaker est une instance de calcul de Machine Learning (ML) entièrement gérée par Amazon Elastic Compute Cloud (Amazon EC2) qui exécute l’application de bloc-notes Jupyter. Vous utilisez le bloc-notes instance pour créer et gérer les blocs-notes Jupyter
Pour permettre à l’instance portable d’accéder et de télécharger en toute sécurité des données sur Amazon S3, un rôle IAM doit être spécifié. Dans le champ de rôle IAM, choisissez Créer un nouveau rôle pour qu’Amazon SageMaker crée un rôle avec les autorisations requises et l’assigne à votre instance. Alternativement, vous pouvez choisir un rôle IAM existant dans votre compte à cette fin.
Dans la boîte de rôle Créer une IAM, selon votre stratégie, vous pouvez sélectionner un bucket S3 spécifique ou bien n’importe quel bucket. Cette dernière option permet à votre instance SageMaker d’accéder à tous les buckets S3 de votre compte.
Choisir ensuite, créer une instance de notebook
Sur la page des instances Notebook, vous devez voir votre nouvelle instance portable dans l’état Pending, une fois que votre instance change en l’état “ In Service”, vous pouvez lancer votre notebook Jupyter ou Jupyter Lab
Etape 3: Préparation des données
Les noyaux présents dans Jupyter sont Python 2 et 3, Apache MXNet, TensorFlow, PySpark et R. Pour créer un bloc-notes il faut sélectionner un noyau au travers du menu New
Dans l’onglet ‘SageMaker Examples’, on peut également trouver des exemples de notebooks qui sont des points de départ pour développer notre cas d’usage.
J’ai décidé de lancer un notebook sous Python pour déployer mon modèle. Pour préparer les données, former le modèle ML et les déployer, vous devrez importer certaines bibliothèques et définir quelques variables environnementales dans votre environnement Jupyter.
Avec Python, il existe 2 packages principaux pour travailler avec AWS :
- boto3: pour travailler avec les services AWS en général
- sagemaker : pour travailler directement avec le service Amazon SageMaker
Etape 4: Charger les données dans l’environnement Jupyter instance
Notez bien que SageMaker ne supporte que quelques formats de data pour entraîner le modèle et faire les prédictions. En général, il support les formats : CSV, RecordIO. Il y a quelques algorithmes qui supportent aussi les formats (LibSVM,JSON, Parquet). Il faut donc d’abord nettoyer et transformer les données dans le format correspondant
Les type de data requis en fonction de l’algorithme sont décrits ici :
https://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html
Les données sont ensuite chargées dans le bucket S3
Etape 5: Entrainer le modèle
Les algorithmes dans SageMaker sont disponibles via des conteneurs Docker. Le kit SDK SageMaker Python inclut l’estimateur sagemaker.estimator.Estimator. On peut utiliser cette classe, dans le module sagemaker.estimator, avec n’importe quel algorithme. Dans mon exemple, j’ai décidé d’utiliser l’algorithme “XGBOOST”
Il faut auparavant définir les paramètres pour SageMaker Estimator object,nous pouvons définir le nombre des instances EC2 (des machines virtuelles) dont on a besoin pour améliorer la vitesse d’entraînement du modèle via la fonction sagemaker.estimator.Estimator.
Définissez ensuite les valeurs des hyperparamètres de l’algorithme choisi pour entraîner le modèle en appelant la méthode set_hyperparameters de l’estimateur. Pour connaître les paramètres de l’algorithme utilisé, consulter le lien suivant :
https://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/algos.html
Comme tous les projet Data Science, le dataset est divisé en 3 échantillons: Apprentissage pour entraîner le modèle, Test pour évaluer la qualité de modèle et Validation pour valider de modèle.
Pour démarrer l’entraînement de modèle, appelez la méthode fit de l’estimateur.
Etape 6: Déployer le modèle sur Amazon Sage Maker
Pour obtenir des prédictions, déployez votre modèle que vous avez déjà créé en appelant la méthode deploy. On peut créer aussi une autre instance EC2 pour cette étape afin de déployer le modèle
Amazon SageMaker vous permet de déployer votre modèle en fournissant un point de terminaison que les consommateurs peuvent invoquer par un appel d’API simple et sécurisé à l’aide d’une demande HTTPS.
On peut chercher dans le navigateur de SageMaker – module console pour trouver le modèle qu’on a généré :
Le déploiement de modèles correspond au processus de mise à disposition dans des environnements de production de vos modèles de machine learning. Ils peuvent alors fournir des prédictions à d’autres systèmes logiciels.
Etape 7: Valider le modèle
Il y a plusieurs indicateurs pour évaluer la qualité du modèle: total Classification Accuracy, AUC, F1 Score, Recall et Précision. Dans mon exemple, j’utilise Accuracy Totale
Nous observons ici, sur l’échantillon de test, que l’on a obtenu 95,2% d’accuracy totale pour notre classification
Etape 8:Nettoyer le modèle et les points de terminaison
⚠️ Une fois que l’on a terminé toutes les étapes importantes, il ne faut pas oublier de les supprimer pour éviter les frais inutiles.
Etape 9: Intégrer des points de terminaison Amazon SageMaker dans les API accessibles sur Internet
Il nous faut désormais mettre en production le modèle, ce qui est une affaire complexe, longue et impliquant différentes équipes venant de différents mondes ( des Data Scientist, des Développeurs, des Software Ingénieurs…).
Une des grandes qualité de l’offre SageMarker est l’intégration avec les services AWS qui facilitent ce passage : Amazon API Gateway et Amazon Lamba
APPELLER VIA API UN MODÈLE DE MACHINE LEARNING AVEC AMAZON LAMBDA ET AMAZON GATEWAY
Le diagramme ci-dessous nous montre comment appeler un point de terminaison
(ou EndPoint) d’API. Ce point effectue les prédictions à partir de votre modèle créé dans SageMaker :
- Un événement client appelle une action de l’API ‘Amazon API Gateway’ et transmet les valeurs de paramètre.
- API Gateway transmet les valeurs de paramètre à la fonction Lambda.
- La fonction Lambda analyse la valeur et l’envoie au point de terminaison du modèle SageMaker.
- Le modèle effectue la prédiction et renvoie la valeur prédite à AWS Lambda.
- La fonction Lambda analyse la valeur renvoyée et la renvoie à la passerelle API. L’API Gateway répond au client avec cette valeur.
Pré-requis pour créer une fonction de Lambda:
Créer cette fonction de Lambda a pour objectif d’appeler le point de terminaison du modèle Machine Learning qu’on a déjà entraîné dans Amazon Sagemaker.
Avant de créer la fonction, il faut s’assurer que votre compte IAM a les autorisations pour appeler le point de terminaison de Amazon SageMaker, puis vérifier que la stratégie de bucket ne refuse pas explicitement l’accès au rôle de la fonction Lambda. Autrement, il faut créer une stratégie qui permet d’appeler le point de terminaison à partir de Amazon SageMaker.
Dans votre répertoire IAM, choisissez Stratégies. Il y a 2 façons qui permettent de créer une stratégie :
Cas 1: Basé sur les stratégies existantes: on cherche alors les stratégies nécessaires sur la base de recherche. Dans l’exemple ici, j’ai choisi la stratégie AmazonSageMaker Full Access et AmazonS3FullAccess. Enfin, cliquer sur le bouton Créer une stratégie
Dans le service, choisir SageMaker , ensuite, choisir InvokeEndpoint avec le niveau d’accès Lire,
Au niveau Ressource, choisir Toutes les ressources
Choisir ensuite Examiner une stratégie, remplir ensuite les champs comme Nom…
Cas 2: Programmer directement avec la stratégie avec laquelle on veut travailler
Une fois qu’on a affecté les stratégies nécessaires à notre compte IAM, on peut lancer une fonction Amazon Lambda
Etape 1: Lancer le service Amazon Lambda,
Cliquer sur le bouton Créer une fonction
Dans l’étape suivante :
- Choisir créer à partir de zéro, remplir le champ de ‘Nom de la fonction’
- On peut choisir le langage de programmation :
- Choisir ensuite un rôle que nous avons créé à l’étape précédente pour se connecter au point de terminaison:
- L’environnement qui permet de créer la fonction Lambda :
ENDPOINT_NAME est une variable d’environnement contenant le nom de point de terminaison du modèle Machine Learning entraîné dans l’environnement Amazon Sage Maker qu’on a déjà déployé. Remplacez la valeur “DEMO-lineaire-endpoint-201911211300” par le nom de point de terminaison de votre modèle.
- Une fois ces étapes terminées, choisir Enregistrer
Créer une application d’API Gateway:
Etape 1: Ouvrir la console Amazon API Gateway
- Choisir “Créer une API”, remplir les champs “Nom d’API”. Laisser le Type de point d’extrémité à ‘Regional’
Etape 2:
Ensuite, dans la liste déroulante “Action” créez un choix de ressource, en lui attribuant un nom. Lorsque la ressource est créée, dans la même liste déroulante “Action”, choisissez “Créer une méthode” ensuite choisir la méthode “POST”
- Pour Type d’intégration: choisir ‘Fonction Lambda’
- Ensuite, remplir le champ “Fonction Lambda” par le nom de fonction Lambda que vous avez créé dans l’étape précédent
Etape 3:
Dans la liste déroulante “Action”, choisir “Déployer une API”
- Dans ‘Étape de déploiement’, choisir “Nouvelle étape”, remplir ensuite le champ “Nom de l’environnement”, appuyer ensuite sur le bouton “Déployer”
Maintenant, nous avons une API Gateway et une fonction Lambda. On peut tester le résultat obtenu directement dans l’interface fournie à cet usage par AWS :
- On peut tester aussi notre API sur l’application PostMan pour simuler un client extérieur à AWS (comme le serait une application mobile, par exemple)
Notez bien que l’adresse http qu’on utilise ici est l’adresse obtenue dans l’étape ‘déployer une API’ sur API Gateway. Il faut également renseigner les informations de l’onglet ‘Authorization’ avec les clés de sécurité de votre compte:
CONCLUSION:
Du point du vue du Data Scientist, Amazon SageMaker est un service intéressant et puissant, car il nous fournit un environnement de développement d’une application de Machine Learning de A à Z. SageMaker n’est pas seulement d’un notebook construit sur les bases de Jupyter Notebook ou JupyterLab, mais une plateforme véritablement complète qui prolonge les habitudes des data scientists pour déployer un modèle de Machine Learning (Jupyter Notebook, Python,R..) .
Bien qu’il n’y ait pas de package sur R supporté directement dans Amazon SageMaker vous pouvez néanmoins utiliser le package Reticulate pour appeler Python dans l’environnement de R et vous retrouvez alors votre environnement de développement favori.
La force de la plateforme réside notamment dans :
- Le grand nombre de modèles et d’algorithme prêts à l’emploi, qu’on adapte et optimise pour nos cas d’utilisation
- la simplification de la mise en place d’un environnement d’entraînement avec des instances EC2 puissantes et optimisées. Nous pouvons augmenter la capacité de calcul en fonction de vos besoins.
- l’intégration des frameworks de Machine Learning les plus populaires : TensorFlow, MXNet..
Il reste un point à ne pas négliger!
Du point de vue du pricing, une notebook instance n’est pas cher. En revanche les instances pour entraîner et déployer un modèle peuvent se révéler coûteuses.
Si on mobilise plusieurs instances à base de GPU, l’addition peut très vite grimper.
Si l’on devait encore ajouter des arguments pour justifier la pertinence de ce type de plateforme, on pourrait mettre en avant les deux annonces récentes du AWS ReInvent 2019 :
L’intégration de SageMaker avec Kubernetes pour faciliter les phases d’entrainement et de déploiement:
https://aws.amazon.com/fr/blogs/machine-learning/introducing-amazon-sagemaker-operators-for-kubernetes/
Une autre : celle de SageMaker AutoPilot qui propose la recherche automatique transformations du dataset et la sélection de modèles optimaux :
https://aws.amazon.com/fr/blogs/aws/amazon-sagemaker-autopilot-fully-managed-automatic-machine-learning/