4. NPU架构与编程模型
在自动驾驶异构计算平台中,NPU承担着感知模型推理的主要算力负载。与GPU的通用并行架构不同,NPU的设计哲学是“为矩阵乘加而生的专用数据通路”。理解NPU的架构特征与编程模型,是进行模型部署、算子映射和性能调优的前提。本章从计算阵列、数据流、数值表示和工具链四个维度展开。
一、脉动阵列:让数据“流动”起来的计算结构
脉动阵列(Systolic Array)是多数车规NPU的核心计算单元。其基本思想是:让权重和激活值以节拍方式在二维处理单元(PE)阵列中流动,每个PE只完成一次乘加并将结果传递给相邻PE,从而大幅减少对全局存储的访问。以典型的16×16阵列为例,权重从左侧逐列载入并驻留,激活值从上方逐行流入,每个PE在每个时钟周期完成一次乘累加,部分和沿对角线方向向下传递。
这种结构的优势在于:数据复用率高、控制逻辑简单、功耗效率优异。代价是灵活性受限——它天然适合规则的大矩阵运算,对非规则算子(如动态shape、稀疏索引)需要额外处理。因此,NPU编程模型通常要求将卷积、全连接等算子转换为矩阵乘形式,再映射到脉动阵列上执行。
关键参数:阵列规模(如16×16、32×32)、PE位宽(INT8/INT16/FP16)、片上缓存带宽、权重驻留方式(Weight Stationary / Output Stationary)。这些参数直接决定NPU的峰值算力和实际利用率。
二、数据流架构:从指令驱动到数据驱动
传统CPU/GPU采用指令驱动执行模型,而NPU常采用数据流(Dataflow)架构。在数据流模型中,计算节点的执行由输入数据的可用性触发,而非由程序计数器顺序驱动。典型的数据流调度包括:权重固定(Weight Stationary)、输出固定(Output Stationary)和行固定(Row Stationary)。不同调度策略影响片上缓存的访问次数和能耗。
以卷积层为例,若采用权重固定策略,卷积核权重被加载到PE阵列后保持不动,激活值不断流入,适合小批量推理;若采用输出固定策略,部分和驻留在PE中,适合大通道数场景。车规NPU通常支持多种数据流模式,由编译器根据算子形状自动选择。
三、量化与稀疏加速:用数值换效率
车规NPU普遍支持INT8量化,部分高端芯片支持INT4甚至INT2。量化的本质是将浮点权重和激活值映射到低位宽整数域,从而减少存储占用、提升吞吐、降低功耗。典型流程包括:校准(Calibration)→ 确定缩放因子(Scale)和零点(Zero Point)→ 量化感知训练(QAT)或训练后量化(PTQ)→ 部署验证。
稀疏加速则利用模型中的结构化稀疏(如2:4稀疏)或非结构化稀疏,跳过零值计算。NVIDIA Ampere及后续架构、地平线征程系列、黑芝麻华山系列等均在不同程度上支持稀疏加速。需要注意的是,稀疏加速的实际收益取决于稀疏模式与硬件数据通路的匹配程度,非结构化稀疏往往需要专用索引解码单元。
# 典型INT8量化配置示例(伪代码)
quant_config = {
"weight_bits": 8,
"activation_bits": 8,
"calibration": "entropy", # 校准方法:entropy / minmax / percentile
"per_channel": True, # 逐通道量化
"symmetric": True, # 对称量化
"sparsity": "2:4", # 结构化稀疏模式
"first_layer_fp16": True # 首层保持FP16以保精度
}
四、典型车规NPU芯片与工具链
车规NPU需满足AEC-Q100可靠性、ISO 26262功能安全(ASIL-B/D)以及ISO 21434信息安全要求。主流方案包括:
| 芯片/平台 | NPU架构特点 | 典型算力 | 工具链 |
|---|---|---|---|
| NVIDIA Orin | Ampere GPU + DLA,支持INT8/FP16 | 254 TOPS | TensorRT、CUDA、DLA编译器 |
| 地平线征程5 | BPU贝叶斯架构,脉动阵列+数据流 | 128 TOPS | 天工开物、Horizon OpenExplorer |
| 黑芝麻华山A1000 | 自研NPU,支持INT8/INT4稀疏 | 58 TOPS | 山海工具链 |
| Mobileye EyeQ6 | 专用加速器阵列,低功耗设计 | 约34 TOPS | EyeQ SDK、专用编译器 |
工具链核心环节:模型导入(ONNX/Caffe)→ 图优化(算子融合、常量折叠)→ 量化校准 → 算子映射与调度 → 代码生成 → 板端部署与性能分析。其中“算子映射”是NPU部署中最容易出问题的环节,需重点关注算子支持列表和回退策略。
五、常见误区与复盘
- 误区一:算力越高越好。实际推理性能受限于内存带宽、算子支持度和调度效率。峰值算力利用率往往只有30%~60%。
- 误区二:量化一定掉精度。合理的校准和QAT可以将INT8精度损失控制在1%以内,但首层和检测头通常需要保留FP16。
- 误区三:稀疏加速免费。非结构化稀疏需要专用硬件支持,否则编译器会直接回退到稠密计算,收益为零。
- 复盘要点:部署前务必确认工具链版本、算子支持列表、量化校准集与实车数据分布的一致性。