您现在的位置是:首页 > 文章详情

OpenBMB 开源轻量级 CUDA 推理框架 CPM.cu

日期:2025-06-19点击:14

OpenBMB推出了CPM.cu,这是一个轻量级且高效的开源CUDA推理框架,专为端侧大型语言模型(LLMs)的部署而设计,并为MiniCPM4提供优化,核心支持稀疏架构投机采样低位宽量化等前沿技术创新。

CPM.cu 亮点包括:

  • 集成了InfLLM v2可训练稀疏注意力内核,可加速长上下文预填充和解码;
  • FR-Spec(频率排序推测采样)通过压缩词汇空间提高草稿效率,显著降低计算开销;
  • 结合了EAGLE-2推测采样、4位量化和基于滑动窗口注意力的长上下文支持,从而在资源受限设备上实现高效部署。
  • 性能方面,在128K-token序列上,预填充速度比Qwen3-8B快2-4倍,解码速度快4-6倍。

CPM.cu  框架结构:

 CPM.cu/ ├── src/ │ ├── flash_attn/ # 修改后的 Flash-Attention, 支持稀疏和投机采样 │ ├── model/ │ │ ├── minicpm4/ # minicpm4 模型 │ │ │ ├── minicpm4_model.cuh # 模型的核心实现 │ │ │ └── minicpm4_eagle.cuh # 投机采样实现 │ │ ├── model.cuh # 其他代表性模型 │ │ ├── w4a16_gptq_marlin/ # GPTQ 量化计算 kernel │ │ ├── memory.cuh # 显存分配 │ │ └── layer.cuh # 通用层 │ ├── entry.cu # pybind: 连接 C/CUDA 和 Python │ └── ... ├── cpmcu/ # python interface └── ...
  1. cpmcu/ 代码提供了一个 python 的调用接口,里面涉及在 Python 侧 tokenize,调用 C 代码得到模型的输出 logits,在 Python 侧根据 logits 采样并 detokenize 这些过程。我们使用了 pybind 将 C 代码与 Python 代码进行绑定。

  2. src/model/memory.cuh 这里实现了整个推理框架的内存管理,这里我们采用了先分配模型权重,再分配模型中间计算结果所需的空间,最后把所有剩余显存分配给 kv-cache 的内存管理策略。这一点设计上是和 vLLM, SGLang 类似的。分配中间计算结果的空间时可以考虑一下中间计算结果的生命周期,做一点显存复用。

  3. src/model/w4a16_gptq_marlin/ 量化的计算 kernel。这里直接使用了 vLLM 的 Marlin 代码。

  4. src/model/minicpm4/ 这里是模型的架构实现。src/model/下也有其他代表性模型实现。

  5. src/flash_attn/ 我们基于 flash_attn 2.6.3 版本,在上面增加了对 InfLLM v2、投机采样的适配支持。下面我们主要介绍这一部分,也是整个框架实现的难点。

开源地址:https://github.com/OpenBMB/CPM.cu

原文链接:https://www.oschina.net/news/356197
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章