我学习了“分布式 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 是否完全用于数据并行化(而不是手动模型并行化)?