C++ Caffe中的批处理模式-无性能增益
接下来,我重新实现了我的图像处理代码,一次发送10个图像(即,我现在将输入blob的num属性设置为100,而不是10) 然而,处理这批产品所需的时间是原来的10倍。这意味着我没有得到任何性能提升 这是合理的还是我做错了什么C++ Caffe中的批处理模式-无性能增益,c++,image-processing,deep-learning,caffe,C++,Image Processing,Deep Learning,Caffe,接下来,我重新实现了我的图像处理代码,一次发送10个图像(即,我现在将输入blob的num属性设置为100,而不是10) 然而,处理这批产品所需的时间是原来的10倍。这意味着我没有得到任何性能提升 这是合理的还是我做错了什么 我正在CPU模式下运行Caffe。不幸的是,GPU模式不是我的选择。更新:Caffe现在本机支持在使用多个GPU时并行处理多个图像。虽然基于当前GPU并行性的实现似乎相对简单,但目前还没有类似的支持在多个CPU上进行并行处理 考虑到并行化的主要问题是在训练过程中需要同步,如
我正在CPU模式下运行Caffe。不幸的是,GPU模式不是我的选择。更新:Caffe现在本机支持在使用多个GPU时并行处理多个图像。虽然基于当前GPU并行性的实现似乎相对简单,但目前还没有类似的支持在多个CPU上进行并行处理
考虑到并行化的主要问题是在训练过程中需要同步,如果你只想并行处理图像(而不是训练模型),那么你可以将同一网络的几个副本加载到内存中(无论是通过Python处理多线程还是C++多线程),并在不同的网络上处理每个图像。这将是简单和相当有效的,特别是如果你加载一次网络,然后只是处理大量的图像。不过,GPU的速度要快得多:)
Caffe不会并行处理多个图像,批量处理多个图像所节省的唯一时间是在Caffe的框架之间来回传输图像数据所需的时间,这在处理GPU时可能非常重要 IIRC有几次尝试使Caffe进程映像并行,但大多数集中在GPU实现上(CUDNN、CUDA流等),很少尝试向CPU代码添加并行性(OpenBLAS的多线程模式,或仅在多线程上运行)。其中我认为目前只有CUDNN选项是Caffe稳定版本的一部分,但显然需要GPU。您可以尝试在Caffe的github页面上查看关于此问题的一个请求,看看它是否适合您,但请注意,它可能会导致您当前版本的兼容性问题 这是我过去使用过的一个版本,尽管它已不再维护: 在上述问题的最后一条评论中,我还注意到,在这个pull请求中,CPU代码也有一些加速,尽管我自己从未尝试过: