用 C++ 和 CUDA 构建高性能大语言模型推理引擎——tiny-vllm,你准备好了吗?

用 C++ 和 CUDA 构建高性能大语言模型推理引擎——tiny-vllm,你准备好了吗? 1. 导航菜单与功能介绍平台提供了丰富的功能包括 AI 代码创作、开发者工作流、应用程序安全、探索等方面。AI 代码创作涵盖 GitHub Copilot、GitHub Spark、GitHub Models、MCP Registry 全新功能开发者工作流包含 Actions、Codespaces、Issues、代码审查应用程序安全涉及 GitHub 高级安全、代码安全、密钥保护探索板块有为何选择 GitHub、文档、博客、更新日志、市场等内容。解决方案按公司规模划分有企业版、中小型团队版、初创公司版、非营利组织版按用例划分有应用现代化、DevSecOps、DevOps、CI/CD 等按行业划分有医疗保健、金融服务、制造业、政府部门等。资源方面按主题探索包括人工智能、软件开发、DevOps、安全等按类型探索有客户案例、活动与网络研讨会、电子书与报告、商业洞察、GitHub 技能支持与服务包含文档、客户支持、社区论坛、信任中心、合作伙伴。开源部分包括社区GitHub 赞助、项目安全实验室、维护者社区、加速器、GitHub 明星项目、存档项目、仓库主题、热门趋势、集合。企业版有企业解决方案企业平台和可用附加组件GitHub 高级安全、Copilot for Business、高级支持。此外还有定价信息和搜索功能。2. tiny-vllm 项目概述tiny-vllm 是一个使用 C 和 CUDA 构建的高性能大语言模型LLM推理引擎是 vLLM 的轻量版本。该仓库包含推理服务器的完整源代码和一个教程可作为学习工具也可用于大学教学。推理引擎具备从 Safetensors 加载真实的 LLM 模型Llama 3.2 1B Instruct、完整的 LLM 前向传播预填充 解码、所有计算均使用 CUDA 内核、KV 缓存、静态批处理、连续批处理、在线 softmax类似 FlashAttention、PagedAttention 等功能。3. 技术先决条件假设用户有 NVIDIA GPU可在任何平台上构建和运行该项目但可能需进行一些小调整如调整 c_cpp_propertiesjson 中的 CUDA 或 GCC 路径或 CMakeLists.txt 中的 NVCC 路径。建议用户分叉仓库进行必要调整后提交拉取请求。开发和测试该项目的具体环境为 Linux6.19.8 x64_64、CUDA 工具包13.1、C 17、GCC15.2.1唯一的外部依赖是 JSON 解析器 nlohmann/json 3.12.0使用 AMD CPURyzen 7 9800X3D、NVIDIA GPURTX 5090并使用 Hugging Face 上的 Llama 3.2 1B Instruct提交哈希 898999bd25b40516fce5a5b8f0948f4c81c650bc的 model.safetensors 文件。安装依赖项并使用 ./test.sh 运行程序若遇到问题可在 GitHub 上创建问题并提供有用上下文信息。4. Safetensors 与模型需下载用于推理的 LLM这里选择 Llama 3.2 1B Instruct其采用 Safetensors 格式。Safetensors 文件由头部大小、头部和张量数据三部分组成头部大小为 8 字节头部是包含所有张量信息的 JSON。用户面临设计决策可选择让推理服务器架构独立以运行任意模型或先专注于所选模型。假设只为 Llama 3.2 1B Instruct 架构编写服务器代码通过查看 Hugging Face Transformers 加载该模型后的信息可分析出操作顺序包括输入文本、转换为令牌、检索嵌入向量、经过 16 个变压器块包含 RMS 归一化、残差连接、掩码分组查询注意力等操作、RMS 归一化、线性输出、Argmax 等步骤。5. 浮点数与 bfloat16目标是加载模型已知模型权重采用 BF16 类型存储。在计算机中一切最终是二进制机器学习模型中的权重多为实数需以内存高效的方式表示。定点数格式使用不如浮点数广泛浮点数用二进制位序列表示以常规 16 位浮点数float16、FP16、IEEE 754 - 2008为例由符号位、指数位和小数位组成小数点可移动小数位用于确定小数点位置。