Premiers pas avec les nouveaux services d’Azure Machine Learning – 2nde partie
Nous souhaitons vous donner au travers de ce billet un premier aperçu des capacités du nouvel environnement Azure ML, càd le service d'expérimentation, le service de gestion des modèles et bien sûr l' « établi » (Azure ML Workbench), sur un jeu de données en rapport avec la maintenance prédictive.
Pour cela, ce billet vise à proposer une illustration de bout en bout du nouvel environnement Azure ML. L'illustration simple sur laquelle nous nous appuyons utilise un algorithme d'apprentissage profond (Deep Learning) avec, comme objectif, de pouvoir prédire si un équipement va tomber en panne prochainement pour optimiser la maintenance de celui-ci.
Avec la première partie, l'étape de préparation du jeu de données est maintenant terminée. Nous allons donc pouvoir passer à l'apprentissage de nos modèles avec cette seconde partie !
J'en profite pour remercier à nouveau Paul Jenny actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
L'apprentissage du modèle de classification
Le fichier pour l'apprentissage du modèle appelé train.py est fourni en pièce jointe de ce billet. Le but ici n'est pas d'expliquer précisément chaque ligne mais de vous montrer les possibilités pour entraîner un modèle dans différents contextes.
En local
Vous pouvez lancer l'entraînement du modèle dans un contexte local. Vous devrez avoir au préalable préparer votre environnement Conda avec les dépendances nécessaires. Cette opération n'est à effectuer qu'une seule fois et uniquement pour un contexte local. Pour cela, allez dans la barre de tâches d'Azure Machine Learning Workbench puis cliquez sur File > Open Command Prompt.
Voici les différentes dépendances à installer au préalable :
pip install keras sklearn matplotlib h5py https://cntk.ai/PythonWheel/CPU-Only/cntk-2.2-cp35-cp35m-linux\_x86\_64.whl
Remarque : Nous avons choisi ici d'utiliser la version CPU de CNTK comme l'ordinateur utilisé ne disposait pas de GPU. Néanmoins, si vous avez un ou plusieurs GPUs, vous pouvez télécharger la version adéquate. Cf. le tutoriel d'installation de CNTK avec la version 3.5 de Python sur docs.microsoft.com.
Une fois l'installation des dépendances effectuées, nous allons pouvoir lancer l'apprentissage du modèle.
Pour cela, allez dans le navigateur de fichiers d'Azure ML Workbench puis sélectionnez train.py puis, dans la barre située au-dessus de l'éditeur de texte, choisissez la cible local puis cliquez sur Run :
Un nouveau travail s'affiche sur la barre à droite indiquant l'avancement de l'exécution et la console associée.
Remarque : Vous pouvez ajouter des arguments à l'exécution. Par exemple, ici, vous pouvez configurer la taille des batchs pour l'apprentissage du réseau de neurones en entrant un nombre dans la case Arguments.
Une fois le calcul effectué, le script génère une matrice de confusion et un fichier model_XX.h5. Ce fichier correspond à l'exportation du modèle que vous venez d'entraîner (avec les poids associés et les différents paramètres). Il peut être déployé et chargé via la méthode load() de la bibliothèque Keras. La matrice générée est appelée cm.png.
Remarque : Cette opération aurait pu être effectuée via la ligne de commandes. En effet, en ouvrant une invite de commandes dans Azure ML Workbench (File -> Open Command Prompt), avec la commande suivante :
az ml experiment submit -c local .\train.py
Sur un docker en local
Grâce au nouveau service de gestion des modèles, vous pouvez lancer vos calculs dans un conteneur Docker automatiquement crée pour l'occasion.
Dans le dossier aml_config, vous avez des fichiers docker .XX . Ceux-ci sont relatifs à l'exécution d'expérimentation dans l'environnement docker. La différence par rapport aux fichiers local.XX est que vous spécifiez que votre contexte d'exécution est un localdocker.
De plus, par rapport à un contexte local, vous n'avez pas à vous soucier de la préparation de votre environnement et de vos dépendances. Celles-ci sont automatiquement récupérées depuis les fichiers conda_dependencies.yml pour les dépendances liées à Python avec Conda et spark_dependencies.yml pour celles liées à Spark.
Lancez maintenant l'apprentissage en allant dans le navigateur de fichiers puis en choisissant docker au lieu de local :
Un nouveau travail s'affiche sur la barre de droite en indiquant que votre cible d'exécution est dorénavant docker.
Remarque : Vous pouvez ajouter des arguments à l'exécution. Par exemple, ici, vous pouvez configurer la taille des batchs pour l'apprentissage du réseau de neurones en entrant un nombre dans la case Arguments.
Une fois le calcul effectué, le script crée un fichier model_XX.h5 et une matrice de confusion sous forme d'image. Néanmoins, vous ne pouvez pas naviguer dans un docker. Azure ML vous permet de récupérer les objets générés par votre script via l'utilisation d'un dossier approprié : outputs (Cf. billet précédent concernant la gestion des fichiers d'un projet par Azure ML). Pour cela, naviguez dans l'historique des exécutions dans Azure ML Workbench. Vous pouvez retrouver différentes statistiques de vos exécutions (générés par Azure ML mais aussi personnalisées) ainsi que les fichiers associés :
Remarque : Cette opération aurait pu être effectuée via la ligne de commandes. En effet, en ouvrant un terminal de commandes dans Azure ML Workbench (File -> Open Command Prompt), avec la commande suivante, vous soumettez une nouvelle expérimentation dans le contexte docker :
az ml experiment submit -c docker .\train.py
Sur un docker distant
Vous pouvez aussi exécuter votre apprentissage sur tout environnement supportant Docker. Par exemple, nous avons choisi d'effectuer notre calcul sur les toutes nouvelles machines virtuelles dédiées à la science des données d'Azure, à savoir les Data Science Virtual Machines (DSVM). Celles-ci sont puissantes et prêtes à l'utilisation pour la science des données. Vous pouvez bien évidemment utiliser tout autre environnement qui supporte Docker (IoT, etc.).
Pour créer un nouvel environnement d'exécution pour notre projet, depuis Azure ML Workbench, nous avons ouvert une invite de commande (File -> Open Command Prompt) puis tapé avec la commande suivante :
az ml computetarget attach --name remotevm --address <IP address> --username <username> --password <password> --type remotedocker
Remarque : L'authentification via une clé n'est actuellement pas supportée. Vous devez utiliser la combinaison utilisateur / mot de passe uniquement.
Remarque : L'adresse IP peut être un nom de domaine accessible publiquement (FQDN). Il est, en général, intéressant d'attribuer à une VM dans Azure un FQDN car l'adresse IP de celle-ci peut être différente entre deux redémarrages.
Ce script permet de générer la paire de fichiers de configuration nécessaires pour un environnement remotevm.compute et remotevm.runconfig. Il faut ensuite préparer l'environnement distant avec l'installation des dépendances, etc. Pour cela, encore dans l'invite de commandes, utilisez la commande suivante :
az ml experiment prepare -c remotevm
Le service d'Azure ML va télécharger, installer et créer l'image Docker associé à votre projet sur votre cible d'exécution distante. Cette opération n'est à effectuer que la première fois que vous utilisez un environnement ou suite à une modification dans les dépendances du projet (dans conda_dependencies.yml ou spark_dependencies.yml).
Remarque : Vous pouvez forcer Azure ML à toujours préparer l'environnement même s'il a déjà été utilisé auparavant. Pour cela, il faut affecter la valeur true à PrepareEnvironment » dans le fichier remotevm.runconfig. Néanmoins, cela rallonge la durée d'exécution lorsque vous effectuez plusieurs expérimentations sur une même configuration…
Une fois l'environnement préparé, il ne reste plus qu'à soumettre l'expérimentation dans ce contexte d'exécution. Pour cela, retournez dans le navigateur de fichiers d'Azure ML Workbench puis choisissez remotevm dans la liste des cibles de calcul et enfin cliquez sur Run :
Un nouveau travail s'affiche sur la barre de droite en indiquant la progression de votre exécution.
Une fois le calcul effectué, le script crée un fichier model_XX.h5 et une matrice de confusion sous forme d'image. Néanmoins, vous ne pouvez pas naviguer dans un docker. Azure ML vous permet de récupérer les objets générés par votre script via l'utilisation d'un dossier approprié : outputs (Cf. billet précédent concernant la gestion des fichiers d'un projet par Azure ML).
Pour cela, comme précédemment, naviguez dans l'historique des exécutions dans Azure ML Workbench. Vous pouvez retrouver différentes statistiques de vos exécutions (générés par Azure ML mais aussi personnalisées) ainsi que les fichiers associés :
Remarque : Cette opération aurait pu être effectuée via la ligne de commandes. En effet, en ouvrant une invite de commandes dans Azure ML Workbench (File -> Open Command Prompt), avec la commande suivante :
az ml experiment submit -c remotevm .\train.py
Le déploiement du modèle
Notre modèle est maintenant entraîné et prêt à être utilisé sur tout environnement supportant la bibliothèque Keras.
La récupération du modèle
Grâce à l'historique des exécutions lancées, depuis Azure ML Workbench, vous pouvez récupérer le « meilleur » modèle d'une exécution pour une utilisation ultérieure.
Pour cela, allez dans la section Historique d'Azure ML Workbench puis choisissez une des exécutions qui vous semblent pertinentes en termes de métriques puis dans Outputs, cochez la case de model_200.h5 pour pouvoir le télécharger :
Une fois ce modèle récupéré, vous pouvez le charger dans un script Python avec Keras avec la commande suivante :
from keras.models import load_model
model = load_model('model_200.h5')
Vous pouvez ensuite utiliser vos méthodes habituelles pour travailler avec celui-ci, prédire de nouvelles classes, etc… Un bloc-notes Jupyter a été créé « 2_loadingmodel.ipynb » pour fournir un exemple d'utilisation ou vous pouvez regarder la documentation officielle de Keras.
En guise de conclusion
Ceci conclut cette seconde partie. Ainsi, par ce billet, nous espérons que vous avez pu découvrir un peu plus les possibilités offertes par les nouveaux services d'Azure ML avec notamment Azure ML Workbench (« l'établi »), le service d'expérimentation et le service de gestion des modèles.
Si vous avez suivi l'ensemble des étapes illustrées, vous avez normalement dû réussir à préparer un jeu de données cohérent avec votre utilisation, à l'exporter vers différentes sources (en local et sur un stockage Blob dans un compte de stockage Azure), à réaliser l'entraînement d'un réseau de neurones artificiels de type LSTM, à accéder à l'historique des exécutions pour choisir le modèle « pertinent » et enfin à récupérer ce modèle pour une utilisation ultérieure.
Il ne reste plus qu'à vous lancer avec vos propres jeux de données pour réaliser les expériences !