jmaczan/tiny-vllm

Build your own high performance LLM inference engine in C++ and CUDA - a smaller version of vLLM

解决的问题

部署大型语言模型需要一个推理服务器,能够在GPU上高效运行模型,并处理多个并发请求。tiny-vllm通过提供一个用C++和CUDA编写的从头构建的推理引擎来解决这个问题,演示了如何加载真实模型(Llama 3.2 1B Instruct)并使用面向性能的技术执行完整的正向传播。同时,它也作为一个学习资源,讲解底层的数学和工程决策。

工作原理

该引擎读取Safetensors模型文件,提取bfloat16权重,并实现Llama 3.2架构。它包含用于嵌入、RMSNorm、RoPE、注意力(类似FlashAttention的在线softmax)和前馈层的CUDA内核。它使用KV缓存、静态和连续批处理以及PagedAttention来高效管理内存和并发请求。代码使用CMake构建,并通过CUDA/cuBLAS在NVIDIA GPU上运行,可选支持通过ROCm/HIP的AMD。

适用人群

对理解LLM推理内部机制感兴趣的开发者、学习CUDA和高性能计算的学生,以及希望获得动手教学资源的讲师。它假设读者具备基本的C++知识和一些神经网络的熟悉度,但会逐步解释每个概念。

亮点

  • 包含预填充和解码步骤的推理服务器的完整实现
  • 所有主要操作的CUDA内核(可选支持AMD GPU的HIP)
  • 包含PagedAttention和连续批处理以提高吞吐量
  • 教育性:每个组件都从第一性原理详细解释
  • 最少的外部依赖(仅nlohmann/json)

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • 项目