When NPUs Are Not Always Faster: A Stage-Level Analysis of Mobile LLM Inference
本文首次对移动大语言模型在 CPU-NPU 异构 SoC 上的推理进行了阶段级分析,揭示出 NPU 在计算密集型预填充阶段往往无法超越 CPU 的性能,甚至可能增加能耗,从而挑战了 NPU 普遍加速的假设,并为端侧推理提供了新的设计指导原则。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你的智能手机就像一间正在努力烹饪复杂菜肴(大型语言模型,或 LLM)的繁忙厨房。这间厨房有两位主厨:一位是CPU(一位多才多艺、经验丰富的主厨,擅长切配和统筹),另一位是NPU(一种专门设计的、高速的机械臂,专为重复性重体力劳动而打造)。
长期以来,人们一直认为机械臂(NPU)因为专为人工智能而造,所以总是更快。然而,这篇论文揭开了幕后真相,表明机械臂并不总是更快的厨师。事实上,取决于你正在制作菜肴的哪个部分,人类主厨实际上可能更胜一筹。
以下是他们研究发现的分解,使用了简单的类比:
1. 烹饪的两个阶段
论文解释说,文本生成发生在两个截然不同的阶段,就像烹饪过程中的两个不同部分:
“预填充”阶段(阅读食谱): 这是手机一次性读取你整个提示词(输入文本)的时候。这就像阅读整章食谱。这需要巨大的、繁重的体力劳动(同时执行大量计算)。
- 发现: 在这里,CPU(人类主厨) 获胜。机械臂(NPU)在这个阶段实际上更慢(慢至 1.6 倍)。
- 为什么? 机械臂的工作空间(内存)很小,而且尚未针对这种特定类型的“重体力劳动”进行优化。人类主厨拥有更大的操作台和更适合这项特定工作的工具。
“解码”阶段(书写菜肴): 这是手机一次生成一个单词,逐个进行的时候。这就像机械臂在盘子上放一片装饰,然后等待下一个指令。这是一项内存密集型任务,而非重体力劳动任务。
- 发现: 在这里,NPU(机械臂) 更快,但优势很小(大约快 5% 到 20%)。
- 为什么? 机械臂擅长直线移动数据,这符合这种“逐个进行”的风格。然而,由于其他问题(见下文),速度提升并不巨大。
2. “出租车”问题(调度开销)
即使机械臂在实际烹饪中确实更快,论文发现,将工作发送给机械臂的过程极其缓慢。
- 类比: 想象人类主厨必须打电话给机械臂,等待它接听,解释任务,递送食材,等待机械臂完成,然后取回结果。
- 现实: 对于小型、快速的任务(如撒一撮盐),打电话和交接所花费的时间比实际烹饪时间长 8 到 22 倍。
- 结果: 因为机械臂必须被“呼叫”这么多次才能生成一个句子,所有这些等待时间都抵消了速度优势。这就像拥有一辆法拉利,却有 90% 的时间被困在交通堵塞中。
3. “错误工具”惩罚(回退)
有时,机械臂不知道如何执行特定任务(如复杂的注意力机制)。
- 类比: 机械臂试图切菜,意识到自己做不到,不得不把它交回给人类主厨。但由于他们位于厨房的不同区域,人类主厨必须洗手、走过去,然后从头开始。
- 现实: 当 NPU 无法完成工作时,它会回退到 CPU。这种“交接”增加了额外的延迟(大约慢 1.5 倍),因为手机的这两个部分必须同步它们的数据。这拖慢了整个过程。
4. 能源的意外
你可能认为使用专门的机械臂能节省电池。
- 发现: 令人惊讶的是,使用 NPU 实际上会更快耗尽电池(在某些情况下高达 51%)。
- 为什么? 因为手机花费了大量时间和能量来管理 CPU 和 NPU 之间的“电话呼叫”,并处理回退错误,导致手机工作的总时间增加。这就像在跑马拉松时不断停下来系鞋带;你最终消耗的能量比以稳定速度奔跑还要多。
结论:设计师应该做什么?
作者为制造这些手机芯片的人员提出了三条规则:
- 了解你的阶段: 不要把所有东西都发送给机械臂。让人类主厨(CPU)处理“繁重阅读”(预填充),只将“逐个书写”(解码)发送给机械臂。
- 停止交通堵塞: 机械臂需要能够即时(10 微秒以内)接受指令。我们需要消除“电话呼叫”延迟。
- 教给机械臂更多技巧: 机械臂需要学会如何执行所有任务,这样它就不必不断向人类主厨寻求帮助。
简而言之: NPU 是一个强大的工具,但在当前的手机上,它往往受到糟糕的管理和通信延迟的制约。有时,“老派”的 CPU 实际上是更高效的选择。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。