Comment surmonter la peur et commencer Ă  utiliser Azure Machine Learning

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:


  1. 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 .


  2. Après cela, dans la section Azure (icône à gauche), trouvez la section MACHINE LEARNING :



Azure ML Workspace dans VS Code
Ici, vous devriez voir différents groupes d'objets à l'intérieur de l'espace de travail: ressources informatiques, expériences, etc.


  1. 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 .

Azure ML Workspace dans VS Code


  1. 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 :

Azure ML Workspace dans VS Code
Azure ML Workspace dans VS Code
Azure ML Workspace dans VS Code


  1. 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 .

    Azure ML Workspace dans VS Code


  2. 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.


    Azure ML Workspace dans VS Code
    Azure ML Workspace dans VS Code


  3. 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:



Azure ML Workspace dans VS Code


  1. 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.

Résultat de l'expérience Azure ML dans le portail Azure ML
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:


Azure ML Workspace dans VS Code


  1. 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:

Azure ML Workspace dans VS Code
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:


Source: https://habr.com/ru/post/fr485338/


All Articles