>我在 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
多少图像并不重要,您必须明确指定批量大小。