TensorFlow mit Grafikprozessorbeschleunigung

Anleitung für grafikprozessorfähige Anwendungen lesen und direkt beginnen

TensorFlow

TensorFlow ist eine Softwarebibliothek zum Entwerfen und Anwenden von numerischen Berechnungen, wobei Anwendungen für maschinelles Lernen im Vordergrund stehen. Mit dieser Bibliothek lassen sich Algorithmen als ein Graph beschreiben, die dann auf verschiedenen grafikprozessorfähigen Plattformen von tragbaren Geräten über Desktops bis zu High-End-Servern ausgeführt werden können.

TensorFlow läuft auf den neuesten Pascal-Grafikprozessoren bis zu 50% schneller und skaliert gut auf mehreren Grafikprozessoren. Dadurch lassen sich Modelle innerhalb weniger Stunden anstatt mehrerer Tage trainieren.

Installation

Systemanforderungen

Für die grafikprozessorfähige Version von TensorFlow gelten folgende Anforderungen:

  • Linux (64-Bit)
  • Python 2.7
  • CUDA 7.5 (CUDA 8.0 für Pascal-Grafikprozessoren erforderlich)
  • cuDNN Version 5.1 (cuDNN Version 6 für TF Version 1.3)

 

Außerdem benötigen Sie NVIDIA-Grafikprozessoren, die mindestens Compute Capability 3.0 unterstützen.

Download‑ und Installationsanleitung

TensorFlow wird heute unter der Apache-v2-Open-Source-Lizenz auf GitHub vertrieben. In diesem Leitfaden wird das Erstellen und Installieren von TensorFlow in einem System mit Ubuntu 16.04 und einem oder mehreren NVIDIA-Grafikprozessoren beschrieben.

Die TensorFlow-Website ist eine hervorragende Ressource, um mehr über das Installieren mit virtualenv, Docker und das Installieren aus Quellen mit aktuellen Revisionen zu erfahren.

KOMPILIERUNG IM ÜBERBLICK

1. NVIDIA-Treiber aktualisieren/installieren

Installieren Sie aktuelle NVIDIA-Treiber  für Ihr System.

$ sudo add-apt-repository ppa:graphics-drivers/ppa 
$ sudo apt update (bei Warn-/Fehlermeldungen erneut ausführen) 
$ sudo apt-get install nvidia- (Tabulatortaste drücken, um neueste anzuzeigen). 375 (nicht 378 verwenden, da dies zu Fehlern nach dem Neustart bei der nächsten Anmeldung führen kann (Anmeldeschleife).

Führen Sie einen Neustart durch, damit Grafiktreiber wirksam werden.

2. CUDA installieren und testen

Um TensorFlow mit NVIDIA-Grafikprozessoren zu verwenden, installieren Sie zuerst das  CUDA-Toolkit, indem Sie die Schritte in der offiziellen Dokumentation ausführen. Schritte für CUDA 8.0 im Überblick:

Navigieren Sie zu https://developer.nvidia.com/cuda-downloads

Wählen Sie „Linux“, „x86_64“, „Ubuntu“, „16.04“, „deb (local)“ aus.
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb (dies ist die heruntergeladene deb-Datei) 
$ sudo apt-get update
$ sudo apt-get install cuda

Wenn eine Meldung angezeigt wird, die das erneute Ausführen von „sudo apt-get update“ empfiehlt, führen Sie diesen Befehl und anschließend „sudo apt-get install cuda“ erneut aus.

$ export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} 
$ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Testen Sie Ihre CUDA-Installation:

$ cd /usr/local/cuda-8.0/samples/5_Simulations/nbody
$ sudo make
$ ./nbody

Wenn die Installation erfolgreich ist, wird ein neues Dialogfeld angezeigt, in dem die n-body-Simulation ausgeführt wird.

3. cuDNN installieren

Sobald das CUDA-Toolkit installiert ist, laden Sie die cuDNN v5.1 Library (cuDNN Version 6 für TF Version 1.3) für Linux herunter und installieren Sie sie, indem Sie die Schritte in der offiziellen Dokumentation ausführen. (Hinweis: Sie müssen sich für das  Accelerated Computing Developer Program registrieren.) Schritte für cuDNN Version 5.1 im Überblick:

Navigieren Sie nach dem Download zu dem Verzeichnis, das cuDNN enthält:

$ tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

Hinweis: Die obigen Schritte sind für cuDNN Version 6 ähnlich.

Da die vorausgesetzten Komponenten jetzt installiert sind, können wir TensorFlow erstellen und installieren.

4. TensorFlow-Abhängigkeiten und erforderliche Pakete vorbereiten

$ sudo apt-get install libcupti-dev

5. TensorFlow installieren (Version mit beschleunigtem Grafikprozessor)

$ pip install tensorflow-gpu

6. Erfolg der Installation überprüfen

Sie können schnell überprüfen, ob die Installation erfolgreich war, indem Sie zuerst alle Terminals schließen und ein neues Terminal öffnen.

Wechseln Sie (mit „cd“) zu einem beliebigen anderen Verzeichnis in Ihrem System, bei dem es sich nicht um das Unterverzeichnis „tensorflow“ handelt, in dem Sie den Konfigurationsbefehl aufgerufen haben.

Python aufrufen: Geben Sie python in die Befehlszeile ein.

Geben Sie das folgende Kurzprogramm ein:

$ import tensorflow as tf
$ hello = tf.constant('Hello, TensorFlow!')
$ sess = tf.Session()
$ print(sess.run(hello))

Sie sollten die Ausgabe „Hello, TensorFlow!“ sehen. Herzlichen Glückwunsch! Sie können auch „print(tf.__version__)“ eingeben, um die installierte TensorFlow-Version zu sehen.

Training der Netzwerke

TensorFlow kann über die Python‑ oder die C++-API verwendet werden; die zentrale Funktionalität kommt jedoch von einem C++-Backend. Die API stellt, ähnlich wie NumPy, eine Schnittstelle zur Bearbeitung von Tensoren (n-dimensionalen Datenfeldern) bereit und beinhaltet Funktionen zur automatischen Differenzierung, um die Gradienten des Optimierungsproblemes zu berechnen.

Die Bibliothek enthält eine Menge integrierter Operationen, darunter Matrixmultiplikationen, Faltungen, Pooling‑ und Aktivierungsfunktionen, Verlustfunktionen, Optimierer und viele andere. Sobald ein Berechnungsgraph definiert wurde, sorgt TensorFlow dafür, dass es effizient und portabel auf Desktop‑, Server‑ und mobilen Plattformen ausgeführt werden kann.

Um die Codebeispiele unten auszuführen, wechseln Sie zuerst zu Ihrem TensorFlow-Verzeichnis 1:

$ cd (tensorflow directory) 
$ git clone -b update-models-1.0 https://github.com/tensorflow/models

Die Bilderkennung ist eine der Aufgaben, die Deep Learning hervorragend meistert. Für menschliche Gehirne scheint das Erkennen von Bildern einfach zu sein, aber für den Computer ist das eine herausfordernde Aufgabe. In den letzten Jahren wurden jedoch erhebliche Verbesserungen im Deep Learning vorgenommen, die heute manchmal das menschliche Vermögen übertreffen. Ermöglicht wird dies durch das Konvolutionsnetz (CNN) und durch kontinuierliche Forschung, die zu stetigen Weiterentwicklungen bei der Bilderkennung durch Computer geführt hat. Die Netzwerke können mit ImageNet , gegeneinander verglichen werden – ImageNet ist einer der populärsten akademischen Benchmarktests für die Bilderkennung.

KURZE DEMO MIT INCEPTION-V3

Führen Sie zuerst die folgenden Befehle aus und stellen Sie fest, wie leistungsfähig die Bilderkennung durch Computer ist:

$ cd (tensorflow directory)/models/tutorials/image/imagenet
$ python classify_image.py

Mit classify_image.py wird das trainierte Modell Inception-v3 von „tensorflow.org“ heruntergeladen, wenn das Programm zum ersten Mal ausgeführt wird. Sie benötigen 200 MB freien Speicherplatz auf Ihrer Festplatte. Mit dem obigen Befehl wird ein bereitgestelltes Bild eines Panda-Bären klassifiziert (gefunden in /tmp/imagenet/cropped_panda.jpg) und bei einer erfolgreichen Ausführung des Modells werden folgende Ergebnisse zurückgegeben:

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00779)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00296)
custard apple (score = 0.00147)
earthstar (score = 0.00117)

Sie können mit dem Dateiargument „--image_file“ auch andere JPEG-Bilder testen:

$ python classify_image.py --image_file <path to the JPEG file> 
(e.g. python classify_image.py --image_file /tmp/imagenet/cropped_pand.jpg)

CIFAR-10

Die CIFAR-10-Klassifizierung ist eine häufige Benchmarkaufgabe beim maschinellen Lernen. Die Aufgabe besteht darin, RGB-Bilder im Format 32 x 32 Pixel in zehn Kategorien (Flugzeug, Auto, Vogel, Katze, Reh, Hund, Frosch, Pferd, Schiff und LKW) zu klassifizieren.

Das verwendete Modell ist an die von  Alex Krizhevsky beschriebene Architektur angelehnt, mit einigen Unterschieden bei einigen oberen Schichten. Es handelt sich um eine mehrschichtige Architektur, die aus alternierenden Faltungen und Nichtlinearitäten besteht, gefolgt von vollständig verbundenen Schichten, die zu einem Softmax-Klassifizierer führen.

Zuerst wird das Modell trainiert:

$ cd (tensorflow directory)/models/tutorials/image/cifar10
$ python cifar10_train.py

Bei erfolgreicher Ausführung sehen Sie eine ähnliche Meldung wie die folgende:

Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
…… 
2017-03-06 14:59:09.089282: step 10230, loss = 2.12 (1809.1 examples/sec; 0.071 sec/batch)
2017-03-06 14:59:09.760439: step 10240, loss = 2.12 (1902.4 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:10.417867: step 10250, loss = 2.02 (1931.8 examples/sec; 0.066 sec/batch)
2017-03-06 14:59:11.097919: step 10260, loss = 2.04 (1900.3 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:11.754801: step 10270, loss = 2.05 (1919.6 examples/sec; 0.067 sec/batch)
2017-03-06 14:59:12.416152: step 10280, loss = 2.08 (1942.0 examples/sec; 0.066 sec/batch)
……

Herzlichen Glückwunsch, Sie haben soeben mit dem Training Ihres ersten Modells begonnen!

Nach dem Training können Sie mit dem Skript „cifar10_eval.py“ auswerten, wie gut das trainierte Modell funktioniert. Die Präzision bei 1 (precision @ 1) wird berechnet. Sie erhalten so Auskunft darüber, wie oft die beste Vorhersage mit der tatsächlichen Bezeichnung des Bilds übereinstimmt.

$ python cifar10_eval.py

Bei erfolgreicher Ausführung sehen Sie eine ähnliche Meldung wie die folgende:

2017-03-06 15:34:27.604924: precision @ 1 = 0.499

VORTRAINIERTES INCEPTION V3-MODELL FÜR NEUEN DATENSATZ VERWENDEN

Als Nächstes kommen wir auf Inception-v3 von Google zurück, um einen komplexeren Anwendungsfall umfassender zu untersuchen. Inception-v3 ist ein äußerst modernes Konvolutionsnetz zur Klassifikation von Bildern. Dieses Modell von Grund auf zu trainieren, ist sehr arbeitsintensiv und kann mehrere Tage oder gar Wochen in Anspruch nehmen. Eine alternative Vorgehensweise wäre, das vortrainierte Modell herunterzuladen und anschließend mithilfe eines anderen Datensatzes umzutrainieren. Dies wird anhand des Blumen-Datensatzes veranschaulicht.

Laden Sie den Blumen-Datensatz herunter:

$ cd ~
$ curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
$ tar xzf flower_photos.tgz
$ cd (tensorflow directory where you git clone from master)
$ python configure.py

Hinweis: Sie können die Standardwerte der meisten Optionen übernehmen. Geben Sie die richtige Versionsnummer von cuDNN und/oder CUDA ein, wenn Sie aufgrund der Vorschläge des Konfigurators verschiedene Versionen installiert haben.

$ python tensorflow/examples/image_retraining/retrain.py --image_dir ~/flower_photos

Hinweis:

  • Wenn die Meldung „...libstdc++.so.6: version `CXXABI_1.3.8' not found…“ angezeigt wird, versuchen Sie es mit cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/ /anaconda3/lib/.
  • Wenn die Meldung „...import error: no module named autograd…“ angezeigt wird, probieren Sie „pip install autograd“ aus.

Mit dem umtrainierten Modell:

$ bazel build tensorflow/examples/image_retraining:label_image && \
bazel-bin/tensorflow/examples/image_retraining/label_image \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--output_layer=final_result:0 \
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg

Das Auswertungsskript gibt Ergebnisse zurück, die wie folgt aussehen und Ihnen eine Genauigkeit der Klassifizierung angeben:

daisy (score = 0.99735)
sunflowers (score = 0.00193)
dandelion (score = 0.00059)
tulips (score = 0.00009)
roses (score = 0.00004)

Weitere Angaben zur Verwendung des Modells Inception v3 finden Sie im Tutorial unter diesem Link.

Benchmarks

Jedes der Modelle aus dem vorigen Abschnitt gibt entweder eine Ausführungsdauer pro Minibatch oder eine Durchschnittsgeschwindigkeit in Anzahl von Beispielen pro Sekunde aus. Letztere kann auch durch Dividieren durch die Batchgröße in die Dauer pro Minibatch umgerechnet werden. Die Diagramme zeigen die erwartete Leistung in Systemen mit NVIDIA-Grafikprozessoren.

data-center-gpu-ready-app-tensorflow-chart-cifar10-843-u

TRAININGSBILDER PRO SEKUNDE FÜR
INCEPTION V3 MIT MEHREREN GRAFIKPROZESSOREN

Das Modell Inception v3 unterstützt auch das Training mit mehreren Grafikprozessoren. Das folgende Diagramm zeigt die erwartete Leistung mit 1, 2 und 4 Grafikprozessoren je Knoten an.

TensorFlow-Inception-Benchmarktest

Empfohlene Systemkonfigurationen

Hardwarekonfiguration

PC

Parameter
Specs

CPU Architecture

x86_64

System Memory

8-32GB

CPUs

1

GPU Model

NVIDIA®TITAN X (Pascal)

GPUs

1-2

Servers

Parameter
Specs

CPU Architecture

x86_64

System Memory

32 GB

CPUs/Node

1-2

GPU Model

Tesla® P40 and P100

GPUs/Node

1-4

Softwarekonfiguration

Software stack

Parameter
Version

OS

Unbuntu 14.04

GPU Driver

352.68 or newer

CUDA Toolkit

8.0 or newer

cuDNN Library

v5.0 or newer

Python

2.7

Ihre ideale Grafikprozessorlösung