Как Tensorflow определяет загрузку процессора при распределенном обучении? - PullRequest
1 голос
/ 14 февраля 2020

Я новичок в использовании Tensorflow для распределенного обучения. Пока что мой код работает нормально. Но когда я наблюдаю за процессом, меня что-то удивляет.

У меня есть два вычислительных узла ЦП. Каждый процессор Intel (R) Xeon (R) E5-2680 0 @ 2,70 ГГц. 32 ядра.

Используя tf.distribute.experimental.MultiWorkerMirroredStrategy(), я могу распределить учебное задание на эти два процессора.

Вот некоторые цифры.

Case1: CIFAR10 с Resnet56

Тренировка на одном ЦП с размером пакета 64: загрузка каждого ядра ЦП ~ 68%

Тренировка на двух ЦП с размером пакета 128 (каждый процессор получил 64): Загрузка каждого ядра ЦП ~ 68%

Case2: MNIST di git с 5-уровневой сетью

Обучение на одном процессоре с размером пакета 64: использование каждого ядра процессора ~ 40%

Обучение на двух процессорах с размер пакета 128 (каждый процессор получил 64): загрузка каждого ядра процессора ~ 15%

Мой вопрос здесь: почему в случае 2, когда задание распределяется, загрузка ЦП снижается? Я полагаю, что загрузка ЦП должна как-то оставаться ~ 40%, так как каждый ЦП получает одинаковый размер пакета с ситуацией обучения с одним ЦП.

Вот как скомпилирована модель. Я не знаю, имеет ли это какое-то отношение к оптимизатору или что-то в тензорном потоке.

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

Обновление: я также отслеживаю пропускную способность между двумя узлами. ~ 386Mbit / с. Они подключены через порт 1G. Возможно ли, что узким местом является сетевое соединение? Но я также полагаю, что пропускной способности достаточно для ~ 386 * 2 Мбит / с <1G. </p>

Большое спасибо!

...