十年 C++ 后端 GAP 六个月,写了一个近 3 万行的LLM推理框架

0 阅读5分钟

十年 C++ 后端 GAP 六个月,写了一个近 3 万行的LLM推理框架

1. 为什么写这个框架?

作为工作多年的 C++ 后端开发者,面对如今 AI 大一统的局势,相信很多小伙伴应该和我一样都很焦虑吧。在 AI 迭代如此之快的当下,怎么样从一个传统后端转型为 AI 行业从业者,相信很多和我类似的小伙伴都会或多或少有过这样的想法。毕竟当下 AI 太火了,薪资过于诱人,哈哈哈。

去年由于家里人生病缘故,需要照顾家里,因此思虑再三过后决定裸辞。天知道大龄程序员裸辞需要多大的勇气。裸辞后,除了处理家里事情以外,每天都在思考自己未来的职业规划。无时无刻都在焦虑,不知道过段时间自己是否还可以找到一份薪资相当的工作。毕竟我也是有房贷的打工仔。那段时间真的是每天晚上都很难入睡,每天刷着招聘软件看看目前热招的岗位,然后思考该何去何从。

这样持续了大概一个月后,也就是去年国庆节前后,我开始觉得一直这么想东想西没有任何的意义。不如利用 GAP 期间自己写点东西,反正在家闲着也是闲着。思考再三后,我决定利用 GAP 期间自己写一个 LLM推理框架,因为自己之前有相关 GPU 算子优化的经验,加之一直也想转 AI。就这样开始了这个项目。

一开始也没想写太复杂,就想着写一个最简的 LLM推理框架。可能后来写着写着经过不断的重构,最后拉通第一个版本有了近 3 万行代码。到这里可能很多人觉得 3 万行也不算啥,确实,但是这确实也远超我最开始的目标了。不管怎样,在每天的焦虑中,经过不断的重构再重构,最终在春节前夕拉通了第一个版本(虽然后来发现有很多问题,但是当时跑起来时确实还是蛮开心的)。

后面陆陆续续修修补补,到目前基本上支持 Q8 量化的 QWEN3-8B 模型的推理了。也支持算子融合、图优化、显存优化、KV Cache 优化等等功能。过程虽然有点痛苦,但是写完后觉得还是非常开心的。

未来我会定期更新自己整个从 0 到 1 的过程,虽然和目前开源的一些推理框架相比还有很大的差距,但是至少还是能提供一些参考。也希望小伙伴们喜欢这个项目,也欢迎大家提 issue,一起交流。


2. 项目概览

TFFInfer - LLM推理框架

项目地址: Gitee - gitee.com/NKK_Ovit/tf… GitHub - github.com/NKKdev/TFFi…

2.1 项目概述

TFFInfer 是一个从零自主研发的大语言模型(LLM)推理框架,采用现代 C++20 标准开发,支持 CUDA GPU 加速。项目代码量近 3 万行, 实现了完整的 LLM推理流水线,包括模型加载、计算图构建、图优化、显存管理、KV Cache 优化、任务调度等核心功能。

2.2 技术栈

类别技术选型说明
编程语言C++20现代 C++ 特性,概念、协程等
GPU 后端CUDA 12.x支持 Compute Capability 12.0
构建系统CMake 3.18+跨平台构建工具
日志系统Google glog高性能日志库
任务调度Taskflow v3.10.0DAG 任务流引擎
数学优化libdivide v5.2.0快速除法运算
数据解析nlohmann/json v4.0.0JSON 处理

2.3 支持的模型

  • Qwen3-8B (Q8_0 量化版本)
  • GGUF 格式 模型加载
  • 可扩展 的模型架构设计(支持自定义模型接入)

3. 核心特性

3.1 🚀 计算图优化

特性说明收益
DAG 计算图基于有向无环图的计算图表示,支持自动拓扑排序清晰的依赖关系,便于优化
算子融合自动检测并融合可合并的算子(如 Element-wise 操作)减少 Kernel 启动开销
死代码消除移除未使用的计算节点降低显存占用,提升执行效率
设备分配优化智能分配计算任务到最优设备(CPU/GPU)最大化硬件利用率
生命周期分析精确计算张量生命周期,实现显存复用减少峰值显存占用

3.2 💾 显存优化

技术实现方式效果
动态显存管理基于生命周期的显存分配策略按需分配,避免浪费
灵活的层间显存复用不同层的中间激活共享显存空间,支持自定义层间显存复用显著降低显存需求
内存池技术预分配大块显存,避免频繁分配/释放减少显存碎片化
延迟回收利用 CUDA Stream 实现异步内存释放避免阻塞计算流
对齐优化256 字节对齐,提升内存访问效率提升内存带宽利用率

3.3 📦 KV Cache 优化

优化点实现方式
KV Cache 预分配预分配 KV Cache,避免动态分配提升性能
KV Cache 缓存复用相同PROMPT的KV Cache复用
KV Cache 支持PAGEDpaged attention 查表获取kv cache

3.4 🚀 支持多设备扩展

设备类型说明
CPU支持多核CPU计算(目前CPU上仅用来作必要的输入及输出计算,未来扩展CPU算子后支持CPU全流程推理)
GPU支持多块GPU计算
CPU和GPU异步计算支持CPU与GPU的异步协同

4. 快速开始

  1. 安装依赖库 glog,taskflow,libdivide(不是必须),json等三方库,项目CmakeList文件中已配置好依赖库安装,如果网络原因太慢可以自行下载源码并编译安装。
  2. 内置tffInfer_test测试程序,运行如下命令 编译:test 目录小运行: cmake . && make -j8

5. 未来计划

  1. 添加更多模型支持
  2. 添加更多算子支持
  3. 添加Dynamic Batching以及Continuous Batching功能
  4. 定期更新项目编写历程以及遇到的问题。
  5. 后续业余时间还会持续优化相关算子并分享优化过程,也欢迎感兴趣的小伙伴提issue,一起交流。有兴趣的小伙伴也可以加入到项目里来。