Frage über zwischen-Graph-Replikation in verteilten Tensorflow, weil ich nicht wenige Momente aus Tutorials bekommen habe. Wie ich das aktuelle Modell verstanden habe:Between-Graph-Replikation in Tensorflow: Sitzungen und Variablen
Wir haben Parameter Server, die wir nur in separaten Prozess starten und server.join() machen. Wir haben Arbeiter, jeder von ihnen baut den ähnlichen Rechengraphen, der Parameterknoten enthält, die mit dem Parameterserver (über tf.train.replica_device_setter) verbunden sind, und Berechnungsknoten, die auf den Arbeitern selbst platziert sind.
Was ich nicht finden:
Wie Sitzungen in diesem Modell arbeiten? Denn in Beispielen/Tutorials ist es hinter tf.train.Supervisor versteckt. Haben wir separate Sitzungen für jeden Mitarbeiter oder nur eine große Sitzung, die Diagramme von allen Mitarbeitern und Parameterservern akkumulieren?
Wie werden globale Variablen auf dem Parameterserver initialisiert? Ich wundere mich, dass ich sie in einem der Worker-Prozesse initialisieren kann (wählen Sie es als "Master"), wenn ich diese Parameter auf den Arbeiter über tf.train.replica_device_setter verknüpfte. Ist das korrekt?
Im folgenden Kern:
https://gist.github.com/yaroslavvb/ea1b1bae0a75c4aae593df7eca72d9ca
globale Variablen nur im Parameter-Server-Prozess initialisiert und alle Arbeiter betrachten sie initialisierten. Wie ist das möglich, da sie sogar in verschiedenen Sitzungen arbeiten? Ich konnte es nicht in einem einfacheren Beispiel replizieren.
- Ich habe Hauptsitzung im Kernprogramm, wo ich das Modell trainiere. Ein Teil der Trainingsschleife ist die Sammlung von Daten, die wiederum eine Berechnung auf dem Tensorfluss-Cluster erfordert. Also muss ich diesen Cluster erstellen, den aktuellen Status des trainierten Modells in den Parameterserver übernehmen, dann Daten aus der Berechnung sammeln und mit der Trainingsschleife fortfahren. Wie kann ich: 1) das aktuell trainierte Modell an den Cluster übergeben? 2) Extrahieren Sie die gesammelten Daten aus dem Cluster und übergeben Sie diese an das Hauptprogramm?
Vielen Dank im Voraus!
EDIT:
Um Q.3: Es beantwortet wurde zuvor (In tensorflow, is variable value the only context information a session stores?), die in verteilten Laufzeitvariablen werden zwischen den Sitzungen gemeinsam genutzt. Bedeutet das, dass wenn ich eine Sitzung mit einem "Ziel" erzeuge, dann werden alle Variablen zwischen den Sitzungen geteilt, die auf demselben Graphen laufen?
Für 4, was ist, wenn Sie dieselbe Sitzung sowohl für die verteilte als auch für die lokale Berechnung verwenden. Sie können Ihre Knoten an den aktuellen Worker anheften, um sicherzustellen, dass sie lokal ausgeführt werden. Dann sende deine lokalen Werte an den Remote-Parameter-Server, du könntest 'remote.assign (local)' tun, wobei 'remote' und' local' 'tf.Variable'-Objekte sind –
@YaroslavBulatov Scheint, als ob es an einem einfachen Beispiel arbeitet. Ich werde die Antwort genauer prüfen und ergänzen. Vielen Dank!! – dd210
@YaroslavBulatov Dies nicht zuweisen, es schien einfacher, einfach alle Parameter auf dem Server zu halten. Bearbeitete Antwort entsprechend. – dd210