为Orange Pi AIPro(Ascend 310B)上的MiniCPM-V 4.6编写自定义C++引擎以绕过框架开销
摘要
为Orange Pi AIPro(Ascend 310B NPU)上的MiniCPM-V 4.6开发了自定义C++推理引擎,通过为matmul和causal-conv1d编写优化的AscendC内核,实现了相比原始框架2倍的加速,达到5.90 tokens/s。
大家好,我只想分享一下过去几周一直在做的项目。我从零开始构建了一个C++推理引擎,完全在Orange Pi AIPro(搭载Ascend 310B NPU的廉价板卡,价格约149美元,拥有20 TOPS INT8 / 10 TFLOPS FP16性能)上运行MiniCPM-V 4.6。
如果你想查看自定义操作、构建脚本或Gradio Web UI,该仓库在GitHub上开源,地址为[github.com/lvyufeng/minicpm-v-4.6-orangepi](http://github.com/lvyufeng/minicpm-v-4.6-orangepi)
https://preview.redd.it/upfsqb0jm73h1.png?width=1655&format=png&auto=webp&s=1e80185171fa6db651d81e20d717b3a05791614c
如果你曾尝试在这款特定硬件上部署本地LLM或VLM,你可能知道处理标准框架栈会非常麻烦,尤其是想要在边缘获得不错的性能时。
为了解决这个问题,我跳过了沉重的框架,直接使用底层编程。文本生成和SigLIP视觉塔都在单个C++子进程中的NPU上原生运行。热路径上完全没有torch\\_npu依赖。Python仅在冷路径上用于CPU端的标记化和图像预处理。
初始的原始aclnnMm基线在令牌解码阶段表现相当糟糕,因为当M=1(向量-矩阵乘法)时,它严重未充分利用NPU的立方单元。其性能约为2.88 tokens/s(每步约350ms)。
在用自定义AscendC内核重写关键路径后,现在FP16下达到了5.90 tokens/s(每步延迟降至170ms)。
以下是2倍加速的实际分解:
|**阶段**|**Token/s**|**每步(ms)**|**节省时间**|
|:-|:-|:-|:-|
|原始`aclnnMm`基线|2.88|350 ms|—|
|+ 自定义立方矩阵乘法($M=1$)|4.37|229 ms|121 ms|
|+ `lm_head` 16分块立方路径|4.99|200 ms|29 ms|
|+ 向量化Causal-Conv1d步进内核|**5.90**|**170 ms**|30 ms|
首先,我使用MatmulImpl为M=1编写了一个自定义立方矩阵乘法内核,以绕过缓慢的通用向量路径。这一改变将速度从2.88 tps提升到4.37 tokens/s,每步节省了约121ms。
其次,lm\\_head对于正常的立方分块来说太宽了,因为词汇量巨大(约248k)。直接运行原始矩阵乘法是一个瓶颈。因此,我让引擎在加载时将权重分块为16个对立方友好的切片,然后运行顺序矩阵乘法并进行主机规约。这又节省了29ms,将其提升到4.99 tokens/s。
第三,我使用统一缓冲区DMA将高度标量的causal-conv1d基线替换为向量化步进内核,每步又节省了30ms,最终达到5.90 tokens/s。
目前,解码步骤完全受限于板卡44 GB/s的内存带宽读取FP16权重。每步读取1.4GB权重的绝对理论下限约为32ms,而我当前的立方路径为170ms。
下一步逻辑是在立方路径上实现融合的INT4/INT8反量化内核,以将其推至12+ tokens/s。
如果你对AscendC内核调优、C++ SigLIP实现或一般的边缘VLM部署有任何疑问,请告诉我!
相似文章
@FeitengLi: OpenBMB 开源 MiniCPM-V 4.6 了,1.3B 参数(SigLIP2-400M + Qwen3.5-0.8B),262k 上下文,视觉编码 FLOPs 比上一代少 50%+。 同任务 token 成本比 Qwen3.5-0…
OpenBMB releases MiniCPM-V 4.6, a 1.3B-parameter multimodal LLM with 262k context and significantly reduced visual encoding FLOPs, achieving strong benchmark performance and broad inference framework support.
MiniCPM-V 4.6
MiniCPM-V 4.6 是一款专为移动设备优化的极致高效 13 亿参数视觉语言模型。
MiniCPM-V 4.5:通过架构、数据与训练配方打造高效多模态大语言模型
MiniCPM-V 4.5 是一款 8B 参数规模的多模态大语言模型,凭借统一的 3D-Resampler 架构、创新的数据策略以及混合强化学习方法,实现了高效率与卓越性能。据悉,该模型在显著降低 GPU 显存占用与推理耗时的同时,综合表现已超越更大规模的闭源及开源标杆模型。
为什么我们要编写自己的C和C++推理引擎
LocalAI 解释了为什么它要编写自己的 C/C++ 推理后端,并展示了其 vllm.cpp 移植版本在多个模型和硬件上的基准测试中,能够实现与 vLLM 相当或更高的吞吐量,同时占用空间远小于 vLLM。
MiniCPM4:面向终端设备的超高效大语言模型
MiniCPM4 是一款专为终端设备设计的高效大语言模型,通过稀疏注意力、数据筛选、训练算法和推理系统等方面的创新,在0.5B和8B参数版本上实现了强大性能。