我们使用TensorFlow模型动物园的Faster RCNN对1280 * 720 RGB图像进行了推断,对COCO数据集进行了训练,并得到了一些结果
测试案例1:
使用tf.Session(graph=tf.Graph())
批处理大小= 4,GPU使用率= 100%(默认)
推断4张图像所需的时间= 0.32秒
测试案例2:
然后我们使用gpu_options将每个TF会话的GPU使用率限制为一小部分
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.40)
tf.Session(graph=tf.Graph(), config=tf.ConfigProto(gpu_options=gpu_options))
对于批次大小为2的产品,推理时间为0.16秒,这是可以理解的,因为这是线性的。
测试案例3:
将2个推理实例作为两个不同的python进程。在这里,两个批次的大小均为2。
推理速度大大降低,最终值为0.32秒,与一个进程在批处理大小为4的情况下进行推理的情况相同。
批处理大小= 2,GPU使用率= 40%,进程= 2
花费的时间= 0.32秒
因此,在案例1和案例3中,花费的时间是相同的。
Q.1是否有任何方法可以减少花费的时间?
Q.2瓶颈在哪里?同样在第一种情况下,似乎并没有利用整个GPU内存。因此,我们曾认为,如果将推理分为两部分,则可以更有效地利用资源。我们所了解的哪里出问题了?