跳转至

NPU

神经网络处理单元 (Neural Processing Unit, NPU) 泛指面向神经网络工作负载设计的专用处理器。NPU 既包括数据中心训练与推理加速器,也包括手机、PC 和边缘设备中的低功耗单元;不同产品的能力与软件接口差异很大。

快速开始

评估 NPU 前先回答四个问题:

  1. 目标框架能否识别设备;
  2. 模型中的全部算子、动态形状和数据类型是否受支持;
  3. 编译或转换后输出是否与基线一致;
  4. 目标 Batch 和功耗下是否真正优于 CPU / GPU。

不要从厂商峰值 TOPS 直接推导大模型速度。先用一个小模型完成“导出 -> 编译 -> 加载 -> 推理 -> 质量对比”的闭环。

设计目标

NPU 通常通过以下方式提高能效:

  • 使用矩阵或张量计算阵列;
  • 支持 INT8、INT4、FP16、BF16 等低精度;
  • 配置片上 SRAM,减少外部内存访问;
  • 融合常见神经网络算子;
  • 对数据流和内存布局做专用优化;
  • 通过编译器静态安排计算与传输。

专用化提高了目标工作负载的性能功耗比,也缩小了可灵活执行的算子范围。

数据中心与端侧 NPU

类型 主要目标 典型约束
数据中心 NPU 大模型训练、高吞吐推理 集群互联、HBM、分布式框架
PC NPU 本地助手、音视频与轻量模型 共享内存、系统 API、功耗
移动 NPU 相机、语音与端侧生成 电池、散热、模型大小
嵌入式 NPU 实时感知与控制 固定算子、确定性、资源极少

同为 NPU,数据中心卡可能支持多机训练,而移动芯片可能只允许通过系统推理 API 运行转换后的模型。

软件栈

典型 NPU 软件栈包括模型前端、图编译器、算子库、设备 Runtime 和 Driver。模型通常先从 PyTorch、TensorFlow 或 ONNX 导出,再经过图优化、量化、布局转换和设备编译。

转换时常见问题包括:

  • 算子不受支持,回退到 CPU;
  • 动态维度需要固定或限制范围;
  • Layout 不同导致额外 Transpose;
  • 量化校准不足造成精度下降;
  • 自定义算子缺少编译与调试工具。

成功加载模型不等于全部算子都在 NPU 上执行。必须检查编译报告和运行时 Profiling。

大模型推理

大语言模型对 NPU 提出几类特殊要求:

  • 权重和 KV Cache 容量大;
  • Prefill 与 Decode 的形状和瓶颈不同;
  • 动态序列长度与连续批处理复杂;
  • RoPE、GQA、量化和采样需要完整算子支持;
  • 多卡推理需要高效集合通信。

端侧 NPU 通常运行小型或高度量化模型。若权重放在共享系统内存中,实际速度还受内存带宽和操作系统调度影响。

转换案例

以文本分类模型为例,先在原框架保存固定输入输出样本,再导出 ONNX 或厂商中间表示。使用有代表性的校准集执行 INT8 量化,编译后逐层或逐输出比较误差。

验收至少包括:

  • 正常、空输入和最大长度输入;
  • 任务准确率而非仅张量余弦相似度;
  • 首次加载、单请求和稳态吞吐;
  • CPU 回退比例;
  • 功耗、温度与长时间降频。

选型指标

指标 需要验证的内容
算力 对应何种精度、是否要求稀疏
内存 容量、带宽、是否与 CPU 共享
算子覆盖 目标模型是否全部支持
动态形状 序列长度和 Batch 能否变化
量化 支持的粒度、校准和 Kernel
工具链 编译、Profiling、调试和错误信息
生态 框架、模型仓库和部署运行时
能效 目标负载下的吞吐每瓦

安全与可移植性

模型转换器和厂商插件属于软件供应链,应固定版本并核验来源。专有编译产物可能只能运行在特定芯片和 Runtime 上,发布前要记录原始模型、转换参数、校准数据与工具链版本。

涉及端侧隐私时,还要确认输入是否离开设备、系统服务是否记录数据、模型文件能否被其他应用读取。

常见问题

  • TOPS 通常是特定整数精度的理论值,不能直接换算 Token/s;
  • 宣称支持某框架不代表支持该框架中的所有算子;
  • CPU 回退可能让功能正常但性能和功耗恶化;
  • 量化模型文件更小不保证 NPU 有对应高速 Kernel;
  • NPU 不是统一架构,跨厂商迁移通常需要重新转换和评测。

硬件对照见 CPU、GPU 与 TPU,模型文件与转换格式见 模型文件格式。