Caffe 中的批处理模式 - 没有性能提升

2024-01-12

这个线程 https://stackoverflow.com/q/32504394/1103412我重新实现了图像处理代码,以便一次发送 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 https://github.com/BVLC/caffe/pull/439

我还注意到在上述问题的最后评论中,此拉取请求上的 CPU 代码也有一些速度提升,尽管我自己从未尝试过:https://github.com/BVLC/caffe/pull/2610 https://github.com/BVLC/caffe/pull/2610

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Caffe 中的批处理模式 - 没有性能提升 的相关文章

随机推荐