← 返回信息流
AI 资讯Hacker News·5 天前

Show HN: Tiny-vLLM 是一款基于 C++ 和 CUDA 的高性能 LLM 推理引擎

原标题:Show HN: Tiny-vLLM – high performance LLM inference engine in C++ and CUDA

速览

Tiny-vLLM 是一个新推出的高性能大语言模型(LLM)推理引擎,采用 C++ 和 CUDA 编写。该项目旨在提供高效的模型推理能力,适合对性能有较高要求的场景。作为 vLLM 的轻量级或替代方案,它展示了底层优化在 AI 基础设施中的重要性。

AI 深度解读

Show HN: Tiny-vLLM – 用 C++ 和 CUDA 构建高性能 LLM 推理引擎

背景

大型语言模型(LLM)的繁荣背后,是训练与推理两个截然不同阶段的分野。在训练阶段,工程师和研究人员使用 Python 等高级语言配合 PyTorch 或 tinygrad 等张量库设计模型架构,并通过反向传播算法在 GPU 和 TPU 等硬件上消耗大量算力、资金和能源,最终产出一组包含数十亿甚至数万亿浮点数的模型权重文件(通常以 Safetensors 格式存储)。

然而,训练完成的模型文件本身并非可执行程序,它只是一堆数字;模型架构也仅是一份蓝图。要让模型真正“说话”,需要一个程序将架构中的操作转化为可执行代码,并在运行时加载权重。这一过程被称为推理(Inference)

尽管推理至关重要,但现有的推理引擎(如 vLLM)往往极其复杂,初学者难以窥其全貌。为了解决这一痛点,作者开发了 Tiny-vLLM。这是一个由 C++ 和 CUDA 编写的高性能 LLM 推理引擎,旨在成为 vLLM 的“年轻且更小”的兄弟项目。它不仅提供完整的源代码,还附带一门配套课程,带领学习者从零开始推导实现推理引擎所需的想法和数学原理。

核心内容

Tiny-vLLM 的核心目标是通过手动实现底层细节,深入理解 LLM 推理的每一个环节。该项目包含两部分:推理服务器的完整源代码,以及引导用户实现引擎的教学课程。

1. 推理引擎的技术栈与功能

Tiny-vLLM 完全基于 C++ 和 CUDA 构建,旨在最大化硬件利用率并追求极致性能。其核心功能包括:

  • 模型加载:支持从 Safetensors 格式加载真实的 LLM 模型(如 Llama 3.2 1B Instruct)。
  • 完整前向传播:涵盖预填充(Prefill)和解码(Decode)两个阶段。
  • 底层计算:所有计算均通过自定义 CUDA 内核完成。
  • 缓存机制:实现了 KV Cache(键值缓存)和 PagedAttention(分页注意力机制)。
  • 批处理策略:支持静态批处理(Static Batching)和连续批处理(Continuous Batching)。
  • 优化算法:实现了 Online Softmax、类似 FlashAttention 的优化以及 Paged KV Cache。

2. 从 0 到 1 的学习路径

作者将复杂的推理过程拆解为一系列循序渐进的技术模块,涵盖了从基础概念到高级优化的全过程:

  • 基础概念:LLM 的本质、vLLM 简介、模型与推理服务器、技术先决条件。
  • 数据与精度:Safetensors 格式解析、浮点数原理及为何使用 bfloat16、CPU 与 GPU 内存管理。
  • 单 Token 推理:分词(Tokenization)、嵌入(Embeddings)、RMSNorm、RoPE(旋转位置编码)、残差连接。
  • CUDA 工程实践:CUDA 内核工程、并行归约、cublasGemmEx 的使用、列主序到行主序的转置技巧。
  • 注意力机制核心:Prefill 与 Decode 的区别、KV Cache 的存在意义、Attention 机制、GQA(分组查询注意力)、SiLU 激活函数、Softmax、因果掩码(Causal Mask)及 Argmax。
  • 高级优化:前馈网络、缓冲区复用、静态批处理、连续批处理、Online Softmax、PagedAttention 及其 CUDA 内核实现。

3. 对 AI 与计算关系的哲学思考

作者提出,智能并非来自模型中的某个单一元素,而是源于大量参数与基于这些参数对输入值进行的大量计算。模型中的每个部分都可以被替换,从而在准确性与复杂度之间进行权衡。例如,默认的注意力机制计算复杂度为 $O(n^2 \cdot d)$,这促使研究者探索线性注意力等替代方案以降低复杂度。

4. 适用范围与排除内容

  • 排除内容:本课程不涉及 LLM 的训练阶段、模型架构设计或数据科学工程部分。
  • 推荐资源:若想了解训练,推荐 Andrej Karpathy 的 nanoGPT 和 llm.c 仓库;若想了解张量库内部,推荐 George Hotz 的 tinygrad 或 Karpathy 的 micrograd;若想了解 GPU 编程社区,推荐 Mark Saroufim 的 GPU MODE Discord。

5. 部署与开发环境

Tiny-vLLM 可在任何拥有 NVIDIA GPU 的平台上构建和运行,但需进行少量配置调整(如 CUDA 或 GCC 路径)。

  • 开发测试环境:Linux (6.19.8 x64_64), CUDA Toolkit (13.1), C++ 17, GCC (15.2.1)。
  • 依赖项:仅有一个外部依赖项(原文截断,通常指必要的构建工具或库)。
  • 贡献方式:建议用户 Fork 仓库,调整配置使其在本地运行,然后提交 Pull Request 至 jmaczan/tiny-vllm 以惠及他人。

关键要点

  • 双重价值:Tiny-vLLM 不仅是一个高性能推理引擎,更是一个结构严谨的教学资源,适合希望深入理解 LLM 底层原理的学习者和讲师。
  • 极简主义与高性能:通过 C++ 和 CUDA 从零实现,摒弃了高级框架的黑盒抽象,直接操作 GPU 内存和内核,以实现极致的推理速度和并发处理能力。
  • 涵盖前沿技术:实现了当前主流推理引擎的核心优化技术,包括 PagedAttention、Continuous Batching 和 FlashAttention-like 优化,展示了这些技术是如何在底层协作的。
  • JIT 学习法:作者提倡“边编码边填补知识空白”的即时学习(JIT learning)方式,认为这是掌握线性代数和 CUDA 编程最有效的方法。
  • 明确的边界:清晰界定了“推理”与“训练”的区别,引导初学者专注于推理优化,同时推荐了 Karpathy 等人的资源作为训练阶段的补充。
  • 社区驱动:鼓励用户通过 Fork 和 PR 贡献代码,形成了一个开放的学习和协作闭环。

意义与影响

Tiny-vLLM 的出现填补了 LLM 生态中的一个重要空白:在高级框架(如 vLLM、TensorRT-LLM)的易用性与底层实现的复杂性之间,缺乏一个透明的、教育性质的中间层。

  1. 降低入门门槛:对于希望进入 AI 基础设施领域的工程师,直接阅读 vLLM 源码可能因代码量巨大且依赖众多而感到困惑。Tiny-vLLM 通过剥离无关细节,聚焦于核心数学和 CUDA 实现,为初学者提供了一条清晰的进阶路径。
  2. 深化对性能优化的理解:通过手动实现 PagedAttention 和 Continuous Batching,开发者能更深刻地理解内存管理、内核融合和调度算法如何影响推理延迟和吞吐量。这种理解对于优化特定硬件上的模型部署至关重要。
  3. 推动开源教育:该项目将复杂的工业级技术转化为可教学的内容,有助于培养下一代 AI 系统工程师。它证明了通过开源项目传授底层系统知识是可行且高效的。
  4. 促进技术透明化:在 AI 黑盒化趋势下,Tiny-vLLM 强调“从 scratch 推导想法和数学”,有助于消除对底层技术的恐惧,鼓励开发者质疑和优化现有的注意力机制等核心组件。

总之,Tiny-vLLM 不仅是一个工具,更是一座连接理论 AI 与工程实践的桥梁,对于希望掌握 LLM 推理底层技术的开发者而言,具有极高的参考价值。

查看原文 →github.com