Une introduction aux nouveaux SDKs d’Azure Machine Learning – 2nde partie

La première partie de ce billet s'est intéressée à l'introduction des nouveaux kits de développements (SDKs) d'Azure Machine Learning. Cette seconde partie vise de son côté à illustrer les fonctionnalités ainsi offertes par ces SDKs et ce, au travers d'une mise en situation visant à offrir une illustration de bout-en-bout.

Cette illustration s'appuie sans surprise sur des notebooks Jupyter ; ce que rendent justement possible ces nouveaux SDKS comme cela a été souligné.

Je tiens à remercier Xiangzhe Meng actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.

Cadre de l'illustration

L'exemple retenu pour les besoins de cette illustration correspond dans la pratique directement au projet de la compétition « New York City Taxi Trip Duration  » organisé par Kaggle il y a un peu plus d'un an.

Le but du projet consistait à prévoir la durée de chaque trajet en fonction de ses attributs propres ; ce à quoi nous allons nous atteler.

Avant cela, arrêtons-nous un instant sur le jeu de données utilisé.

Description des données

Le jeu de données a été publié à l'origine par la NYC Taxi and Limousine Commission (TLC).

Celui-ci est composé de 1458644 lignes et 11 colonnes. Chaque ligne représente un enregistrement de trajet.

Un enregistrement contient 11 informations concernant un trajet donné comme suit :

  • id – Identifiant du trajet
  • vendor_id – Identifiant de la compagnie de taxi
  • pickup_datetime - Date et heure auxquelles le compteur a été engagé
  • dropoff_datetime - Date et heure auxquelles le compteur a été désengagé
  • passenger_count – Nombre de voyageur dans le taxi
  • pickup_longitude - Longitude où le compteur a été engagé
  • pickup_latitude - Latitude où le compteur a été engagé
  • dropoff_longitude - Longitude où le compteur a été désengagé
  • dropoff_latitude - Latitude où le compteur a été dégagé
  • store_and_fwd_flag - Drapeau pour indiquer si cet enregistrement a déjà été enregistré dans le mémoire du taxi avant d'envoyer à la compagnie de taxi : Y = oui, N = non
  • trip_duration – Durée du trajet

Prérequis technique pour cette illustration

De façon à pouvoir reproduire l'illustration, il est nécessaire au préalable d'avoir réalisé les opérations suivantes :

  1. Créer un compte Azure. Si vous ne disposez pas d'un compte Azure, il vous est possible de créer un compte gratuit Azure ici.

  2. Créer un espace de travail Azure Machine Learning comme décrit ici. Pour mémoire, un espace de travail est le conteneur logique de tous vos actifs, ainsi que la limite de sécurité et de partage.

    Une fois que vous avez créé un espace de travail, vous pouvez accéder à un ensemble riche de capacités via les SDKs en Python. C'est justement l'objet du point suivant.

  3. Configurer un environnement de développement et installer les SDKs d'Azure Machine Learning. Vous pouvez les installer avec une simple commande pip install, ou de préférence au sein d'un environnement virtuel Conda isolé.

Deux environnements de développement sont recommandés :

  • Jupyter Notebook en local sur votre ordinateur. Jupyter notebook est devenu l'un des outils les plus populaires pour la science des données ou data science en raison de de sa nature auto-documentée et de son interactivité.

    Si vous souhaitez utiliser Jupyter notebook en local sur votre ordinateur, il est recommandé d'utiliser Anaconda pour isoler votre environnement de travail afin d'éviter les conflits de dépendance entre les packages.

    Le tutoriel ici vous permet pour configurer Jupyter Notebook sur votre propre ordinateur.

    Remarque : Si la version de Conda est inférieure ou égale à 4.4, il faut utiliser activate <nom_env> pour activer le nouvel environnement et deactivate <nom_env> pour le désactiver.

    Pour installer le SDK de préparation des données d'Azure Machine Learning en Python, il faudra utiliser la commande suivante :

pip install - -upgrade azureml-dataprep

  • Azure Notebooks dans Azure. Azure Notebooks est un service Jupyter Notebook dans le cloud Azure. Azure Notebooks est préconfiguré pour fonctionner avec le Service Azure Machine Learning.

    Les composants requis, tels que les SDK d'Azure Machine Learning en Python, sont préinstallés sur cet environnement. On peut donc utiliser directement Azure Notebooks comme l'environnement de développement sans avoir besoin de la configuration.

L'objet de l'illustration et le jeu de donnée étant introduit, et l'environnement d'exécution pour les SDKs d'Azure Machine Learning à priori en place ou supposé comme tel, venons-en à notre flux de travail de Machine Learning à proprement parler, avec deux grands temps :

  • La nécessaire préparation des données.
  • L'entraînement et le déploiement du modèle.

De façon à nous inscrire directement dans la philosophie de ces SDKs que nous souhaitons illustrer, nous nous sommes directement appuyés sur différentes bloc-notes ou notebooks Jupyter.

Il vous sera d'autant plus facile de reproduire l'illustration de bout-en-bout ! ;-)

Tous ces notebooks Jupyter sont directement accessibles depuis un repo GitHub créé pour la circonstance : https://github.com/xiangzhemeng/Demo-Azure-Machine-Learning-SDKs

Préparation des données

Le notebook Data preparation.ipynb contient tous les pré-traitements et les « feature engineerings » que l'on réalise avec les données « brutes ».

Comme vous pouvez le constater au travers des codes et des descriptions associées, nous utilisons ici le SDK de préparation des données d'Azure Machine Learning en Python principalement pour charger et transformer les données.

Cependant, pour le côté visualisation des données, nous nous reposons plutôt sur d'autres bibliothèques, comme par exemple Matplotlib, Seaborn et Folium, comme le SDK de préparation des données d'Azure Machine Learning ne fournit pas la fonctionnalité de visualisation de données, du moins pour le moment.

En même temps, la nouvelle philosophie adoptée prend ici tout son sens en tirant parti pleinement de l'écosystème Python.

Entraînement et déploiement du modèle

Pour entraîner le modèle avec le service Azure Machine Learning, il est nécessaire, dans un premier temps, de créer un fichier de configuration d'espace de travail avec le notebook Create workspace config file.ipynb et de récupérer les données à partir du Stockage Azure avec le notebook Download Data from Azure Storage.ipynb.

Remarque : Le Stockage Azure est un service fournissant un stockage en cloud qui est hautement sécurisé, durable, et évolutif. Azure Storage inclut Azure Blobs (objets), Azure Data Lake Storage Gen2, Fichiers Azure, etc. Dans notre cas, on utilise Azure Blobs pour stocker les données. L'Azure Blob est la solution de stockage d'objets pour le Cloud. Le stockage d'objets blob est optimisé pour stocker des quantités énormes de données non structurées.

Remarque : Si le volume des données n'est pas très grand, on n'a pas vraiment besoin d'utiliser le Stockage Azure. On peut directement les charger à partir de notre propre ordinateur.

Nous entrainons dans un second temps le modèle avec deux types de machines virtuelles :

  • Entraînement avec des machines virtuelles Science des données (ou DSVM pour Data Science Virtual Machine) via le notebook Train models with DSVM.ipynb.

    Les DSVMs sont des images de machines virtuelles pre-installées, configurée et testées pour les travaux de Data Science. Ces machines virtuelles comprennent des outils, des IDEs et des packages populaires tels que Jupyter Notebook, PyCharm et Tensorflow.

    Les composants requis pour notre illustration, tels que les SDKs d'Azure Machine Learning en Python, sont également préinstallés sur cet environnement.

  • Entraînement avec un « cluster » de machines virtuelles à priorité basse via le notebook Train models with Batch.ipynb.

    Azure Batch propose des machines virtuelles à faible priorité pour réduire le coût des charges de travail par lots. Les machines virtuelles à faible priorité permettent de nouveaux types de charges de travail par lots en utilisant une grande quantité de puissance de calcul à un coût très bas. Les machines virtuelles à faible priorité tirent parti de la surcapacité dans Azure.

    Le « trade-off » pour utiliser des machines virtuelles à faible priorité est que ces machines peuvent ne pas être disponibles pour être alloués ou peuvent être préemptés à tout moment, en fonction de la capacité disponible.

Enfin, en dernier lieu, nous utilisons le notebook Deploy models.ipynb pour déployer le modèle sous la forme d'un service web.

Un web service est une image, dans notre cas une image Docker, qui encapsule la logique de « scoring » et le modèle lui-même.

En guise de conclusion

Nous espérons que cette illustration vous aura permis de découvrir les nouveaux SDKs d'Azure Machine Learning récemment introduits et donné envie d'aller plus loin avec pour vos flux de travail de Machine Learning.

A ce propos, nous souhaitons mentionner un autre repo GitHub crée par l'équipe Azure Machine Learning au sein du Support Premier de Microsoft : https://github.com/Azure/AMLSamples

Vous y trouverez toute une série de cas d'usages qui vous permettront d'approfondir votre connaissance et la maitrise de ces SDKs.

Dernier point et non des moindres à ce propos, ce repo est destiné à :

L'objectif, vous l'aurez compris, est aussi de vous faciliter le cas échéant la migration de vos contenu Workbench vers ces niveaux SDKs d'Azure Machine Learning en Python.