在进行分布式训练时,Tensorflow如何决定CPU利用率?

时间:2020-02-13 23:56:58

标签: python tensorflow cpu distributed

我是使用Tensorflow进行分布式培训的初学者。 到目前为止,我的代码运行良好。但是当我监视该过程时,就会有些困惑。

我有两个CPU计算节点。每个都是2.70GHz的Intel®Xeon®CPU E5-2680 0。 32核。

通过使用tf.distribute.experimental.MultiWorkerMirroredStrategy(),我可以将训练作业分配到这两个CPU。

这里有一些数字。

案例1:带有Resnet56的CIFAR10

在批处理大小为64的单个CPU上进行训练:每个CPU核心利用率约为68%

在两个批处理大小为128(每个CPU拥有64)的CPU上进行训练:每个CPU核心利用率约为68%

案例2:具有5层网络的MNIST数字

在批处理大小为64的单个CPU上进行训练:每个CPU核心利用率约为40%

在两个批处理大小为128(每个CPU拥有64)的CPU上进行训练:每个CPU核心利用率约为15%

我的问题是,在case2中,为什么在分发作业时CPU使用率下降了?我认为CPU利用率应该保持在40%左右,因为每个CPU在一次CPU训练情况下都具有相同的批处理大小。

这是模型的编译方式。我不知道这是否与优化器有某种关系或在tensorflow内部有什么关系。

model.compile( loss=tf.keras.losses.sparse_categorical_crossentropy, optimizer=tf.keras.optimizers.SGD(learning_rate=0.001), metrics=['accuracy'])

更新:我还监视两个节点之间的带宽。 〜386Mbit / s。它们通过1G端口连接。网络连接是否有瓶颈?但是我也认为带宽足以达到〜386 * 2Mbit / s <1G。

非常感谢您!

0 个答案:

没有答案