我在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,但是也许有一个更优雅的解决方案。也许应该是那样,不可能使用更多的内存。
答案 0 :(得分:2)
根据文档(https://keras.io/models/sequential/),predict(...)
采用参数batch_size
-如果未指定参数,则默认为32。因此,您会看到这种行为。 / p>
放入batch
中的图像数量无关紧要,您必须明确指定批处理大小。