MirroredStrategy не использует графические процессоры - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел использовать tf.contrib.distribute.MirroredStrategy () в моей системе с несколькими графическими процессорами, но он не использует графические процессоры для обучения (см. Вывод ниже).Также я использую tenorflow-gpu 1.12.

Я попытался указать графические процессоры непосредственно в MirroredStrategy, но появилась та же проблема.

model = models.Model(inputs=input, outputs=y_output)
optimizer = tf.train.AdamOptimizer(LEARNING_RATE)
model.compile(loss=lossFunc, optimizer=optimizer)

NUM_GPUS = 2
strategy = tf.contrib.distribute.MirroredStrategy(num_gpus=NUM_GPUS)
config = tf.estimator.RunConfig(train_distribute=strategy)
estimator = tf.keras.estimator.model_to_estimator(model,
                                              config=config)

Вот результаты, которые я получаю:

INFO:tensorflow:Device is available but not used by distribute strategy: /device:CPU:0
INFO:tensorflow:Device is available but not used by distribute strategy: /device:GPU:0
INFO:tensorflow:Device is available but not used by distribute strategy: /device:GPU:1
WARNING:tensorflow:Not all devices in DistributionStrategy are visible to TensorFlow session.

Ожидаемый результат, очевидно, состоял бы в том, чтобы запустить тренировку в системе с несколькими GPU.Это известные проблемы?

1 Ответ

0 голосов
/ 10 апреля 2019

Я сталкивался с подобной проблемой: сбой MirroredStrategy в тензорном потоке 1.13.1 при 2x RTX2080 с оценщиком.

Кажется, что сбой произошел в методе NCCL all_reduce (сообщение об ошибке - не зарегистрирован OpKernel дляNCCL AllReduce).

Я запустил его, переключившись с NCCL наierarchical_copy, что означало использование методов contrib cross_device_ops следующим образом:

Ошибка команды:

mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0","/gpu:1"])

Успешная команда:

mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0","/gpu:1"],
                      cross_device_ops=tf.contrib.distribute.AllReduceCrossDeviceOps(
                         all_reduce_alg="hierarchical_copy")
                                                   )
...