【问题标题】:Avoiding exhausting GPU resources in convNN Tensorflow避免在 convNN Tensorflow 中耗尽 GPU 资源
【发布时间】:2017-12-12 13:51:49
【问题描述】:

我正在尝试为使用 Tensorflow 的 convNN 运行超参数优化脚本。 您可能知道,GPU-Memory 的 TF 处理并不那么花哨(不要认为它会永远如此,多亏了 TPU)。所以我的问题是我如何知道选择过滤器尺寸和批量大小,以便 GPU 内存不会耗尽。 这是我正在考虑的等式:

image_shape =128x128x3(3 color channel) 
batchSitze  = 20 ( is the smallest possible batchsize, since I got 20 klasses) 
filter_shape= fw_fh_fd[filter_width=4, filter_height=4, filter_depth=32]

据了解,使用tf.conv2d函数将需要以下内存量:

image_width * image_height *numerofchannel*batchSize*filter_height*filter_width*filter_depth*32bit 

因为我们为每个像素输入tf.float32。 在给定的示例中,所需的内存将是: 128x128x3x20x4x4x32x32 =16106127360 (bits),这都是最多 16GB 的内存。

我的公式不是正确的,所以我希望得到验证或更正我所缺少的内容。

【问题讨论】:

标签: tensorflow out-of-memory gpu conv-neural-network


【解决方案1】:

实际上,这将只占用大约 44MB 的内存,大部分由输出占用。

  • 您的输入是20x128x128x3
  • 卷积核为4x4x3x32
  • 输出为20x128x128x32

当你总结总数时,你得到

(20*128*128*3 + 4*4*3*32 + 20*128*128*32) * 4 / 1024**2 ≈ 44MB

(上面4float32的字节大小,1024**2是得到MB的结果)。

您的批量大小可以小于您的类数。想想 ImageNet 和它的 1000 个类:人们训练的批量大小要小 10 倍。

编辑

这是网络的张量板屏幕截图——它报告的是 40MB 而不是 44MB,可能是因为它不包括输入——而且你还拥有我之前提到的所有张量大小。

【讨论】:

  • 感谢您的回复,但请您解释一下您是如何获得 44MB 的?
  • 总结一下:(20*128*128*3+4*4*3*32+20*128*128*32)*4/1024**2=43.75
  • 但是您将过滤器值与输入相乘,从哪里得到 *4/1024**2 ?
  • 我现在明白你的回答了,但我还是不同意这个加法,因为conv操作整体保存在gpu RAM中,我需要测试一下,我明天再做。非常感谢您的帮助
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多