训练ResNet时有GPU OOM,但仍有GPU备用

时间:2020-06-15 13:05:59

标签: tensorflow resnet

我正在使用批处理szie 256训练的resnet34会导致OOM。但是我使用的机器有8个Titan GPU和12G GPU内存,我注意到当OOM发生时仍有7个GPU备用。

我想知道为什么会这样。当第一个GPU内存不足时,tensorflow不能使用其他并行GPU吗?该如何解决?

………………………………更新…………………………………… 实际上,我确实通过编码“ os.environment”将所有GPU设置为可用,但我还错过了什么还是有什么问题?

1 个答案:

答案 0 :(得分:0)

1。 之所以出现这种情况,是因为batchsize = 256太大而无法在12G的GPU中加载(在这种情况下14G可能就足够了。)

唯一的方法是减少批号。

  1. -为什么Tensorflow无法使用并行GPU的内存来解决此问题? -我找不到任何迹象表明tensorflow支持它。而且我尝试使用“ with tf.device()”来为不同的GPU设置不同的变量,但这无济于事。因为无论我如何分配它们,一旦加载数据,获取数据的第一层就会使该变量存在的GPU成为OOM。

  2. 最终我的解决方案是将256削减到128。

  3. PS:在此期间,我尝试设置sess.run([train_imges, train_labels])在CPU中运行。但是正如我在2中提到的那样,它无济于事。此外,我发现此设置会减慢训练速度,因为这样做会使GPU的峰值占用率从99%下降到90%,并且达到非峰值的时间会变长。