如何在tensorflow分布式培训中进行评估和推理?

时间:2018-03-01 19:39:52

标签: python tensorflow distributed-computing distributed

我理解tensorflow分布式培训,我实现了自己的脚本。

我现在要做的是整合为一些工人分配异步评估模型的任务的可能性。

假设我们有6名工人,我想做的是使用其中4名进行异步培训,1名用于定期评估模型,另一项用于定期对其进行推理。

我实现这一目标的直觉是做到以下几点:

....
elif FLAGS.job_name == "worker":

    if FLAGS.task_index <= (len(cluster_dict["worker"][:-2]) - 1):
         logging.info("Training worker started")
         ...
        with tf.device(tf.train.replica_device_setter(
                worker_device="/job:worker/task:%d" % FLAGS.task_index,
                cluster=cluster,
                ps_tasks=len(cluster_dict["ps"])
            )):
                train_model = Model(
                    mode=tf.contrib.learn.ModeKeys.TRAIN
                )
               with tf.train.MonitoredTrainingSession(
                    is_chief=(FLAGS.task_index == 0),
                    master=server.target,
                    checkpoint_dir=ckpt_dir,
                    config=config_proto,
                    hooks=hooks
                ) as mon_sess:
                    while not mon_sess.should_stop():
                        res = train_model.train(...)
                        ...

   elif FLAGS.task_index == (len(cluster_dict["worker"][-2]) - 1):
         logging.info("Evaluation worker started")
         ...
         with tf.device(tf.train.replica_device_setter(
              worker_device="/job:worker/task:%d" % FLAGS.task_index,
              cluster=cluster,
              ps_tasks=len(cluster_dict["ps"])
          )):
              eval_model = Model(
                 mode=tf.contrib.learn.ModeKeys.EVAL
              )
              ...

   elif FLAGS.task_index == (len(cluster_dict["worker"][-1]) - 1):
        logging.info("Inference worker started")
        ...
        with tf.device(tf.train.replica_device_setter(
               worker_device="/job:worker/task:%d" % FLAGS.task_index,
               cluster=cluster,
               ps_tasks=len(cluster_dict["ps"])
            )):
                infer_model = Model(
                    mode=tf.contrib.learn.ModeKeys.INFER
                )
                ...

现在,评估和推理会议怎么样? 对于培训,我可以使用tf.train.MonitoredTrainingSession,但是为了评估和推断,我没有看到这样一个舒适的解决方案,我看到的唯一可能是使用tf.Session

关于实际评估和推理循环,我想使用while循环,其中工作人员定期调用eval_model.eval(...)infer_model.infer(...),但这意味着评估是在考虑时间而不是考虑的情况下执行的global_step是我能给予&#34;周期性的唯一意义&#34;就是睡觉了。

在分布式张量流设置中异步执行训练,评估和推理是否正确?

0 个答案:

没有答案