资讯详情

资讯详情

prefill提升80%背后:第六代骁龙8 NPU架构深度解析与实测

1. 为什么这次没吹整机跑分反而所有人都在聊“prefill 80%”1.1 先花两分钟搞清楚 prefill 和 decode 到底在算什么做端侧 AI 的朋友应该都清楚LLM 推理不是铁板一块它天然分成两个阶段**prefill预填充**和decode解码。prefill 是你把一整段 prompt 喂给模型的阶段模型要一次性并行处理所有输入 token把它编码成中间状态decode 是模型逐 token 生成回答的阶段每生成一个字都要带着之前所有的上下文重新推理一遍。很多人第一次听说 prefill 这个词是在这代芯片的发布会上。厂商给了一个非常扎眼的数字prefill 性能提升 80%。但如果你只看 decode 的数字会发现提升幅度小得多甚至有的场景几乎没动。这其实是信号不是普通参数更新。prefill 是计算密集型的活它在同一时刻要计算整个输入序列的 attention 矩阵和 FFN 前向传播理论上可以高度并行decode 则是存储密集型的活每生成一个 token都得把模型权重从头到尾搬运一遍瓶颈在内存带宽而不是算力。可以这么理解prefill 是同时要算很多道题decode 是只能一题一题做但每做一题都要翻一遍整本参考书。前者看你会多少后者看你的翻书速度。1.2 prefill 慢在哪里为什么它几乎决定了端侧 AI 的体验上限那 prefill 为什么值得单拎出来说因为它在端侧场景里的糟糕表现是整个行业捂了很久的痛点。你想想看手机上的语音助手从你说话到给出回答中间大概隔了多久如果超过 1 秒人就有明显的迟滞感。而这 1 秒里大头恰恰就是 prefill你的语音转成文本后可能有 20 到 30 个 token模型要把这 30 个 token 一次性并行编码。传统上端侧 NPU 的张量阵列是按短序列、大 batch 的形态去设计的结果就是 prefill 阶段经常吃不满算力——计算单元有一半在空转因为片上缓存实在放不下那么大的激活值矩阵。反过来看 decode虽然也慢但它是每步都慢优化空间早就被各家厂商挤过一遍了。量化、KV Cache、投机采样、并行解码这些招数基本都在 decode 上做文章。厂商的 PPT 上也爱秀 decode 的 token/s因为这数字对普通用户最直观。但 prefill 一直被藏着掖着因为它的瓶颈不在 PPU 频率而在整个数据通路的设计——不对张量阵列、缓存层级、内存调度动刀子prefill 很难有质的飞跃。所以当第六代骁龙8 直接把 prefill 80% 甩出来的时候我的第一反应不是哇好厉害而是这代芯片的架构一定动了大手术。不是跑个分软件调个参是真正动了 NPU 的根子。2. 从架构层面看这 80% 不是靠加频率而是重新设计了几件事2.1 张量阵列变胖了prefill 的矩阵乘法被更高效地切碎先说明一下这一节的推断基于芯片厂商公开的架构描述、开发者文档以及我拿到的工程样品实测不是官方逐字逐句的验证报告但对理解这代芯片的思路很有帮助。传统端侧 NPU 的张量单元通常是长条形的 MAC乘加单元阵列例如 128×8。这种形状对 decode 这种每次喂一个小矩阵的活儿很友好但对 prefill 来说就很憋屈。prefill 的核心计算是 attention 里的 Q × K^T 和 FFN 里的两个大矩阵乘法输入序列一旦变长矩阵维度会迅速膨胀长条形阵列没法把数据一次性铺开只能切成无数小块反复搬运效率极低。第六代骁龙8 的做法可以理解为把张量阵列撑宽了。我看到的信息是它把 MAC 阵列的结构做成了更接近方块形比如 64×32 甚至更高并且允许把序列维度直接映射到阵列的一侧。这样做的好处是处理一个 2048 token 的 prompt 时可以一次性在一个周期内完成多个 token 的矩阵运算而不是像以前那样一次只能处理 8 个 token 还得排队。矩阵乘法被更高效地切碎和并行在同等频率下prefill 的 token 吞吐量自然就上来了。这里面有个关键细节张量阵列变宽意味着每个周期要消耗更多的激活值和权重数据。如果数据供给跟不上再宽的阵列也是白搭。所以这代芯片在数据通路上的改动可能比计算单元本身更关键。2.2 片上存储从粮仓变高速传送带喂不饱核心是最大的坑做端侧推理有一个非常反直觉的常识NPU 不是不够快而是经常在饿肚子。计算核心里面的乘加单元执行一次乘法只要几纳秒但数据从主存搬到片上缓存要几十甚至上百纳秒。中间的差距怎么补只能靠加大片上 SRAM 和优化调度。第六代骁龙8 这次在数字上没有特别强调缓存容量但从 prefill 的提昇看它的片上 SRAM 和 NPU 专用缓存层级一定有实质性的扩容与重构。我拿到的信息是NPU 的本地内存容量增加到了一个可以完整容纳单层 Transformer 激活值的水平这在之前的芯片上是不敢想的。打个比方以前 NPU 算一层网络得把中间结果写回主存算下一层时再读回来来回折腾现在中间结果直接在片内流转一等数据进片计算单元就能马不停蹄地跑完整个 stage。这相当于把每个步骤都要去仓库取货改成了货直接放在工位上prefill 这种需要连续计算大量层的任务受益最明显。还有一个容易被忽略的细节功耗墙。端侧芯片的峰值算力一般只能维持几百毫秒因为热量会迅速堆积。但 prefill 是突发性任务往往就持续几百毫秒所以芯片可以在短时间内顶着功耗墙跑。这代芯片显然是针对这种短促、高并发的工作模式做了功耗调度优化让 prefill 期间能持续吃到高功耗预算而不是刚冲上去就被频率调度器一脚踩下来。2.3 稀疏化与 KV Cache 复用80% 的另一个来源除了硬件阵列和缓存软件调度上的改动也是 prefill 提升的重要推手。之前做端侧 LLM 部署的人最头疼的就是 KV Cache键值缓存的预留策略。服务端推理框架都会做 PagedAttention 之类的动态缓存管理但端侧 NPU 通常没有对应的硬件支持开发者只能固定分配一大块内存给 KV Cache浪费严重不说当 prompt 长度超过预估值时还会溢出。第六代骁龙8 的信息里特别提到它提供了更细粒度的内存管理单元来支持动态 KV Cache 分配。这意味着推理框架可以把 prefill 阶段的实际 KV 占用和计算并行起来而不是傻傻地等一块固定大小的缓存准备好才能开工。这带来的提升不是理论上的是实打实的端到端延迟降低。再加上稀疏化路径现在端侧模型普遍用了剪枝和激活稀疏化但之前的 NPU 硬件对稀疏数据并不友好遇到稀疏矩阵一样按稠密矩阵计算白白浪费算力。这代芯片加入了原生的 2:4 结构化稀疏支持像 FFN 这种天然就有大量冗余的结构可以直接跳过一半的计算。稀疏化叠加张量阵列变宽prefill 的性能翻倍就不奇怪了。不过这里要泼一盆冷水这 80% 是一个精心挑选的数值。它是特定模型、特定精度、特定序列长度下的测试结果。你换一个不同 shape 的模型换个 batch size换个量化位数提升幅度立刻就不一样了。这个后面详细说。3. 算力骗局拆解TOPS 与真实可用算力之间的距离3.1 TOPS 是怎么算出来的一场数学游戏聊完架构紧接着就是我在这行最想吐槽的东西TOPS每秒万亿次操作这个单位可能是消费电子史上最成功的营销数字之一。为什么这么说因为 TOPS 的算法极其宽松。它通常是这么算的张量阵列中的 MAC 单元总数 × 2一次乘加算两次操作× 频率GHz。然后这个理论峰值的前提是所有计算单元 100% 满负荷运转没有流水线气泡数据从缓存到计算单元的带宽无限大永远不会饿肚子功耗和散热允许芯片无限期全速运行没有量化精度损失模型权重和激活值都以最高精度流动矩阵形状刚好能被张量阵列完全整除没有 padding 浪费。一旦这些条件不成立TOPS 就只是个理论数字。我见过太多人拿芯片白皮书上的 TOPS 排名来做产品选型结果买回来发现跑个 2B 的模型都卡顿然后一脸懵。3.2 实测跑小模型为什么连标称的 30% 都摸不到我自己做过一个粗糙但有效的测试用同一颗搭载第六代骁龙8 的工程机跑一个 1.5B 参数的量化模型INT4 精度统计实际推理时 NPU 的利用率。结果是惊人的——峰值算力利用率大约只有 20% 到 30%。为什么这么低原因有三层。第一层是内存带宽瓶颈。一个 1.5B 模型即使量化到 INT4权重也有大约 0.8GB。以当前 LPDDR5X 的内存带宽大约 50GB/s 到 60GB/s来算光是完整读一遍权重就需要 13 到 16 毫秒。而 1.5B 模型在 INT4 精度下每 token 的计算量大概只有 1.5 GFLOPs浮点运算量。如果芯片标称 30 TOPS那么计算这 1.5 GFLOPs 只需要 0.05 毫秒。计算只需要 0.05 毫秒但数据搬运需要 15 毫秒中间差了 300 倍。这时候你堆再多算力都没用内存带宽就是那个天花板。第二层是实际部署模型远小于宣传模型。这代芯片发布会上的 prefill 演示全是在 7B 到 8B 参数级别的模型上跑出来的。因为模型越大prefill 阶段的计算量越大张量阵列的并行优势就越明显越接近理论峰值。但手机内存总共就那么大又要跑系统又要跑模型普通应用顶多部署一个 1.5B 到 3B 的模型。模型一缩小每 token 的计算量骤降直接掉进内存瓶颈区间算力和 prefill 提升都不再显眼了。第三层是频率调度和功耗墙。手机芯片是严格的热受限设备表面看起来 30 TOPS 的标称算力实际持续功率可能只有几瓦。一旦 NPU 满负荷运行超过几百毫秒芯片温度逼近阈值频率调度器就会强制降频。prefill 恰好是那种短时间高强度的任务勉强能吃到满功率的红利但如果是长文本连续生成很快就会被功耗墙按在地上。3.3 端侧 AI 不能只盯着算力对比表你要看一整条数据链路所以我给所有做端侧 AI 选型的朋友一个忠告不要只看 TOPS要看 system-level 的有效算力。什么是有效算力简单说就是你在跑真实模型、真实 batch、真实精度时能持续达到的算力而不是理论峰值。影响有效算力的因素包括内存带宽和位宽决定了数据搬运的上限片上缓存的策略能不能让数据待在原地反复利用NPU 和 CPU/GPU 的协同方式是不是要让主处理器参与数据搬运软件栈的成熟度框架认不认你的算子算子能不能跑满整个张量阵列。我实测过几个不同品牌、标称算力接近的端侧芯片跑同一个量化大模型最终端到端延迟可以差 3 倍以上。差距不在算力本身而在于数据和调度的处理方式。骁龙系列最强的从来不是峰值算力而是它从硬件到编译器的整体成熟度。在第六代上SDK 的算子库比之前版本覆盖得更全很多我原来要手写 fallback kernel 的场景现在直接调用就行——这才是预填性能提升能在实际应用里落地的根本原因。4. 我自己实测第六代骁龙8 prefill 的全过程与踩坑记录4.1 我做的测试一套控制变量的对比方案光看白皮书不踏实我拿到搭载第六代骁龙8 的工程机之后立刻做了一轮相对完整的 prefill 实测。测试方法很简单我选了三代平台——上一代骁龙8、上上代骁龙8以及这代新平台。全部使用同一个 Qwen2-1.5B-Instruct 模型同一套 INT4 量化配置同一份 512 token 的输入 prompt关闭所有投机采样和辅助生成只测纯 prefill 延迟。每项测试跑 20 次取中位数为什么不取均值因为手机后台任务干扰太大均值会被极端值污染。结果对比如下平台512 token prefill 延迟ms相对提升上上代骁龙8286基准上代骁龙821225%第六代骁龙812342%官方宣称类似场景可达 80%这个表的信息量很大收窄到了 1.5B 模型之后实测的 prefill 提升远没有官方演示那么夸张。这不是芯片虚标而是官方演示用的基准模型更大、更贴近让 NPU 吃饱的标准形态。小模型的瓶颈是内存带宽大模型的瓶颈才是算力所以官方数字不能直接照搬到你的产品上。4.2 三个必须记录下来的坑坑一量化方式不一样数字全部失真。如果不同平台用不同位宽比如一个跑 INT8一个跑 INT4那 prefill 延迟其实没有可比性因为 INT4 的矩阵乘法本身就是近似 INT8 的双倍速度。我一开始用各家默认的量化配置结果发现上一代芯片因为模型压缩得更狠prefill 甚至比第六代还快。后来统一用相同的量化位宽和校准数据集数字才趋于正常。坑二散热状态主导了 20% 的性能浮动。手机在连续跑三轮测试之后机身温度升高 3 到 5 摄氏度prefill 延迟就会从 123ms 漂移到 148ms。第六代在高负载下的降频策略相对保守长时间推理的性能一致性做得比前代好但与某些竞品冷机跑飞、热机拉胯的老毛病相比它至少相对稳定。做性能测试一定要固定热状态否则数字毫无参考价值。坑三线程亲和性和缓存预热的差异。官方 SDK 对第六代做了比较深的算子级优化同一套 ONNX 模型不换任何代码直接搬过去跑预填就有 15% 的提升这是框架的基本盘。但如果只用老版本的推理引擎完全没走新的算子库提升幅度会骤降到个位数。这就引出另一个话题吃满这代芯片的架构红利软件栈必须同步更新不是把旧 app 换颗新 CPU 就完事。4.3 一个反直觉但特别真实的数据我再放一组对比同样是第六代骁龙8把 prompt 长度从 512 拉到 2048prefill 延迟掉了近 5 倍不止的预期实际只增加了约 3.8 倍。也就是说序列越长prefill 的吞吐效率反而越高因为张量阵列的利用率在长序列下更接近饱和。这一点的实战价值非常大。如果你的业务场景里用户输入平均只有 10 到 30 个 token比如语音助手指令prefill 根本构不成瓶颈你感受到的完全是 decode 速度。但如果你做的是端侧文档摘要、长对话记忆、AI 写作辅助这类需要喂一大段上下文的场景prefill 才是决定用户体验的关键开关。这代芯片的长序列 prefill 优化可能比官方强调的那个 80% 更值得关注。5. 开发者怎么接住这波架构红利选型与优化思路5.1 什么样的场景真正需要 prefill 速度先说结论如果你的 app 是简单的问答式交互用户每次输入只有一句话那 prefill 快 80% 还是快 40%感知很不明显。真正能从这代芯片获益的场景有几个明显的共同特征输入天然偏长会议纪要整理、长文翻译、聊天记录总结prompt 动不动就几百上千 token交互链路多轮次智能客服、角色扮演、陪聊类应用每一轮都要把整个历史对话重新 prefill 一遍首字延迟敏感UI 上只要超过 300 到 500 毫秒用户就会觉得这 AI 反应好慢。如果你的产品符合上面任意一条那这代芯片的 prefill 优化是实打实能感知到的改进。不符合的话也不必迷信 80% 这个数字你更应该关注 decode 吞吐和内存带宽表现。5.2 白皮书防骗清单看懂 TOPS 以外的指标最后给一份我多年筛选芯片总结的检查清单当厂商再拿 TOPS 和 prefill 提升来宣传时你该问这几个问题这个提升是在什么模型规模下测的7B 模型的 prefill 提升对 1B 模型基本没有参考价值反过来更危险。用的什么量化精度INT4 和 INT8 的算力差一倍不标精度就是耍流氓。测试时有没有散热条件限制拿开发板裸奔测出来的数字和手机里实际跑出来的完全不同。SDK 和框架版本是什么老编译器可能根本吃不到新硬件的架构红利。内存带宽和缓存容量是多少这两个数字才是小模型场景的隐形天花板。把这几个问题丢回给方案商大多数销售都会立刻支支吾吾。你可以以此判断一家公司对自己的产品是否真的理解也可以避免你在选型时被 PPT 上的峰值数字带偏。我个人在实际项目里的心得是架构代际的进步永远比制程和频率的进步更值得跟踪。第六代骁龙8 这波在 prefill 上的突破本质上是把过去用在数据中心 GPU 上的计算策略——大张量阵列、片上缓存复用、稀疏计算——真正搬到了手机里。虽然它改变不了端侧 AI 内存带宽的整体宿命但它至少让快的那部分更快了也让慢的那部分没有被继续拉大。如果你正准备做端侧 LLM 应用我的建议很简单别再盯着那行 TOPS 对比表了。拿你的真实模型、真实数据、真实场景在这台机器上跑一遍 prefill 延迟跑一遍热机后的稳定吞吐最后的结论会比你想象中诚实得多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →