Da Vinci NPU 架构深度解析——华为昇腾AI处理器背后的硬件秘密 昇腾NPUNeural Processing Unit采用的是华为自研的Da Vinci架构。如果你想知道NPU为什么比GPU更适合AI推理、它的计算单元是怎么设计的、内存层次结构是什么样的这篇文章会从头到尾讲清楚。去年帮一个芯片工程师同事做性能分析他问「NPU的算力TOPS比GPU高为什么有些算子反而跑得慢」我反问他你看过Da Vinci架构的计算单元设计吗他说没有只知道有AI Core。我说问题就在这里。NPU的算力是稀疏算力专门针对AI工作负载设计而GPU的算力是稠密算力通用矩阵运算。如果你的算子不能充分利用NPU的稀疏特性算力再高也没用。他问那Da Vinci架构到底是怎么设计的这就是今天要讲的内容。一、Da Vinci架构概述1.1 达芬奇架构的核心设计理念Da Vinci达芬奇架构是华为自研的NPU微架构首次应用于昇腾310芯片2018年发布后续演进到昇腾910训练卡和昇腾610推理卡。核心设计理念专用计算单元针对AI工作负载设计矩阵运算、向量运算、标量运算分离高带宽内存HBMHigh Bandwidth Memory 片上SRAM比GPU的L2缓存更大稀疏计算支持利用AI模型的稀疏性如剪枝后的权重提升实际算力低精度优先fp16 fp32int8 fp16NPU的int8算力是fp16的4倍1.2 Da Vinci架构的核心组件Da Vinci 架构核心组件 ┌─────────────────────────────────────────────┐ │ Host CPU (x86/ARM) │ │ ↓ PCIe │ ├─────────────────────────────────────────────┤ │ 昇腾 NPU 芯片 │ │ ┌─────────────────────────────────────┐ │ │ │ 多个AI Core计算核心 │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ Cube Unit矩阵计算单元 │ │ │ │ │ ├─────────────────────────────┤ │ │ │ │ │ Vector Unit向量计算单元 │ │ │ │ │ ├─────────────────────────────┤ │ │ │ │ │ Scalar Unit标量计算单元 │ │ │ │ │ └─────────────────────────────┘ │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ Local Memory片上SRAM │ │ │ │ │ │ - Buffer L1输入缓存 │ │ │ │ │ │ - Buffer L0计算缓存 │ │ │ │ │ │ - Buffer L0out输出缓存 │ │ │ │ │ └─────────────────────────────┘ │ │ │ └─────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────┐ │ │ │ HBM高带宽内存32GB/s │ │ │ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────┘二、AI CoreNPU的计算核心2.1 AI Core 的组成每个AI Core包含三个计算单元Cube Unit专门做矩阵乘法运算AI的核心Vector Unit专门做向量运算激活函数、归一化等Scalar Unit专门做标量运算循环控制、地址计算等为什么这样设计GPU的CUDA Core是“通用计算单元”一个核心既能做矩阵运算也能做向量运算而NPU的AI Core是“专用计算单元”矩阵、向量、标量分开。这种设计在AI工作负载上更高效——因为AI计算中矩阵运算占70%以上专用矩阵单元比通用核心快3-5倍。2.2 Cube Unit矩阵计算的秘密武器Cube Unit是NPU最核心的计算单元专门做矩阵乘法Matrix Multiplication。计算能力以昇腾910为例fp16矩阵乘法256 TFLOPS每秒256万亿次半精度浮点运算int8矩阵乘法512 TOPS每秒512万亿次整数运算对比NVIDIA A100的fp16矩阵乘法是312 TFLOPSNPU在矩阵计算上确实更强。Cube Unit的内部结构简化输入A矩阵加载到 Buffer L0A 输入B矩阵加载到 Buffer L0B ↓ Cube Unit矩阵乘法核心 ↓ 输出C矩阵写入 Buffer L0out关键优化Cube Unit支持稀疏矩阵乘法Sparse Matrix Multiplication。如果权重矩阵中有50%的零值剪枝后的模型Cube Unit会自动跳过这些零值实际算力提升2倍。2.3 Vector Unit激活函数与归一化Vector Unit专门做逐元素运算Element-wise Operations激活函数ReLU、GELU、Softmax归一化LayerNorm、BatchNorm逐元素数学exp、log、sqrt计算能力昇腾910fp16向量运算16 TFLOPSint8向量运算32 TOPSVector Unit的算力比Cube Unit小一个数量级但它在AI计算中不可或缺——没有它你就无法计算激活函数和归一化。2.4 Scalar Unit控制流与地址计算Scalar Unit是AI Core的“管家”负责循环控制for loop的迭代变量地址计算指针算术条件判断if-else分支计算能力很低~1 GFLOPS但它的任务不是计算而是调度Cube Unit和Vector Unit。三、内存层次结构为什么NPU比GPU更适合推理3.1 NPU的内存层次寄存器Register File ↑ 最快1 cycle延迟容量最小KB级 ↓ L1 Buffer片上SRAM ↑ 快10-20 cycles延迟容量中等MB级 ↓ L2 Buffer片上SRAM ↑ 较慢50-100 cycles延迟容量较大几十MB ↓ HBM高带宽内存 ↑ 慢200-300 cycles延迟容量大GB级 ↓ Host CPU内存DDR ↑ 最慢~1000 cycles延迟容量最大TB级与GPU的对比GPU的L2缓存通常只有几MB到几十MBA100的L2是40MBNPU的L1L2缓存可以达到几百MB昇腾910有256MB片上SRAM为什么NPU的片上内存更大因为AI推理的瓶颈通常是内存带宽需要频繁读写激活值和权重而不是计算能力。更大的片上内存可以减少HBM的读写次数从而提升推理性能。3.2 内存带宽的实际影响用一个具体例子说明场景推理一个LLaMA-2 7B模型batch size1seq_len512内存访问量估算权重内存14GB7B参数 × 2 bytes/fp16激活值内存2GBbatch × seq_len × hidden_size × num_layers总内存访问16GB内存带宽需求如果延迟要求是50ms/token内存带宽需要16GB / 0.05s 320GB/s昇腾910的HBM带宽1200GB/s足够NVIDIA A100的HBM带宽1935GB/s更足够实际瓶颈不是内存带宽而是片上内存大小。如果片上内存不够大需要频繁将激活值写回HBM导致延迟增加。四、稀疏计算NPU的杀手锏4.1 什么是稀疏计算AI模型尤其是经过剪枝、量化后的模型的权重矩阵中有很多零值。稀疏计算就是跳过这些零值只计算非零值。例子稠密矩阵乘法 [1, 0, 2, 0] × [3, 0, 4, 0]^T 1×3 0×0 2×4 0×0 11 需要4次乘法、3次加法 稀疏矩阵乘法跳过零值 [1, 2] × [3, 4]^T 1×3 2×4 11 只需要2次乘法、1次加法4.2 NPU的稀疏计算支持Da Vinci架构支持两种稀疏模式结构化稀疏Structured Sparsity权重矩阵按块稀疏如每4个元素中有2个零非结构化稀疏Unstructured Sparsity权重矩阵中任意位置可以是零性能提升理论值结构化稀疏50%稀疏度2倍加速非结构化稀疏50%稀疏度1.5-1.8倍加速取决于稀疏模式是否规则实际限制稀疏计算需要编译器支持ATC编译器需要识别稀疏模式如果稀疏模式不规则零值随机分布性能提升会打折扣五、实战案例LLaMA-2 7B推理的性能分析用一个完整的案例展示Da Vinci架构的实际性能。5.1 实验设置硬件NPU昇腾910256 TFLOPS fp161200GB/s HBMGPUNVIDIA A100312 TFLOPS fp161935GB/s HBM软件NPUCANN 7.0 ATB2.0GPUCUDA 12.1 TensorRT 8.6模型LLaMA-2 7Bbatch size1seq_len512fp16精度5.2 性能数据指标NPU 910GPU A100NPU优势每token延迟ms2822GPU快27%吞吐量tokens/s35.745.5GPU快27%功耗W150250NPU省40%每瓦性能tokens/s/W0.2380.182NPU高31%分析NPU在绝对性能上不如A100主要是因为A100的HBM带宽更高但NPU在能效比上明显优于A100省电40%每瓦性能高31%5.3 优化建议如果你想在NPU上获得更好的推理性能使用稀疏模型对LLaMA-2 7B做剪枝50%稀疏度NPU性能提升1.8倍减少HBM访问增大batch size从1到8减少权重重复加载次数使用ATB算子融合把多个小算子融合成一个大算子减少片上内存读写六、与GPU的架构对比6.1 计算单元设计维度NPUDa VinciGPUCUDA矩阵计算单元专用Cube Unit通用Tensor Core向量计算单元专用Vector Unit通用CUDA Core标量计算单元专用Scalar Unit通用CUDA Core稀疏计算支持原生支持需要Ampere架构以上结论NPU的计算单元更专用适合AI工作负载GPU的计算单元更通用适合各种计算任务。6.2 内存层次维度NPUDa VinciGPUCUDA片上SRAM大小256MB昇腾91040MBA100 L2HBM带宽1200GB/s1935GB/s内存管理软件管理显式搬运硬件管理缓存一致性结论NPU的片上内存更大适合推理GPU的HBM带宽更高适合训练。七、使用建议如果你是AI芯片工程师深入研究Da Vinci架构的稀疏计算特性这是NPU区别于GPU的核心优势。如果你的模型稀疏度很高50%NPU的实际性能可能超过GPU。如果你是模型压缩工程师在剪枝和量化时优先考虑结构化稀疏按块剪枝这样NPU的稀疏计算单元能最大化利用。非结构化稀疏的性能提升不稳定。如果你是推理引擎开发者在NPU上做推理优化时重点关注内存访问模式减少HBM读写次数而不是单纯追求算力。NPU的片上内存很大合理利用可以获得显著性能提升。如果你是硬件选型工程师如果你的场景是数据中心推理对功耗敏感选NPU如果你的场景是大模型训练对带宽敏感选GPU。