[PYTHON] Erstellen Sie eine AWS-GPU-Instanz, um StyleNet zu trainieren

Linux-GPU-Instanz von AWS

AWS-GPU-Instanzen basieren auf HVM. HVM ist eine Abkürzung für Hardware Virtual Machine. Mit anderen Worten, AWS-GPU-Instanzen sind nicht mit physischen GPUs verbunden, sondern mit virtuellen GPUs. (Ich denke, aber bitte weisen Sie darauf hin, wenn Sie einen Fehler machen.)

Erstellen Sie eine g2.2xlarge-Instanz

Erstellen Sie eine Instanz im billigeren Osten der USA (Nord-Virginia). ** 0,65 USD pro Stunde. ** (Stand 23. September 2015) Es ist höher als die Mikroinstanzen, also vergessen Sie nicht, es zu löschen, wenn Sie es nicht mehr verwenden! !!

Erstellen Sie eine Instanz, indem Sie diesem Verfahren folgen.

Suchen Sie auf dem AWS Marketplace nach nvidia

スクリーンショット 2015-09-23 23.07.44.png

Da Linux verwendet wird, wählen Sie Amazon Linux AMI mit NVIDIA GRID GPU-Treiber

スクリーンショット 2015-09-23 23.07.58.png

Wählen Sie g2.2xlarge für die GPU-Instanz aus

スクリーンショット 2015-09-23 23.08.17.png

Verschiedene detaillierte Einstellungen (dies ist die Standardeinstellung)

スクリーンショット 2015-09-23 23.08.28.png

スクリーンショット 2015-09-23 23.08.40.png

スクリーンショット 2015-09-23 23.09.15.png

スクリーンショット 2015-09-23 23.09.25.png

Endgültige Bestätigung und Erstellung

スクリーンショット 2015-09-23 23.09.48.png

Nach dem Erstellen können Sie mit dem folgenden Befehl überprüfen, ob die GPU angeschlossen und der Treiber installiert ist.

nvidia-smi -q | head

(Sie können alle anzeigen, aber Sie können die Treiberversion und die Anzahl der Verbindungen in den ersten 10 Zeilen sehen.)

Installieren Sie das Python-Paket für Chainer

Das erstellte AMI enthält von Anfang an Python und Pip. Installieren Sie daher die erforderlichen Pakete für Chainer. (Wenn Sie ab und zu Sudo benötigen, fügen Sie es entsprechend hinzu.)

pip install numpy
pip install chainer

Die PATH-Einstellung für die Verwendung von CUDA aus dem Chainer lautet für das diesmal erstellte AMI wie folgt.

export PATH=/opt/nvidia/cuda/bin:$PATH
export LD_LIBRARY_PATH=/opt/nvidia/cuda/lib64:$LD_LIBRARY_PATH

Bestätigen Sie vom Kettenhändler

Wenn mit dem folgenden Befehl kein Fehler auftritt, ist dies in Ordnung.

import chainer
from chainer import cuda

cuda.check_cuda_available()
cuda.get_device(0).use()

Führen Sie StyleNet aus

Führen Sie StyleNet, das Thema dieses Artikels, auf einer GPU-Instanz aus.

Installiere Git und lade style-gogh herunter. Laden Sie auch das Caffe-Modell von NIN herunter. Die Caffemodel-Datei wurde in *** umbenannt. Caffemodel.

sudo yum install git
git clone https://github.com/mattya/chainer-gogh
wget https://www.dropbox.com/s/0cidxafrb2wuwxw/nin_imagenet.caffemodel?dl=1
mv nin_imagenet.caffemodel?dl=1 nin_imagenet.caffemodel

Und wenn Sie den folgenden Befehl ausführen, funktioniert es. Ich wollte die Berechnungszeit anzeigen, also habe ich sie so geändert, dass die Berechnungszeit angezeigt wird, indem sie für jede Generation an die Konsole ausgegeben wird. Die letzte Zahl in der Konsolenausgabe ist die seit der Ausführung des Skripts verstrichene Zeit. (Die anderen vier Zahlen sind in der Reihenfolge die Anzahl der Generationen, die Nummer der ausgegebenen Ebene, die Abweichung vom Inhaltsbild und die Abweichung vom Stilbild.) Für weitere Informationen lesen Sie bitte den Kommentar und den Code.

CPU-Version

load model... nin_imagenet.caffemodel
('image resized to: ', (1, 3, 435, 435))
('image resized to: ', (1, 3, 435, 428))
0 0 0.0 131.536987305 100.341277122
0 1 0.0 16.9276828766 101.161045074
0 2 5.29387950897 0.132858499885 101.5359869
0 3 0.530761241913 0.00741795729846 102.120722055
1 0 0.0 123.52784729 178.474854946
1 1 0.0 15.2022619247 179.293597937
1 2 5.03846788406 0.123586334288 179.670742035
1 3 0.470058709383 0.00525630777702 180.251745939
2 0 0.0 110.198478699 255.28085494
2 1 0.0 12.6540279388 256.074426889
2 2 4.90201044083 0.113212890923 256.448594093
2 3 0.431303560734 0.00383871118538 257.029608965
3 0 0.0 92.4355773926 332.629327059
3 1 0.0 10.1973600388 333.420332909
3 2 4.86908721924 0.108661472797 333.790095091
3 3 0.409945964813 0.00298984581605 334.37262392
4 0 0.0 72.380569458 410.049565077
4 1 0.0 9.32985496521 410.848016024
4 2 4.92668151855 0.117410235107 411.218291044
4 3 0.398817956448 0.00246199313551 411.802879095
5 0 0.0 53.6025543213 486.892725945
5 1 0.0 11.4278764725 487.710140944
5 2 5.04112100601 0.141176745296 488.083660126
5 3 0.39475902915 0.00214517721906 488.664105892

Es dauert ungefähr 80 Sekunden, um eine Generation zu drehen.

GPU-Version

load model... nin_imagenet.caffemodel
('image resized to: ', (1, 3, 435, 435))
('image resized to: ', (1, 3, 435, 428))
0 0 0.0 131.557006836 22.7398509979
0 1 0.0 16.9326477051 22.7434000969
0 2 5.2936425209 0.13280403614 22.7467870712
0 3 0.529067575932 0.00738066714257 22.7503979206
1 0 0.0 123.602386475 41.3092479706
1 1 0.0 15.211555481 41.3119618893
1 2 5.04172039032 0.123632088304 41.3146359921
1 3 0.469296246767 0.00526729598641 41.3175621033
2 0 0.0 110.336387634 41.394990921
2 1 0.0 12.6709651947 41.3977220058
2 2 4.90853118896 0.113566093147 41.4003748894
2 3 0.43169811368 0.00389048201032 41.4033150673
3 0 0.0 92.6167144775 41.4806849957
3 1 0.0 10.2161283493 41.4833440781
3 2 4.87660598755 0.109313540161 41.4860169888
3 3 0.41028663516 0.00304215308279 41.4892690182
4 0 0.0 72.5410461426 41.566724062
4 1 0.0 9.3198633194 41.5694000721
4 2 4.93378400803 0.118150554597 41.5720379353
4 3 0.399007946253 0.0025086470414 41.5749340057
5 0 0.0 53.6465911865 41.6522700787
5 1 0.0 11.3575658798 41.6549448967
5 2 5.0474896431 0.141661688685 41.6576039791
5 3 0.394712120295 0.00219127023593 41.6604459286

** Ungefähr 0,1 Sekunden, um eine Generation zu drehen. GPU-Explosion **

Schließlich

Dieses Mal wollte ich das Verfahren zum Erstellen einer AWS-Instanz und den Geschwindigkeitsvergleich zwischen CPU und GPU überprüfen, sodass StyleNet nur etwa zehnmal trainierte, aber bedachte, dass es 5000-mal trainiert. CPU ・ ・ ・ 80 * 5000 = 40.000 [s] ≒ ca. 4,6 Tage GPU ≤ ≤ ≤ 0,1 * 5000 = 500 [s] Und die Zeit ändert sich so sehr. Wenn man normal denkt, sagt man oft, dass man keine GPUs benutzt. GPGPU Ich werde mehr lernen.

Referenz

http://qiita.com/pyr_revs/items/e1545e6f464b712517ed http://yamakatu.github.io/blog/2014/07/05/gpgpu/ http://www.gdep.jp/page/view/248

Recommended Posts

Erstellen Sie eine AWS-GPU-Instanz, um StyleNet zu trainieren
Erstellen einer Umgebung zum Ausführen von ChainerMN auf einer AWS-GPU-Instanz
Verwenden Sie jupyter für eine GPU-Instanz in AWS
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
Erstellen Sie eine AWS Cloud9-Entwicklungsumgebung auf einer Amazon EC2-Instanz
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
Ändern Sie die AWS EC2-Instanz von t2 in t3
Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
So erstellen Sie eine NVIDIA Docker-Umgebung
Version vom Juni 2017 zum Erstellen einer Tensorflow / Keras-Umgebung auf einer GPU-Instanz von AWS
Generieren Sie eine add-in-fähige Excel-Instanz mit xlwings
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
So erstellen Sie einen OCF-kompatiblen Ressourcenagenten
Erstellen einer AWS EC2 EC2-Instanz (Amazon Linux AMI) 2
Versuchen Sie, mit Node.js einen HTTP-Server zu erstellen
So beenden Sie eine AWS EC2-Instanz (entfernen Sie Sicherheit G und löschen Sie das Schlüsselpaar)
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
So erstellen Sie einen Artikel über die Befehlszeile
Bluemix-Script zum Abbrechen einer Instanz von IaaS (ehemals SoftLayer)
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
AWS EC2 2. SSH-Verbindung zur EC2-Instanz (Amazon Linux 2)
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
So stellen Sie eine Go-Anwendung auf einer ECS-Instanz bereit
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python