分布式Tensorflow:工作人员挂起

时间:2017-10-06 06:51:03

标签: python tensorflow distributed worker

我正在尝试实现一个流程组的培训网络理念,通过它我们有几个组,每个组包含一个参数服务器和一些工作者。

(worker1,worker2) - > ps1,

(worker3,worker4) - > ps2,

(ps1,ps2) - > central_ps

我想在worker中使用synchronized update,我试图用tf.SyncReplicaOptimizer()实现,并且我将worker1指定为主要工作者。

但是,只有主要小组正在接受培训。另一组只是挂起并打印

tensorflow/core/distributed_runtime/master_session.cc:998] Start master 
session 9443e0ca52a79c3a with config: device_filters: "/job:ps" 
device_filters: "/job:worker/task:0" device_filters: 
"/job:worker/task:1" allow_soft_placement: true

EDITED: 我想这是一个初始化问题。如果我为每个组中的一个工作者分配is_chief = True(在这种情况下为2个酋长),那么它们会运行很短的时间。然而,在两位酋长全力以赴之后,他们很快就会挂起。

已编辑:它挂起的问题是在session_manager.py(512)_ready()

-> if (ready_value is None or ready_value.dtype == np.int32 or
(Pdb) print(ready_value)
[b'ps_0/hid_w' b'ps_0/hid_b' b'ps_0/sm_w' b'ps_0/sm_b' 
b'copy_ps_0/hid_w'
b'copy_ps_0/hid_b' b'copy_ps_0/sm_w' b'copy_ps_0/sm_b'] 

似乎非主要群体上的所有变量都没有初始化。我正试图找到一种方法来初始化它们。

编辑3: 我通过在每个设备上全局定义变量来更新这些变量。也就是说,每个工作者运行(使用device0),(使用device1) 现在,未初始化的变量变为

[b'ps_0/hid_w/Adagrad' b'ps_0/hid_b/Adagrad' b'ps_0/sm_w/Adagrad'
 b'ps_0/sm_b/Adagrad' b'copy_ps_0/hid_w/Adagrad' 
 b'copy_ps_0/hid_b/Adagrad'
 b'copy_ps_0/sm_w/Adagrad' b'copy_ps_0/sm_b/Adagrad']

试图弄清楚发生了什么。

编辑4: 完全移出图形定义后,现在代码可以 跑     sv.prepare_or_wait_for_session(server.target,config = sess_config)

然而,它挂在

_, step = sess.run([train_op, global_step], feed_dict=train_feed)

的位置
-> client/session.py(1306)_run_fn()
tf_session.TF_SessionRun_wrapper(
          session, options, feed_dict, fetch_list, target_list,
          run_metadata, status)

代码链接在https://github.com/heyucongtom/PGRD/blob/master/syncreplica.py

非常感谢!

0 个答案:

没有答案