带你读《2022技术人的百宝黑皮书》——MNN 2.0 发布 ——移动端推理引擎到通用深度学习引擎(6) https://developer.aliyun.com/article/1248033?groupCode=taobaotech
性能优化
MNN 的架构设计可以降低性能优化的成本,但性能优化本身仍然是MNN中最艰难复杂的工作,需要深入理解模型结构、算子实现、硬件架构,分析模型运行中的计算冗余,并将其尽可能地压制。
冗余分析
深度学习推理中存在的计算冗余大致可分为以下几类:
1.结构冗余:模型结构中的无效计算节点,也是惟一可以无损去除的冗余类型
2.精度冗余:深度学习推理引擎的数据单元是张量,一般是32位浮点数组,32位浮点的范围在很多场景是存在冗余的,往往可以压缩到16位或者8位甚至更低;另一方面,浮点数组中也可能存大量的0或者其他重复数据,也有优化空间。
3.算法冗余:算子的实现算法本身存在计算冗余,比如均值模糊的滑窗实现
4.并发冗余:未充分使用计算资源的并发能力(SIMD / 多线程 / GPU 等等),导致计算资源闲置,亦或受并发能力本身的限制,需要计算多余的数据(比如计算长度为3 ,但SIMD单元为4的向量加法)
5.调度冗余:使用多线程、GPU 或者其他异构计算资源时,在 CPU 端需要组织计算,分拆任务,传输计算信息,该行为产生额外的计算冗余
6.读写冗余:在一些计算场景重复读写内存,或者内存访问不连续导致不能充分利用硬件缓存,产生多余的内存传输
带你读《2022技术人的百宝黑皮书》——MNN 2.0 发布 ——移动端推理引擎到通用深度学习引擎(8) https://developer.aliyun.com/article/1248030?groupCode=taobaotech