tensorflow: Unterschied zwischen mehreren GPUs und verteiltem Tensorflow

8

Ich bin etwas verwirrt über diese beiden Konzepte.

Ich habe einige Beispiele über Multi-GPU gesehen, ohne Cluster und Server im Code zu verwenden.

Sind diese zwei verschieden? Was ist der Unterschied?

Vielen Dank!

    
xyd 09.06.2016, 17:05
quelle

2 Antworten

23

Es hängt ein wenig von der Perspektive ab, aus der Sie es betrachten. In jedem Multi-Setup, entweder Multi-GPU oder Multi-Machine, müssen Sie entscheiden, wie Sie Ihre Berechnungen auf die parallelen Ressourcen aufteilen. In einem Single-Node-Multi-GPU-Setup gibt es zwei sehr vernünftige Möglichkeiten:

(1) Intra-Modellparallelität . Wenn ein Modell über lange, unabhängige Berechnungspfade verfügt, können Sie das Modell auf mehrere GPUs aufteilen und jeweils einen Teil davon berechnen. Dies erfordert ein sorgfältiges Verständnis des Modells und der rechnerischen Abhängigkeiten.

(2) Repliziertes Training . Starten Sie mehrere Kopien des Modells, trainieren Sie sie und synchronisieren Sie dann deren Lernen (die auf ihre Gewichte und Verzerrungen angewandten Gradienten).

Unser veröffentlichtes Inception-Modell enthält einige gute Diagramme in der Readme, die zeigen, wie sowohl Multi-GPU als auch verteilte Trainingsarbeit.

Aber zu tl; dr diese Quelle: In einem Multi-GPU-Setup ist es oft am besten, das Modell synchron zu aktualisieren, indem man die Gewichte auf der CPU speichert (nun, in seinem angeschlossenen DRAM). In einem Setup mit mehreren Computern verwenden wir jedoch häufig einen separaten "Parameterserver", der die Gewichtungsaktualisierungen speichert und weiterleitet. Um dies auf viele Replikate zu skalieren, können Sie die Parameter auf mehrere Parameterserver verteilen.

Bei mehreren GPUs und Parameterservern werden Sie vorsichtiger mit der Platzierung von Geräten umgehen, indem Sie Konstrukte wie with tf.device('/gpu:1') verwenden oder auf den Parameterservern mithilfe von tf.train.replica_device_setter , um es auf /job:ps oder /job:worker zuzuweisen.

Im Allgemeinen ist das Training auf einer Reihe von GPUs in einer einzelnen Maschine viel effizienter - es benötigt mehr als 16 verteilte GPUs, um die Leistung von 8 GPUs in einer einzigen Maschine zu erreichen - aber durch verteiltes Training können Sie sogar skalieren größere Zahlen und mehr CPU nutzen.

    
dga 09.06.2016, 18:00
quelle
0

Bis vor kurzem gab es noch keine Open-Source-Cluster-Version des Tensor-Flusses - nur eine einzige Maschine mit null oder mehr GPUs. Die neue Version v0.9 kann oder kann nicht geändert haben. Der Artikel in der ursprünglichen Release-Dokumentation (Okt 2015) hat gezeigt, dass Google Cluster-basierte Lösungen hat - aber sie wurden nicht von Open-Source-Anbietern bereitgestellt.

Hier ist, was das Whitepaper sagt:

  

3.2 Multi-Device-Ausführung Sobald ein System mehrere Geräte hat, gibt es zwei Hauptkomplikationen: Entscheiden, welches Gerät die Berechnung für jeden Knoten im Graphen platzieren soll, und dann Verwalten der erforderlichen   Kommunikation von Daten über Gerätegrenzen hinweg, die von diesen impliziert sind   Platzierungsentscheidungen. Dieser Unterabschnitt behandelt diese beiden Probleme

    
GavinBrelstaff 09.06.2016 17:35
quelle

Tags und Links