0

我学习了“分布式 TensorFlow”操作指南,并尝试将其应用于“MNIST For ML Beginners”教程。我在本地启动了三个 TensorFlow 工作节点(PC 中有 8 个内核)并运行训练脚本并替换以下行:

sess = tf.InteractiveSession()

具有以下内容:

sess = tf.InteractiveSession("grpc://localhost:12345")

where12346是节点 0 正在侦听的端口(例如,在节点 0 上创建主会话)。请注意,我没有明确指定应该在哪里执行计算。

查看htop的输出,我可以看到该作业确实是由集群执行的——它消耗了一些 CPU。但是,唯一的消费者是节点 0,其余节点不执行任何工作。如果我选择节点 1 作为创建主会话的地方,图片会发生变化:只有 ~2/3 的工作在节点 0 上执行(根据 CPU 负载判断),但剩余 1/3 的工作在节点 1 上执行. 如果我选择节点 2 作为主节点,那么 1/3 的工作在节点 2 上执行。如果我并行运行两个进程,一个使用节点 1 作为主节点,另一个使用节点 2 作为主节点,节点 1 和节点 2获得一些负载,但节点 0 的负载要多得多(例如,200% 对 60% 对 60% 的 CPU)。

到目前为止,分布式 TensorFlow 的“默认”行为似乎并不适合现在自动并行化工作。我想知道行为是什么以及分布式 TensorFlow 是否完全用于数据并行化(而不是手动模型并行化)?

4

1 回答 1

0

TF 非常适合数据并行化,例如当您需要筛选大量数据,然后将其分发到多个 GPU 时。

它也非常适合权重并行化。使用tf.train.replica_device_setter,权重分布在多个设备之间以获得更好的 IO。

现在,您似乎要求在单个模型中进行并行化。这很难自动完成,因为 TF 不知道将同一模型的计算分配到多个设备的最佳方法是什么。这将取决于太多因素,例如您的设备之间的连接速度有多快。

于 2017-01-25T07:26:20.140 回答