2016-11-29 5 views
0

Ich bin ein Beispiel here zu lernen verteilt TF auf MNIST. Ich habe die Cluster-Konfiguration an:Distributed Tensorflow funktioniert nicht mit einfachen Beispiel

parameter_servers = ["1.2.3.4:2222"] 
workers = [ "1.2.3.4:2222", "5.6.7.8:2222"] 

1.2.3.4 und 5.6.7.8 sind nur Darstellungen von meinen beiden Knoten. Sie sind nicht die echte IP-Adresse. Das gesamte Skript wird example.py namens

Auf 1.2.3.4, ich lief: python example.py --job_name=ps --task_index=0 .Dann auf der gleichen Maschine, lief ich python example --job_name=worker --task_index=0 in einem anderen Terminal. Sieht so aus, als würde es nur warten.

Unter 5,6,7,8 lief ich python example.py --job_name=worker --taks_index=1. Danach erhalte ich sofort den folgenden Fehler auf 5.6.7.8:

tensorflow.python.framework.errors.UnavailableError: {"created":"@1480458325.580095889","description":"EOF","file":"external/grpc/src/core/lib/iomgr/tcp_posix.c","file_line":235,"grpc_status":14} 
I tensorflow/core/distributed_runtime/master_session.cc:845] DeregisterGraph error: Aborted: Graph handle is not found: . Possibly, this worker just restarted. 

Und

tensorflow/core/distributed_runtime/graph_mgr.cc:55] 'unit.device' Must be non NULL 
Aborted (core dumped) 

auf 1.2.3.4

Ist das, weil ich sowohl den Parameter-Server und Arbeiter auf der gleichen Maschine laufen lasse? Ich habe nicht mehr als 2 Knoten. Wie kann ich das beheben?

+0

Hier ist ein eigenständiges Beispiel für die Ausführung von 2 Arbeitern auf einem einzelnen Knoten, können Sie sehen, ob das für Sie funktioniert? https://gist.github.com/yaroslavvb/1124bb02a9fd4abce3d86caf2f950cb2 –

+0

@ YaroslavBulatov: Es funktioniert, aber ich bekomme CUDA_ERROR_OUT_OF_MEMORY auf einem GPU-Server (mit 1 GPU). – user3813674

+0

Sie müssen "CUDA_VISIBLE_DEVICES =" für einen der Prozesse exportieren, standardmäßig wird der gesamte GPU-Speicher abgerufen. Mit diesem Set sollte es kein Problem geben, Parameter Server und Worker auf demselben Rechner laufen zu lassen. –

Antwort

0

So nach einem Tag habe ich endlich das Update:

  1. Sie als Yaroslav für den param Server vorschlagen, so dass der Arbeiter aus GPU-Speicher nicht
  2. laufen
  3. Der param-Server und Arbeiter kann nicht auf dem gleichen Port laufen (wie der ursprüngliche Post), so ändern Sie workers = [ "1.2.3.4:2222", "5.6.7.8:2222"] zu workers = [ "1.2.3.4:2223", "5.6.7.8:2222"]. Notieren Sie sich die Änderung der Portnummer.

Das ist alles, was getan werden muss.

Verwandte Themen