八年前,我们第一次见识到了手机里的神经网络处理器(NPU),你还记得2017年华为Mate10的麒麟970吧,它比上不足(苹果A11、骁龙835),比下有余(骁龙660、联发科P60),却是世界上第一款集成NPU的移动SoC。从此,“手机本地也能跑AI”成为一种可能。
老实说,这八年变化挺大的,苹果和三星终于也开始搞端侧AI了,虽说效果有好有坏;谷歌则将自家数据中心的张量处理器(TPU)运用得愈发成熟,并在Tensor芯片中借鉴了TPU 的AI计算核心理念。从ARM、高通,到苹果、三星,所有大科技公司在发布新产品时都要提那么一句:AI是智能手机未来的核心。
但实际应用下来,移动AI总感觉施展不开:手机本地能用到的AI功能就那么些:基本是语音助手、拍照修图、即时翻译老三样,应用开发者想搞出点新东西却困难重重。这一现状,NPU得承担一部分责任,不是它不好用,而是从未真正开放给开发者作为平台使用。这就让人有些纳闷了:手机里这块叫NPU的芯片,到底能用来干什么?
先搞懂:NPU到底是什么?
就像手机里负责跑APP的CPU、玩游戏时渲染画面的GPU,还有专门处理拍照录像数据的ISP一样,NPU也是专用计算单元——专门用来跑AI任务,追求既快又省电。如今不只是手机芯片,连英特尔和AMD的移动处理器同样集成了专用NPU,尽管与手机SoC的NPU功能侧重不同。
具体来说,NPU擅长处理小体量的数据(比如4位甚至2位的精简模型)、特殊的内存使用模式,还有一大堆数学运算(比如融合乘加、融合乘积累加这些)。移动NPU之所以能流行,就是因为有些AI任务,传统处理器处理起来效率又低又费电,它却能更高效搞定。
当然,早在2017年NPU初现时就有一种反对意见:跑AI任务不一定非得要NPU,很多简单的小算法,就算是性能一般的CPU也能扛;而那些支撑大语言模型的数据中心,用的硬件更像英伟达显卡,跟手机里的NPU不是一回事。
但有了专用NPU,就能流畅跑那些CPU、GPU不擅长的模型,而且通常更省电。这种分工合作的计算方式,虽然会让芯片设计更复杂、占更多空间,但能在性能和耗电之间找到平衡,这对手机太重要了,没人想让AI功能把电池很快耗光吧?
AI不是本应在显卡上跑吗?
关注内存涨价的朋友都知道,AI数据中心特别需要高性能的AI和GPU加速器(尤其是英伟达的),而配套显存和内存都是海量的:单台AI训练/推理服务器需配置8张H200算力卡,其整合的显存容量可达1.2TB,同时配备最高8TB的系统内存,以满足高负载算力需求,这就是内存不够用、价格飞涨的主要原因。
英伟达的CUDA架构之所以能高效跑AI和图形任务,核心在于其具备大规模并行计算和资源调度能力。它的张量核心能搞定各种数据格式的复杂数学运算,包括现在AI模型常用的精简数据格式。
虽然现在手机里的GPU,比如ARM的Mali、高通的Adreno,也能处理16位甚至8位的数据,但遇到4位及以下的超精简模型时,效率就差了很多。而且手机GPU就算理论上支持这些运算,也不是专门为AI设计的,AI只是它们的副业。
手机GPU首先要考虑省电,跟桌面端那些性能超强的显卡不一样。它们使用的一些技术,比如瓦片渲染(Tiled Rendering)、分片执行(Shard Execution),不太适合长时间高强度的计算任务。手机GPU当然能跑AI,有些场景下也还行,但遇到专门的AI运算,还是有更省电的选择。
软件开发也很关键。英伟达的CUDA会把芯片的核心能力开放给开发者,让他们能深度优化AI任务的运行。但手机平台没有这么底层的访问权限,开发者和手机厂商只能用高通神经处理SDK、ARM计算库这些工具,而且大多是某家厂商专属的,通用性不强。
这就是移动AI开发的大难题:桌面端开发基本都围绕CUDA转(虽然AMD的ROCm也在慢慢热起来),但手机里的NPU五花八门——谷歌的Tensor、骁龙的Hexagon、苹果的神经网络引擎,每种都有自己的规矩和开发工具,开发者很难兼顾。
NPU未解决“平台不统一”的麻烦
现在几乎所有手机芯片都集成了NPU,设计它的初衷是高效处理小数据、复杂运算和特殊内存模式,还不用大改GPU的架构。但独立NPU也带来了新问题,尤其是第三方开发者想做适配的时候。
虽然苹果、骁龙、联发科这些芯片都提供了开发工具,但开发者得为每个平台单独做适配优化。就算是谷歌自己的Pixel手机,也没给开发者提供方便的通用访问权限:Tensor ML SDK还在测试阶段,能不能正式开放还不一定。开发者只能通过谷歌的ML Kit用一些高层级的Gemini Nano功能,想深入用到底层硬件,根本做不到。
更糟的是,三星已经停止了自家Neural SDK的维护和更新,谷歌之前搞的通用Android NNAPI也充满了局限性。这就导致移动AI开发变成了一团乱麻,各种规格、各种废弃的工具,第三方想高效做个移动AI应用太难了。每家厂商自己搞的优化方案,根本没法推广开来,最后开发者能用的,还是谷歌这些大厂掌控的云端AI或者他们自己做的精简模型。
转机:跨平台工具LiteRT来了
还好,谷歌2024年推出了LiteRT(其实是Tensor Flow Lite框架的升级组件),它能统一支持CPU、GPU和各家厂商的NPU(目前支持高通、联发科)。LiteRT的设计初衷是在运行时最大限度地利用硬件加速,让软件自行选择最合适的方法,从而解决了NNAPI的最大缺陷——NNAPI本来想让开发者不用顾忌不同厂商的硬件差异,结果只统一了接口,实际运行效果还是看厂商的驱动;而LiteRT自己掌控运行过程,就是想把这个漏洞补上。
有意思的是,LiteRT不仅能在Android、iOS上使用,嵌入式设备甚至桌面电脑都能用,全程在设备本地运行AI推理,看得出来谷歌想把它做成通用的精简模型运行工具。不过和桌面端的AI框架不一样,LiteRT是提前设定好的,精度、精简方式这些都定死了,这样才能在手机这种资源有限的设备上稳定运行。
虽然LiteRT解决了不同厂商NPU不兼容的问题,但结合现在的技术发展,我们仍需要思考:NPU以后还能像现在这样重要吗?
比如ARM最新的C1系列CPU,增加了SME2扩展指令,一些AI任务能提速4倍,而且很多开发框架都支持,不用专门的工具。另外,手机GPU的架构也可能会改,变得更适合跑AI任务,说不定以后就用不到专门的NPU了。听说三星也正在搞专门优化AI的GPU,未来最早可能在Galaxy S28系列上用;Imagination的E系列GPU也是针对AI加速设计的,支持FP8和INT8精度,说不定Pixel以后也会用这款芯片。
而LiteRT正好能配合这些技术进步,开发者不用再操心硬件怎么变。CPU对复杂指令的支持越来越好,以后跑AI任务也会越来越高效,不再是备胎;而那些对AI优化更好的GPU,说不定以后会取代NPU成为默认的AI加速器,这些变化LiteRT都能应对。这么看,LiteRT有点像移动端的“CUDA”,它不是开放硬件,而是把不同硬件的差异抹平了,让开发者不用再纠结。
NPU不会消失,但AI生态终于有点盼头了
专用的移动NPU短期内肯定不会消失,但最开始那种“围着NPU转、被厂商限制”的端侧AI模式,显然不是最终形态。对于大多数第三方应用来说,CPU和GPU还是会承担大部分AI任务,尤其是它们对AI运算的支持越来越好了。
如果LiteRT能成功,开发者就不用再依赖某家芯片厂商的路线图,也能开发端侧AI应用了。尽管如此,设备端AI想拥有一个充满活力的第三方生态,可能还有一段路要走,但我们现在总算朝着这个方向迈进了一步。