同步图形内复制需要多少个会话对象?

时间:2016-09-02 20:39:45

标签: python tensorflow

使用同步图形内复制时,我只调用tf.Session.run()一次。

问题1:我是否还必须为每个工作人员创建一个新的会话对象,并且必须将主服务器的URL(调用tf.Session.run()的URL)作为会话传递目标

问题2:我是否可以使用server.target获取每台服务器的会话目标,还是必须明确指定主服务器的URL?

1 个答案:

答案 0 :(得分:2)

如果您正在使用“图中复制”,则图表包含计算节点的多个副本,通常每个设备有一个副本(即,如果您正在进行分布式CPU培训,则每个工作任务一个,如果是每个GPU,则为一个你正在进行分布式或本地多GPU培训)。由于所有副本都在同一个图表中,因此您只需要一个tf.Session来控制整个培训过程。您需要在不调用tf.Session的工作人员中创建Session.run()个对象。

对于图形内培训,通常只有一个与工作任务分开的主服务器(用于性能隔离),但您可以将其与客户端程序共存。在这种情况下,您可以简单地创建一个名为"client"的单任务作业,并在该任务中使用server.target创建会话。以下示例显示了如何为"client""worker""ps"作业编写单个脚本:

server = tf.train.Server({"client": ["client_host:2222"],
                          "worker": ["worker_host0:2222", ...],
                          "ps": ["ps_host0:2222", ...]})

if job_name == "ps" or job_name == "worker":
    server.join()

elif job_name == "client":
    # Build a replicated graph.
    # ...

    sess = tf.Session(server.target)

    # Insert training loop here.
    # ...