转自我的知乎专栏: https://zhuanlan.zhihu.com/p/143510419
很多团队都在做移动端AI的某个具体的技术点,但部署AI算法的时候和产品线交流,产品一线其实对具体用什么技术并不关心,产品线就希望某个算法能跑得又好又快又省。所以,不局限于某个具体的技术点,本文整理了移动端AI算法部署技术栈。要满足产品苛刻的性能要求,部署时一定是多种技术的综合利用。
指标体系
产品要求的又好又快又省,指标化其实就是几类:
1. 效果(好):
1.1 准:Accuracy
AI算法效果一般用accuracy表示,当然具体的任务还有一些具体的量化指标,但核心理念都是准确率。
效果(accuracy)是算法团队需要解决的核心问题,移动端工程化部署的时候,accuracy不会提高,甚至某些技术还会牺牲一些accuracy,以换取更好的执行效率。
2. 效率(快、省):
2.1 快:latency
也就是单次AI算法模型运行(inference)的时间。
参见业界推崇的MLperf评测体系,不同任务有不同的指标:Single stream任务,主要用latency,也有用fps(frame per second)的,latency和fps可以直接换算;Offline任务,可以用throughput。
2.2 省(功耗):energy efficiency
移动端必须要考虑功耗问题。功耗的评测体系有点乱,以前看MLperf,功耗的评测也还是open question。看国内几个有名的AI跑分软件,都没有功耗的跑分。当然,可以理解,功耗是不好测试的。
参考国外的一些评测,功耗可以用 fps/w 或 mah / inference 来衡量。
2.3 省(存储):memory
现在移动设备(比如,手机)存储越来越大,memory一般来说够用。当然,我们还是应该监控存储的使用情况。
除开产品直接的要求外,工程化部署的成本也需要被考虑,比如软件和硬件的成本:
3. 成本(低)
3.1 软件成本:flexibility
移动端已有大量可选的软件框架和算子实现库。低成本的技术需要尽量复用已有的软件框架和库。
3.2 硬件成本
选择新的芯片/计算设备,在性能/能效上肯定会更好,但新计算单元的成本肯定会更高。不过对软件团队来说,一般芯片或能用的计算设备是确定的,硬件资源上没太多选择/决策空间。
综上,“好、快、省”的具体要求就是软件平台“高accuracy,低latency,高energy efficiency,低memory size,高flexibility”。当然,没有一个技术能对所有的指标友好,很多技术都是在几个指标间进行平衡。
技术栈
对AI算法应用的部署,涉及的模块和其间的关系可如下图:
所以,对支撑AI算法应用“好快省”的“计算软件平台”,在技术上通常可分为自下而上和自上而下两条路径。其中