我采用了"Distributed TensorFlow"操作方法,并尝试将其应用于"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)。
到目前为止看起来像#34;默认"分布式TensorFlow的行为不适合现在自动并行化工作。我想知道行为是什么以及分布式TensorFlow是否用于数据并行化(与手动模型并行化相反)?
答案 0 :(得分:0)
TF非常适合数据并行化,例如当你需要筛选大量数据时,然后将数据分发到多个GPU。
它对于权重并行化也很有用。使用tf.train.replica_device_setter
,权重在多个设备之间分配,以获得更好的IO。
现在,您似乎要求在单个模型中进行并行化。这很难自动完成,因为TF不知道将同一模型的计算分配给多个设备的最佳方式是什么。这将取决于太多因素,例如您的设备之间的连接速度有多快。