【问题标题】:GPU OOM when training ResNet but there are GPUs spare still训练 ResNet 时出现 GPU OOM,但仍有 GPU 空闲
【发布时间】:2020-10-04 21:38:12
【问题描述】:

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

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

…………………………………………更新…………………………………… 实际上我确实通过编码“os.environment”将所有gpus设置为可用,我还有什么遗漏或者有什么问题吗?

【问题讨论】:

  • 您需要显式编写 tf GPU 代码来执行此操作,它不会直接。

标签: tensorflow resnet


【解决方案1】:

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

唯一的办法就是减少batch_number。

  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%,而且这样做的时候非峰值时间变长了。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2019-02-21
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-01-07
    相关资源
    最近更新 更多