Entrainer à l’échelle pour le Deep Learning : Azure Batch AI

Bloc-notes Jupyter

Nous poursuivons notre série de billets sur les nouveaux services d'Azure Machine Learning (Azure ML) ou intimement liés comme ici avec un nouveau venu : Azure Batch AI.

Azure Batch AI est en effet un nouveau service de Microsoft Azure introduit en octobre pour faciliter l'entraînement et l'évaluation à l'échelle de modèles d'apprentissage profond (Deep Learning) fortement consommateurs en ressources en utilisant des fermes de calcul à la demande basés sur des GPUs ou CPUs. (Il trouve en ce sens sa source d'inspiration dans Azure Batch, un autre service d'Azure dédié au Batch Computing afin de planifier les tâches et la gestion des calculs à l'échelle du Cloud.)

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

Pourquoi Azure Batch AI ?

Développer des algorithmes d'intelligence artificielle (IA) nécessite une puissance de calcul importante et du temps alloué dû aux différentes itérations à exécuter pour obtenir le modèle pertinent attendu. En effet, les 3 ingrédients pour créer une intelligence artificielle innovante sont la puissance de calcul sur lequel va se reposer l'entraînement de l'algorithme, des algorithmes performants et enfin une quantité de données colossale pour pouvoir entraîner l'intelligence.

Ces 3 facteurs sont à l'origine de l'essor que connait l'IA ces dernières années. Ainsi, Azure Batch AI vous permet de déployer des fermes de calcul optimisées pour le calcul de Deep Learning à la demande avec parallélisation, planifications et file des travaux en quelques lignes de commande. Vous ne payez ainsi que ce que vous utilisez en calcul.

De plus, Azure Batch AI prend en charge de nombreux Frameworks pour le Deep Learning comme CNTK, Tensorflow, Chainer, etc. L'algorithme n'a pas besoin ainsi d'être modifié pour pouvoir être soumis dans une ferme de calcul Azure Batch AI.

A la date de publication de ce billet, il est à noter que vous pouvez déployer des fermes de calcul Batch AI uniquement dans l'Est des Etats-Unis en version préliminaire publique.

Bien démarrer avec Azure Batch AI

Afin de vous permettre d'essayer Azure Batch AI, vous pouvez télécharger le projet associé à ce billet ici.

De plus, en pièce-jointe à ce billet, vous pourrez retrouver l'ensemble des commandes et explications dans le bloc-notes Jupyter ou au format Mark Down (MD).

La présentation du cas d'étude

Le cas d'étude que nous vous proposons pour la circonstance constitue en soi un classique pour les algorithmes de Deep Learning, à savoir la reconnaissance d'un chiffre écrit à la main dans une image comme sur l'image ci-dessous.

Le jeu de données est ici composé de 10000 individus de test et 60000 individus d'entraînement (18 Mo et 106 Mo respectivement).


Le problème est ainsi de type classification à multi-classes (10 pour être exact). Comme ce sont des images qu'il faut analyser, il est préférable d'utiliser un réseau de neurones convolutif.

Nous illustrons ici l'utilisation de Microsoft Cognitive Toolkit (CNTK) comme Framework pour le construire néanmoins tout autre Framework peut être utilisé à la place. CNTK est disponible en Open Source sur la forge GitHub ici avec des exemples et des tutoriels sous forme de bloc-notes Jupyter.

Si l'on soumettait ce travail sur une seule machine équipée d'une carte GPU (même puissante), l'entraînement risquerait de s'avérer quelque peu long. Grâce à Azure Batch AI, il suffit de créer un nouveau fichier pour paramétrer le travail, créer la ferme de calcul et soumettre le travail dans cette ferme. Vous réduirez ainsi grandement le temps d'entraînement.

Les prérequis

Vous devez avoir, au préalable, créer votre compte Azure et disposer d'un abonnement actif pour pouvoir effectuer les opérations décrites dans la suite de ce billet.

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 de la ferme de calcul

Pour permettre aux machines de la ferme de calcul de pouvoir récupérer le jeu de données initial, un stockage Azure File a été créé au préalable via Azure CLI. Dans ce tutoriel, le type de stockage utilisé est un STANDARD_LRS (HDD avec redondance des données dans le datacenter). D'autres possibilités existent selon les besoins (SSD, redondance régionale ou mondiale).

Pour créer une ferme de calcul, il suffit d'une ligne de commande avec Azure CLI comme suit :

az batchai cluster create --name mycluster --vm-size STANDARD_NC6 --image UbuntuLTS --min 1 --max 1 --afs-name batchaiquickstart --afs-mount-path azurefileshare --user-name mytestbatchai --password PP@@ddee5 --resource-group myBatchAIGroup

Ici, la ferme contient des VMs de type STANDARD_NC6 (équipées de GPU NVIDIA K80), mais de nombreuses autres possibilités existent, Cf. ici.

Remarque : Dans Le IaaS (Infrastructure-as-a-Service) Azure, les machines virtuelles équipées de GPUs possèdent le mot « NC » dans leur nom.

Ensuite, il faut spécifier l'image qui sera montée sur les différents nœuds de la ferme. Il s'agit ici d'une image Ubuntu Server LTS mais là encore d'autres choix sont disponibles avec la commande az vm image list.

À tout moment, un aperçu de l'état des fermes de calcul associés à la souscription Azure peut être affiché via la commande az batchai cluster list -o table.

La création du travail

Une fois la ferme créée, il convient de paramétrer le travail que l'on souhaite soumettre. Pour ce faire, il est nécessaire de spécifier dans un fichier au format JSON différents paramètres :

  • Le nombre de nœuds sur lequel sera soumis ce travail : nodeCount
  • Si vous souhaitez exécuter votre calcul dans un conteneur Docker, l'image utilisé dans : containerSettings / imageSourceRegistry / image.
  • Ensuite, selon le Framework que vous utilisez, d'éventuels paramètres supplémentaires. Par exemple, pour CNTK dans notre illustration, vous pouvez spécifier les arguments qui seront passés à l'algorithme avec le paramètre cntkSettings / commandLineArgs.
  • Enfin, le dossier des données d'entrée et les dossiers des données de sortie (votre modèle, vos graphiques, etc.) dans le paramètre properties.

Une fois le fichier crée, il suffit de soumettre le travail via Azure CLI :

az batchai job create --name myjob --cluster-name mycluster --resource-group myBatchAIGroup --config job.json

Il suffit ainsi de spécifier le nom de la ferme de calcul dans cluster-name ainsi que le chemin vers le fichier de configuration du travail dans config.

Une fois le travail soumis, il ne reste plus qu'à attendre qu'il ne se termine (rapidement).

Vous pouvez suivre en temps réel la sortie du travail avec la commande Azure CLI :

az batchai job stream-file --job-name myjob --output-directory-id stdouterr --name stderr.txt --resource-group myBatchAIGroup

Enfin, la commande suivante permet de récupérer les fichiers de sortie du projet :

az batchai job list-files --resource-group myBatchAIGroup -n myjob -d model

Vous pourrez récupérer le lien pour télécharger les fichiers dans la propriété downloadUrl ou utilisez un outil comme Azure Storage Explorer pour explorer graphiquement votre répertoire partagé du stockage Azure File.

En guise de conclusion

Grâce à Azure Batch AI, vous pouvez utiliser vos données avec n'importe quel Framework de Deep Learning (CNTK, TensorFlow, Chainer, etc.) pour entraîner vos modèles dans des fermes de calcul à la demande à la puissance adaptée au besoin. Vous limitez ainsi les coûts et apportez des modèles dûment entrainés et donc de l'IA directement dans vos applications et vos services.

Ceci conclut notre rapide tour et donc ce billet sur Azure Batch AI. Pour aller plus loin, vous pouvez poursuivre avec la documentation officielle ici.