我是利用ImageDataLayer直接从图片读入进行训练,开始训练时连续出现这个,虽然不影响训练,好奇就查了一下
问题描述:训练过程中出现blocking_queue.cpp:50] Data layer prefetch queue empty
原因: CPU数据读入慢于GPU计算,导致GPU处于空闲,使得计算速度下降,迭代时间间隔扩大。nvidia-smi显示为:GPU功率不断大幅度变化,GPU电压不稳定。
可能诱因:服务器同时在进行其他工作,如大规模读写数据(频繁使用IO),数据无法读入;CPU同时进行其他工作,负载极重,无法正常读取数据;CPU内存爆表,所有程序速度变慢。
解决办法:
1 把图片转为lmdb,可以加快数据读取速度,提高IO效率;
2 在1的基础上,可以使用prefetch参数对数据进行预取
data_param {
source: “./data/ilsvrc12/ilsvrc12_train_lmdb”
batch_size: 32
backend: LMDB
prefetch: 20
}
注意:直接读入图片的是使用ImageDataLayer
使用LMDB格式的数据是用DataLayer