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.
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.
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.
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!" ...
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.
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!
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.
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.
[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 |
+-----------------------------------------------------------------------------+
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
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
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.
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é.
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 |
+-----------------------------------------------------------------------------+
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).
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
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
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.
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
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
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
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.