机器之心编辑部
阿里巴巴有诸多的复杂端智能业务场景,对于深度学习引擎的性能、包大小、普适性都要很高的要求。在这样的背景下,阿里巴巴自研的端上推理引擎 MNN 应运而生。
运行时半自动搜索架构
卷积算法优化创新
异构设备混合调度
与相比,取最小,即为卷积的计算策略 Cost:
没有考虑算子内部需要缓存的问题,在不同的计算策略下,算子自身可能需要或不需要缓存(比如卷积用滑窗不需要缓存,用 Winograd 算法需要),这时候算子内部的缓存无法复用或预先分配,会增加内存占用或者影响性能。
Feature map 对于异构设备而言(主要是 GPU),所需要的资源往往不仅是一块连续内存,因此异构端无法用同一套内存复用机制,往往需要另外写。
网络中有可能需要做多路并行,比如 CPU、GPU 各一路,这样之前按整个网络算出来的内存地址就无效了。
端上硬件支持以 4 为单元的向量运算。CPU SIMD 与 GPU SIMT+SIMD 均是如此。
深度学习领域中大部分算子具有通道可拆分特性
Winograd 每次需要计算更多的像素,对于尺寸比较小的 feature map 会有冗余,影响性能
在一些情况下,Winograd 需要前处理/后处理,有可能抵消掉其减少的乘法数收益
针对每一种卷积核大小与计算数的组合,都需要实现一份代码,优化的工程成本高昂