caffe: Data layer prefetch queue empty

本人在配置有GTX 1080ti 显卡的服务器上训练GoogLenet网络时在日志中出现了一句话:Data layer prefetch queue empty
caffe: Data layer prefetch queue empty
因为之前训练的时候并没有见到这句话,因此初步认为是一个错误。但是过了一段时间之后,发现程序还在继续运行,只是感觉相对没有出现这句话训练时的速度较慢。

因此就在网上查询问题出现的原因。了解到原因是:CPU数据的读入数据慢于GPU计算(出现在数据层,即读取图像和label时),导致GPU处于空闲,使得GPU的计算速度下降,迭代时间间隔扩大。 因此在观察日志的时候感觉运行速度相对较慢。

分析这个问题要追溯到caffe源码。实际上这句话是在base_data_layer.cpp文件中出现的。
caffe: Data layer prefetch queue empty
该部分代码的意思是DataLayer中使用线程读取Batch(image,label)push到队列中,然后pop出来前向传播
也就是进行数据准备,填充到top(即数据层中的top),该处的forward函数不进行计算,只是一个数据准备的过程。

总结:原因就是CPU数据的读入数据慢于GPU计算,这就跟电脑的CPU有关系了,该问题在有的高配置的电脑上并不会出现。
但是即使出现这种问题也不会影响程序的正常运行。

作者:GL3_24
来源:****
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。