分布式张量流:非首席执行官陷入首发会议

时间:2017-01-07 03:27:06

标签: python tensorflow distributed

我有两个工作人员和一个参数服务器。主要工作人员运作良好,但非主要工作人员坚持这一行代码

with sv.managed_session(server.target, config=config) as sess, sess.as_default():

并按如下方式生成输出:

[2017-01-06 21:24:40,954] Starting session. If this hangs, we're mostly    likely waiting to connect to the parameter server. One common cause is that the parameter server DNS name isn't resolving yet, or is misspecified.
I tensorflow/core/distributed_runtime/master_session.cc:928] Start master session 67667d6cd148265a with config:
device_filters: "/job:ps"
device_filters: "/job:worker/task:1/cpu:0"

I tensorflow/core/distributed_runtime/master_session.cc:928] Start master session 1c4e0742ba99e5ea with config:
device_filters: "/job:ps"
device_filters: "/job:worker/task:1/cpu:0"

I tensorflow/core/distributed_runtime/master_session.cc:928] Start  master session 9575940608a24fcd with config:
device_filters: "/job:ps"
device_filters: "/job:worker/task:1/cpu:0"

一次又一次地启动主会话。

列车主管的设定如下:

def init_fn(ses):
    logger.info("Initializing all parameters.")
    ses.run(init_all_op)

config = tf.ConfigProto(device_filters=["/job:ps", "/job:worker/task:{}/cpu:0".format(args.worker_id)]) # refer to worker id
logdir = os.path.join(args.log_dir, 'train')
summary_writer = tf.train.SummaryWriter(logdir + "_%d" % args.worker_id)
sv = tf.train.Supervisor(is_chief=(args.worker_id == 0),
                         logdir=logdir,
                         saver=saver,
                         summary_op=None,
                         init_op=init_op,  # Defaults to an Operation that initializes all variables
                         init_fn=init_fn,
                         summary_writer=summary_writer,
                         ready_op=tf.report_uninitialized_variables(variables_to_save),
                         global_step=trainer.global_step[target_task],
                         save_model_secs=30,
                         save_summaries_secs=30)

有什么建议吗?非常感谢!

更新

引用tensorflow文档:

  

在主要任务中,主管的工作方式与上面第一个例子完全相同。在其他任务中,sv.managed_session()在将会话返回到训练代码之前等待模型已初始化。非主要任务取决于初始化模型的主要任务。

     

如果其中一个任务崩溃并重新启动,managed_session()会检查模型是否已初始化。如果是,它只是创建一个会话并将其返回到正常进行的训练代码。如果模型需要初始化,主要任务就是重新初始化它;其他任务只是等待模型初始化。

我在这里使用的分布式方法是 Between-graph replication ,原因是我在一个worker中定义了两个图,其中一个图不完整。我尝试在非首席工作人员中完成该图表。因此它在managed_session()崩溃并重新启动。当我在主要工作者中完全定义两个图时,这个问题得到解决。

0 个答案:

没有答案