我正在使用批处理szie 256训练的resnet34会导致OOM。但是我使用的机器有8个Titan GPU和12G GPU内存,我注意到当OOM发生时仍有7个GPU备用。
我想知道为什么会这样。当第一个GPU内存不足时,tensorflow不能使用其他并行GPU吗?该如何解决?
………………………………更新…………………………………… 实际上,我确实通过编码“ os.environment”将所有GPU设置为可用,但我还错过了什么还是有什么问题?
答案 0 :(得分:0)
1。 之所以出现这种情况,是因为batchsize = 256太大而无法在12G的GPU中加载(在这种情况下14G可能就足够了。)
唯一的方法是减少批号。
-为什么Tensorflow无法使用并行GPU的内存来解决此问题? -我找不到任何迹象表明tensorflow支持它。而且我尝试使用“ with tf.device()”来为不同的GPU设置不同的变量,但这无济于事。因为无论我如何分配它们,一旦加载数据,获取数据的第一层就会使该变量存在的GPU成为OOM。
最终我的解决方案是将256削减到128。
PS:在此期间,我尝试设置sess.run([train_imges, train_labels])
在CPU中运行。但是正如我在2中提到的那样,它无济于事。此外,我发现此设置会减慢训练速度,因为这样做会使GPU的峰值占用率从99%下降到90%,并且达到非峰值的时间会变长。