批处理模式在Caffe -没有性能增益

Batch processing mode in Caffe - no performance gains

本文关键字:性能 模式 Caffe 批处理      更新时间:2023-10-16

在这个线程中,我重新实现了我的图像处理代码,一次发送10张图像(即我现在将输入blob的num属性设置为100而不是10)。

然而,处理这批所需的时间是原来的10倍。这意味着我没有得到任何性能提升。

这是合理的还是我做错了什么?

我在CPU模式下运行Caffe。遗憾的是,GPU模式不适合我。

更新:Caffe现在本机支持使用多个gpu时并行处理多个图像。虽然基于当前GPU并行性的实现似乎相对简单,但目前还没有类似的多cpu并行处理支持。

考虑到实现并行的主要问题是你在训练过程中需要的同步如果你只想并行处理你的图像(而不是训练模型),那么你可以将同一个网络的几个副本加载到内存中(无论是通过带有多处理的python还是带有多线程的c++),并在不同的网络上处理每个图像。这将是简单和非常有效的,特别是如果你加载网络一次,然后只处理大量的图像。然而,gpu要快得多:)


Caffe不并行处理多张图像,批量处理多张图像的唯一节省是在Caffe框架之间来回传输图像数据所需的时间,这在处理GPU时可能很重要。

IIRC有几个尝试使Caffe并行处理图像,但大多数集中在GPU实现上(CUDNN, CUDA Streams等),很少尝试向CPU代码添加并行性(OpenBLAS的多线程模式,或者只是在多线程上运行)。在这些选项中,我认为目前只有CUDNN选项是Caffe稳定版本的一部分,但显然需要GPU。你可以尝试查看Caffe的github页面上关于这个问题的拉请求之一,看看它是否适用于你,但请注意,它可能会导致当前版本的兼容性问题。

这是我过去使用过的一个这样的版本,尽管它不再维护:https://github.com/BVLC/caffe/pull/439

我也注意到,在上述问题的最后评论,有一些速度加快到CPU代码上的这个拉请求,以及,虽然我从来没有尝试过自己:https://github.com/BVLC/caffe/pull/2610