2016-07-11 10 views
3

Ich muss die verteilte Version von Tensorflow über mehrere Gpus testen.Tensorflow. Cifar10 Multi-GPU Beispiel führt schlechter mit mehr Gpus

I laufen die Cifar-10 mit mehreren GPUs weise auf einer AWS g2.8x EC2 Instanz.

Laufzeit für 2000 Schritte des cifar10_multi_gpu_train.py (Code here) war 427 Sekunden mit 1 GPU (flag num_gpu=1). Danach gab das Skript eval.py die Genauigkeit @ 1 = 0,537 zurück.

Mit dem gleichen Beispiel für die gleiche Anzahl von Schritten ausgeführt wird (bei einem Schritt parallel über alle GPUs ausgeführt wird), aber unter Verwendung von 4-GPUs (flag num_gpu=4) Laufzeit betrug etwa 530 Sekunden und die eval.py Skript zurück nur eine geringfügig höhere Genauigkeit @ 1 von 0,552 (vielleicht wegen Zufälligkeit in der Berechnung?).

Warum ist die Durchführung das Beispiel schlechter mit einer höheren Anzahl von GPUs? Ich habe eine sehr kleine Anzahl von Schritten zu Testzwecken verwendet und erwartete einen viel höheren Präzisionsgewinn mit 4 GPUS. Habe ich etwas übersehen oder einige grundlegende Fehler gemacht? Hat jemand anderes das obige Beispiel versucht?

Vielen Dank.

Antwort

0

Das cifar10 Beispiel verwendet Variablen auf CPU standardmäßig das ist, was Sie für eine Multi-GPU-Architektur benötigen. Sie können im Vergleich zu einem einzelnen GPU-Setup mit 2 Grafikprozessoren eine ca. 1,5-fache Beschleunigung erzielen.

Ihr Problem hat mit der Dual-GPU-Architektur für Nvidia Tesla K80 zu tun. Es verfügt über einen PCIe-Switch, um beide GPU-Karten intern zu kommunizieren. Es soll einen Overhead für die Kommunikation einführen. Siehe Blockdiagramm: enter image description here

+0

Ich habe das gleiche Problem mit 2 Nvidia Tesla K80s auf GCP festgestellt. Ich sehe, wie die Dual-Architektur viel Overhead für die internen GK210 GPUs verursacht. Ich hatte jedoch den Eindruck, dass wir zwei separate K80 hatten (siehe Bildschirm unten): https://postimg.org/image/pitpneai9/, denken Sie, unser Setup ist nur eine einzige K80 mit GK210s? – Fematich