ChiPy:让神经网络与C++在芯片上无缝协作,实现零CPU中转的完整推理流水线

传统NPU在处理目标检测任务时,后处理阶段(如NMS)需将数据返回CPU,造成30-50%的延迟损耗。Quadric的Chimera GPNPU通过统一核心支持矩阵运算、向量数学与标量控制流,配合ChiPy DSL框架,可将预处理、神经网络推理与后处理编译为单一片上程序,无需CPU介入。以YOLOX-M为例,完整检测流水线在芯片内存中处理8400个候选框并完成NMS,实现确定性延迟,适用于ADAS、工业检测等安全关键场景。

本文最初发布于Quadric官方网站,经授权转载。

每一个目标检测部署项目都会遇到同一道坎。神经网络骨干网络在加速器(GPU、NPU、DSP)上运行,随后将结果传回宿主CPU进行后处理,包括边界框解码、置信度过滤和非极大值抑制(NMS)——这些步骤将原始张量输出转化为真正可用的检测结果。

这种来回传输绝非小事。仅NMS一项,在边缘部署场景中就可能占据整体流水线延迟的30%至50%。数据必须先从加速器的本地内存中导出,经由总线传输至主存DDR,再由CPU读取并通过NPU无法处理的分支标量代码进行运算,最终将结果送回。这一过程在每一帧、每一次推理中都会重演。

问题根源在于架构设计:传统NPU只负责矩阵乘法运算。一旦算法需要比较、分支、排序或带有动态终止条件的循环,就不得不切换回CPU。而目标检测流水线恰恰需要以上所有这些操作。

Chimera GPNPU将MAC运算、向量计算、标量控制流以及分支逻辑集成在同一个统一核心中,正是这一架构差异使本文接下来的内容成为可能。

ChiPy领域专用语言(DSL)简介

ChiPy DSL是Quadric为GPNPU张量级计算开发的Python框架。如果你用过JAX,理解起来会非常直观:ChiPy库以类NumPy语法在张量层面运作,而底层的Chimera计算库(CCL)负责内核实现,类似于Pallas在JAX中所扮演的角色。

其核心特性如下:

类NumPy语法与运算符重载:用你已经熟悉的方式编写数组操作。

双模执行:同一份ChiPy DSL代码既能在CPU上运行以完成验证,也能编译至GPNPU用于部署,测试与生产之间无需修改任何代码。

ONNX集成:直接导入量化模型。Chimera图编译器(CGC)负责骨干网络的编译,ChiPy工具则将其与自定义的前后处理逻辑串联起来。

两个装饰器,完整流水线:一个装饰器将C++ CCL内核桥接进Python计算图,另一个定义顶层流水线,将所有环节链接为整体。

最后一点至关重要。ChiPy编译器不仅仅运行神经网络,它能够将预处理、神经网络推理、后处理等整个应用流水线组合成一个完整的编译程序,在芯片上直接执行,无需返回宿主机。

以下展示了装饰器模式的基本形态:

该装饰器同时承担两项职责:在CPU测试阶段,Python函数体直接执行,你可以用标准工具对照参考输出进行验证;编译至GPNPU时,则替换为由装饰器指定的优化C++内核。接口相同,结果一致,执行目标不同。

端到端YOLOX-M检测流水线实战

以下是一个完整的YOLOX-M检测流水线示例,全程运行于Chimera GPNPU之上,输入图像加载完成后无需宿主CPU参与任何后续环节。

模型规格如下:

该流水线分为两个阶段。骨干网络(由CGC从量化ONNX模型编译而来)输出三个特征金字塔网络(FPN)头,分别包含分类得分、边界框回归值和目标置信度。CCL自定义算子随即对全部8400个候选框完成解码、置信度过滤和NMS,整个过程在单次内核调用中完成。

以下是ChiPy DSL的串联方式:

仅需五行代码。第一个调用对应CGC编译的计算图,第二个调用对应上面定义的CCL自定义算子。ChiPy将两者共同编译为一个GPNPU程序,数据从骨干网络的输出直接通过片上内存流向后处理内核,无需经过DDR,无需切换CPU上下文。

深入解析CCL解码与NMS内核

负责解码与NMS的CCL内核正是GPNPU架构价值的集中体现,其内部运作如下:

三个FPN头(步长分别为8、16、32)在各网格位置生成候选框。内核从网格偏移量解码边界框坐标,并对宽高应用指数变换,逐头依次处理完毕后再进入下一个头。GPNPU的标量算术逻辑单元(ALU)原生处理坐标运算,无需将其转交CPU。

目标置信度与类别得分相乘,得出最终的综合置信度,低于置信度阈值的候选框被立即丢弃。这是一种分支性、数据依赖的控制流——恰恰是让传统NPU流水线陷入停滞的那类工作。

存活下来的候选框按得分排序。内核依次遍历,计算每个候选框与所有已接受检测框之间的交并比(IoU),IoU超过阈值的框被抑制。这是一个带有动态终止条件的嵌套循环——教科书式的CPU任务,但由于GPNPU的处理单元在MAC阵列之外还集成了标量单元,整个过程得以全速执行。

全部8400个解码后的候选框均可容纳于GPNPU的片上内存中,解码-过滤-NMS的完整序列无需任何DDR等待。每个FPN头处理完毕后立即释放其内存,再加载下一个头,将片上存储(OCM)的占用量控制在最低水平。

三大深层意义

以下三点使这一方案的意义远超单个演示。

确定性延迟

GPNPU采用软件管理的暂存器内存,而非硬件缓存,因此不存在缓存未命中,也不存在帧间的性能抖动。后处理内核的执行时间在第一帧与第一万帧上完全一致。对于安全关键型部署场景——高级驾驶辅助系统(ADAS)、工业检测、机器人——这种确定性是硬性要求,而非锦上添花的特性。

通用检测架构支持

ChiPy的组合模型适用于任意检测架构。26.02 SDK随附YOLOX-M与RetinaNet两套端到端演示,均采用相同的装饰器组合模式。RetinaNet流水线更进一步,将裁剪、缩放、归一化等预处理步骤也作为CCL自定义算子纳入其中,全部组合在同一个编译程序里。任何遵循骨干网络加后处理模式的模型,均可按照同样的方式完成接入。

开发者体验

CCL内核采用C++编写(性能关键的内循环将继续如此),但流水线组合层是纯Python代码。只要能写NumPy,工程师就能构建完整的片上检测系统。装饰器将编译、内存管理以及各阶段间的数据路由全部抽象封装起来。

这才是"通用"在实践中的真正含义——不仅限于矩阵乘法,不仅限于神经网络,而是完整的应用流水线——那种真正出现在量产产品中的流水线——在单一处理器上以统一的编程模型运行。

欢迎在Quadric Dev Studio中探索完整的YOLOX-M与RetinaNet端到端教程。

Q&A

Q1:ChiPy DSL是什么?它和普通Python框架有什么区别?

A:ChiPy DSL是Quadric专为Chimera GPNPU开发的Python框架,用于张量级计算。它最大的特点是"双模执行":同一份代码既可在CPU上直接运行以验证结果,也可编译部署到GPNPU,测试与生产之间无需修改任何代码。与普通Python框架相比,ChiPy能将预处理、神经网络推理、后处理全部编译成一个片上程序,无需数据来回传输至宿主CPU,大幅降低推理延迟。

Q2:NMS为什么会造成这么大的延迟,GPNPU如何解决这个问题?

A:NMS(非极大值抑制)在边缘部署中可占据整体流水线延迟的30%至50%,原因在于它涉及分支判断、动态循环等控制流操作,传统NPU只能处理矩阵乘法,遇到此类任务必须将数据传回CPU处理,产生大量总线传输和上下文切换开销。Chimera GPNPU将MAC运算、向量计算与标量控制流集成在同一核心中,可以在片上直接执行NMS的嵌套循环与IoU计算,全部8400个候选框的解码、过滤、NMS均在片上内存中完成,无需任何DDR访问。

Q3:YOLOX-M在Chimera GPNPU上的完整流水线是如何运作的?

A:该流水线分为两个阶段:首先,骨干网络由Chimera图编译器(CGC)从量化ONNX模型编译而来,输出三个FPN头的分类得分、边界框回归值和目标置信度;随后,CCL自定义算子接管全部后处理工作,对8400个候选框完成坐标解码、置信度过滤和NMS,整个过程在单次内核调用中完成。两个阶段通过ChiPy的装饰器模式串联,数据经由片上内存直接流转,无需经过DDR或宿主CPU,实现了真正意义上的零中转端到端推理。

来源:Edge AI and Vision Alliance - Latest News

0赞

好文章,需要你的鼓励

2026

05/20

12:42

分享

点赞

邮件订阅