750 字
4 分钟
NPU-CPU 异构 LLM 推理
在本文引用的移动端实验中,CPU 的预填充(GEMM)更快,NPU 的解码算子(GEMV)更快。但调度和回退开销会抵消部分收益,全量卸载还可能增加能耗。
定义
NPU-CPU 异构 LLM 推理(NPU-CPU Heterogeneous LLM Inference)是指在移动端片上系统(SoC)上,将大语言模型推理任务分配至 CPU 和 NPU 两个不同硬件后端执行的部署模式。后端调度器根据硬件对算子的兼容能力拆分计算图:NPU 兼容的算子下发至 NPU,不兼容的回退至 CPU。
为什么重要
- 大语言模型逐步落地移动端,CPU-NPU 异构执行已成为主流部署方案
- 全量卸载到 NPU 未必更快,调度开销还可能增加能耗
- 部署时应分别测量两个阶段的表现,再选择硬件后端
LLM 推理两阶段与硬件适配
预填充阶段(Prefill)
- 运算类型:批量矩阵乘法(GEMM),计算密集型
- CPU 优势:成熟优化库 + 大容量缓存利于权重复用
- NPU 劣势:VTCM 容量有限(8MB),大矩阵分块效率低;HVX 指令集优化不足
- 结论:CPU 比 NPU 快 1.27~1.62 倍
解码阶段(Decode)
- 运算类型:矩阵向量乘法(GEMV),内存受限型
- NPU 优势:软件托管 VTCM + 专用 DMA 引擎 + 双缓冲,降低缓存缺失,提升 DRAM 有效带宽利用率
- CPU 劣势:12MB L3 缓存远不够放权重,纯流式访问模式对缓存体系不友好
- 结论:NPU 算子快 1.55
1.67 倍,但端到端仅 1.051.2 倍
异构执行的三类开销
1. 调度损耗
轻量算子(RMS_NORM、ADD 等)的纯计算耗时仅微秒级,但每次调用需承担完整 CPU-NPU 往返通信成本:
- call-usec / op-usec 比达 8~22 倍
- 每 token 调用数百次,累积形成严重性能瓶颈
2. 算子回退损耗
不兼容算子(如 FLASH_ATTN_EXT)回退至 CPU 执行:
- 触发跨硬件缓存一致性同步、张量重排、内存拷贝
- 延迟比纯 CPU 原生运行高 ~1.5 倍
3. 通信拥塞
解码阶段高频细粒度运算调度导致硬件接口拥塞:
- 预填充:通信占 0.2%~3.2%
- 解码:通信占 9.9%~13.0%
基于上述实验的设计建议
- 分阶段差异化执行:Prefill → CPU,Decode → NPU
- 降低调度延迟:批量下发、常驻指令队列、算子融合,目标 <10μs
- 完善算子覆盖:消除回退,NPU 原生支持所有 LLM 推理算子
与相关概念的对比
| 概念 | 关注点 | 与本文区别 |
|---|---|---|
| 模型量化(Quantization) | 降低精度减少计算/内存开销 | 本文关注硬件调度,量化是前提条件 |
| 算子融合(Operator Fusion) | 合并算子减少调度次数 | 本文量化了融合的收益上限(8~22×调度损耗) |
| 内存带宽优化 | 提升 DRAM 利用率 | NPU 的 DMA+双缓冲是内存带宽优化的一种实现 |
NPU-CPU 异构 LLM 推理
https://blog.lpkt.cn/posts/concepts/npu-cpu-heterogeneous-llm-inference/