避免在 convNN Tensorflow 中耗尽 GPU 资源
Avoiding exhausting GPU resources in convNN Tensorflow
我正在尝试 运行 超参数优化脚本,用于使用 Tensorflow 的 convNN。
正如您可能知道的那样,TF 对 GPU 内存的处理并不那么奇特(不要认为它会永远如此,多亏了 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内存。
我不是公式正确,所以我希望得到验证或更正我遗漏的内容。
实际上,这只需要大约 44MB 的内存,大部分被输出占用。
- 您的输入是
20x128x128x3
- 卷积核为
4x4x3x32
- 输出为
20x128x128x32
当你合计总数时,你得到
(20*128*128*3 + 4*4*3*32 + 20*128*128*32) * 4 / 1024**2 ≈ 44MB
(在上面,4
是为了float32
的字节大小,1024**2
是为了得到MB的结果。
您的批量大小可以小于您的数量 类。想想 ImageNet 及其 1000 类:人们正在使用小 10 倍的批量进行训练。
编辑
这是网络的张量板屏幕截图 - 它报告 40MB 而不是 44MB,可能是因为它不包括输入 - 你也有我之前提到的所有张量大小。
我正在尝试 运行 超参数优化脚本,用于使用 Tensorflow 的 convNN。 正如您可能知道的那样,TF 对 GPU 内存的处理并不那么奇特(不要认为它会永远如此,多亏了 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内存。
我不是公式正确,所以我希望得到验证或更正我遗漏的内容。
实际上,这只需要大约 44MB 的内存,大部分被输出占用。
- 您的输入是
20x128x128x3
- 卷积核为
4x4x3x32
- 输出为
20x128x128x32
当你合计总数时,你得到
(20*128*128*3 + 4*4*3*32 + 20*128*128*32) * 4 / 1024**2 ≈ 44MB
(在上面,4
是为了float32
的字节大小,1024**2
是为了得到MB的结果。
您的批量大小可以小于您的数量 类。想想 ImageNet 及其 1000 类:人们正在使用小 10 倍的批量进行训练。
编辑
这是网络的张量板屏幕截图 - 它报告 40MB 而不是 44MB,可能是因为它不包括输入 - 你也有我之前提到的所有张量大小。