前面提到了利用caffe训练模型时,只用单个CPU核的问题,通过openblas的方式解决了,但即使多个核用上了,但速度还是超级慢。
就目前使用的网络而言,1min只能跑30 iter(1个iter 128个样本),即30*128 = 3840 样本/min, 为什么如此之慢呢?是不是代码出了问题,或者哪里的设置不对?
尝试和lenet进行对比,利用8核CPU根据lenet训练mnist,大概8min完成10000iter(一个iter 64个样本),即10000*64/8 = 80000 样本/min
从这里的对比来看,lenet的训练速度还是正常的,网上也有提出训练lenet花费了10min左右。那么为什么速度差别这么大呢?应该是网络计算量的原因。
通过https://dgschwend.github.io/netscope/#/editor可以查看网络的计算量,在左侧输入网络的deploy.prototxt文件即可,然后按shift + enter即可查看网络的计算量。
分析发现lenet网络的计算量为2.29M,而我们的网络的计算量为36.08M,这样就分析清楚了,3840*36.08 = 138547.2,而80000*2.29 = 183200,还是比较接近的。因此训练的速度应该就是这样了。
另外又将caffe下的训练速度和tensorflow下的训练进行对比,发现很奇怪的事情
tensorflow caffe
GPU 700 iter/min 1500 iter/min
CPU 200 iter/min 20 iter/min
难道caffe的CPU速度如此之慢?还不明白是为啥。
再做一次实验,在tensorflow和caffe利用mnist数据集训练lenet网络(网络结构根据caffe中的example修改,另外写一个tensorflow的lenet网络),看一下耗时。
得到的数据如下:
用mnist训练lenet, 10000 iter, 每个batch 64个样本
GPU + CPU CPU 核数无限制 CPU 8核
tensorflow 50s 219s 258s
caffe 30s 1000s+
900s
从这里可以看出,
就目前使用的网络而言,1min只能跑30 iter(1个iter 128个样本),即30*128 = 3840 样本/min, 为什么如此之慢呢?是不是代码出了问题,或者哪里的设置不对?
尝试和lenet进行对比,利用8核CPU根据lenet训练mnist,大概8min完成10000iter(一个iter 64个样本),即10000*64/8 = 80000 样本/min
从这里的对比来看,lenet的训练速度还是正常的,网上也有提出训练lenet花费了10min左右。那么为什么速度差别这么大呢?应该是网络计算量的原因。
通过https://dgschwend.github.io/netscope/#/editor可以查看网络的计算量,在左侧输入网络的deploy.prototxt文件即可,然后按shift + enter即可查看网络的计算量。
分析发现lenet网络的计算量为2.29M,而我们的网络的计算量为36.08M,这样就分析清楚了,3840*36.08 = 138547.2,而80000*2.29 = 183200,还是比较接近的。因此训练的速度应该就是这样了。
另外又将caffe下的训练速度和tensorflow下的训练进行对比,发现很奇怪的事情
tensorflow caffe
GPU 700 iter/min 1500 iter/min
CPU 200 iter/min 20 iter/min
难道caffe的CPU速度如此之慢?还不明白是为啥。
再做一次实验,在tensorflow和caffe利用mnist数据集训练lenet网络(网络结构根据caffe中的example修改,另外写一个tensorflow的lenet网络),看一下耗时。
得到的数据如下:
用mnist训练lenet, 10000 iter, 每个batch 64个样本
GPU + CPU CPU 核数无限制 CPU 8核
tensorflow 50s 219s 258s
caffe 30s 1000s+
900s
从这里可以看出,