深度学习工业界应用-加速-预测
2017-06-03 本文已影响335人
skywalker
一. BMXNET要解决的问题
在神经网络实际部署预测时需要做很多的优化,比如:
- 裁剪设计网络,裁掉部分无用的weight
- 将weight从int32 量化到int8甚至是binary 1bit
- 使用特定硬件上提供的库:比如mkl,openblas,neon等等
arxiv:BMXNET是在MXNET的基础上,给出了量化weight的一个方法。其开源实现的地址是:https://github.com/hpi-xnor/BMXNet
优化的最终目标是1)更小的模型大小 2)更少的计算量(功耗)
二. 方法
现有方法:
tensorflow量化的方案是将weight 从float32降低到int8的精度
BNN:存储二值化的weight,使用xnor和popcount来代替全连接和cnn中的矩阵乘法,BMXNET实现了类似方法
三. 实现
BMXNET实现了activation, convolution 和fully connected layer的operator
工程上
在x86 cpu上使用SSE4.2提供的加速
在arm上使用了NEON加速
使用OpenMP并行化加速
一个lenet的网络symbols对比
说明:
不在第一层和最后一层使用量化网络,这会显著减低准确率
四. 效果
模型变小,速度变快,精度变化不大
ResNet-18 全精度的模型大小是44.7MB. 二值化后是1.5MB,压缩比大约是29
精度损失在0.02-0.04之间