10 recettes de ligne de commande pour le Deep Learning sur Amazon Web Services

10 recettes de ligne de commande pour le Deep Learning sur Amazon Web Services

L'exécution de grands processus d'apprentissage en profondeur sur Amazon Web Services EC2 est un moyen économique et efficace d'apprendre et de développer des modèles.

Pour seulement quelques dollars, vous pouvez accéder à des dizaines de gigaoctets de RAM, des dizaines de cœurs de processeur et plusieurs GPU. Je le recommande fortement.

Si vous êtes nouveau sur EC2 ou la ligne de commande Linux, il existe une suite de commandes que vous trouverez inestimable lors de l'exécution de vos scripts d'apprentissage en profondeur dans le cloud.

Dans ce tutoriel, vous découvrirez ma liste privée des 10 commandes que j'utilise chaque fois que j'utilise EC2 pour adapter de grands modèles d'apprentissage en profondeur.

Après avoir lu cet article, vous saurez:

  • Comment copier vos données vers et depuis vos instances EC2.
  • Comment configurer vos scripts pour qu'ils s'exécutent pendant des jours, des semaines ou des mois en toute sécurité.
  • Comment surveiller les processus, le système et les performances du GPU.

Lancez votre projet avec mon nouveau livre Deep Learning With Python, y compris tutoriels étape par étape et le Code source Python fichiers pour tous les exemples.

Commençons.

Noter: Toutes les commandes exécutées depuis votre poste de travail supposent que vous exécutez un environnement de type Linux (par exemple Linux, OS X ou cygwin).

Avez-vous d'autres conseils, astuces ou commandes préférées pour exécuter des modèles sur EC2?
Faites-moi savoir dans les commentaires ci-dessous.

10 recettes de ligne de commande pour le Deep Learning sur Amazon Web Services

10 recettes de ligne de commande pour le Deep Learning sur Amazon Web Services
Photo de chascar, certains droits réservés.

Aperçu

Les commandes présentées dans cet article supposent que votre instance AWS EC2 est déjà en cours d'exécution.

Par souci de cohérence, quelques autres hypothèses sont formulées:

  • L'adresse IP de votre serveur est 54.218.86.47; remplacez-la par l'adresse IP de votre instance de serveur.
  • Votre nom d'utilisateur est utilisateur ec2; remplacez-le par votre nom d'utilisateur sur votre instance.
  • Votre clé SSH se trouve dans ~ / .ssh / et a le nom de fichier aws-keypair.pem; remplacez-le par l'emplacement et le nom de fichier de votre clé SSH.
  • Vous travaillez avec des scripts Python.

Si vous avez besoin d'aide pour configurer et exécuter une instance AWS EC2 basée sur GPU pour l'apprentissage en profondeur, consultez le didacticiel:

1. Connectez-vous depuis votre poste de travail au serveur

Vous devez vous connecter au serveur avant de pouvoir faire quoi que ce soit d'utile.

Vous pouvez vous connecter facilement à l'aide du shell sécurisé SSH.

Je recommande de stocker votre clé SSH dans votre ~ / .ssh / répertoire avec un nom utile. J'utilise le nom aws-keypair.pem. N'oubliez pas: le fichier doit avoir les autorisations 600.

La commande suivante vous connectera à votre instance de serveur. N'oubliez pas de remplacer le nom d'utilisateur et l'adresse IP par votre nom d'utilisateur et votre adresse IP d'instance de serveur.

2. Copiez les fichiers de votre poste de travail vers le serveur

Vous copiez des fichiers de votre poste de travail vers votre instance de serveur à l'aide de la copie sécurisée (scp).

L'exemple ci-dessous, exécuté sur votre poste de travail, copiera le script.py Script Python dans le répertoire local de votre poste de travail vers votre instance de serveur.

3. Exécutez le script en tant que processus d'arrière-plan sur le serveur

Vous pouvez exécuter votre script Python en tant que processus d'arrière-plan.

De plus, vous pouvez l'exécuter de manière à ignorer les signaux d'autres processus, à ignorer toute entrée standard (stdin) et à transférer toutes les sorties et erreurs vers un fichier journal.

D'après mon expérience, tout cela est nécessaire pour les scripts de longue durée destinés à adapter de grands modèles d'apprentissage en profondeur.

Cela suppose que vous exécutez le script.py Script Python situé dans le / home / utilisateur-ec2 / répertoire et que vous souhaitez que la sortie de ce script soit transmise au fichier script.py.log situé dans le même répertoire.

Syntonisez vos besoins.

S'il s'agit de votre première expérience avec nohup, vous pouvez en savoir plus ici:

S'il s'agit de votre première expérience de redirection de l'entrée standard (stdin), de la sortie standard (stout) et de l'erreur standard (sterr), vous pouvez en savoir plus ici:

4. Exécutez le script sur un GPU spécifique sur le serveur

Je recommande d'exécuter plusieurs scripts en même temps, si votre instance AWS EC2 peut le gérer pour votre problème.

Par exemple, votre instance EC2 choisie peut avoir 4 GPU, et vous pouvez choisir d'exécuter un script sur chacun.

Avec CUDA, vous pouvez spécifier le périphérique GPU à utiliser avec la variable d'environnement CUDA_VISIBLE_DEVICES.

Nous pouvons utiliser la même commande ci-dessus pour exécuter le script et spécifier le périphérique GPU spécifique à utiliser comme suit:

Si vous avez 4 périphériques GPU sur votre instance, vous pouvez spécifier CUDA_VISIBLE_DEVICES = 0 à CUDA_VISIBLE_DEVICES = 3.

Je m'attends à ce que cela fonctionne pour le backend Theano, mais je ne l'ai testé qu'avec le backend TensorFlow pour Keras.

Vous pouvez en savoir plus sur CUDA_VISIBLE_DEVICES dans la poste:

5. Surveiller la sortie du script sur le serveur

Vous pouvez surveiller la sortie de votre script pendant son exécution.

Cela peut être utile si vous sortez un score à chaque époque ou après chaque exécution d'algorithme.

Cet exemple répertorie les dernières lignes de votre fichier journal de script et met à jour la sortie à mesure que de nouvelles lignes sont ajoutées au script.

Amazon peut fermer votre terminal de manière agressive si l'écran n'obtient pas de nouvelle sortie dans un certain temps.

Une alternative consiste à utiliser la commande watch. J'ai trouvé qu'Amazon maintiendrait ce terminal ouvert:

J'ai trouvé que la sortie standard (stout) des scripts python ne semble pas être mise à jour fréquemment.

Je ne sais pas si c'est une chose EC2 ou une chose Python. Cela signifie que vous ne verrez peut-être pas la sortie dans le journal mis à jour souvent. Il semble être mis en mémoire tampon et sorti lorsque le tampon atteint des tailles fixes ou à la fin d'une analyse.

En savez-vous plus à ce sujet?
Faites-moi savoir dans les commentaires ci-dessous.

6. Surveiller les performances du système et des processus sur le serveur

Il est judicieux de surveiller les performances du système EC2. Surtout la quantité de RAM que vous utilisez et qu'il vous reste.

Vous pouvez le faire en utilisant la commande top qui se mettra à jour toutes les quelques secondes.

Vous pouvez également surveiller le système et uniquement votre processus, si vous connaissez son identifiant de processus (PID).

7. Surveiller les performances du GPU sur le serveur

C'est une bonne idée de garder un œil sur les performances de votre GPU.

Encore une fois, gardez un œil sur l'utilisation du GPU, sur les GPU en cours d'exécution, si vous prévoyez d'exécuter plusieurs scripts en parallèle et dans l'utilisation de la RAM du GPU.

Vous pouvez utiliser le nvidia-smi commande pour garder un œil sur l'utilisation du GPU. J'aime utiliser le Regardez commande qui maintient le terminal ouvert et efface l'écran pour chaque nouveau résultat.

8. Vérifiez quels scripts sont toujours en cours d'exécution sur le serveur

Il est également important de garder un œil sur les scripts toujours en cours d'exécution.

Vous pouvez le faire avec le ps commander.

Encore une fois, j'aime utiliser la commande watch pour garder le terminal ouvert.

9. Modifier un fichier sur le serveur

Je recommande de ne pas éditer les fichiers sur le serveur sauf si vous y êtes vraiment obligé.

Néanmoins, vous pouvez éditer un fichier sur place en utilisant le vi éditeur.

L'exemple ci-dessous ouvrira votre script dans vi.

Bien sûr, vous pouvez utiliser votre éditeur de ligne de commande préféré, comme emacs; cette note est vraiment pour vous si vous êtes nouveau sur la ligne de commande Unix.

S'il s'agit de votre première exposition à vi, vous pouvez en savoir plus ici:

10. À partir de votre poste de travail, téléchargez des fichiers depuis le serveur

Je recommande d'enregistrer votre modèle et tous les résultats et graphiques explicitement dans des fichiers nouveaux et séparés dans le cadre de votre script.

Vous pouvez télécharger ces fichiers depuis votre instance de serveur sur votre poste de travail à l'aide de la copie sécurisée (scp).

L'exemple ci-dessous est exécuté à partir de votre poste de travail et copiera tous les fichiers PNG de votre répertoire personnel sur votre poste de travail.

Trucs et astuces supplémentaires

Cette section répertorie quelques conseils supplémentaires lorsque vous travaillez intensivement sur AWS EC2.

  • Exécutez plusieurs scripts à la fois. Je recommande de sélectionner du matériel doté de plusieurs GPU et d'exécuter plusieurs scripts à la fois pour utiliser pleinement la plate-forme.
  • Écrivez et modifiez des scripts uniquement sur votre poste de travail. Traitez EC2 comme un environnement de pseudo-production et ne copiez que les scripts et les données pour les exécuter. Faites tout le développement sur votre poste de travail et écrivez de petits tests de votre code pour vous assurer qu'il fonctionnera comme prévu.
  • Enregistrer les sorties de script explicitement dans un fichier. Enregistrez les résultats, les graphiques et les modèles dans des fichiers qui peuvent être téléchargés ultérieurement sur votre poste de travail pour analyse et application.
  • Utilisez la commande watch. Amazon tue de manière agressive les sessions de terminal qui n'ont aucune activité. Vous pouvez garder un œil sur les choses en utilisant la commande watch qui envoie des données assez fréquemment pour garder le terminal ouvert.
  • Exécutez des commandes depuis votre poste de travail. Toutes les commandes répertoriées ci-dessus destinées à être exécutées sur le serveur peuvent également être exécutées à partir de votre poste de travail en préfixant la commande avec "ssh -je ~ / .ssh /aws-keypair.pem [email protected]»Et en citant la commande que vous souhaitez exécuter. Cela peut être utile pour vérifier les processus tout au long de la journée.

Résumé

Dans ce didacticiel, vous avez découvert les 10 commandes que j'utilise chaque fois que j'entraîne de grands modèles d'apprentissage en profondeur sur des instances AWS EC2 avec des GPU.

Plus précisément, vous avez appris:

  • Comment copier vos données vers et depuis vos instances EC2.
  • Comment configurer vos scripts pour qu'ils s'exécutent pendant des jours, des semaines ou des mois en toute sécurité.
  • Comment surveiller les processus, le système et les performances du GPU.

Avez-vous des questions?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.

Développez des projets d'apprentissage profond avec Python!

Apprentissage profond avec Python

Et si vous pouviez développer un réseau en quelques minutes

... avec juste quelques lignes de Python

Découvrez comment dans mon nouvel Ebook:
Apprentissage profond avec Python

Cela couvre projets de bout en bout sur des sujets comme:
Perceptrons multicouches, Filets convolutifs et Réseaux neuronaux récurrents, et plus...

Enfin, apportez le Deep Learning à
Vos propres projets

Passer les universitaires. Juste des résultats.

Voir ce qu'il y a à l'intérieur

Vous pourriez également être intéressé par