为什么在 keras 中增加批大小时已用 GPU 内存量不增加?



>我在 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 ms

批次 50 — 22ms

批次 100 — 45 ms

批次 1000 — 470ms

每次nvidia-smi都显示只使用了1017MiB。

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

我希望当我增加批量大小时,使用的 GPU 数量会增加。 我有 GeForce RTX 2080 Ti,内存为 11016MiB。因此,我似乎没有充分利用视频卡,因为我有10 GB的未使用内存。

请建议如何利用未使用的内存。一个天真的解决方案是创建 10 个模型,因为每个模型仅消耗 1 GB,但也许有一个更优雅的解决方案。或者也许应该是这样,并且不可能使用更多内存。

根据文档 (https://keras.io/models/sequential/(,predict(...)batch_size采用一个参数 - 如果不指定参数,则默认为 32。因此,您看到的行为。

放入batch多少图像并不重要,您必须明确指定批量大小。

最新更新