我如何解决TensorFlow中的``gpu内存不足''
tensorflow
6
0

我在TensorFlow中运行了具有2个conv层和1个全连接层的MNIST演示,我收到一条消息“试图分配2.59GiB的内存不足”,但它显示总内存为4.69GiB,可用内存为3.22 GiB,如何以2.59GiB停止?在更大的网络中,如何管理GPU内存?我只关心如何充分利用gpu内存,想知道它是如何发生的,而不是如何预先分配内存

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

默认情况下,TensorFlow会映射该进程可见的几乎所有GPU的所有GPU内存(取决于CUDA_VISIBLE_DEVICES)。这样做是为了通过减少内存碎片来更有效地使用设备上相对宝贵的GPU内存资源。

TensorFlow在Session上提供了两个Config选项来控制它。

第一个是allow_growth选项,它尝试根据运行时分配仅分配尽可能多的GPU内存:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)

第二种方法是per_process_gpu_memory_fraction选项,该选项确定应为每个可见GPU分配的总内存量的一部分。例如,您可以通过以下方式告诉TensorFlow仅分配每个GPU的总内存的40%:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
收藏
评论

不是那个首先,您可以通过监视gpu来查看运行时它将获得多少内存。例如,如果您有nvidia gpu,则可以使用watch -n 1 nvidia-smi命令进行检查。但是在大多数情况下,如果您未设置gpu内存的最大部分,它将分配几乎全部可用内存。您的问题是您的GPU内存不足。 CNN网络非常繁重。当您尝试馈送网络时,请勿对整个数据进行处理。以小批量进行此进料程序。

收藏
评论

在GTX 970上训练小型CNN时,我遇到了内存不足的错误。通过一点fl幸,我发现告诉TensorFlow根据需要(而不是预先)在GPU上分配内存可以解决我所有的问题。可以使用以下Python代码完成此操作:

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    sess = tf.Session(config=config)

以前,TensorFlow会预分配约90%的GPU内存。由于某些未知的原因,即使模型完全适合GPU内存,这也会在以后导致内存不足错误。通过使用上面的代码,我不再有OOM错误。

注意:如果模型太大而无法容纳GPU内存,这可能无济于事!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号