批处理模式在Caffe -没有性能增益
Batch processing mode in Caffe - no performance gains
在这个线程中,我重新实现了我的图像处理代码,一次发送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
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- OpenCV - 基本操作 - 性能问题 [模式:发布]
- 在X64模式下从C /CLI调用MASM PROC会产生意外的性能问题
- 与保留模式GUI相比,使用直接模式GUI的性能含义是什么?
- C/C++:使用适配器模式是否会降低性能
- VS2005调试模式和发布模式之间存在巨大的性能影响
- 二进制与文本模式下的文件操作 -- 性能问题
- 考虑 CPU 提升模式的多线程超线性性能实现
- OpenGL中即时模式的性能问题
- 批处理模式在Caffe -没有性能增益
- 映射模式在多线程程序中的性能低于预期(4倍加速vs 8倍加速)
- 单例模式性能问题