异构NPU基础:NPU架构差异、算力特征、内存层次与典型应用场景

在异构计算系统中,NPU(神经网络处理单元)并非单一形态的处理器。不同厂商、不同代际的NPU在架构设计哲学、算力表达方式、内存组织结构和部署目标上存在显著差异。理解这些差异是进行功耗延迟调度优化的前提——因为调度器本质上是在“异构资源池”中做决策,而每个资源池的“成本函数”和“执行模型”各不相同。本章将系统梳理NPU的架构分类、算力特征、内存层次结构,并结合边缘与云端两类典型场景,为后续章节的调度策略讨论奠定硬件认知基础。

边缘NPU 云端NPU 调度关注点 架构:SIMD + 小规模MAC阵列 例:Cortex-M55 + Ethos-U55 算力:0.5~4 TOPS INT8,频率500MHz~1GHz 内存:SRAM + 紧耦合 512KB~4MB,无DDR 功耗:50mW~2W 电池供电,散热受限 场景:智能摄像头、TWS 唤醒词、手势识别 架构:脉动阵列 + 多核 例:TPU v4、A100 Tensor Core 算力:100~1000+ TOPS INT8/FP16/BF16,多卡互联 内存:HBM + 大容量DDR 32GB~128GB,高带宽 功耗:200W~500W 液冷/风冷,持续满载 场景:大模型推理、训练 推荐系统、CV大模型 延迟敏感度 边缘:ms级;云端:可容忍 功耗预算 边缘:mW级;云端:W级 内存带宽瓶颈 边缘:SRAM容量;云端:HBM带宽 调度策略差异 边缘:节能优先;云端:吞吐优先 任务迁移代价 边缘→云端:通信开销大

上图从架构、算力、内存、功耗和场景五个维度对比了边缘NPU与云端NPU的核心差异,并映射到调度器需要关注的关键指标。可以看到,边缘NPU与云端NPU在硬件资源约束上几乎是两个极端,这直接决定了调度算法在设计时的目标函数和约束条件完全不同。

2.1 NPU架构的核心差异:从SIMD到脉动阵列

核心原理:NPU的微架构设计决定了其计算效率和灵活性之间的权衡。边缘NPU通常采用SIMD(单指令多数据)架构配合小规模MAC(乘累加)阵列,这种设计面积小、功耗低,但控制逻辑简单,适合执行固定形状的卷积操作。云端NPU则普遍采用脉动阵列(Systolic Array)或类Tensor Core设计,通过数据在阵列中的“流动”复用权重和激活值,大幅提升计算密度。例如,Google TPU的脉动阵列尺寸达到256×256,单周期可完成65,536次MAC操作。

判断方法:在实际调度中,可以通过以下特征快速识别NPU架构类型:

  • 指令集特征:边缘NPU通常支持VLIW(超长指令字)或专用ISA,指令粒度较粗;云端NPU则依赖主机CPU下发kernel,NPU内部执行微码。
  • 数据流模式:脉动阵列要求数据按固定节奏“泵入”阵列,对数据排布有严格约束;SIMD架构则允许更灵活的数据访问模式。
  • 算子支持范围:边缘NPU往往只支持Conv、Pool、Activation等有限算子集;云端NPU支持更丰富的算子,包括Transformer中的MatMul、Softmax、LayerNorm等。
调度启示:当目标NPU是脉动阵列时,调度器必须考虑数据排布(NHWC vs NCHW)对阵列利用率的影响。例如,在TPU上使用NHWC格式可能导致阵列利用率下降30%以上,因为脉动阵列的权重驻留机制更适配CHW连续排布。

2.2 算力特征:TOPS、MAC利用率与有效算力

核心原理:标称TOPS(Tera Operations Per Second)是NPU的峰值算力,但实际调度中更关注有效算力——即考虑数据搬运、算子融合、内存带宽限制后的实际吞吐。边缘NPU的峰值算力虽然只有1-4 TOPS,但由于SRAM紧耦合设计,数据搬运开销小,有效算力可达峰值的60-80%。云端NPU峰值算力极高(如A100的INT8算力达624 TOPS),但若算子形状不规则或需要频繁访问HBM,有效算力可能骤降至峰值的20-30%。

判断方法:计算有效算力时,需考虑以下公式:

有效算力 = 峰值TOPS × MAC利用率 × 内存带宽满足系数
其中:
  MAC利用率 = 实际MAC周期 / 总周期
  内存带宽满足系数 = min(1, 所需带宽 / 可用带宽)

案例拆解:假设某边缘NPU峰值算力为2 TOPS,MAC利用率为70%,但模型权重为8MB,而SRAM仅2MB,需要分4次加载。若每次加载耗时50μs,计算耗时200μs,则内存带宽满足系数为0.8。最终有效算力 = 2 × 0.7 × 0.8 = 1.12 TOPS,仅为峰值的56%。调度器若按峰值算力预估任务耗时,将产生约44%的误差。

NPU类型 峰值算力 典型MAC利用率 内存瓶颈 有效算力占比
边缘NPU(Ethos-U55) 0.5 TOPS 60-75% SRAM容量 50-65%
边缘NPU(RK3588 NPU) 6 TOPS 50-70% DDR带宽 35-50%
云端NPU(TPU v4) 275 TOPS 70-85% HBM带宽 55-70%
云端NPU(A100 Tensor Core) 624 TOPS 40-60% HBM容量/带宽 25-45%

2.3 内存层次结构:从紧耦合SRAM到HBM

核心原理:NPU的内存层次直接影响数据搬运策略和功耗。边缘NPU采用紧耦合SRAM设计,计算单元直接访问SRAM,无缓存一致性开销,但容量有限(通常512KB-4MB)。云端NPU则采用多级内存层次:寄存器文件→共享内存(SMEM)→L2 Cache→HBM,各级容量和带宽差异巨大。例如,A100的SMEM带宽为19TB/s,而HBM带宽仅2TB/s,相差近10倍。

操作流程:调度器在内存规划时,应遵循以下优先级:

  1. 数据复用优先:尽可能将权重和激活值驻留在SRAM/SMEM中,减少HBM访问次数。
  2. 算子融合:将Conv+BN+ReLU等算子融合为单一kernel,避免中间结果写回DDR。
  3. 双缓冲:在边缘NPU上使用ping-pong缓冲,隐藏数据加载延迟。
  4. 内存压缩:对稀疏模型使用2:4结构化剪枝,减少内存占用。
常见误区:很多调度器设计者将CPU的内存层次概念直接套用到NPU上,认为L2 Cache越大越好。实际上,NPU的SMEM是软件管理的,需要显式控制数据搬移,而非硬件自动缓存。若调度器未显式管理SMEM,可能导致数据反复从HBM加载,有效算力大幅下降。

2.4 典型应用场景:边缘与云端的调度约束差异

核心原理:边缘场景(如智能摄像头、TWS耳机、工业IoT)对延迟、功耗、成本极度敏感,通常要求端到端延迟<100ms,平均功耗<500mW。云端场景(如大模型推理、推荐系统)则更关注吞吐量、利用率、可扩展性,允许秒级延迟,但要求单卡吞吐达到数千QPS。

案例拆解:以智能门锁的人脸识别为例,边缘NPU(如恒玄BES2700)需在50ms内完成人脸检测+特征提取,功耗预算为80mW。调度器需将模型切分为两个子任务:检测任务(轻量级,2 TOPS算力)和特征提取任务(中等量级,4 TOPS算力),并利用DVFS(动态电压频率调节)在检测阶段运行在低频(500MHz),特征提取阶段提升至1GHz。若调度器未考虑DVFS切换延迟(约10μs),可能导致任务超时。

相比之下,云端推荐系统使用TPU v4进行大规模Embedding查询和MLP推理。调度器需将请求按batch大小动态组合,以最大化脉动阵列利用率。例如,当batch size从1增加到64时,TPU利用率从15%提升至75%,但延迟从2ms增加到15ms。调度器需在SLA(服务等级协议)允许的延迟范围内,动态调整batch size。

维度 边缘NPU调度 云端NPU调度
目标函数 最小化功耗,满足延迟约束 最大化吞吐,满足SLA
任务粒度 单模型多子任务 多请求batch化
资源调整 DVFS、任务裁剪 batch size、多卡并行
内存策略 SRAM驻留、权重压缩 SMEM显式管理、HBM带宽优化
失败处理 降级到CPU执行 请求排队、超时重试

2.5 常见误区与设计复盘

误区一:将TOPS作为唯一算力指标。实际调度中,MAC利用率和内存带宽满足系数对任务耗时的影响远大于峰值TOPS。建议在调度器中维护一张“有效算力查找表”,根据算子类型和输入尺寸动态查询。

误区二:忽视NPU的“冷启动”开销。边缘NPU从休眠状态唤醒需要约1-5ms,云端NPU的kernel启动开销约10-50μs。对于短小任务(<1ms),调度器应优先考虑在CPU上执行,避免NPU启动开销超过任务本身耗时。

误区三:内存层次设计“一刀切”。边缘NPU的SRAM容量小,但访问延迟低(~2ns);云端NPU的HBM容量大,但延迟高(~200ns)。调度器应根据数据复用频率选择存储层级:高频复用数据放SRAM/SMEM,低频数据放DDR/HBM。

复盘经验:在某智能音箱项目中,我们最初将唤醒词检测任务固定调度到NPU执行,但发现NPU的启动功耗(30mW)加上运行功耗(50mW)反而高于CPU直接执行(60mW)。后来改为“CPU先做轻量级VAD(语音活动检测),仅在检测到语音帧时才唤醒NPU”,整体功耗降低了40%。这说明调度器必须考虑任务切换的固定开销,而非仅看峰值算力。