2016-05-24 4 views
0

Ich renne verteilt tensorflow Ausbildung ähnlich dem Inception sample code aber mit diesem Gerät Setzer:Distributed Tensorflow: Arbeiter OOM getötet wegen

with tf.device(tf.train.replica_device_setter(ps_tasks=1, 
               worker_device="/job:worker/task:%d" % FLAGS.task_id, 
               cluster=cluster_spec)): 

Die Maschine verfügt über 4 GPUs und 64 GB RAM. Der ps-Job wird nur auf der CPU ausgeführt und hat zwei worker Jobs, die auf zwei separaten GPUs ausgeführt werden. Der Res-Speicher-Footprint beider Arbeiter-Jobs nimmt allmählich zu, bis etwa 3000 Schritte, der Chef-Arbeiter von OOM getötet wird (beide Arbeiter besetzen ~ 49% RAM vor dem Absturz). Ich habe es auch mit einem einzelnen Arbeiter versucht, und dieser wird auch getötet. Der ps Job hat eine viel kleinere Grundfläche. Ich habe versucht, zusammenfassende Ops, Model Saver, Variablen Mittelwertbildner, reduzierte Leser Threads deaktivieren, aber ohne Erfolg.

Antwort

0

Ich habe dieses Problem mit den Arbeitern behoben, indem ich die with tf.device('/cpu:0'): Spezifikation beim Aufruf batch_inputs in image_processing.py kommentieren. Ein Grund, dies mit meinem Setup geschehen kann, wenn auch nicht ganz klar ist, dass ich

with tf.device(tf.train.replica_device_setter(ps_tasks=1, 
               worker_device="/job:worker/task:%d" % FLAGS.task_id, 
               cluster=cluster_spec)): 

statt

# Ops are assigned to worker by default. 
with tf.device('/job:worker/task:%d' % FLAGS.task_id): 
    # Variables and its related init/assign ops are assigned to ps. 
    with slim.scopes.arg_scope(
      [slim.variables.variable, slim.variables.global_step], 
      device=slim.variables.VariableDeviceChooser(num_parameter_servers)): 

als äußersten Training Bereich zu verwenden, innerhalb dem die Batch-Verarbeitung aufgerufen wird (inception_distributed_train.py).

Nicht sicher, warum genau dies zu einem Problem für meine modifizierte Setup wurde (aufgrund der Dokumentation über die Mechanismen, wie Gerätezuweisungen vorgenommen werden), aber jetzt hat der Speicher Anstieg Trend mindestens zehnfach reduziert und getestet zu laufen für eine 100 Epochen.

Vielleicht funktioniert der ursprüngliche Code auch ohne diese CPU-Geräte-Spezifikation gut.