Caffe 中的批处理模式 - 没有性能提升
Batch processing mode in Caffe - no performance gains
在 之后,我重新实现了我的图像处理代码以一次发送 10 张图像(即我现在将输入 blob 的 num 属性 设置为 100 而不是 10)。
但是,处理该批次所需的时间比原来多了 10 倍。这意味着我没有获得任何性能提升。
这是合理的还是我做错了什么?
我是 运行 Caffe CPU 模式。不幸的是,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
在
但是,处理该批次所需的时间比原来多了 10 倍。这意味着我没有获得任何性能提升。
这是合理的还是我做错了什么?
我是 运行 Caffe CPU 模式。不幸的是,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