CPM.cu
端侧LLM推理CUDA加速框架,融合稀疏注意力、投机采样与量化,在消费级GPU上实现7倍推理加速
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
端侧LLM推理CUDA加速框架,融合稀疏注意力、投机采样与量化,在消费级GPU上实现7倍推理加速
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有一块 RTX 4090,想在本地跑一个 8B 参数的大语言模型。理想很丰满——隐私安全、零延迟、无网络依赖。但现实是:生成了一个字,等了三秒。GPU 利用率飘忽不定,显存动不动爆掉,风扇狂转却跑不出性能。
问题不在硬件,而在推理框架。通用深度学习框架(如 PyTorch)在 LLM 推理场景下存在大量冗余计算:全量的 Key-Value 缓存、低效的注意力机制、不支持稀疏的矩阵运算。解决这个问题的传统方案是 vLLM、SGLang 这些通用推理引擎——但它们主要面向数据中心,不够"轻量"。
CPM.cu 正是为这个痛点而生的:专门针对端侧(消费级 GPU)优化的 CUDA 推理框架,由 OpenBMB(国内知名大模型开源组织,曾发布 MiniCPM 系列模型)开发,2025 年 3 月首次发布,目标是在普通游戏卡上也能流畅运行 8B 级大模型。
OpenBMB(Model Best)是国内大模型开源领域的活跃团队,隶属于清华大学 NLP 实验室背景的北京极光力叩科技有限公司。其 CPM(Chinese Pre-trained Model)系列是国内最早的预训练大模型之一,技术路线从早期的 CPM-Engine 逐步演进到针对端侧优化的 CPM.cu。
CPM.cu 的核心定位不同于 vLLM 和 SGLang——它不追求通用性,而是聚焦端侧推理效率,将稀疏注意力、投机采样(Speculative Sampling)和低位宽量化三项技术深度融合到 CUDA 内核层面,是目前中文开源社区中专门为端侧 LLM 推理优化的框架中技术深度较高的一个。
标准 Transformer 的注意力是 O(n²) 复杂度,长上下文场景下计算量爆炸。CPM.cu 引入了 InfLLM-v2 注意力内核,通过语义内核(semantic kernel)动态选择相关的 Key-Value 块,将注意力稀疏化到 81% 的稀疏率而不损失模型精度。
实测数据:在 128K token 的超长序列生成任务中,MiniCPM4-8B 的推理速度比 Qwen3-8B 快 7 倍,核心就在于稀疏注意力大幅降低了 Prefill 和 Decode 阶段的计算量。
投机采样是一种"预测-验证"并行解码技术:用一个小型的 Draft 模型快速生成若干个候选 token,再用大模型批量验证,接受率高的 token 直接输出,不需要逐个等待大模型自回归生成。传统投机采样的问题是验证效率低、内存访问不连续。
CPM.cu 实现了 FR-Spec(Frequency-Ranked Speculative Sampling),基于词频排序优化候选 token 分布,配合 Flash-Attention 中的树状验证结构,将接受率提升到较高水平。此外,项目还支持基于 MTP(Multi-Token Prediction)的投机采样,通过自定义的 MTP 层生成 draft tokens。
量化是降低显存占用的经典手段,但 LLM 量化推理的难点在于:量化后精度下降明显,尤其是投机采样与量化结合时验证准确性会进一步受损。
CPM.cu 集成了 Marlin GPTQ 内核,支持 W4A16(权重 4-bit,激活 16-bit)量化格式。实测 MiniCPM4-8B 在 Marlin 量化后,显存占用从约 16GB 降低到 8GB 左右,且量化模型仍可启用投机采样加速。配合草稿模型使用,量化推理的效率也有了保障。
CPM.cu 的代码结构分为两层:
CUDA 内核层(src/):
model/ — Transformer 各层 CUDA 实现(attention、FFN、embedding、linear layers 等)qgemm/ — 量化矩阵乘法(INT4/INT8 GEMM)flash_attn/ — Flash Attention 集成entry.cu / perf.cu — 推理入口和性能分析工具Python 接口层(cpmcu/):
llm.py — 核心推理接口,加载模型、执行生成llm_w4a16_gptq_marlin.py — 量化模型推理专用接口cli.py — 命令行工具,支持交互式生成、文件输入、聊天模板server.py — OpenAI API 风格推理服务speculative/ — 投机采样相关逻辑从架构看,CPM.cu 是一个以 CUDA 为核心、Python 为胶水语言的推理框架,主要针对 OpenBMB 自己的 MiniCPM 系列模型做了深度优化,同时也可对接其他 HuggingFace 格式模型。
官方提供预构建镜像(CUDA 12.6 和 12.8),已包含编译好的 CPM.cu 和所有依赖:
docker pull modelbest-registry.cn-beijing.cr.aliyuncs.com/model-align/cpmcu_cu12.6:v1.0.0
docker tag modelbest-registry.cn-beijing.cr.aliyuncs.com/model-align/cpmcu_cu12.6:v1.0.0 cpmcu:cuda12.6-release
docker run --gpus all -it cpmcu:cuda12.6-release /bin/bash
启动 OpenAI API 服务:
docker run --gpus all -p 8000:8000 cpmcu:cuda12.6-release python examples/minicpm4/start_server.py --apply-sparse
离线模式下,先在宿主机用 huggingface-cli 下载模型权重,再通过 -v 挂载到容器:
docker run --rm --gpus all -v /path/to/model:/workspace/model cpmcu:cuda12.6-release bash -lc 'cd examples && python3 minicpm4/test_generate.py --model-path /workspace/model/MiniCPM4-8B-marlin-cpmcu --prompt-text "Hello"'
需要先确保有 PyTorch + Ninja,然后:
git clone https://github.com/OpenBMB/CPM.cu.git --recursive
cd CPM.cu
pip install .
安装时会检测 CUDA 架构(默认支持 A100/H100、RTX 30/40 系列),如果不在默认支持列表,需要设置 CPMCU_CUDA_ARCH 环境变量指定架构编号(如 CPMCU_CUDA_ARCH=89 for RTX 40)。
| 配置项 | 要求 |
|---|---|
| GPU | NVIDIA,支持 SM 8.0+(即 Turing/Ampere/Ada/Hopper 架构) |
| 显存 | FP16 推理至少 8GB,量化(W4A16)可低至 4GB |
| 内存 | 建议 16GB+ |
| 磁盘 | 20GB+(含模型权重) |
| CUDA 版本 | 12.6+(12.8 支持 RTX 50 系列) |
最适合的场景:
局限性:
MiniCPM4-8B 在 MMLU、HellaSwag 等 benchmark 上已经可以与 Qwen3-8B 匹敌,而 CPM.cu 让它在本地 GPU 上的推理速度达到 Qwen3-8B 的 7 倍(128K 场景)。这意味着:
从 GitHub 趋势看,CPM.cu 的 star 数量在 238,虽然绝对数量不大,但考虑到其专注于端侧推理的细分赛道、且背靠 OpenBMB 持续更新(最近一次代码更新在 2026 年 6 月),其技术路线具有持续的生命力。