[DOCKER] Schnellstes PC-Setup für tiefes Lernen von Grund auf

Einführung

Ich habe viele Male einen PC für tiefes Lernen eingerichtet, aber ich habe vergessen, es zu tun, und ich habe vergessen, es wiederholt zu tun. Ich bin mir sicher, dass ich immer und immer wieder das Gleiche tun werde, also habe ich beschlossen, mir in Zukunft eine Arbeitsnotiz zu hinterlassen.

Dieser Artikel enthält einen Hinweis zum schnellsten Setup eines Linux-Computers mit einer GPU für vertiefendes Lernen. Mein Ziel ist

--Erstellen einer Umgebung ohne NVIDIA Docker (Anaconda, PyTorch, TensorFlow) --NVIDIA Docker-Setup

Es gibt zwei. Natürlich spielt es keine Rolle, welche.

Außerdem ist es in der Universität installiert und leider heutzutage eine Proxy-Umgebung. Die folgende Erklärung zeigt die Proxy-Einstellungen an mehreren Stellen. Wenn Sie jedoch ein glücklicher Leser sind, der keinen Proxy benötigt, können Sie ihn überspringen.

Kaufen Sie eine Maschine

Diesmal von SyCom. RTX 2080 Ti 2-teiliges Stichmodell. Natürlich gibt es kein Betriebssystem. Ich bedauere, vergessen zu haben, das optische Laufwerk zu entfernen.

Laden Sie das Betriebssystem-Image herunter

Da es sich um Deep Learning handelt, ist das Betriebssystem Ubuntu. Ich habe bisher die Desktop-Version verwendet, aber die Server-Version ist möglicherweise schneller zu installieren, da ich keinen separaten Desktop benötige. Also werde ich dieses Mal die Serverversion verwenden.

Dieses Mal installieren wir anstelle der neuesten Version 20.04 von Ubuntu die tote Version 18.04, also aus den früheren Versionen auf der Seite Alternative Downloads 18.04 Wählen Sie eine aus Gehen Sie zur Bildseite.

Da es sich bei der CPU um Intel Core i7 handelt, wählen Sie Installationsabbild für 64-Bit-PC-Server (AMD64). Und herunterladen.

USB-Speicher für das Booten vorbereiten

Wie das geht, erfahren Sie im Ubuntu-Tutorial Erstellen eines bootfähigen USB-Sticks unter Ubuntu. Als ich darüber nachdachte, gab es einen süchtig machenden Punkt.

Da ich ein Mac bin, starten Sie nach dem Formatieren des USB-Speichers mit dem Festplatten-Dienstprogramm Etcher und wählen Sie das oben heruntergeladene Ubuntu-ISO-Image aus. Wenn Sie "Flash!" Drücken ...

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

Gumu.

Ich konnte nicht anders, also beschloss ich, das Bild mit dd auf einen USB-Speicher zu kopieren, obwohl es etwas schwierig war. Überprüfen Sie die "diskutil list" auf den richtigen Pfad zu Ihrem USB-Speichergerät, bevor Sie die folgenden Schritte ausführen! In meinem Fall war es / dev / disk2, aber ich weiß nicht, ob ich eriskDisk lösche, ohne es sorgfältig zu prüfen und wichtige Daten zu verlieren.

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

Wenn die Ausführung abgeschlossen ist, ärgert Sie das Festplatten-Dienstprogramm, dass Sie es nicht lesen können, aber Sie müssen sich keine Sorgen machen, da es natürlich ist, dass Sie es nicht lesen können.

Starten Sie den PC vom USB-Speicher

Schließen Sie das Netzkabel und das Netzwerkkabel an den PC an und schalten Sie das Gerät mit eingestecktem USB-Speicher ein. Drücken Sie F11 oder etwas anderes, um das Startmenü aufzurufen und von der Installations-CD im USB-Speicher zu starten. In meinem Fall habe ich ohne Erlaubnis vom USB-Speicher gebootet, während ich verwirrt war, und das Ergebnis war in Ordnung.

Nach dem Start ist es fast wie in [Ubuntu 18.04 LTS Server] Install beschrieben. Wenn Sie die IP-Adresse festlegen möchten, können Sie [Nächster Abschnitt] überspringen (ändern Sie die IP-Adresse in Fest), indem Sie sie hier festlegen. Wenn Sie den Proxy hier festlegen, wird er in dem Zustand installiert, in dem die Proxy-Einstellung von apt abgeschlossen wurde, sodass dies einfach ist. Wenn Sie OpenSSH hier einfügen, ist es außerdem praktisch, danach remote arbeiten zu können.

Die Installation war in 50 Sekunden abgeschlossen!

Ändern Sie die IP-Adresse in fest

Finden Sie die von DHCP zugewiesene IP-Adresse heraus. Wenn Sie es nicht wissen, melden Sie sich über die Konsole an und führen Sie "ip addr" aus, um nach einer Ethernet-ähnlichen Schnittstelle zu suchen.

Führen Sie "ssh (IP-Adresse) -l (erstellter Benutzername)" von einem anderen Computer im Netzwerk aus, um sich remote anzumelden. Führen Sie "ip addr" aus, um den Namen der Schnittstelle zu ermitteln und zu notieren. Es sollte einen Namen wie eth0 oder en0 haben. Das Folgende ist, wenn der Name der Schnittstelle eno1 ist.

Sichern Sie die Originaldatei unter / etc / netplan und erstellen Sie mit einem Editor eine Datei mit dem Namen 01-netcfg.yaml. Ich habe vi benutzt. Im folgenden Beispiel lautet die diesem Computer zugewiesene Adresse 192.168.1.18, die Netzmaske 24-Bit, die IP-Adresse des Standardrouters 192.168.1.3 und der DNS-Server 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 

Führen Sie nach dem Speichern der Datei "sudo netplan apply" aus. Wenn Sie sich remote angemeldet haben, können Sie es derzeit nicht bedienen. Melden Sie sich daher erneut mit ssh 192.168.1.18 an.

Sobald Sie dies getan haben, können Sie das Display und die Tastatur entfernen.

Festlegen von Proxy-bezogenen Umgebungsvariablen

Der Proxyserver wird zum Zeitpunkt der Installation angegeben, Umgebungsvariablen müssen jedoch separat festgelegt werden. Öffnen Sie die Datei / etc / environment in einem Editor und fügen Sie Folgendes hinzu:

/etc/environment


HTTP_PROXY=http://Proxy-Server-Adresse:Hafen/
HTTPS_PROXY=http://Proxy-Server-Adresse:Hafen/
FTP_PROXY=http://Proxy-Server-Adresse:Hafen/
ALL_PROXY=http://Proxy-Server-Adresse:Hafen/
http_proxy=http://Proxy-Server-Adresse:Hafen/
https_proxy=http://Proxy-Server-Adresse:Hafen/
ftp_proxy=http://Proxy-Server-Adresse:Hafen/

Melden Sie sich erneut an, um die obigen Einstellungen wiederzugeben.

Installation des NVIDIA-Treibers

[Was ist jetzt mit NVIDIA Docker los? (Version 19.11) Bonusartikel](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#Bonus-nvidia-Install Treiber).

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

Nach der Installation als "sudo reboot" neu starten.

Melden Sie sich erneut an und führen Sie "nvidia-smi" aus, um dies zu überprüfen.

+-----------------------------------------------------------------------------+
| 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                                                 |
+-----------------------------------------------------------------------------+

Laden Sie Miniconda herunter und installieren Sie es

Wenn Sie Anaconda verwenden möchten, müssen Sie Anaconda nicht in Ihr System aufnehmen. Miniconda geht es gut. Weil niemand Anaconda aktualisiert, das auf dem System installiert ist → niemand verwendet es.

Im Folgenden werden wir Miniconda auf dem System installieren, dies dient jedoch nur zum Erstellen Ihrer eigenen Umgebung mit dem Befehl conda.

Sie müssen die Miniconda nicht separat in das System einbauen, sondern können sie bei sich zu Hause unterbringen.

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

Wenn Sie dies tun, werden Sie in Schwierigkeiten geraten, da der Eigentümer des .conda-Verzeichnisses unter Ihrer Startseite root ist. Gehen Sie also wie folgt vor, um es in Ihr Verzeichnis zu ändern:

sudo chown -R $USER ~/.conda

Umweltbau mit Conda

Jeder Benutzer fügt der Einstellungsdatei direkt unter seinem Zuhause Folgendes hinzu. Jetzt können Sie den Befehl conda verwenden.

.bash_profile


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

Aufbau einer Anaconda-Umgebung

Wenn Sie [PyTorch](Erstellen einer # PyTorch-Umgebung) oder [TensorFlow](Erstellen einer # TensorFlow-Umgebung) verwenden können, können Sie diesen Abschnitt überspringen und ihn entsprechend in das Jupyter-Notizbuch einfügen.

Erstellen Sie mit dem Befehl conda Ihre eigene Anaconda-Umgebung. Ich habe es myanaconda genannt.

conda create -n myanaconda python=3.6 anaconda

Sobald Sie eine Anaconda-Umgebung haben, aktivieren Sie diese.

conda activate myanaconda

Jetzt, da ich in meiner eigenen Umgebung bin, kann ich mit der Pip-Installation machen, was ich will.

Erstellen einer PyTorch-Umgebung

Befolgen Sie die Schritte unter Schnellstart vor Ort in Offiziell. Es ist nicht erforderlich, CUDA oder cuDNN im Voraus zu installieren.

Erstellen Sie mit dem Befehl conda Ihre eigene PyTorch-Umgebung. Ich nannte es mytorch.

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

Wenn Sie eine neue Umgebung haben, aktivieren Sie diese.

conda activate mytorch

Versuchen Sie zum Testen, Deep Convolution Generative Adversarial Networks (https://github.com/pytorch/examples/tree/master/dcgan) auszuführen.

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

Wenn Sie gerne viele seltsame Bilder sehen, sind Sie fertig.

Erstellen einer TensorFlow-Umgebung

Dieser Abschnitt enthält den Inhalt von Tensorflow-GPU-Installation leicht gemacht: Verwenden Sie Conda anstelle von Pip. Es ist nicht erforderlich, CUDA oder cuDNN im Voraus zu installieren.

Erstellen Sie mit dem Befehl conda Ihre eigene TensorFlow-Umgebung. Dies ist eine Testumgebung für TensorFlow 2, daher habe ich sie tf2 genannt.

conda create -n tf2 tensorflow-gpu

Wenn Sie eine neue Umgebung haben, aktivieren Sie diese.

conda activate tf2

Führen Sie zum Testen [TensorFlow 2.0 Tutorial 01: Grundlegende Bildklassifizierung] aus (https://lambdalabs.com/blog/tensorflow-2-0-tutorial-01-image-classification-basics/).

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

Öffnen Sie ein anderes Terminal, melden Sie sich remote mit ssh an und überprüfen Sie die GPU-Nutzung mit nvidia-smi -l. Es scheint, dass TensorFlow 2 alle GPUs gleichzeitig verwenden kann! Oh! Es fühlt sich gut an.

+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+

NVIDIA Docker-Setup

Dieser Abschnitt basierte im Allgemeinen auf [Installieren von NVIDIA Docker (neueste Version)](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#nvidia-docker-Wie installiere ich die neueste Version)?

Installation von Docker selbst

Folgen Sie hier.

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

Docker-Proxy-Einstellungen

Die Methode wird in Control Docker mit systemd beschrieben.

Führen Sie die folgenden Schritte aus, um ein Verzeichnis mit dem Namen docker.service.d unter / etc / systemd / system / und eine Datei mit dem Namen http-proxy.conf darunter zu erstellen.

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://Proxy-Server-Adresse:Hafen/" "HTTPS_PROXY=http://Proxy-Server-Adresse:Hafen/" "NO_PROXY=localhost,127.0.0.1,.lab"

Starten Sie Docker neu, damit die Einstellungen wirksam werden.

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker-Test

Laden Sie bisher das Hallo-Welt-Image von Docker Hub herunter und führen Sie es aus.

sudo docker run hello-world

Wenn Sie eine solche Nachricht erhalten, ist dies in Ordnung.

Installation von 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

Befolgen Sie die Anleitung, um Folgendes zu tun: Es ist in Ordnung, wenn die Ausgabe von nvidia-smi ausgegeben wird.

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

Nicht-Root-Benutzern erlauben, Docker auszuführen

sudo usermod -aG docker `whoami`

Testen Sie, ob Sie den Docker-Befehl nach einmaligem Neustart mit "sudo reboot" als Nicht-Root ausführen können.

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

NVIDIA Docker-Tests

Versuchen Sie, [Tacotron 2 und WaveGlow v1.10 für PyTorch] auszuführen (https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/SpeechSynthesis/Tacotron2).

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

Rufen Sie die Docker-Umgebung mit dem folgenden Befehl auf.

bash scripts/docker/interactive.sh

Vorverarbeitung

bash scripts/prepare_mels.sh

Der Rest lernt, aber in meiner Umgebung wird es aufgrund des Mangels an GPU-Speicher fallen, also habe ich den Ort umgeschrieben, um die Stapelgröße von scripts / train_tacotron2.sh auf -bs 32 anzugeben.

bash scripts/train_tacotron2.sh

Es braucht Zeit, also hörte ich nach ungefähr 100 Epochen mit Strg + C auf.

Synthesetest. Ich habe WaveGlow nicht als Modell trainiert, sondern das trainierte heruntergeladen und verwendet. Der folgende Befehl erstellt ein synthetisches Audio audio_0_.wav unter Ausgabe.

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

abschließend

Es stellt sich heraus, dass für die Einrichtung eines PCs für Deep Learning keine Installation von CUDA oder cuDNN erforderlich ist. Die Umgebung für Deep Learning kann von jedem Benutzer in seiner eigenen Conda-Umgebung vorbereitet oder Docker verwendet werden. Wenn umgekehrt CUDA oder cuDNN im System installiert sind, wird der Betrieb aufgrund von Versionsproblemen schwierig. Ich fühle mich so viel besser.

Recommended Posts

Schnellstes PC-Setup für tiefes Lernen von Grund auf
Deep Learning Java von Grund auf 6.4 Regularisierung
Lernen Sie Deep Learning von Grund auf in Java.
Deep Learning Java von Grund auf neu Kapitel 1 Einführung
Deep Learning Java von Grund auf 6.1 Parameteraktualisierung
Deep Learning Java von Grund auf neu Kapitel 2 Perceptron
Deep Learning Java von Grund auf 6.3 Batch-Normalisierung
Deep Learning von Grund auf neu Java Kapitel 4 Lernen neuronaler Netze
[Deep Learning von Grund auf neu] in Java 3. Neuronales Netzwerk
Deep Learning Java von Grund auf neu Kapitel 3 Neuronales Netzwerk
[Deep Learning von Grund auf neu] in Java 1. Zur Zeit Differenzierung und teilweise Differenzierung
Deep Learning Java von Grund auf 6.2 Anfangswert des Gewichts
Ich habe meinen eigenen PC für tiefes Lernen gemacht. (Windows 10, Ubuntu18.04 Dual Boot)
[Deep Learning von Grund auf neu] 2. In Java gibt es kein NumPy.
Für JAVA-Lernen (2018-03-16-01)