我是使用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。
非常感谢您!