【问题标题】:Batch processing mode in Caffe - no performance gainsCaffe 中的批处理模式 - 没有性能提升
【发布时间】:2015-12-07 22:56:40
【问题描述】:
在this thread 之后,我重新实现了我的图像处理代码以一次发送 10 个图像(即我现在将输入 blob 的 num 属性设置为 100 而不是 10)。
但是,处理此批次所需的时间是原来的 10 倍。这意味着我没有得到任何性能提升。
这是合理的还是我做错了什么?
我在 CPU 模式下运行 Caffe。不幸的是,GPU 模式不适合我。
【问题讨论】:
标签:
c++
image-processing
deep-learning
caffe
【解决方案1】:
更新: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