jmaczan/tiny-vllm
Build your own high performance LLM inference engine in C++ and CUDA - a smaller version of vLLM
tiny‑vllm – 一个动手实践的 C++/CUDA LLM 推理引擎(及教程)
它是什么 – tiny‑vllm 是一个用 C++ 编写的完整开源 LLM 推理服务器实现,支持 CUDA(并可选支持 AMD GPU 的 HIP)。它不仅提供引擎的源代码,还附带一个逐步教学课程,引导读者理解现代基于 Transformer 的语言模型的每一个组件,从加载权重到生成 token。
为何重要 – 大多数高性能推理服务器(如 vLLM、TensorRT‑LLM)都是大型生产级代码库。tiny‑vllm 故意将问题简化为单个 10 亿参数的 Llama 3.2 模型,使学习者能够清晰看到使推理加速的 CUDA 内核、内存布局和批处理逻辑。因此,它在理论(注意力机制、RMSNorm、FlashAttention 风格的 softmax、PagedAttention)与可自行编译运行的实际系统之间架起了一座桥梁。
主要功能(如 README 所列)
- 从 Safetensors 文件加载真实 LLM(已用 Llama 3.2 1B Instruct、BF16 权重测试)。
- 支持完整的前向传播,包括 prefill(提示处理)和 decode(单 token 生成)。
- 所有重计算均通过自定义 CUDA 内核完成,包括:
- 嵌入查找
- 带并行归约的 RMSNorm
- 旋转位置编码(RoPE)
- 分组查询注意力(GQA)
- Flash 风格的在线 softmax
- PagedAttention 和分页 KV 缓存,实现长上下文的内存高效处理。
- 两种批处理策略:
- 静态批处理 – 适用于简单工作负载的固定大小批处理。
- 连续批处理 – 支持动态添加/移除请求,模拟生产服务器行为。
- 可选的 AMD GPU 支持通过 HIP/hipBLAS 实现,通过一个轻量级兼容头文件复用相同 CUDA 源码。
技术栈
- 语言:C++ 17
- GPU API:CUDA 13.1(nvcc)与 cuBLAS;AMD GPU 可选 HIP。
- 模型格式:Safetensors(BF16 权重)。
- 依赖项:单头 JSON 解析器
nlohmann/json(v3.12.0)。 - 构建系统:CMake(支持 Ninja,可切换
-DUSE_HIP=ON)。
适合谁使用
- 学生 / 自学者:希望从内核级别理解 LLM 推理工作原理的人。
- 教师:寻找代码与叙事解释结合的教学资源的人。
- 工程师:对低级别性能技巧(FlashAttention、KV 缓存分页)感兴趣,并希望获得一个最小、可读性强的参考实现的人。
项目状态
- README 将所有主要引擎组件标记为已实现(复选框已勾选)。
test.sh脚本可构建项目并运行快速推理演示,表明代码在作者的 Linux + RTX 5090 环境中可编译并输出结果。- 该项目为教育目的积极维护;欢迎提交问题以获取构建帮助。
如何开始
- 克隆仓库,如有需要请调整 CUDA/GCC 路径。
- 安装 CUDA Toolkit(AMD 用 ROCm),并确保有兼容 GPU。
- 从 Hugging Face 下载 Llama 3.2 1B Instruct 的
model.safetensors。 - 运行
./test.sh– 脚本将构建引擎并运行最小推理测试。 - 按照 Markdown 教程章节(如 Tokenization, Attention, Paged KV cache)阅读理论并检查对应源文件。
命名由来 – 它被定位为流行项目 vLLM 的“年轻而小巧的兄弟”,专注于清晰度和学习,而非生产级功能广度。
以上所有细节均直接取自仓库的 README;未推断任何额外功能。
相关
- Dispatch
- 项目
- 项目
- Dispatch
- Dispatch