使用同步图形内复制时,我只调用tf.Session.run()
一次。
问题1:我是否还必须为每个工作人员创建一个新的会话对象,并且必须将主服务器的URL(调用tf.Session.run()
的URL)作为会话传递目标
问题2:我是否可以使用server.target
获取每台服务器的会话目标,还是必须明确指定主服务器的URL?
答案 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.
# ...