当增加喀拉斯邦的批处理大小时,为什么GPU使用的内存量没有增加?

时间:2019-09-09 12:10:10

标签: python tensorflow keras

我在Keras中有一个图像分类器。我想获得最快的性能,但是我注意到无论批处理多大,使用的GPU内存量都是恒定的。

我设置了

from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
set_session(tf.Session(config=config))

防止tf分配整个内存。

当我加载模型时

from keras.models import load_model
model = load_model(model_h5_path)

nvidia-smi显示已使用1017MiB。

然后我model.predict(batch)使用不同的批次大小并测量时间,这是我得到的结果

第1批-4.5毫秒

第10批-7毫秒

第50批-22毫秒

第100批-45毫秒

批次1000 — 470ms

每次nvidia-smi显示仅使用1017MiB。

如果我未设置allow_growth = True,则会得到相同的结果。

当我增加批处理大小时,我期望使用的GPU数量会增加。 我有带有11016MiB内存的GeForce RTX 2080 Ti。因此,由于我有10 GB的未使用内存,因此似乎没有完全使用视频卡。

请提出如何利用未使用的内存的建议。一个简单的解决方案是创建10个模型,因为每个模型仅消耗1 GB,但是也许有一个更优雅的解决方案。也许应该是那样,不可能使用更多的内存。

1 个答案:

答案 0 :(得分:2)

根据文档(https://keras.io/models/sequential/),predict(...)采用参数batch_size -如果未指定参数,则默认为32。因此,您会看到这种行为。 / p>

放入batch中的图像数量无关紧要,您必须明确指定批处理大小。