章节 01
导读 / 主楼:纯CUDA推理引擎:在RTX 3060上跑8.5B参数MoE大模型
一个完全独立的CUDA推理引擎,无需Python和任何深度学习框架,即可在消费级显卡RTX 3060上运行8.5B参数的混合专家模型LFM2.5-8B-A1B,实现每秒超过100个token的推理速度。
正文
一个完全独立的CUDA推理引擎,无需Python和任何深度学习框架,即可在消费级显卡RTX 3060上运行8.5B参数的混合专家模型LFM2.5-8B-A1B,实现每秒超过100个token的推理速度。
章节 01
一个完全独立的CUDA推理引擎,无需Python和任何深度学习框架,即可在消费级显卡RTX 3060上运行8.5B参数的混合专家模型LFM2.5-8B-A1B,实现每秒超过100个token的推理速度。
章节 02
章节 03
在大型语言模型推理领域,大多数解决方案都依赖于PyTorch、Transformers等重量级框架,这些框架虽然功能强大,但带来了庞大的依赖链和运行时开销。对于希望在资源受限环境或边缘设备上部署模型的开发者来说,这种"框架依赖"成为了难以逾越的障碍。
cuda_inf项目的诞生源于一个大胆的想法:能否完全抛开Python和深度学习框架,仅依靠纯CUDA C++代码,在消费级显卡上高效运行大型语言模型?这个项目给出了肯定的答案。
章节 04
该项目针对的是LiquidAI开发的LFM2.5-8B-A1B模型,这是一个极具特色的混合架构模型:
这种设计使得模型在保持较大参数规模的同时,推理成本显著降低,非常适合在单张消费级显卡上运行。
章节 05
项目的核心是一个单一的.cu文件,包含了所有必要的CUDA内核和主机端编排代码。这种设计带来了几个显著优势:
为了在12GB显存的RTX 3060上容纳8.5B参数模型,项目采用了激进的INT4分组量化策略:
值得注意的是,项目作者有意识地跳过了2:4结构化稀疏性。虽然这种稀疏性可以进一步减少内存占用,但实验表明,对预训练模型直接进行2:4剪枝会严重破坏模型的连贯性。因此,项目选择了密集INT4量化来保持生成质量。
KV缓存是Transformer推理的内存瓶颈。项目采用了创新的FP8 E4M3量化方案:
这种设计在几乎不损失精度的前提下,将KV缓存内存占用减半。实验表明,与FP16基线相比,贪婪解码输出在60个token中有57个完全匹配,且保持完全连贯。
项目还实现了一个可选的H2O(Heavy Hitter Oracle)缓存驱逐机制:
这种机制允许在显存极其紧张的情况下(例如预算只有48个槽位而上下文已增长到82个token),仍然保持生成连贯性。
针对长上下文场景,项目实现了Flash-Decoding技术:
实验数据显示,在2K token上下文时,朴素单warp解码内核的性能会暴跌至约14 tok/s,而Flash-Decoding可以稳定维持约100 tok/s。
章节 06
在RTX 3060 (12GB)上的实测性能:
| 场景 | 性能 |
|---|---|
| 短上下文解码 | ~105 tok/s |
| 长上下文解码 | ~100 tok/s |
| 相比朴素实现 | 约7倍提升 |
一个典型的推理示例:
$ ./build/engine --prompt "法国的首都是什么?用一句话回答。" --n 400
法国的首都是巴黎。
[engine] 生成83个token,耗时0.75秒 (110.9 tok/s)
章节 07
项目包含一个头文件-only的字节级BPE分词器实现,完全兼容GPT-2的分词规则。经过验证,该分词器在聊天模板、代码、数字和空白字符的处理上与Hugging Face的encode/decode完全一致。
章节 08
虽然运行时无需Python,但模型下载和量化仍需离线完成。项目提供了prepare.sh脚本,使用conda环境进行一次性预处理: