MirroredStrategy不使用GPU

时间:2019-02-19 12:41:37

标签: tensorflow tensorflow-estimator

我想在多GPU系统上使用tf.contrib.distribute.MirroredStrategy(),但是它不使用GPU进行训练(请参见下面的输出)。另外我正在运行tensorflow-gpu 1.12。

我确实尝试直接在MirroredStrategy中指定GPU,但是出现了同样的问题。

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.

显然,预期结果将是在Multi GPU系统上运行培训。这些是已知问题吗?

2 个答案:

答案 0 :(得分:1)

我也遇到了类似的问题,即MirroredStrategy在tensorflow 1.13.1上失败,而2x RTX2080运行Estimator。

故障似乎出在NCCL all_reduce方法中(错误消息-没有为NCCL AllReduce注册OpKernel)。

我通过将其从NCCL更改为hierarchy_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")
                                                   )

答案 1 :(得分:0)

在 TensorFlow 新版本中,AllReduceCrossDeviceOps 不存在。您可以改用 distribute.HierarchicalCopyAllReduce()

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