Je connais de nombreux Data Scientists - et je les connais probablement moi-même - qui travaillent sur des machines avec GPU, local ou virtuel, situées dans le cloud, soit via le Notebook Jupyter, soit via un environnement de développement Python. Travaillant pendant 2 ans en tant qu'expert en développement AI / ML, c'est exactement ce que j'ai fait, tout en préparant les données sur un serveur ou une station de travail ordinaire, et j'ai commencé à m'entraîner sur une machine virtuelle avec un GPU dans Azure.
Bien sûr, nous avons tous entendu parler d' Azure Machine Learning - une plate-forme spéciale basée sur le cloud pour l'apprentissage automatique. Cependant, après un premier regard sur les articles d'introduction , il semble qu'Azure ML vous créera plus de problèmes qu'il n'en résoudra. Par exemple, dans l'exemple de formation mentionné ci-dessus, la formation Azure ML est lancée à partir du bloc-notes Jupyter, tandis que le script de formation lui-même est proposé pour être créé et modifié en tant que fichier texte dans l'une des cellules - sans utiliser la saisie semi-automatique, la mise en évidence de la syntaxe et les autres avantages d'un environnement de développement normal. Pour cette raison, nous n'avons pas utilisé sérieusement Azure ML dans notre travail depuis longtemps.
Cependant, j'ai récemment découvert un moyen de commencer à utiliser Azure ML efficacement dans mon travail! Des détails intéressants?

Le secret principal est l' extension Visual Studio Code pour Azure ML . Il vous permet de développer des scripts de formation directement dans VS Code, en utilisant tous les avantages de l'environnement - vous pouvez même exécuter le script localement, puis le prendre et l'envoyer pour une formation dans le cluster Azure ML en quelques clics de souris. Pratique, non?
Ce faisant, vous bénéficiez des avantages suivants à l'aide d'Azure ML:
- Vous pouvez travailler la plupart du temps localement sur votre machine dans un IDE pratique et utiliser le GPU uniquement pour former le modèle . Dans le même temps, le pool de ressources de formation peut s'adapter automatiquement à la charge requise, et en définissant le nombre minimum de nœuds sur 0, vous pouvez démarrer automatiquement la machine virtuelle "à la demande" en présence de tâches de formation.
- Vous pouvez stocker tous les résultats d'apprentissage en un seul endroit , y compris les mesures obtenues et les modèles résultants - il n'est pas nécessaire d'inventer un système ou une procédure pour stocker tous les résultats.
- En même temps, plusieurs personnes peuvent travailler sur un même projet - elles peuvent utiliser le même cluster informatique, toutes les expériences seront alignées, et elles peuvent également voir les résultats de leurs expériences respectives. Un de ces scénarios est l' utilisation d'Azure ML dans l'enseignement du Deep Learning , alors qu'au lieu de donner à chaque étudiant une machine virtuelle avec un GPU, vous pouvez créer un cluster que tout le monde utilisera de manière centralisée. De plus, un tableau général des résultats avec la précision du modèle peut être un bon élément concurrentiel.
- À l'aide d'Azure ML, vous pouvez facilement mener une série d'expériences, par exemple, pour optimiser les hyperparamètres - cela peut être fait avec quelques lignes de code, il n'est pas nécessaire de mener une série d'expériences manuellement.
J'espère que je vous ai convaincu d'essayer Azure ML! Voici comment commencer:
Azure ML Workspace et Azure ML Portal
Azure ML est organisé autour du concept de l' espace de travail - Espace de travail. Les données peuvent être stockées dans l'espace de travail, des expériences lui sont envoyées pour la formation, les résultats d'apprentissage sont stockés au même endroit - les mesures et les modèles obtenus. Vous pouvez voir ce qui se trouve à l'intérieur de l'espace de travail via le portail Azure ML - et à partir de là , vous pouvez effectuer de nombreuses opérations, du téléchargement de données à la surveillance des expériences et au déploiement de modèles.
Vous pouvez créer un espace de travail via l'interface Web du portail Azure (voir les instructions pas à pas ) ou en utilisant la ligne de commande CLI Azure ( instructions ):
az extension add -n azure-cli-ml az group create -n myazml -l northeurope az ml workspace create -w myworkspace -g myazml
Il existe également des ressources de calcul associées à l'espace de travail. Après avoir créé un script pour la formation du modèle, vous pouvez envoyer l'expérience à l' espace de travail et spécifier la cible de calcul - cela emballera le script, l'exécutera dans l'environnement informatique souhaité, puis tous les résultats de l'expérience seront enregistrés dans l'espace de travail pour une analyse et une utilisation plus approfondies.
Script de formation pour MNIST
Considérez le problème classique de reconnaissance de l'écriture manuscrite à l'aide de l'ensemble de données MNIST. De même, à l'avenir, vous pourrez exécuter n'importe lequel de vos scripts de formation.
Notre référentiel possède un script train_local.py
qui train_local.py
modèle de régression linéaire train_local.py
plus simple à l'aide de 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 comme exemple, comme la plus simple.
Le script télécharge d'abord les données MNIST à partir d'OpenML, puis utilise la classe LogisticRegression
pour entraîner le modèle, puis imprime la précision résultante:
mnist = fetch_openml('mnist_784') mnist['target'] = np.array([int(x) for x in mnist['target']]) shuffle_index = np.random.permutation(len(mist['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('Overall accuracy:', acc)
Vous pouvez exécuter le script sur votre ordinateur et en quelques secondes, vous obtiendrez le résultat.
Exécutez le script dans Azure ML
Si nous exécutons le script de formation via Azure ML, nous aurons deux avantages principaux:
- Commencer la formation sur une ressource informatique arbitraire, qui, en règle générale, est plus productive qu'un ordinateur local. Dans le même temps, Azure ML se chargera de compresser notre script avec tous les fichiers du répertoire actuel dans le conteneur Docker, d'installer les dépendances requises et de l'envoyer pour exécution.
- Enregistrez les résultats dans un registre unique dans l'espace de travail Azure ML. Pour profiter de cette opportunité, 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: pass
La version correspondante du script s'appelle train_universal.py
(c'est un peu train_universal.py
que celui écrit ci-dessus, mais pas beaucoup). Ce script peut être exécuté localement et sur une ressource informatique distante.
Pour l'exécuter dans Azure ML à partir de VS Code, procédez comme suit:
Assurez-vous qu'Azure Extension est connecté à votre abonnement. Sélectionnez l'icône Azure dans le menu de gauche. Si vous n'êtes pas connecté, une notification apparaîtra dans le coin inférieur droit ( celui-ci ), en cliquant sur lequel vous pourrez entrer via le navigateur. Vous pouvez également appuyer sur Ctrl-Maj-P pour appeler la ligne de commande VS Code et saisir Azure Sign In .
Après cela, dans la section Azure (icône à gauche), trouvez la section MACHINE LEARNING :

Ici, vous devriez voir différents groupes d'objets à l'intérieur de l'espace de travail: ressources informatiques, expériences, etc.
- Accédez à la liste des fichiers, cliquez avec le bouton droit sur le script
train_universal.py
et sélectionnez Azure ML: exécuter en tant qu'expérience dans Azure .

- Cela sera suivi d'une série de boîtes de dialogue dans la zone de ligne de commande VS Code: confirmez l'abonnement utilisé et l'espace de travail Azure ML, puis sélectionnez Créer une nouvelle expérience :



Sélectionnez Créer un nouveau calcul :
- Le calcul définit la ressource informatique sur laquelle la formation aura lieu. Vous pouvez choisir un ordinateur local ou un cluster cloud AmlCompute. Je recommande de créer un cluster évolutif de machines
STANDARD_DS3_v2
, avec un nombre minimum de machines 0 (et le maximum peut être 1 ou plus, selon vos appétits). Cela peut être fait via l'interface VS Code, ou auparavant via le portail ML .

Ensuite, vous devez sélectionner la configuration de configuration de calcul , qui détermine les paramètres du conteneur créé pour la formation, en particulier, toutes les bibliothèques nécessaires. Dans notre cas, puisque nous utilisons Scikit Learn, sélectionnez SkLearn , puis confirmez simplement la liste de bibliothèques proposée avec Enter. Si vous utilisez des bibliothèques supplémentaires, vous devez les spécifier ici.


Après cela, une fenêtre s'ouvre avec un fichier JSON décrivant l'expérience. Dans celui-ci, vous pouvez fixer certains paramètres - par exemple, le nom de l'expérience. Après cela, cliquez sur le lien Soumettre l'expérience directement dans ce fichier:

- Après avoir soumis avec succès l'expérience via VS Code, à droite dans la zone de notification, vous verrez un lien vers le portail Azure ML , où vous pouvez suivre l'état et les résultats de l'expérience.

Par la suite, vous pouvez toujours le trouver dans la section Portail Azure ML Expériences ou dans la section Apprentissage automatique Azure dans la liste des expériences:

- Si après cela, vous avez apporté des corrections au code ou modifié les paramètres, le redémarrage de l'expérience sera beaucoup plus rapide et plus facile. En cliquant avec le bouton droit sur le fichier, vous verrez un nouvel élément de menu Répéter la dernière exécution - il suffit de le sélectionner et l'expérience sera lancée immédiatement:

Vous pouvez toujours trouver les résultats des métriques de tous les lancements sur le portail Azure ML, il n'est pas nécessaire de les enregistrer.
Vous savez maintenant que l'exécution d'expériences avec Azure ML est facile et indolore, et vous obtenez un certain nombre d'avantages intéressants.
Mais vous avez peut-être remarqué des défauts. Par exemple, l'exécution du script a pris beaucoup plus de temps. Bien sûr, il faut du temps pour emballer le script dans un conteneur et le déployer sur le serveur. Si en même temps le cluster était réduit à une taille de 0 noeuds, il faudra encore plus de temps pour démarrer la machine virtuelle, et tout cela est très visible lorsque nous expérimentons des tâches simples comme MNIST, qui sont résolues en quelques secondes. Cependant, dans la vie réelle, lorsque la formation dure plusieurs heures, voire des jours ou des semaines, ce temps supplémentaire devient insignifiant, en particulier dans le contexte des performances beaucoup plus élevées qu'un cluster informatique peut fournir.
Et ensuite?
J'espère qu'après avoir lu cet article, vous pourrez et utiliserez Azure ML dans votre travail pour exécuter des scripts, gérer les ressources informatiques et stocker les résultats de manière centralisée. Cependant, Azure ML peut vous offrir encore plus d'avantages!
À l'intérieur de l'espace de travail, vous pouvez stocker des données, créant ainsi un référentiel centralisé pour toutes vos tâches, qui est facile d'accès. De plus, vous pouvez exécuter des expériences non pas à partir de Visual Studio Code, mais en utilisant l'API - cela peut être particulièrement utile si vous devez optimiser les hyperparamètres et devez exécuter le script plusieurs fois avec différents paramètres. De plus, dans Azure ML, une technologie Hyperdrive spéciale est intégrée , ce qui vous permet d'effectuer des recherches et une optimisation plus astucieuses des hyperparamètres. Je parlerai de ces fonctionnalités dans mon prochain article.
Ressources utiles
Pour une étude plus approfondie d'Azure ML, les cours Microsoft Learn suivants peuvent être utiles: