[DOCKER] Configuration PC la plus rapide pour un apprentissage en profondeur à partir de zéro

introduction

J'ai configuré un PC pour l'apprentissage en profondeur à plusieurs reprises, mais j'ai oublié de le faire et j'ai oublié de le faire à plusieurs reprises. Je suis sûr que je ferai la même chose encore et encore, alors j'ai décidé de me laisser une note de travail à l'avenir.

Cet article est une note sur la configuration la plus rapide d'une machine Linux avec un GPU pour l'apprentissage en profondeur. Mon but est

--Construire un environnement qui n'utilise pas NVIDIA Docker (Anaconda, PyTorch, TensorFlow)

Il y en a deux. Bien sûr, peu importe lequel.

De plus, il est installé à l'université, et malheureusement c'est un environnement proxy de nos jours. L'explication suivante montre les paramètres du proxy à plusieurs endroits, mais si vous êtes un lecteur chanceux qui n'a pas besoin d'un proxy, vous pouvez l'ignorer.

Acheter une machine

Cette fois depuis SyCom. Modèle RTX 2080 Ti en 2 pièces. Bien sûr, il n'y a pas de système d'exploitation. Je regrette d'avoir oublié de retirer le lecteur optique.

Télécharger l'image du système d'exploitation

Puisqu'il s'agit d'un apprentissage en profondeur, le système d'exploitation est Ubuntu. J'ai utilisé la version de bureau jusqu'à présent, mais la version du serveur peut être plus rapide à installer car je n'ai pas besoin d'un bureau séparé. Donc, cette fois, j'utiliserai la version serveur.

Cette fois, au lieu d'installer la dernière version 20.04 d'Ubuntu, nous installerons la version morte 18.04, donc à partir des versions précédentes sur la Page de téléchargements alternatifs 18.04 Sélectionnez un Accédez à la page image.

Comme le processeur est Intel Core i7, sélectionnez Image d'installation du serveur PC 64 bits (AMD64) Et téléchargez.

Préparation de la mémoire USB pour le démarrage

La méthode est décrite dans Créer une clé USB amorçable sur Ubuntu du didacticiel Ubuntu, vous pouvez donc vous le permettre. Quand j'y ai pensé, il y avait un point addictif.

Puisque je suis un Mac, après avoir formaté la mémoire USB avec l'Utilitaire de disque, démarrez Etcher et sélectionnez l'image ISO Ubuntu téléchargée ci-dessus. Lorsque vous appuyez sur "Flash!" ...

Something went wrong. If it is a compressed image, please check that the archive is not corrupted.

Gumu.

Je ne pouvais pas m'en empêcher, alors j'ai décidé de copier l'image sur une clé USB avec dd, même si c'était un peu délicat. Vérifiez la diskutil list pour le chemin correct vers votre périphérique mémoire USB avant de faire ce qui suit! Dans mon cas, il se trouve que c'est / dev / disk2, mais je ne sais pas si je fais eraseDisk sans le vérifier attentivement et perdre des données importantes.

sudo diskutil eraseDisk FAT32 NAME MBRFormat /dev/disk2
diskutil unmountdisk /dev/disk2
sudo dd if=$HOME/Downloads/ubuntu-18.04.5-live-server-amd64.iso \
  of=/dev/rdisk2 bs=2m conv=sync

Lorsque l'exécution est terminée, l'utilitaire de disque vous fâchera que vous ne puissiez pas le lire, mais vous n'avez pas à vous inquiéter car il est naturel que vous ne puissiez pas le lire.

Démarrer le PC à partir de la mémoire USB

Connectez le câble d'alimentation et le câble réseau au PC, puis mettez l'appareil sous tension avec la mémoire USB insérée. Appuyez sur F11 ou quelque chose pour afficher le menu de démarrage et démarrer à partir du disque d'installation dans la mémoire USB. Dans mon cas, j'ai démarré à partir de la clé USB sans autorisation alors que j'étais confus, et le résultat était correct.

Après le démarrage, c'est presque comme décrit dans [Ubuntu 18.04 LTS Server] Install. Si vous souhaitez corriger l'adresse IP, vous pouvez sauter la [Section suivante](changer l'adresse IP en fixe) en la définissant ici. Si vous définissez le proxy ici, il sera installé dans l'état où le paramétrage du proxy d'apt a été terminé, donc c'est facile. De plus, si vous mettez OpenSSH ici, il est pratique de pouvoir travailler à distance après cela.

L'installation s'est terminée en 50 secondes!

Changer l'adresse IP en fixe

Découvrez l'adresse IP attribuée par DHCP. Si vous ne savez pas, connectez-vous à partir de la console et exécutez ʻip addr` pour rechercher une interface de type Ethernet.

Exécutez ssh (adresse IP) -l (nom d'utilisateur créé) à partir d'une autre machine sur le réseau pour vous connecter à distance. Exécutez ʻip addr` pour connaître le nom de l'interface et en prendre note. Il devrait avoir un nom comme eth0 ou en0. Ce qui suit est lorsque le nom de l'interface est eno1.

Sauvegardez le fichier d'origine sous / etc / netplan et utilisez un éditeur pour créer un fichier appelé 01-netcfg.yaml. J'ai utilisé vi. L'exemple suivant est lorsque l'adresse attribuée à cette machine est 192.168.1.18, le masque de réseau est 24 bits, l'adresse IP du routeur par défaut est 192.168.1.3 et le serveur DNS est 192.168.1.83.

cd /etc/netplan
sudo mv 00-installer-config.yaml 00-installer-config.yaml.org
sudo vi 01-netcfg.yaml

01-netcfg.yaml


network:
  ethernets:
    eno1:
      dhcp4: no
      addresses: [192.168.1.18/24]
      gateway4: 192.168.1.3
      nameservers:
        addresses: [192.168.1.83]
      dhcp6: no
  version: 2 

Après avoir enregistré le fichier, exécutez sudo netplan apply. Si vous vous êtes connecté à distance, vous ne pourrez pas l'utiliser pour le moment, alors connectez-vous à nouveau avec ssh 192.168.1.18.

Une fois que vous avez fait cela, vous pouvez supprimer l'écran et le clavier.

Définition des variables d'environnement liées au proxy

Le serveur proxy est spécifié au moment de l'installation, mais les variables d'environnement doivent être définies séparément. Ouvrez le fichier / etc / environment dans un éditeur et ajoutez ce qui suit:

/etc/environment


HTTP_PROXY=http://Adresse du serveur proxy:Port/
HTTPS_PROXY=http://Adresse du serveur proxy:Port/
FTP_PROXY=http://Adresse du serveur proxy:Port/
ALL_PROXY=http://Adresse du serveur proxy:Port/
http_proxy=http://Adresse du serveur proxy:Port/
https_proxy=http://Adresse du serveur proxy:Port/
ftp_proxy=http://Adresse du serveur proxy:Port/

Connectez-vous à nouveau pour refléter les paramètres ci-dessus.

Installation du pilote NVIDIA

[Que se passe-t-il avec NVIDIA Docker maintenant? (Version 19.11) Article bonus](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#Bonus-nvidia-Install driver).

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda-repo-ubuntu1804-11-0-local_11.0.3-450.51.06-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-0-local_11.0.3-450.51.06-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda-drivers

Une fois installé, redémarrez en tant que sudo reboot.

Connectez-vous à nouveau et exécutez nvidia-smi pour vérifier.

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  On   | 00000000:01:00.0 Off |                  N/A |
| 32%   42C    P8    22W / 250W |      1MiB / 11011MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  GeForce RTX 208...  On   | 00000000:02:00.0 Off |                  N/A |
| 31%   39C    P8    21W / 250W |      1MiB / 11019MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Téléchargez et installez Miniconda

Si vous prévoyez d'utiliser Anaconda, vous n'avez pas besoin d'inclure Anaconda dans votre système. Miniconda va bien. Parce que personne ne met à jour Anaconda installé sur le système → personne ne l'utilise.

Ce qui suit installe Miniconda sur votre système, mais uniquement dans le but de créer votre propre environnement avec la commande conda.

Vous n'êtes pas obligé de mettre la Miniconda dans le système séparément, vous pouvez la placer chez vous.

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sudo sh Miniconda3-latest-Linux-x86_64.sh -p /usr/local/miniconda3 -s -b

Si vous faites cela, vous aurez des problèmes car le propriétaire du répertoire .conda sous votre domicile sera root, alors procédez comme suit pour le changer en le vôtre:

sudo chown -R $USER ~/.conda

Construction de l'environnement avec Conda

Chaque utilisateur ajoute ce qui suit au fichier de configuration directement sous son / sa maison. Vous pouvez maintenant utiliser la commande conda.

.bash_profile


. /usr/local/miniconda3/etc/profile.d/conda.sh

Construire un environnement Anaconda

Si vous pouvez utiliser [PyTorch](création d'un environnement #PyTorch) ou [TensorFlow](création d'un environnement #TensorFlow), vous pouvez ignorer cette section et la placer dans le bloc-notes Jupyter selon le cas.

Créez votre propre environnement Anaconda avec la commande conda. Je l'ai nommé myanaconda.

conda create -n myanaconda python=3.6 anaconda

Une fois que vous avez un environnement Anaconda, activez-le.

conda activate myanaconda

Maintenant que je suis dans mon propre environnement, je peux faire ce que je veux avec pip install.

Construire un environnement PyTorch

Suivez les étapes de Démarrage rapide localement dans Officiel. Il n'est pas nécessaire d'installer CUDA ou cuDNN à l'avance.

Créez votre propre environnement PyTorch avec la commande conda. Je l'ai appelé mytorch.

conda create -n mytorch pytorch torchvision cudatoolkit=10.2 -c pytorch

Lorsque vous avez un nouvel environnement, activez-le.

conda activate mytorch

Pour les tests, essayez d'exécuter des réseaux d'adversaires génératifs à convolution profonde (https://github.com/pytorch/examples/tree/master/dcgan).

git clone https://github.com/pytorch/examples.git
cd examples/dcgan
pip install -r requirements.txt
python main.py --dataset cifar10 --dataroot /var/tmp/cifar10 --cuda

Si vous aimez regarder beaucoup d'images étranges générées, vous avez terminé.

Création d'un environnement TensorFlow

Cette section est le contenu de L'installation du GPU Tensorflow en toute simplicité: utilisez conda au lieu de pip. Il n'est pas nécessaire d'installer CUDA ou cuDNN à l'avance.

Créez votre propre environnement TensorFlow avec la commande conda. Il s'agit d'un environnement de test pour TensorFlow 2, je l'ai donc nommé tf2.

conda create -n tf2 tensorflow-gpu

Lorsque vous avez un nouvel environnement, activez-le.

conda activate tf2

Pour les tests, essayez d'exécuter TensorFlow 2.0 Tutorial 01: Basic Image Classification.

git clone https://github.com/lambdal/TensorFlow2-tutorial.git
cd TensorFlow2-tutorial/01-basic-image-classification/
python resnet_cifar.py 

Ouvrez un autre terminal, connectez-vous à distance avec ssh et vérifiez l'utilisation du GPU avec nvidia-smi -l. Il semble que TensorFlow 2 puisse utiliser tous les GPU en même temps! Oh! Ça fait du bien.

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  On   | 00000000:01:00.0 Off |                  N/A |
| 40%   75C    P2   218W / 250W |  10952MiB / 11011MiB |     75%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  GeForce RTX 208...  On   | 00000000:02:00.0 Off |                  N/A |
| 38%   70C    P2   216W / 250W |  10960MiB / 11019MiB |     77%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      4977      C   python                          10949MiB |
|    1   N/A  N/A      4977      C   python                          10957MiB |
+-----------------------------------------------------------------------------+

Configuration de NVIDIA Docker

Cette section était généralement basée sur [Comment installer NVIDIA Docker (dernière version)](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#nvidia-docker- Comment installer la dernière version).

Installation de Docker lui-même

Suivez ici.

sudo apt-get update
sudo apt-get install \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
 stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Paramètres du proxy Docker

La méthode est décrite dans Control Docker with systemd.

Suivez les étapes ci-dessous pour créer un répertoire appelé docker.service.d sous / etc / systemd / system / et un fichier appelé http-proxy.conf en dessous.

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

http-proxy.conf


[Service]
Environment="HTTP_PROXY=http://Adresse du serveur proxy:Port/" "HTTPS_PROXY=http://Adresse du serveur proxy:Port/" "NO_PROXY=localhost,127.0.0.1,.lab"

Redémarrez Docker pour que les paramètres prennent effet.

sudo systemctl daemon-reload
sudo systemctl restart docker

Test Docker

Jusqu'à présent, téléchargez l'image hello-world depuis Docker Hub et exécutez-la.

sudo docker run hello-world

Si vous recevez un message comme celui-là, c'est OK.

Installation de NVIDIA Container Toolkit

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

Suivez le guide pour effectuer les opérations suivantes: C'est OK si la sortie de nvidia-smi est sortie.

sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

Autoriser les utilisateurs non root à exécuter Docker

sudo usermod -aG docker `whoami`

Testez si vous pouvez exécuter la commande docker en tant que non-root après un redémarrage une fois avec sudo reboot.

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Test de NVIDIA Docker

Essayez d'exécuter Tacotron 2 et WaveGlow v1.10 pour PyTorch.

git clone https://github.com/NVIDIA/DeepLearningExamples.git
cd DeepLearningExamples/PyTorch/SpeechSynthesis/Tacotron2
bash scripts/prepare_dataset.sh
bash scripts/docker/build.sh

Entrez dans l'environnement Docker avec la commande suivante.

bash scripts/docker/interactive.sh

Prétraitement

bash scripts/prepare_mels.sh

Le reste apprend, mais dans mon environnement, il tombera en raison du manque de mémoire GPU, j'ai donc réécrit l'emplacement pour spécifier la taille du lot de scripts / train_tacotron2.sh en -bs 32.

bash scripts/train_tacotron2.sh

Cela prend du temps, donc après environ 100 époques, je me suis arrêté avec ctrl + C.

Test synthétique. Je n'ai pas formé WaveGlow en tant que modèle, mais téléchargé et utilisé celui formé. La commande suivante crée un audio synthétique audio_0_.wav sous la sortie.

python inference.py --tacotron2 output/checkpoint_Tacotron2_last.pt --waveglow waveglow_1076430_14000_amp --wn-channels 256 -o output/ -i phrases/phrase.txt --fp16

en conclusion

Il s'avère que la configuration d'un PC pour l'apprentissage en profondeur ne nécessite pas réellement l'installation de CUDA ou de cuDNN. L'environnement d'apprentissage en profondeur peut être préparé par chaque utilisateur dans son propre environnement conda ou Docker peut être utilisé. Inversement, si CUDA ou cuDNN est installé dans le système, le fonctionnement devient difficile en raison de problèmes de version. Je me sens tellement mieux.

Recommended Posts

Configuration PC la plus rapide pour un apprentissage en profondeur à partir de zéro
Deep Learning Java from scratch 6.4 Régularisation
Étudiez le Deep Learning à partir de zéro en Java.
Deep Learning Java à partir de zéro Chapitre 1 Introduction
Deep Learning Java from scratch 6.1 Mise à jour des paramètres
Deep Learning Java à partir de zéro Chapitre 2 Perceptron
Deep Learning Java from scratch 6.3 Normalisation par lots
Deep Learning from scratch Java Chapter 4 Apprentissage des réseaux de neurones
[Deep Learning from scratch] dans Java 3. Réseau neuronal
Deep Learning Java à partir de zéro Chapitre 3 Réseau neuronal
[Deep Learning from scratch] en Java 1. Pour le moment, différenciation et différenciation partielle
Deep Learning Java from scratch 6.2 Valeur initiale du poids
J'ai créé mon propre PC pour le deep learning. (Windows10, double démarrage Ubuntu18.04)
[Apprentissage profond à partir de zéro] 2. Il n'existe pas de NumPy en Java.
Pour l'apprentissage JAVA (2018-03-16-01)