NPU 架构与 GPU+NPU 协同推理
更新于 2026-04-15
简介
在 Intel Core Ultra 处理器中,除了 Xe2 集成显卡 (iGPU),还集成了专用的 AI 推理加速器 NPU (Neural Processing Unit,神经处理单元),商业名称为 AI Boost。NPU 与 iGPU 的设计目标不同:NPU 针对低功耗、固定拓扑的神经网络推理场景优化,而 iGPU 则提供更高的计算灵活性和更广泛的模型支持。
OpenVINO 提供了 AUTO、MULTI、HETERO 等设备插件 (Device Plugin),允许开发者在单个推理会话中同时利用 NPU 和 GPU 的优势。AUTO 模式会自动选择最优设备,MULTI 模式在多设备间并行分发推理请求,HETERO 模式则将计算图按算子支持情况切分到不同设备。这些机制让开发者能够在功耗、延迟、吞吐量之间灵活权衡。
本文将详细介绍 Intel NPU 的硬件架构,对比 NPU 与 iGPU 的适用场景,深入解析 OpenVINO 的多设备推理策略,并通过交互式可视化展示 GPU+NPU 协同推理的性能与功耗权衡。
Intel NPU 架构概览
Intel NPU 基于 NCE (Neural Compute Engine,神经计算引擎) 架构,由多个专用的推理计算单元构成。与通用的 GPU Execution Unit 不同,NCE 针对卷积、矩阵乘法、激活函数等神经网络常见算子进行了硬件级优化,省去了通用指令解码和调度的开销。
NCE 集群的架构层次
NCE 是 NPU 的核心计算集群,内部包含两类执行单元——DPU 和 SHAVE,以及负责数据搬运的 DMA 引擎。这一架构从 37xx(Meteor Lake)延续到 40xx(Lunar Lake)和 50xx(Panther Lake),SHAVE 并未被取代,而是与 DPU 协同工作:
NPU Tile (NCE Cluster)
├── DPU — 固定功能硬件(卷积、矩阵乘法)
│ ├── IDU (Input Data Unit) — 输入数据读取
│ ├── MPE (Matrix Processing Element) — 矩阵计算核心
│ ├── PPE (Post-Processing Engine) — 后处理(缩放、加偏置)
│ └── ODU (Output Data Unit) — 输出数据写入
├── SHAVE_NN — 可编程向量处理器(神经网络算子:softmax、RoPE、attention kernel)
├── SHAVE_ACT — 可编程向量处理器(激活函数:ReLU、GELU、SiLU)
└── DMA — 数据搬运引擎(DDR ↔ CMX)
DPU 是专才——执行固定操作(卷积、矩阵乘法),速度极快但不可编程。SHAVE 是通才——可编程的向量处理器,处理 DPU 无法完成的灵活计算(如 softmax、LayerNorm、RoPE 位置编码)。编译器逐层判断每个算子的执行目标:优先 DPU → DMA → SHAVE。
验证来源:
npu_compiler源码中Config_ExecutorKind枚举定义了 DMA_NN、NCE、DPU、SHAVE_NN、SHAVE_ACT 五种执行器类型;NPU40XX/shave_kernel_info.cpp和NPUReg40XX/ops/act_shave_rt.cpp在 40xx 代码路径中明确存在,证实 SHAVE 在 40xx 架构中仍然活跃。
DPU 内部四单元
DPU 内部是一条精简的流水线,四个单元各司其职:
- IDU (Input Data Unit):从 CMX 读取输入 tensor,按 DPU 要求的格式(如 NHWC blocked layout)对齐数据
- MPE (Matrix Processing Element):执行实际的 MAC(Multiply-Accumulate)计算,支持 INT8/FP16 精度
- PPE (Post-Processing Engine):矩阵乘法后紧接做缩放(乘常数)和加偏置,不需要额外的独立任务
- ODU (Output Data Unit):将计算结果写回 CMX,支持输出格式转换
验证来源:40xx DPU 四单元结构见
npu_compiler中vpu_nce_hw_40xx.h和expand_dpu_config/目录。
CMX/DDR 两层内存架构
NPU 有两层内存层次,理解它们的差异对后续文章至关重要:
- DDR(系统内存):容量大(GB 级),访问速度慢。模型权重、KV cache、输入/输出 tensor 的存放位置
- CMX (Connection MatriX):NPU 片上高速 SRAM,每个 NPU tile 拥有独立的 CMX,容量小(KB~MB 级)但访问极快。DPU 和 SHAVE 计算时数据必须在 CMX 中
- DMA 引擎负责 DDR ↔ CMX 之间的数据搬运,搬运计划在编译时确定——这是 NPU 静态执行模型的关键特征之一
这种两层结构意味着 NPU 不能像 GPU 那样直接访问大容量存储,每次计算前都需要 DMA 先把数据从 DDR 搬进 CMX。编译器在编译时就规划好了所有搬运的时序和顺序。
40xx 管理核
不同代际的 NPU 使用不同的管理核(management core),负责接收 host 命令、读取任务列表、调度 DMA/DPU/SHAVE 执行:
- 37xx(Meteor Lake):使用 Leon/SPARC 管理核
- 40xx(Lunar Lake):升级为 RISC-V 管理核
来源:
vpu_jsm_job_cmd_api.h中提到 “RISC-V facilitates cache-bypass, memory access”。
管理核的核心职责是:运行时逐条读取任务描述符,检查 barrier 同步条件(producer/consumer 计数),满足条件后将任务派发给对应的执行单元(DMA、DPU 或 SHAVE)。
NPU 硬件全景图
将以上组件组合在一起,NPU 的完整硬件架构如下:
x86 CPU (host)
│
│ DRM ioctl / Level Zero API
│
NPU 芯片 (40xx Lunar Lake)
├── RISC-V 管理核 — 接收 host 命令,读取任务列表,调度执行
├── DMA 引擎 — DDR ↔ CMX 数据搬运
├── NCE Cluster(s)
│ ├── DPU — 矩阵乘法、卷积(固定功能)
│ └── SHAVE — softmax、RoPE、激活函数(可编程)
└── CMX — 片上高速 SRAM
在 Intel Core Ultra (Lunar Lake) 中,NPU 的峰值算力约为 48 TOPS (INT8),但其核心优势在于能效比:执行同样的推理任务,NPU 的功耗通常仅为 iGPU 的 1/3 到 1/5。这使得 NPU 成为笔记本电脑、移动设备等续航敏感场景的首选。
NPU vs iGPU 适用场景
NPU 和 iGPU 在设计目标上存在根本差异,因此各自适用的推理场景也不同。下面的雷达图对比了两者在五个关键维度上的表现。
NPU 的优势场景:
- 低功耗长时运行:例如实时语音识别 (Whisper)、持续的背景视觉任务 (人脸检测、OCR),要求设备在电池供电下长时间工作。
- 固定拓扑小模型:模型结构稳定、算子支持度高、参数量较小 (例如 MobileNet、EfficientNet、小型 Transformer)。
- 延迟敏感的单次推理:NPU 的片上 SRAM 和流水线设计使得单次推理的启动开销极低,适合需要快速响应的交互场景。
iGPU 的优势场景:
- 大模型、高吞吐:参数量在 7B 以上的 LLM,或需要大 Batch 并行推理的视觉任务,iGPU 的显存容量和并行度更有优势。
- 动态图、自定义算子:模型包含 NPU 不支持的算子 (例如稀疏注意力、自定义 CUDA kernel),或推理过程中图结构动态变化。
- 插电场景、性能优先:在台式机或接电源的笔记本上,功耗限制放宽,此时 iGPU 的绝对性能更高。
在实际部署中,开发者往往需要根据具体的模型、硬件环境和应用场景,在 NPU 和 iGPU 之间做出权衡。OpenVINO 提供的多设备推理机制让这一过程更加灵活。
OpenVINO Device Plugin 体系
OpenVINO 的 Device Plugin 是推理运行时 (Inference Runtime) 与具体硬件之间的抽象层。每个 Plugin 负责将编译后的计算图 (Compiled Model) 映射到目标设备 (GPU、NPU、CPU) 的执行引擎。
除了单设备插件 (如 GPU、NPU、CPU),OpenVINO 还提供了三种多设备协同模式:
- AUTO 模式:自动设备选择。首次推理时,OpenVINO 会查询所有可用设备的能力 (Capability Query),运行轻量级基准测试 (Benchmark),然后选择延迟最低或吞吐最高的设备。
- MULTI 模式:多设备并行推理。将推理请求以 round-robin 方式分发到多个设备 (例如 GPU 和 NPU),每个设备独立执行完整的计算图,结果汇总后返回。适合吞吐量敏感的批处理场景。
- HETERO 模式:异构子图切分。将计算图按算子支持情况拆分为多个子图,分别在不同设备上执行。例如将 NPU 支持的卷积、矩阵乘法放在 NPU,不支持的自定义算子放在 GPU,中间通过跨设备内存拷贝连接。
下面的交互式流程图展示了这三种模式的工作原理。
AUTO Plugin 详解
AUTO 插件的设计目标是”开箱即用”的最优性能。当开发者指定 device="AUTO" 时,OpenVINO 会执行以下步骤:
- 设备枚举:扫描当前系统中所有可用的推理设备 (GPU、NPU、CPU),查询各自的硬件规格和驱动版本。
- 能力查询:向每个设备的 Plugin 发送 Capability Query,获取支持的算子列表、精度支持 (FP32/FP16/INT8)、内存限制等信息。
- 基准测试:如果配置文件中没有缓存的性能数据,AUTO 会在每个设备上运行一次或多次推理,测量延迟 (Latency) 和吞吐量 (Throughput)。
- 设备选择:根据
ov::hint::PerformanceMode配置 (延迟优先或吞吐优先),选择最优设备。例如,LATENCY模式会选延迟最低的设备 (通常是 NPU),THROUGHPUT模式会选吞吐最高的设备 (通常是 GPU)。 - 回退机制:如果首选设备不可用 (例如驱动未安装、显存不足),AUTO 会自动回退到次优设备。
AUTO 模式的优势在于简化了设备选择的复杂度,开发者无需显式指定设备即可获得合理的性能。但它的局限性在于只能选择一个设备,无法同时利用多个设备的算力。
GPU+NPU 混合推理 Pipeline
在某些场景下,单一设备无法满足所有需求:例如模型中包含 NPU 不支持的算子,或者 NPU 的显存不足以容纳整个模型。此时,HETERO 插件可以将计算图切分为多个子图,分别在不同设备上执行。
HETERO 的核心逻辑是 子图划分 (Subgraph Partitioning):
- 算子支持度查询:遍历计算图中的每个算子 (Operation),查询 NPU Plugin 是否支持。例如
Convolution、MatMul、ReLU通常支持,而NonMaxSuppression、TopK等可能不支持。 - 子图切分:将支持的算子连续区域 (Subgraph) 分配给 NPU,不支持的区域分配给 GPU 或 CPU。切分点 (Partition Point) 即为跨设备的边界。
- 跨设备数据传输:在切分点插入内存拷贝算子 (MemCopy),将中间激活值 (Activation Tensor) 从一个设备的内存搬运到另一个设备。这一步会引入额外的延迟和功耗开销。
- 调度执行:各子图在对应设备上并行或串行执行,OpenVINO 的 Scheduler 负责管理依赖关系和同步。
下面的交互式组件展示了一个简化的 Transformer 模型在 NPU 和 GPU 之间的切分。你可以拖动滑块调整切分点,观察 NPU/GPU 负载、通信开销和延迟的变化。
关键洞察:
- 切分点越少越好:每增加一个切分点,就需要在设备间传输中间结果,引入延迟和功耗开销。理想情况下,应将计算图划分为尽量少的连续子图。
- 负载均衡:如果某个设备负载过重 (例如 NPU 分到 80% 的计算),会成为瓶颈;负载均衡时整体延迟最优。
- 模型设计考量:在模型训练阶段,可以通过算子选择 (例如用标准卷积代替 Deformable Convolution) 来提高 NPU 的算子支持度,减少切分点数量。
功耗与性能权衡
在真实部署中,开发者需要在功耗、延迟、吞吐量之间做出权衡。下图展示了不同设备配置 (纯 NPU、纯 GPU、GPU+NPU 混合) 在不同模型规模下的功耗-性能曲线。
关键发现:
- 纯 NPU:功耗最低 (5-12W),但吞吐量受限于 NPU 的并行度和显存容量。适合小模型、续航敏感的场景。
- 纯 GPU:吞吐量最高 (70-80 infer/s),但功耗也最高 (18-50W)。在模型规模增大时,GPU 的性能优势更加明显。
- GPU+NPU 混合:在多数场景下提供最佳的能效比 (吞吐/瓦特)。将功耗敏感的前端算子 (例如 Token Embedding、浅层 Attention) 放在 NPU,计算密集的后端算子 (例如深层 FFN) 放在 GPU,可以在功耗和性能之间取得平衡。
部署建议:
- 续航优先 (笔记本电池供电、移动设备):优先使用纯 NPU 或 AUTO 模式 (Latency 优化)。
- 性能优先 (台式机、插电笔记本):优先使用纯 GPU 或 MULTI 模式 (Throughput 优化)。
- 灵活部署 (云端、边缘混合):使用 HETERO 模式,根据运行时的功耗和性能监控动态调整切分点。
总结
Intel Core Ultra 的 NPU 和 iGPU 为开发者提供了功耗和性能的多重选择。NPU 的低功耗、低延迟特性使其成为移动和嵌入式场景的理想选择,而 iGPU 的高吞吐和灵活性则适合大模型和插电场景。
OpenVINO 的 AUTO、MULTI、HETERO 插件机制进一步增强了灵活性。AUTO 模式让开发者无需显式选择设备即可获得合理性能,MULTI 模式通过并行分发提升吞吐量,HETERO 模式则通过子图切分实现跨设备协同。在实际部署中,开发者应根据模型特点、硬件环境和应用需求,选择合适的设备配置和推理策略。
随着 NPU 硬件能力的不断提升 (例如支持 FP16、动态形状、稀疏化) 和 OpenVINO 软件栈的持续优化,GPU+NPU 协同推理将成为 AI 应用部署的重要趋势。掌握多设备推理的原理和最佳实践,是构建高效、低功耗 AI 系统的关键能力。
延伸阅读
- OpenVINO 官方文档中的 MULTI 设备文档 详细介绍了多设备并行推理的配置方法和性能调优策略。
- Intel 的 NPU 设备文档 列出了 NPU 支持的算子列表、精度配置和编译选项。
- HETERO 异构执行文档 提供了子图切分的示例代码和调试方法。
- 研究 Intel 的 AI PC 白皮书和 Core Ultra 技术规格,了解 NPU 在实际产品中的部署案例和性能数据。