【发布时间】:2019-02-07 12:17:42
【问题描述】:
在阅读 tensorflow 官方 How-to 中的 Replicated training 时,我对这两个概念感到困惑:In-graph replication 和 Between-graph replication。
-
上面的链接说
图内复制。在这种方法中,客户端构建单个 tf.Graph 包含一组参数(在 tf.Variable 节点中 固定到 /job:ps); ...
这是否意味着
Between-graph replication方法中有多个tf.Graphs?如果是,对应的代码在哪里 提供的例子? -
虽然上面的链接中已经有一个
Between-graph replication示例,但任何人都可以提供一个In-graph replication实现(伪代码很好)并突出显示其主要 与Between-graph replication的区别?提前致谢!
Edit_1:更多问题
非常感谢您的详细解释和要点代码@mrry @YaroslavBulatov!看了之后 您的回答,我有以下两个问题:
-
Replicated training中有如下语句:
图之间的复制。在这种方法中,有一个单独的 每个 /job:worker 任务的客户端,通常与 工人任务。每个客户端构建一个相似图,其中包含 参数(固定到 /job:ps 之前使用 tf.train.replica_device_setter() 将它们确定性地映射到 相同的任务);以及计算密集型部分的单一副本 模型,固定到 /job:worker 中的本地任务。
我有两个与上述粗体字相关的子问题。
(A) 为什么我们说每个客户端都构建相似图,而不是相同图? 我想知道Replicated training 示例中每个客户端中构建的图表 应该是相同的,因为下面的图形构造代码在所有
workers 内共享。:# Build model...loss = ...global_step = tf.Variable(0)(B) 不应该是计算密集型部分的多个副本 模型,因为我们有多个
workers? Replicated training 中的示例是否支持在多台机器上进行训练,每台机器都有多个 GPU?如果没有,我们可以 同时使用
In-graph replication支持多个培训 每台机器上的 GPU 和Between-graph replication跨机训练?我问这个问题是因为 @mrry 表示In-graph replication与方式基本相同 用于CIFAR-10 example model for multiple GPUs。
【问题讨论】:
-
这里是 example 的
in-graph replication—— 基本上你有一个图表并使用with tf.device("/../worker/task:1/..)将操作分配给工人 -
多个
tf.Graph对象存在是因为您有多个进程,并且在每个进程中第一次使用默认图时会创建一个新的tf.Graph对象 -
mirry,你能帮忙回答这个问题吗?stackoverflow.com/questions/44826477/…
标签: graph tensorflow distributed