Mise en place d’un environnement Azure Machine Learning

Pour utiliser les nouveaux services d'Azure Machine Learning (Azure ML), il convient au préalable créer un compte et les ressources associées sur Azure. Après avoir abordé les évolutions d'Azure ML dans un précédent billet, ce billet vise à vous présenter une vue d'ensemble de la mise en place d'un environnement de travail complet Azure ML en intégrant bien sûr l'installation de l' « établi » Azure ML Workbench et l'outillage en mode ligne de commandes. De plus, dans ce contexte, ce billet est l'occasion de s'intéresser votre environnement de développement intégré (IDE) pour Azure ML Workbench avec Visual Studio Code, la mise en œuvre de la technologie de Docker, etc. pour la science des données.

J'en profite pour remercier Paul Jenny actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.

Les prérequis pour Azure ML Workbench

L'application Azure ML Workbench peut être installée sur les plateformes suivantes pour le moment :

  • Windows 10,
  • Windows Server 2016,
  • MacOS Sierra (MacOS High Sierra n'est pas encore supporté).

Qui dit services managés dans Azure, dit abonnement Azure. Si vous n'avez encore de compte Azure, vous pouvez créer un compte gratuit ici.

Nous supposons que vous disposez à ce stade d'un tel compte.

La création d'un compte Azure ML et des services associés

Création du compte d'expérimentation et de gestion des modèles

Vous devez au préalable vous connecter au portail Azure avec vos identifiants de compte Azure :

  1. Cliquez sur le bouton Nouveau situé dans le panneau à gauche de votre écran
  2. Recherchez Machine Learning Experimentation.

  1. Sélectionnez Machine Learning Experimentation (preview) .

  2. Cliquer ensuite sur Créer.

  3. Un panneau (blade en anglais) ML – Expérimentation s'ouvre. Remplissez le formulaire correspondant en s'aidant des indications ci-dessous :

    1. Nom du compte d'expérimentation : spécifie le nom unique qui identifie votre compte d'expérimentation. Vous pouvez utiliser votre nom, le nom de votre projet ou de votre entité ou département pour identifier au mieux vos expérimentations qui seront effectuées sous ce compte. Le nom doit être entre 2 et 32 caractères (caractères alphanumériques et tiret autorisés).
    2. Abonnement : précise votre abonnement Azure sur lequel sera facturée l'utilisation des services Azure ML.
    3. Groupe de ressources : indique le groupe de ressources à utiliser. Vous pouvez utiliser un groupe existant ou en créer un nouveau selon vos besoins dans votre projet.
    4. Emplacement : spécifie l'emplacement où déployer votre instance. Actuellement, en version préliminaire publique, seules 3 régions sont disponibles : Est des Etats-Unis 2, Est de l'Australie, et Ouest-Centre des Etats-Unis. Choisissez la région la plus proche de vos utilisateurs et de vos données.
    5. Nombre de sièges : indique le nombre d'utilisateurs qui utiliseront ce compte d'expérimentation. Actuellement, les 2 premiers sont gratuits.
    6. Compte de stockage : indique le compte de stockage Azure à utiliser. Vous pouvez utiliser un compte de stockage existant ou créer un nouveau. Ce compte est nécessaire pour stocker l'historique de vos exécutions et les artefacts de vos projets (graphiques, dépendances, etc.)
    7. Espace de travail pour le compte d'expérimentation : spécifie le nom de l'espace de travail. Ce nom apparaîtra dans Azure ML Workbench pour regrouper vos projets de ce compte. Le nom doit être unique et doit faire entre 2 et 32 caractères (caractères alphanumériques et tiret autorisés)
    8. Affecter un propriétaire pour l'espace de travail : spécifie le propriétaire de cet espace. Choisissez une personne qui sera responsable des tâches d'administration de cet espace de travail
    9. Créer un compte Gestion des modèles : Si vous ne souhaitez pas utiliser le service Gestion des modèles d'Azure ML, vous pouvez décocher cette case. Néanmoins, celui-ci vient en complément du service d'expérimentation pour faciliter le déploiement de vos modèles dans le cloud Azure, en bordure ou en local.
    10. Nom du compte : précise le nom unique qui identifie votre compte de Gestion des modèles. Vous pouvez utiliser votre nom, le nom de votre projet ou de votre département pour identifier au mieux vos expérimentations qui seront effectuées sous ce compte. Le nom doit être entre 2 et 32 caractères (caractères alphanumériques et tiret autorisés)
    11. Niveau tarifaire de la Gestion des modèles : spécifie le niveau tarifaire. Choisissez le niveau tarifaire au nombre de modèles vous allez déployer et le nombre de cœurs alloués à ce déploiement. Le niveau « DEVTEST » est gratuit mais néanmoins limité en nombre. De préférence, pour les besoins de ce billet et des suivants sur le même sujet, vous pouvez choisir celui-ci.
  4. Cliquez enfin sur Créer pour créer votre compte d'expérimentation (et le compte Gestion des modèles si vous avez coché la case – ce que nous suggérons ici -)

  5. Attendez le déploiement effectif des services qui sera indiqué par une notification :

 

Création du compte Machine Learning Compute pour la gestion des modèles

Si vous avez pour projet de déployer des modèles de Machine Learning en production via le service de gestion des modèles d'Azure, vous devez au préalable créer un compte Machine Learning Compute. Ce compte permet la création d'un environnement virtuel pour déployer les modèles.

Remarque : Pour déployer les modèles, vous devez aussi avoir créé un service de gestion des modèles auparavant.

Remarque : Si vous utilisez un abonnement Azure avec une limite de dépense prépayée, vous ne pourrez pas déployer d'environnement Machine Learning Compute. Vous devez ajouter un moyen de paiement et supprimer la limite de dépense sur Azure Subscriptions.

Vous pouvez accéder aux instructions pour pouvoir créer votre compte en accédant à votre compte d'expérimentation sur le portail Azure (en le recherchant ou cliquant sur l'icône sur le tableau de bord si vous l'avez épinglé). Enfin, cliquez sur l'icône « Découvrez comment configurer Machine Learning Compute pour la Gestion des modèles » :

Un volet s'ouvre sur la droite avec l'ensemble des opérations nécessaires pour créer l'environnement.

Remarque : Si vous avez déjà installé azure-cli-cml et azure-cli sur votre ordinateur personnel, vous n'avez pas besoin d'effectuer les 5 commandes suivantes

Vous devez au préalable créer un environnement virtuel Python pour exécuter les commandes Python dans Azure Shell.

Remarque : Cette opération n'est à effectuer qu'une seule fois pour votre abonnement Azure !

virtualenv -p /usr/bin/python3 <nom_de_votre_projet>

Ensuite, il faut éditer le fichier .bashrc pour ajouter des variables d'environnement à votre terminal. Pour cela, vous pouvez utiliser n'importe quel éditeur de texte (par exemple, nano, vim…) et rajoutez les deux lignes suivantes à la fin :

export PATH="<chemin_vers_l_environnement_virtuel>/bin":$PATH

export PYTHONPATH="<chemin-vers_l_environnement_virtuel>/bin"

Une fois ceci fait, il faut recharger vos variables d'environnement avec la commande source :

    source ~/.bashrc

Il faut maintenant passer à l'installation des paquets Azure-CLI et Azure-CLI-ML

     <chemin_vers_l_environnement_virtuel>/bin/pip installl azure-cli

     <chemin_vers_l_environnement_virtuel>/bin/pip install azure-cli-ml

Remarque : Si vous êtes sur votre ordinateur personnel avec Azure-CLI et Azure-CLI-ML déjà installés, vous devez reprendre à partir de cette étape.

Une fois les paquets installés, il ne reste plus qu'à créer l'environnement Machine Learning Compute distant :

    az ml env setup -n <nom-environnement-compute-en-minuscules> -l <emplacement_ressources> -c

Remarque : L'emplacement des ressources est un code correspondant à la région Azure dans laquelle vous souhaitez que l'environnement Machine Learning Compute soit déployé (eastus, westus, westeurope, etc…)

Remarque : Par défaut, Azure vous crée un groupe de ressources avec un nom dépendant de celui de l'environnement. Si vous souhaitez utiliser un groupe existant ou en créer un avec un nom désiré, vous pouvez ajouter l'argument -g

Le déploiement de l'environnement peut mettre plusieurs minutes pour pouvoir être pris en compte. Vous pouvez à tout moment voir le statut de celui-ci avec la commande :

    az ml env show -g <nom_groupe_de_ressources_du_cluster> -n <nom_environnement_compute>

Remarque : Si le déploiement échoue, vérifiez que vous n'avez pas de limite de paiement sur votre abonnement Azure.

Une fois approvisionné, vous pouvez définir d'utiliser cet environnement Machine Learning Compute pour vos prochains déploiements :

    az ml env set -g <nom_groupe_de_ressources_du_cluster> -n <nom_environnement_compute>

Votre environnement est maintenant prêt !

L'installation d'Azure ML Workbench en environnements Windows

Comme indiqué en début de ce billet, Azure ML Workbench est disponible pour Windows 10 et Windows Server 2016.

Pour procéder à l'installation de l' « établi » en environnements Windows, téléchargez et exécutez le programme d'installation d'Azure ML Workbench via l'explorateur de fichiers. L'installation inclut les dépendances nécessaires comme Python, Miniconda, Azure CLI (avec Azure ML CLI). Elle peut prendre une trentaine de minutes pour se terminer.

L' « établi » Azure ML Workbench est installé dans le répertoire suivant :

C:\Users\<user>\AppData\Local\AmlWorkbench

L'installation d'AML Workbench sur MacOS

Azure ML Workbench est actuellement disponible pour MacOS Sierre et supérieur.

Pour procéder à l'installation de l' « établi » sur MacOS Sierra, téléchargez la dernière version d'Azure ML Workbench puis installer en utilisant Finder (l'installation depuis le navigateur peut poser des problèmes). L'installation inclut les dépendances nécessaires comme Python, Miniconda, Azure CLI (avec Azure ML CLI). Elle peut prendre une trentaine de minutes pour se terminer.

L' « établi » Azure ML Workbench est installé dans le répertoire suivant :

/Applications/AmlWorkbench.app

L'installation de Docker

Pour pouvoir utiliser le nouveau service d'expérimentation d'Azure ML dans un contexte local (c.à.d. pouvoir entraîner un modèle dans un conteneur Docker local), vous devez, au préalable, installer la technologie Docker.

Actuellement, Docker n'est supporté que sur les versions 64 bits de Windows 10 Pro, Entreprise et Education à jour et MacOs El Capitan (ou plus récent).

  • Pour télécharger Docker pour les environnements Windows, vous pouvez retrouver le programme d'installation ici.
  • Pour télécharger Docker sur MacOS, vous pouvez retrouver le programme d'installation ici.

Remarque : Le service Docker a besoin d'une quantité importante de mémoire vive (RAM) pour pouvoir fonctionner. Si la mémoire est insuffisante, vous serez amené(e) à désactiver ou éteindre des applications au préalable.

L'installation de Visual Studio Code

Un environnement de développement intégré (IDE) est nécessaire pour pouvoir développer vos projets. Parmi les environnements pris en charge par l' « établi », nous vous conseillons l'utilisation de Visual Studio Code, un éditeur multi-plateformes développé par Microsoft sous licence Open Source MIT. Celui-ci, au-delà de ses caractéristiques intrinsèques, s'accompagne d'un écosystème important d'extensions pour étendre la liste s'il en était besoin des fonctionnalités proposées.

Vous pouvez récupérer la dernière pour MacOS et Windows ici. Une fois le logiciel installé, il faut installer les différentes extensions utiles pour la science des données disponibles depuis la place de marché (Marketplace) des extensions, et en particulier :

  • Visual Studio Code Tools for AI : cette extension a été annoncée en même temps que les nouveaux services d'Azure ML. Cette dernière apporte le support des technologies d'apprentissage automatique (Machine Learning) et d'apprentissage profond (Deep Learning). Vous pourrez notamment profiter des services d'Azure ML (service d'expérimentation et service de gestion des modèles), l'auto-complétion d'IntelliSense et des suggestions avec les derniers Frameworks de Data Science (Cognitive Toolkit de Microsoft, Tensorflow de Google, etc.) ainsi que parcourir la liste des exemples d'Azure ML depuis l'éditeur intégré !
  • Docker (optionnel) : cette extension ajoute le support de la technologie Docker dans l'éditeur. Vous pourrez alors générer des Dockerfile (fichiers pour construire une image Docker), profiter de l'auto-complétion d'IntelliSense dans le contexte d'un fichier de Docker ou encore effectuer des actions (build, save image, etc.) depuis la palette de commandes de Visual Studio Code.
  • Python : cette extension ajoute le support du langage Python depuis l'éditeur. Vous pourrez ainsi profiter d'IntelliSense pour Python (auto-complétion, suggestions, etc.), exécuter des scripts Python depuis l'éditeur via le lancement d'une invite de commandes, mettre en forme du code, etc.
  • Jupyter (optionnel) : cette extension ajoute le support des bloc-notes Jupyter depuis l'éditeur. Vous pourrez écrire puis exécuter vos blocs-notes depuis Visual Studio Code. Néanmoins, nous considérons celle-ci comme optionnelle car Azure ML Workbench apporte le support des blocs-notes directement depuis son interface.
  • : cette extension ajoute le support de l'autre langage principal de la science des données, à savoir R. Vous pourrez profiter ainsi de la coloration syntaxique, exécuter des scripts R depuis l'éditeur dans l'invite de commandes intégrée ou encore bénéficier de lintr (outil d'analyse de code pour corriger la mise en forme, etc.).

Remarque : L'ensemble de ces extensions peuvent être installées directement depuis Visual Studio Code. Pour cela, appuyez sur CTRL + Shift + X pour afficher la fenêtre des extensions. Vous pourrez ensuite rechercher les différentes extensions ci-dessus.

La palette des commandes de Visual Studio Code est affichable en appuyant sur CTLR + Shift + P ou en allant dans Afficher / Palette de commandes… . Par exemple, pour accéder aux commandes pour l'IA, vous pouvez taper « AI » :

En sélectionnant AI : List Jobs, vous pourrez par exemple accéder à toutes les différentes expérimentations de votre projet directement depuis Visual Studio Code :

Le premier lancement d'AML Workbench

Si vous n'avez pas cliqué sur le bouton Launch Workbench à la fin du programme d'installation d'Azure ML Workbench ou si vous avez fermé l'application, vous pouvez double-cliquer sur l'icône sur votre bureau pour pouvoir la lancer :

  1. Dans la fenêtre de connexion, connectez-vous avec vos identifiants de votre abonnement Azure que vous avez utilisé précédemment
  2. Une fois que la connexion est réussie, Azure ML Workbench recherche tous les comptes d'expérimentation associées à vos abonnements Azure. Il utilise par défaut le premier compte d'expérimentation qu'il trouve et affiche les projets et espaces de travail associés. Si vous avez accès à plusieurs comptes d'expérimentation, vous pouvez changer le compte courant en cliquant sur l'icône avec votre avatar située en bas à gauche d'Azure ML Workbench.
  3. Vous pouvez maintenant parcourir les exemples proposés en créant un nouveau projet via le bouton +  situé à droite de vos espaces de travail.

La configuration de Visual Studio Code avec Azure ML Workbench

Azure ML Workbench n'est pas un éditeur de texte. Il est déconseillé d'éditer directement des fichiers depuis le logiciel malgré la présence de fonctionnalités basiques pour l'édition. Visual Studio Code vient donc en complément des nouveaux services pour fournir un environnement de développement de solutions de science des données complet.

Depuis Azure ML Workbench, accédez au menu File puis Configure Project IDE. Un menu s'ouvre sur la droite de l'application.

  • Dans Name, vous pouvez indiquer le nom que vous voudrez. Celui s'affichera dans le menu File une fois ce paramétrage terminé.
  • Dans Executable Path, vous devez parcourir votre ordinateur pour rechercher l'exécutable de votre éditeur (Code.exe pour Visual Studio Code). Par défaut, il est situé dans le répertoire C:\Program Files\Microsoft VS Code\Code.exe.

Une fois paramétré, lorsque vous aurez sélectionné au préalable un projet dans Azure ML Workbench, dans le menu File, vous aurez Open Project (VOTRE EDI)  :

En cliquant sur Open Project, Visual Studio Code s'ouvre dans le répertoire de votre projet Azure ML Workbench. Vous pourrez ainsi éditer les fichiers depuis l'éditeur de Visual Studio.

Votre environnement Azure ML est à ce stade installé et configurer sur votre machine. Vous pouvez maintenant utiliser Azure ML Workbench ou les outils en ligne de commande pour interagir avec les nouveaux services. Abordons la partie « Docker ».

La configuration de Docker avec Azure ML

Afin d'accélérer la remontée des informations de votre exécution par télémétrie, il est conseillé d'activer le partage de votre disque local. De plus, ce paramétrage est nécessaire si vous souhaitez utiliser le répertoire partagé entre votre hôte et votre conteneur (Cf. La Gestion des fichiers dans votre projet Azure ML ci-dessous).

Pour modifier le paramètre, une fois Docker lancé, vous pouvez atteindre le panneau de configuration de Docker en effectuant un clic-droit sur l'icône Docker située dans votre zone de notifications pour Windows puis Settings :

Une fois la fenêtre, vous devez aller dans Shared Drives puis cocher la case située à gauche de votre lecteur (sur lequel est situé Azure ML Workbench dans un contexte local de préférence) puis Apply :

La gestion des fichiers dans votre projet Azure ML

Grâce aux nouveaux services d'Azure ML, vous pouvez aisément exécuter vos scripts d'un projet dans différents contextes, qu'ils soient distants (Docker, HDInsight, etc.) ou locaux (Docker, Python ou R). Néanmoins, cette facilité d'opérationnalisation des projets apporte certaines subtilités quant à la gestion des fichiers (lecture, écriture). En effet, pour respecter les principes de reproductibilité et portabilité (quel que soit le contexte de calcul de l'exécution précédente, si vous exécutez le même script deux fois, vous obtiendrez le même résultat), certaines contraintes ont été ajoutées, étant donné qu'à chaque expérimentation, l'ensemble de votre projet est copié dans le contexte d'exécution.

Ainsi, stocker des fichiers lourds dans votre projet est fortement déconseillé. Une limite est actuellement mise à 25 Mo pour forcer l'utilisation d'alternatives. Il existe actuellement 3 solutions (cumulables) :

  1. Utiliser le répertoire de sortie outputs du projet.
  2. Utiliser le répertoire partagé.
  3. Utiliser un espace de stockage externe.

Voyons ce qu'il en est.

Utiliser le répertoire de sortie outputs du projet

La première option consiste à utiliser un répertoire prévu dans le fonctionnement des services d'Azure ML. Les fichiers situés dans ce répertoire sont versionnés et peuvent être récupérés ultérieurement (grâce au service d'expérimentation). Par exemple, on pourrait imaginer stocker un modèle entrainé qui a été produit par le script ou encore un graphique (une matrice de confusion, etc.)

Attention : En versionnant des fichiers, vous utilisez du stockage dans Azure. Cela peut entraîner un (très léger) surcoût .

En bref, cette option s'avère préférable pour les conditions suivantes :

  • Vous produisez des fichiers (un modèle, des jeux de données, etc.)
  • Ces fichiers sont susceptibles d'être différents entre deux expérimentations
  • Vous souhaitez conserver un historique de ces fichiers

Pour recourir à cette option, vous devez écrire les fichiers que vous désirez garder dans un répertoire nommé outputs situé à la racine de votre projet. Le service d'expérimentation détectera automatiquement les fichiers et effectuera le traitement nécessaire pour les versionner. Les fichiers pourront ensuite être téléchargés depuis l'interface d'Azure ML Workbench ou via la ligne de commande Azure CLI suivante :

az ml asset download

Utiliser le répertoire partagé

La seconde option conste à utiliser le répertoire partagé entre les expérimentations d'Azure ML. A la différence du répertoire précédent, les fichiers dans ce répertoire ne sont pas versionnés et ne peuvent être téléchargés. Par conséquent, les fichiers situés dans ce répertoire ne peuvent être utilisés que par les scripts s'exécutant dans un même contexte.

En conséquence, il est préférable d'utiliser cette solution dans les cas suivants :

  • Votre script génère des fichiers intermédiaires utilisés ultérieurement par un autre script (par exemple, un script de scoring a besoin d'un modèle entrainé précédemment par un script d'apprentissage ; un jeu de données qui aura été modifié par un script auparavant)
  • Votre script a besoin de données situées dans le même contexte (fichiers CSV, images, etc.)

Pour recourir à cette option, vous devez utiliser la variable d'environnement AZUREML_NATIVE_SHARED_DIRECTORY dans votre script et configurer l'emplacement du répertoire dans le fichier de configuration .compute de votre contexte d'exécution avec le paramètre nativeSharedDirectory. Par défaut, il est fixé à :

  • ~/.azureml/share/ pour les environnements sous Linux.
  • C:\users\<username>\.azureml\share\<exp_acct_name>\<workspace_name>\<proj_name>\ pour les environnements Windows.
  • /Users/<username>/.azureml/share/<exp_acct_name>/<workspace_name>/<proj_name>/ sous MacOS.

Il existe un cas particulier où vous devez paramétrer une variable supplémentaire. En effet, lorsque vous procédez à une exécution dans un contexte Docker qu'il soit local ou distant, vous devez ajouter la variable sharedVolumes à true :

  • sharedVolumes: true
  • nativeSharedDirectory: ~/.azureml/share

Depuis Docker, ce répertoire partagé entre l'hôte et le conteneur est toujours défini comme étant /azureml-share/ . Néanmoins, pour des soucis de compatibilité future, il est conseillé d'utiliser la variable d'environnement AZUREML_NATIVE_SHARED_DIRECTORY au lieu du chemin absolu vers ce répertoire.

Remarque : Pour utiliser ce paramètre sous Docker, vous devez activer le partage du disque local avec vos conteneurs dans Docker. Cf. section « La configuration de Docker avec AzureML ».

Utiliser un espace de stockage externe

La dernière option consiste à utiliser un espace de stockage externe pour persister des données à travers vos différentes expérimentations (support externe physique comme une clé USB accessible par le contexte de calcul, espace de stockage en ligne, etc.). Il est préférable d'utiliser cette alternative dans les cas suivants :

  • Vous n'avez pas besoin de versionner ces fichiers ;
  • Ces fichiers sont utilisés dans des contextes de calcul différents (par exemple, sur une machine distante) ;
  • Vos données sont déjà stockées dans un espace de stockage externe.

Une des solutions est d'utiliser un stockage Blob dans Azure. Vous devez, au préalable, avoir créé pour cela un compte de stockage Azure dans votre abonnement Azure. Pour cela, vous devez naviguer vers le portail Azure puis aller dans Comptes de stockage et Ajouter :

Les fichiers contenus dans le stockage Blob sont situés dans des conteneurs. Ci-dessous, vous pourrez trouver un exemple pour créer et téléverser des fichiers en Python ici (d'autres langages sont disponibles dans la documentation).

En guise de conclusion

Votre environnement Azure ML est à ce stade installé et configuré. Vous possédez une large palette d'outils pour développer des solutions de Machine Learning et de Deep Learning.

Dans le prochain billet, vous apprendrez à utiliser les services avec un cas d'exemple de bout-en bout : la maintenance prédictive.

En attendant, vous pouvez parcourir la documentation officielle ici ;-)