代码优化方法论
为什么需要代码优化
- 提升体验,扩展玩法
- 减少限制跟要求,降低门槛 ,覆盖更多群体
在谷歌内部,打造AI应用有两条思路,一是让更多人受惠,二是尽可能减少限制和要求
- 场景限制必须进行优化
个人隐私越来越被重视,以往的云端处理方案存在局限性
一些场景要求算法要有极低的延时,如实时通信项目
传统代码优化
rnnoise优化举例
- 函数近似和查表优化sigmoid函数计算
1 | static OPUS_INLINE float tansig_approx(float x) |
最粗暴的函数近似方法:
1 | atan(pi*x/2)*2/pi 24.1 ns |
- 减少程序跳转优化RNN计算
CPU多级Cache机制
深度学习移动端优化
网络剪枝
- 网络的参数都存在冗余的,所以可以进行网络剪枝
- 网络剪枝的流程
权值的重要性:计算L1或者L2
神经元的重要性:不为零的次数 - 剪权值VS剪神经元
剪权值 剪神经元
剪权值:模型不规则,不便于实现和加速
剪神经元:模型规则,便于实现和加速
精简模型设计
- 标准CNN
- 深度分离卷积Depthwise Separable Convolution 【参见MobileNet】
- 参数比较
四、深度学习移动端部署工具
与PC端深度学习环境被大厂垄断不同,移动端的部署工具可以说是百家争鸣,很多深度学习的厂商都会推出自家的推理加速工具。
4.1 硬件厂商
公司 | 硬件架构 | 开发工具 |
---|---|---|
海思 | NPU | HiAI Foundation |
高通 | CPU/GPU/DSP | Snapdragon Neural Processing Engine SDK |
Apple | CPU/GPU/NeualEngine | CoreML |
ARM | CPU/GPU | ARM NN SDK |
MediaTek | CPU/GPU/APU | NeuroPilot SDK |
4.2 软件厂商
工具 | 公司 | 系统支持情况 | 特点 |
---|---|---|---|
TensorFlow Lite | Android/IOS | Android结合比较密,支持GPU加速 | |
CoreML | Apple | IOS | 软件硬件结合紧密,更新快 |
Caffe2 | Android/IOS | ||
NCNN | Tencent | Android/IOS | 支持大部分CNN网络,已经落地的应用多 |
MACE | 小米 | Android | |
MNN | 阿里 | Android/IOS |
- 利用Caffe2进行手写数字识别在Android端的部署