2016-12-16 2 views
1

Wenn Sie verteiltes Async-Training durchführen, müssen alle Mitarbeiter darauf warten, die Modellparameter zu synchronisieren, z. B. nach Abschluss einer Epoche synchronisieren und den Aux on-Validierungssatz berechnen.Gibt es sowieso etwas wie MPI_BARRIER im Tensorflow zu tun?

MPI_BARRIER ist gut genug bei der Verwendung von MPI, gibt es etwas Ähnliches im Tensorflow?

Antwort

0

Sie könnten geteilte Zählervariablen verwenden, um eine Barriere zu implementieren. IE, nach 3.6.4 vom Little Book of Semaphores Sie so etwas wie diese

# N is number of workers 
def barrier(): 
    sess.run(counter_adder_ops[0]) 
    while sess.run(counter_vars[0]) % N != 0: 
     time.sleep(FLAGS.sleep_interval) 
    sess.run(counter_adder_ops[1]) 
    while sess.run(counter_vars[1]) % N != 0: 
     time.sleep(FLAGS.sleep_interval) 

während des Trainings

for i in range(FLAGS.iters): 
     barrier() 
     sess.run(sync_op) 
     barrier() 
     old_val, updated_val = sess.run([local_param_var, train_op]) 

Hier ist ein voll example tun könnte, die lokal durch synchronisierte Trainingsschleife läuft

+0

Dank sehr viel! !! –

+0

vielen Dank !!! Ich versuche diesen Ansatz und es funktioniert gut, wenn alle Arbeiter auf der gleichen Maschine sind. Aber es hängt, wenn ich 2 Knoten starte, jeder mit einem Arbeiter und einem PS. Normalerweise dauert es etwa 20 Minuten oder mehr für einen Aufruf von barrier(). Hast du eine Idee, das zu beheben? –

+0

Haben Sie dies nicht auf mehr als einer Maschine getestet. Ist es nach 20 Minuten tatsächlich erfolgreich? Wie lange dauert ein einzelner sess.run-Aufruf, um auf ps zu erhöhen? (Ist Ihr Netzwerk langsam?) An welchem ​​Teil hängt es? –

Verwandte Themen