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.
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
Tags und Links tensorflow deep-learning