最近入了台 Thinkbook 14p 2024,CPU 是 Intel Ultra5 125H,内有一枚 3720 NPU 芯片,可用于实现低功耗模型推理。藉此机会我深入了解了 NPU 开发的相关知识,以此系列为记。
NPU 全称为 Neural Processing Unit 即神经处理单元,顾名思义即可优化加速神经网络运算的处理器芯片。在intel-npu-acceleration-library 的文档 中有一小章专门介绍了 NPU 的架构:
The Intel NPU is an AI accelerator integrated into Intel Core Ultra processors, characterized by a unique architecture comprising compute acceleration and data transfer capabilities. Its compute acceleration is facilitated by Neural Compute Engines, which consist of hardware acceleration blocks for AI operations like Matrix Multiplication and Convolution, alongside Streaming Hybrid Architecture Vector Engines for general computing tasks.
此处加粗的部分便是 NPU 相较于其他芯片的亮点,即将神经网络中常见的算子(如矩阵乘法、卷积等)特化至硬件中,从而以较低的功耗高效执行相关运算。
与 GPU 相比,NPU 的特化程度更高,计算通用性更低。开发者可以借助 CUDA 或 SPIRV 为 GPU 编写算子,从而让 GPU 执行任意代码。相比之下,使用 NPU 更像是在搭积木。NPU 预设好了一套基础算子,通过堆叠这些算子开发者得以构建多样化的模型。但 NPU 不支持自定义算子,因此并不是所有模型都能转换成 NPU 上可运行的版本。
NPU 侧重于 AI 模型的推理,而 GPU 即可用于推理也可用于训练。Ultra5 的 NPU 原生支持 FP16 乃至 int8/int4 等低精度运算,从而能够运行量化后的模型,契合当下模型推理的实践。而另一方面,NPU 缺乏对 FP32 的有效支持,在模型训练方面不如 GPU。
如果在网上查找 NPU 编程的相关资料,你会看到各种各样的库或概念,如 OpenVINO、DirectML、ONNX Runtime、Level-Zero、OneAPI 等等。它们分别是什么呢?

我们可以借助上图理解,图中把 NPU 的技术栈分为了三层:
内核态驱动(KMD Driver) 这是离用户最远,也是最接近硬件的部分,运行在操作系统内核态直接与硬件打交道,可以不必深入了解。
用户态驱动(UMD Driver) 这是承上启下的一部分。上层用户通过调用 UMD Driver 提供的 API,可以查询 NPU 硬件的相关信息以及运行模型。对于 Intel NPU 而言,UMD Driver 提供的 API 叫 OneAPI,实现了 OneAPI 的库叫做 Level-Zero。Level-Zero 是用户可访问的最底层的库,它所提供的 API 也是最原始的。
用户库(AI Libraries) 直接使用 Level-Zero 编程虽然可行,但是非常繁琐。因此,各方推出了一些 high-level 的 AI 库,以方便 AI 研究者开发。它们都有如下特点:
常见的一些库有:
+--> [DirectML]
|
[NPU HW] <-> [KMD/UMD Driver] <-> [Level-Zero] <--OneAPI--+--> [OpenVINO]
|
+--> [ONNX Runtime]
上图总结了 NPU 常见库的相互联系。作为 AI 研究者,了解顶层 AI 库的一种即可满足日常使用。但本系列将深入挖掘更底层的 OneAPI,直接与 Level-Zero 交互。通过这么做我们将探索三个问题:
由于 Level-Zero 靠近底层,网上能找到的文档和例子都很少,因此在后续文章中,我会通过逆向 OpenVINO 的代码来了解 Level-Zero 相关的编程。
作者:hsfzxjy
链接:
许可:CC BY-NC-ND 4.0.
著作权归作者所有。本文不允许被用作商业用途,非商业转载请注明出处。
最近入了台 Thinkbook 14p 2024,CPU 是 Intel Ultra5 125H,内有一枚 3720 NPU 芯片,可用于实现低功耗模型推理。藉此机会我深入了解了 NPU 开发的相关知识,以此系列为记。
NPU 全称为 Neural Processing Unit 即神经处理单元,顾名思义即可优化加速神经网络运算的处理器芯片。在intel-npu-acceleration-library 的文档 中有一小章专门介绍了 NPU 的架构:
The Intel NPU is an AI accelerator integrated into Intel Core Ultra processors, characterized by a unique architecture comprising compute acceleration and data transfer capabilities. Its compute acceleration is facilitated by Neural Compute Engines, which consist of hardware acceleration blocks for AI operations like Matrix Multiplication and Convolution, alongside Streaming Hybrid Architecture Vector Engines for general computing tasks.
此处加粗的部分便是 NPU 相较于其他芯片的亮点,即将神经网络中常见的算子(如矩阵乘法、卷积等)特化至硬件中,从而以较低的功耗高效执行相关运算。
与 GPU 相比,NPU 的特化程度更高,计算通用性更低。开发者可以借助 CUDA 或 SPIRV 为 GPU 编写算子,从而让 GPU 执行任意代码。相比之下,使用 NPU 更像是在搭积木。NPU 预设好了一套基础算子,通过堆叠这些算子开发者得以构建多样化的模型。但 NPU 不支持自定义算子,因此并不是所有模型都能转换成 NPU 上可运行的版本。
NPU 侧重于 AI 模型的推理,而 GPU 即可用于推理也可用于训练。Ultra5 的 NPU 原生支持 FP16 乃至 int8/int4 等低精度运算,从而能够运行量化后的模型,契合当下模型推理的实践。而另一方面,NPU 缺乏对 FP32 的有效支持,在模型训练方面不如 GPU。
如果在网上查找 NPU 编程的相关资料,你会看到各种各样的库或概念,如 OpenVINO、DirectML、ONNX Runtime、Level-Zero、OneAPI 等等。它们分别是什么呢?

我们可以借助上图理解,图中把 NPU 的技术栈分为了三层:
内核态驱动(KMD Driver) 这是离用户最远,也是最接近硬件的部分,运行在操作系统内核态直接与硬件打交道,可以不必深入了解。
用户态驱动(UMD Driver) 这是承上启下的一部分。上层用户通过调用 UMD Driver 提供的 API,可以查询 NPU 硬件的相关信息以及运行模型。对于 Intel NPU 而言,UMD Driver 提供的 API 叫 OneAPI,实现了 OneAPI 的库叫做 Level-Zero。Level-Zero 是用户可访问的最底层的库,它所提供的 API 也是最原始的。
用户库(AI Libraries) 直接使用 Level-Zero 编程虽然可行,但是非常繁琐。因此,各方推出了一些 high-level 的 AI 库,以方便 AI 研究者开发。它们都有如下特点:
常见的一些库有:
+--> [DirectML]
|
[NPU HW] <-> [KMD/UMD Driver] <-> [Level-Zero] <--OneAPI--+--> [OpenVINO]
|
+--> [ONNX Runtime]
上图总结了 NPU 常见库的相互联系。作为 AI 研究者,了解顶层 AI 库的一种即可满足日常使用。但本系列将深入挖掘更底层的 OneAPI,直接与 Level-Zero 交互。通过这么做我们将探索三个问题:
由于 Level-Zero 靠近底层,网上能找到的文档和例子都很少,因此在后续文章中,我会通过逆向 OpenVINO 的代码来了解 Level-Zero 相关的编程。
作者:hsfzxjy
链接:
许可:CC BY-NC-ND 4.0.
著作权归作者所有。本文不允许被用作商业用途,非商业转载请注明出处。