Skip to content

Repository files navigation

cpp-vLLM

这是一个以学习和系统研究为导向的 C++20/CUDA 大模型推理运行时。项目用于理解 Python API 之下的推理引擎如何工作,包括模型加载、请求调度、分页式 KV Cache、 CUDA Graph 回放、Attention 路由、自定义 CUDA Kernel,以及仅权重量化。

本项目主要用于学习和推理系统研究,并非上游 vLLM 的直接替代品。

已实现功能

  • 支持 Qwen3 和 TinyLlama 的端到端贪心生成与对话入口
  • 支持 SafeTensors 模型加载,以及 SentencePiece/BPE 分词器
  • 支持连续批处理、分块预填充、前缀缓存和分页式 KV Cache
  • 通过显式执行计划分离调度决策与 GPU 执行
  • 支持 CUDA Graph 捕获与回放,并对 Graph 缓存数量进行限制
  • 提供原生 CUDA 算子,并可选启用随仓库提供的 FlashInfer 分页 Attention
  • 支持 BF16 推理,以及可选的 W8A16 检查点和运行时研究路径
  • 包含算子、模块、引擎、模型、分词器和回归测试

cpp-vLLM 架构图

详细执行流程可参考架构概览核心代码执行路径

部分实验结果

以下数据仅对应特定硬件和测试负载,不代表项目在所有场景下都优于其他实现。 各实验报告记录了硬件、工作负载、控制条件和已知限制。

实验结果测试范围
连续批处理与静态批处理对比生成吞吐提升 9.7%,TTFT p95 降低 12.9%RTX 4060,单组异构输出长度请求轨迹(实验报告
W8A16 G128 与 BF16 对比Decode 吞吐提升 55.3%,模型显存降低 51.1%RTX 4060、Qwen3-0.6B、Batch 1;TTFT 和生成质量仍存在限制(实验报告

W8A16 实验同时保留了负面结果:当前自定义 Kernel 在较大 Batch 下不具备竞争力, 量化模型也存在已知的语义异常样本。因此,该能力仍作为可选研究路径提供。

环境要求

  • Linux 或 WSL2
  • CMake 3.24 或更高版本
  • 支持 C++20 的编译器
  • NVIDIA CUDA Toolkit 和支持 CUDA 的 GPU
  • SentencePiece 头文件与库

项目默认使用 CUDA 架构 89(Ada)。如需在其他 GPU 上构建,请修改 CMAKE_CUDA_ARCHITECTURES。仓库不包含模型权重。

构建与测试

cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DSENTENCEPIECE_ROOT=/path/to/sentencepiece \
-DCMAKE_CUDA_ARCHITECTURES=89
cmake --build build -j
ctest --test-dir build --output-on-failure

如需启用随仓库提供的 FlashInfer 分页 Attention 桥接层:

cmake -S . -B build \
-DSENTENCEPIECE_ROOT=/path/to/sentencepiece \
-DCPP_VLLM_ENABLE_FLASHINFER_PAGED_ATTENTION=ON

仓库中的 CMake Preset 主要用于 WSL 调试,目前默认面向 CUDA 12.8 和 SM 89。

运行

模型目录应包含受支持的 Hugging Face 风格配置、分词器文件和 SafeTensors 权重。

./build/generate /path/to/Qwen3-0.6B \
"用一句话解释分页式 Attention。" 32
./build/chat /path/to/Qwen3-0.6B \
"为什么分页式 KV Cache 可以减少显存碎片?" 64 --stream --stats

W8A16 模型转换和验证流程请参考 scripts/requirements-w8a16.txt以及 W8A16 评估报告

仓库结构

include/cpp_vllm/ C++ 公共接口与引擎数据结构
src/ 运行时、模型、网络层、算子和命令行程序
benchmarks/ 算子与端到端性能测试程序
tests/ CUDA、单元、集成和模型回归测试
scripts/ 模型转换、验证、性能分析与结果处理脚本
docs/ 架构说明、实验报告和设计决策记录
third_party/ 随仓库提供的第三方依赖及其许可证

如果希望系统理解项目,而不只是完成构建,建议从 文档索引开始阅读。

许可证

cpp-vLLM 的原创源代码和文档采用 Apache License 2.0 发布。third_party/ 下的文件继续遵循各自的版权声明 和许可证条款。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages