2017-03-27 3 views
1

Hallo Ich habe eine Wield-Situation, wenn Sie Schätzer + Experiment-Klasse für verteiltes Training verwenden.tensorflow verteilte Ausbildung w/Schätzer + Experiment-Framework

Hier ist ein Beispiel: https://gist.github.com/protoget/2cf2b530bc300f209473374cf02ad829

Dies ist ein einfacher Fall, dass

  1. DNNClassifier von TF offiziellen Tutorial Rahmen
  2. Experiment
  3. 1 Arbeiter und 1 ps auf dem gleichen Host verwendet, um mit unterschiedlichem Häfen.

Was passiert ist,

1), wenn ich ps Job starten, es sieht gut aus:

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations. 
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. 
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations. 
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations. 
I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:200] Initialize GrpcChannelCache for job ps -> {0 -> localhost:9000} 
I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:200] Initialize GrpcChannelCache for job worker -> {0 -> 127.0.0.1:9001} 
I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:221] Started server with target: grpc://localhost:9000 

2), wenn ich Arbeiter Job starten, der Job unbemerkt beendet, überhaupt kein Protokoll verlassen .

Eagerly Hilfe suchend.

Antwort

1

Ich habe das gleiche Problem und ich bekomme endlich die Lösung.

Das Problem ist in config._environment

config = {"cluster": {'ps':  ['127.0.0.1:9000'], 
         'worker': ['127.0.0.1:9001']}} 

if args.type == "worker": 
    config["task"] = {'type': 'worker', 'index': 0} 
else: 
    config["task"] = {'type': 'ps', 'index': 0} 

os.environ['TF_CONFIG'] = json.dumps(config) 

config = run_config.RunConfig() 

config._environment = run_config.Environment.CLOUD 

Set config._environment als Environment.CLOUD.

Dann können Sie Trainingssystem verteilt haben.

Ich hoffe, es macht Sie glücklich :)

1

ich das gleiche Problem haben, ist es aufgrund einiger interner tensorflow Code, den ich denke, ich habe eine Frage auf SO bereits für diese geöffnet haben: TensorFlow: minimalist program fails on distributed mode.

Ich öffnete auch eine Pull-Anfrage: https://github.com/tensorflow/tensorflow/issues/8796.

Es gibt zwei Möglichkeiten, Ihr Problem zu lösen. Da dies aufgrund Ihrer ClusterSpec impliziten local Umgebung ist, könnten Sie versuchen, eine andere (entweder google oder cloud), aber ich kann Ihnen nicht versichern, dass der Rest Ihrer Arbeit nicht beeinträchtigt wird. Also habe ich lieber einen Blick auf den Code geworfen und versuche ihn selbst für den lokalen Modus zu reparieren, weshalb ich das im Nachhinein erkläre.

Sie Erklärungen sehen werden, warum es gerade in jenen Stellen ausfällt, ist die Tatsache, Google ziemlich still war bisher so, was ich tat, ist, dass ich ihren Quellcode gepatcht (in tensorflow/contrib/learn/python/learn/experiment.py):

# Start the server, if needed. It's important to start the server before 
# we (optionally) sleep for the case where no device_filters are set. 
# Otherwise, the servers will wait to connect to each other before starting 
# to train. We might as well start as soon as we can. 
config = self._estimator.config 
if (config.environment != run_config.Environment.LOCAL and 
    config.environment != run_config.Environment.GOOGLE and 
    config.cluster_spec and config.master): 
self._start_server() 

(dieser Teil verhindert, dass der Server im lokalen Modus gestartet wird, der Ihnen gehört, wenn Sie keinen in der Cluster-Spezifikation festlegen, also sollten Sie einfach config.environment != run_config.Environment.LOCAL and kommentieren und das sollte funktionieren).

Verwandte Themen