Je connais de nombreux Data Scientists — et je pense que je fais moi-même partie de ce groupe — qui travaillent sur des machines avec GPU, qu'elles soient locales ou virtuelles, situées dans le cloud, que ce soit via Jupyter Notebook ou à travers un environnement de développement Python. En tant qu'expert-développeur en IA/ML depuis 2 ans, j'ai travaillé de cette manière, préparant les données sur un serveur ou une station de travail classique, tout en exécutant l'entraînement sur une machine virtuelle avec GPU dans Azure.
Bien sûr, nous avons tous entendu parler de — une plateforme cloud spécialisée pour l'apprentissage automatique. Cependant, après un premier regard sur , il semble qu'Azure ML vous créera plus de problèmes qu'il n'en résoudra. Par exemple, dans l'exemple d'entraînement mentionné ci-dessus, l'entraînement sur Azure ML démarre depuis Jupyter Notebook, mais le script d'entraînement lui-même est proposé à créer et à éditer comme un fichier texte dans l'une des cellules — sans utiliser l'auto-complétion, la coloration syntaxique et d'autres avantages d'un environnement de développement normal. Pour cette raison, nous n'avons pas utilisé Azure ML de manière sérieuse pendant longtemps.
Mais récemment, j'ai découvert comment commencer à utiliser efficacement Azure ML dans mon travail ! Ça vous intéresse d'en savoir plus ?

Le secret principal réside dans l' . Elle vous permet de développer des scripts d'entraînement directement dans VS Code, en tirant parti de tous les avantages de l'environnement — et vous pouvez même exécuter le script localement, puis simplement l'envoyer à l'entraînement sur le cluster Azure ML en quelques clics. Pratique, n'est-ce pas ?
Voici les avantages que vous obtenez en utilisant Azure ML :
- Vous pouvez travailler pendant la majeure partie du temps localement sur votre machine dans un IDE confortable, et utiliser le GPU uniquement pour l'entraînement du modèle. Les ressources d'entraînement peuvent s'ajuster automatiquement en fonction de la charge requise, et en fixant le nombre minimum de nœuds à 0, vous pourrez automatiquement lancer une machine virtuelle "à la demande" dès qu'il y a des tâches d'apprentissage.
- Vous pouvez conserver tous les résultats d'entraînement au même endroit, y compris les métriques atteintes et les modèles obtenus — il n'est pas nécessaire d'inventer un système ou un ordre pour stocker tous les résultats.
- En même temps, plusieurs personnes peuvent travailler sur un même projet — ils peuvent utiliser un même cluster de calcul, tous les expériences seront mises en attente, et ils peuvent également voir les résultats des expériences des autres. Un de ces scénarios est l'utilisation d'Azure ML pour l'enseignement du Deep Learning, où au lieu de donner à chaque étudiant une machine virtuelle avec GPU, vous pouvez créer un seul cluster qui sera utilisé de manière centralisée par tous. De plus, un tableau de résultats commun avec la précision du modèle peut servir d'élément compétitif appréciable.
- Avec Azure ML, il est facile de mener des séries d'expériences, par exemple pour l'optimisation des hyperparamètres — cela peut se faire avec quelques lignes de code, sans avoir à effectuer manuellement des séries d'expériences.
J'espère vous avoir convaincu d'essayer Azure ML ! Voici comment commencer :
- Assurez-vous d'avoir installé , ainsi que les extensions et
- Clonez le référentiel — il contient un certain code de démonstration pour entraîner un modèle de reconnaissance des chiffres manuscrits sur le dataset MNIST.
- Ouvrez le dépôt cloné dans Visual Studio Code.
- Continuez à lire !
Azure ML Workspace et Azure ML Portal
Azure ML est organisé autour du concept de workspace — un espace de travail. Dans l'espace de travail, des données peuvent être stockées, des expériences y sont envoyées pour l'entraînement, et les résultats de l'entraînement — métriques obtenues et modèles — y sont conservés. Vous pouvez voir ce qu'il y a dans l'espace de travail via — et à partir de celui-ci, vous pouvez effectuer de nombreuses opérations, allant du téléchargement de données à la surveillance des expériences et au déploiement de modèles.
Créer un espace de travail peut se faire via l'interface web (voir ), ou en utilisant la ligne de commande Azure CLI ():
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazmlCertains ressources de calcul (Calcul). En créant un script pour entraîner un modèle, vous pouvez envoyer l'expérience à exécuter dans l'espace de travail, et spécifier le cible de calcul — dans ce cas, le script sera empaqueté, lancé dans l'environnement de calcul approprié, et ensuite tous les résultats de l'expérience seront sauvegardés dans l'espace de travail pour une analyse et une utilisation ultérieures.
Script d'entraînement pour MNIST
Considérons la tâche classique de en utilisant le jeu de données MNIST. De la même manière, à l'avenir, vous pourrez exécuter tous vos scripts d'entraînement.
Nous avons dans notre dépôt un script train_local.py, qui entraîne un modèle de régression linéaire de base en utilisant la bibliothèque Sklearn. Bien sûr, je comprends que ce n'est pas la meilleure façon de résoudre le problème - nous l'utilisons à titre d'exemple, comme la solution la plus simple.
Le script commence par télécharger les données MNIST desde OpenML, puis utilise la classe LogisticRegression pour entraîner le modèle, et imprimer ensuite la précision obtenue :
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mnist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size = 0.3, random_state = 42)
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))
print('Précision globale :', acc)Vous pouvez exécuter le script sur votre ordinateur et obtenir le résultat en quelques secondes.
Exécution du script dans Azure ML
Si nous exécutons le script d'entraînement via Azure ML, nous aurons deux avantages principaux :
- Exécuter l'entraînement sur une ressource de calcul arbitraire, qui est généralement plus performante que l'ordinateur local. Azure ML s'occupera de tout, y compris de regrouper notre script avec tous les fichiers du répertoire actuel dans un conteneur Docker, d'installer les dépendances nécessaires et de l'exécuter.
- Enregistrer les résultats dans un registre unique au sein de l'espace de travail Azure ML. Pour profiter de cette fonctionnalité, nous devons ajouter quelques lignes de code à notre script pour enregistrer la précision résultante :
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('accuracy', acc)
except:
passLa version correspondante du script s'appelle train_universal.py (il est un peu plus sophistiqué que ce qui est écrit ci-dessus, mais pas beaucoup). Ce script peut être exécuté à la fois localement et sur une ressource de calcul distante.
Pour l'exécuter dans Azure ML depuis VS Code, il faut procéder comme suit :
Assurez-vous que l'extension Azure est connectée à votre abonnement. Sélectionnez l'icône Azure dans le menu à gauche. Si vous n'êtes pas connecté, une notification apparaîtra en bas à droite (), sur laquelle vous pouvez cliquer pour vous connecter via votre navigateur. Vous pouvez également appuyer sur Ctrl-Shift-P pour ouvrir la ligne de commande VS Code, et taper Azure Sign In.
Ensuite, dans la section Azure (icône à gauche), recherchez la section MACHINE LEARNING:

Ici, vous devez voir différents groupes d'objets dans la zone de travail : ressources de calcul, expériences, etc.
- Allez dans la liste des fichiers, faites un clic droit sur le script
train_universal.pyet sélectionnez Azure ML : Exécuter comme expérience dans Azure.

- Après cela, vous aurez une série de dialogues dans la ligne de commande de VS Code : confirmez l'abonnement et la zone de travail Azure ML utilisés, puis choisissez Créer une nouvelle expérience:



Sélectionnez la création d'une nouvelle ressource de calcul Créer un nouveau calcul:
- Calcul détermine la ressource de calcul sur laquelle l'apprentissage aura lieu. Vous pouvez choisir votre ordinateur local ou un cluster cloud AmlCompute. Je recommande de créer un cluster de machines évolutif
STANDARD_DS3_v2, avec un nombre minimum de machines de 0 (et un maximum pouvant être de 1 ou plus, selon vos besoins). Cela peut être fait via l'interface de VS Code, ou à l'avance via .

- Calcul détermine la ressource de calcul sur laquelle l'apprentissage aura lieu. Vous pouvez choisir votre ordinateur local ou un cluster cloud AmlCompute. Je recommande de créer un cluster de machines évolutif
Il est ensuite nécessaire de sélectionner la configuration Configuration de calcul, qui définit les paramètres du conteneur créé pour l'apprentissage, notamment toutes les bibliothèques nécessaires. Dans notre cas, puisque nous utilisons Scikit Learn, sélectionnez SkLearn, puis confirmez simplement la liste des bibliothèques proposées en appuyant sur Entrée. Si vous utilisez des bibliothèques supplémentaires, elles doivent être indiquées ici.


Après cela, une fenêtre s'ouvrira avec un fichier JSON décrivant l'expérience. Vous pouvez modifier certains paramètres, par exemple, le nom de l'expérience. Ensuite, cliquez sur le lien Soumettre l'expérience directement à l'intérieur de ce fichier :

- Après la soumission réussie de l'expérience via VS Code, à droite dans la zone de notifications, vous verrez un lien vers , où vous pourrez suivre l'état et les résultats de l'expérience.

Par la suite, vous pourrez toujours le trouver dans la section Expériences , ou dans la section Azure Machine Learning dans la liste des expériences :

- Si vous avez ensuite apporté des corrections au code ou modifié des paramètres, redémarrer l'expérience sera beaucoup plus rapide et plus facile. En faisant un clic droit sur le fichier, vous verrez un nouvel élément de menu Répéter la dernière exécution — il suffit de le choisir, et l'expérience sera immédiatement lancée :

Vous pouvez toujours trouver les résultats des métriques de toutes les exécutions sur Azure ML Portal, il n'est pas nécessaire de les noter.
Vous savez maintenant que lancer des expériences avec Azure ML est simple et indolore, et vous en tirez un certain nombre d'avantages agréables.
Cependant, vous avez peut-être remarqué des inconvénients. Par exemple, le script a nécessité beaucoup plus de temps pour être exécuté. Bien sûr, il faut du temps pour emballer le script dans un conteneur et le déployer sur le serveur. Si le cluster a été réduit à 0 nœud, il faut encore plus de temps pour démarrer la machine virtuelle, et cela devient très apparent lorsque nous expérimentons avec des tâches simples comme MNIST, qui se résolvent en quelques secondes. Cependant, dans la vie réelle, lorsque l'entraînement dure plusieurs heures, voire des jours ou des semaines, ce temps additionnel devient insignifiant, surtout face à la performance considérablement plus élevée qu'un cluster de calcul peut offrir.
Et après ?
J'espère qu'après avoir lu cet article, vous serez en mesure d'utiliser Azure ML dans votre travail pour exécuter des scripts, gérer des ressources de calcul et stocker des résultats de manière centralisée. Cependant, Azure ML peut vous offrir encore plus d'avantages !
Dans l'espace de travail, vous pouvez stocker des données, ce qui crée un dépôt centralisé pour toutes vos tâches, facilement accessible. De plus, vous pouvez exécuter des expériences non pas depuis Visual Studio Code, mais en utilisant l'API — cela peut être particulièrement utile si vous devez optimiser des hyperparamètres et exécuter le script plusieurs fois avec des paramètres différents. En outre, Azure ML intègre une technologie spéciale , qui permet une recherche et une optimisation des hyperparamètres plus sophistiquées. Je parlerai de ces possibilités dans ma prochaine note.
Ressources utiles
Pour approfondir vos connaissances sur Azure ML, les cours Microsoft Learn suivants peuvent vous être utiles :
Source : habr.com



