首页 文章

如果没有明确指定,TensorFlow集群如何跨机器分配负载?

提问于
浏览
0

我拿了"Distributed TensorFlow" how-to并尝试将它应用到"MNIST For ML Beginners"教程 . 我在本地启动了三个TensorFlow工作节点(PC中有8个核心)并运行训练脚本并替换此行:

sess = tf.InteractiveSession()

以下内容:

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

其中 12346 是节点0正在侦听的端口(例如,在节点0上创建主会话) . 请注意,我没有明确指定应该执行计算的位置 .

看看 htop 的输出,我可以看到该作业确实是由集群执行的 - 它消耗了一些CPU . 但是,唯一的消费者是节点0,其余节点不执行任何工作 . 如果我选择节点1作为创建主会话的位置,则图片更改:仅在节点0上执行~2 / 3工作(根据CPU负载判断),但剩余的1/3工作在节点1上执行如果我选择节点2作为主节点,则在节点2上执行1/3的工作 . 如果我并行运行两个进程,一个使用节点1作为主节点,另一个使用节点2作为主节点,节点1和节点2得到一些负载,但节点0加载更多(例如,200%vs 60%vs 60%的CPU) .

到目前为止,分布式TensorFlow的“默认”行为看起来并不适合现在自动并行化工作 . 我想知道行为是什么以及分布式TensorFlow是否用于数据并行化(与手动模型并行化相反)?

1 回答

  • 0

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

    它对于权重并行化也很有用 . 使用 tf.train.replica_device_setter ,权重在多个设备之间分配,以获得更好的IO .

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

相关问题