当前位置: 首页 > news >正文

一个从零实现的 CUDA 大模型推理引擎

我写了一个从零实现的 CUDA 大模型推理引擎

最近我在做一个比较硬核的小项目:用 C++ / CUDA 从零实现一个大模型推理引擎。

项目地址:

https://github.com/luogantt/LLM-inference-engine

这个项目当前主要面向 DeepSeek-R1-Distill-Qwen-7B 的单 batch 推理。它不是在 PyTorch、Transformers、vLLM 或 llama.cpp 上套一层接口,而是尽量把推理核心路径自己写出来,直接用 CUDA 实现模型 forward 和 decode。

为什么做这个项目

现在大模型推理框架已经很多,vLLM、TensorRT-LLM、llama.cpp 都非常成熟。但如果想真正理解一个大模型在 GPU 上是怎么跑起来的,只会调用框架还不够。

我想做的是一个可以拆开看的推理引擎:

  • 权重怎么加载
  • RMSNorm 怎么算
  • RoPE 怎么处理
  • GQA Attention 怎么做
  • KV Cache 怎么管理
  • MLP / SwiGLU 怎么执行
  • decode 每一步的耗时在哪里
  • CUDA kernel 怎么一步一步优化

这个项目就是围绕这些问题写出来的。

项目特点

  • 不依赖 PyTorch、Transformers、vLLM、llama.cpp
  • 使用 C++ / CUDA 实现核心推理路径
  • 手写 RMSNorm、RoPE、GQA Attention、SwiGLU、KV Cache、decode
  • 支持 HuggingFace safetensors 权重加载
  • 提供 Python tokenizer + CUDA 动态库推理入口
  • 当前mma版本针对 A100 / A800 的单步 decode 做了多轮优化

当前性能

测试模型:

DeepSeek-R1-Distill-Qwen-7B

当前记录:

max_seq=800 max_new_tokens=512 512 tokens = 65.6845 tok/s max forward_ms = 16.1768

这个速度是在单 batch、单步 decode 场景下测到的。它不是靠 batching 堆总吞吐,也不是 speculative decoding,而是比较直接地看每一步 target model forward 的速度。

如何运行

make-fMakefile.cuda_lib libA=sm_80CUDA_VISIBLE_DEVICES=4python python_infer.py\--model/data3/ledi/models/DeepSeek-R1-Distill-Qwen-7B\--lib./build/libllm_cuda.so\--prompt"你好 deepseek 介绍一下黑格尔的思想"\--max-new-tokens512\--max-seq800

后续方向

目前这个项目已经完成了基础推理链路和多轮 CUDA 优化。后面如果继续往上冲,主要会看几个方向:

  • CUDA Graph,减少 decode 阶段的 kernel launch 开销
  • 重写 decode GEMV / MLP 路径
  • 更激进的 kernel fusion
  • 量化推理
  • speculative decoding

欢迎交流

这个项目更偏研究和实验性质,适合对 CUDA、大模型推理、底层性能优化感兴趣的人一起看、一起改、一起 benchmark。

如果你也对从零写推理引擎感兴趣,欢迎 star、fork 或交流:

https://github.com/luogantt/LLM-inference-engine

http://www.jsqmd.com/news/852733/

相关文章:

  • 从HDFS到BGL:拆解Loghub里那些‘带答案’的日志,看大厂如何定义系统异常
  • 陕西建筑资质代办行业洗牌:禹昂科技凭合规专业突围 - 深度智识库
  • 2026论文必藏降AIGC平台大曝光:三步操作让AI痕迹消失无踪
  • Windows微信防撤回完整指南:免费开源工具一键解决消息撤回烦恼
  • 地暖行业如何做新媒体AI智能获客?2026年全网推广指南与服务商盘点 - 优质企业观察收录
  • Bilibili神奇弹幕机器人:打造智能直播间的完整免费解决方案
  • Docker基础--LXC容器化实战(包含部分命令)
  • 2026年4月国内热门的mpp电力管企业推荐,双壁波纹管/七孔梅花管/钢带波纹管/pe管,mpp电力管厂家哪家好 - 品牌推荐师
  • 上海昆仑腕表去哪修不被宰?金桥系列泡泡镜保养收费揭秘:小众高端表的 “独家” 养护方案 - 亨得利官方维修中心
  • 基于8ms平台的嵌入式GUI开发实践:智能家居86盒UI设计与实现
  • 自动化AI算法训练服务器DLTM训推一体工作站让企业轻松自建AI能力
  • 从MATLAB到空口信号:Xilinx Zynq Z-7020 + AD936x射频板的软硬件协同设计入门
  • Umi-OCR完整指南:免费离线OCR软件的终极使用教程
  • 乌鲁木齐GEO优化公司推荐:新AI 搜索时代的企业增长新引擎 - 品牌评测官
  • 别再死记硬背公式了!用VisionMaster的N点标定,手把手教你搞定相机和机械手‘对齐’
  • 2026年视频播放器选型指南:8款主流播放器横向对比,硬解/格式/性能全测评(附工具大全)
  • 告别‘Try Again’:手把手教你用x32dbg字符串搜索定位并破解软件注册验证
  • JDK 17 远程调试连不上 5005:从 attach timeout 到 JDWP 监听地址变更
  • 别再搞混了!设备上那个RJ45口是Console调试口,不是网口(附电路设计详解)
  • 告别环境冲突!用Miniconda3在Windows上为不同Python项目创建独立开发环境(保姆级图文)
  • 【诊断进阶】从Event到DTC:DEM故障管理核心机制全解析
  • Midjourney年费优惠背后的算法逻辑:为什么11月第3周是最佳下单日?(基于127次API调用与客服响应时延分析)
  • TI WEBENCH滤波器设计工具:从理论到电路的一站式自动化实现
  • 告别手动配置JRE!用JDK 18内置工具一键生成,并关联到IDEA项目
  • 消防工程企业如何做新媒体AI智能获客?2026全网推广指南与服务商盘点 - 优质企业观察收录
  • 别再只用scatter了!用Matlab绘制带密度信息的散点图,让你的数据可视化更专业
  • 从VGG到ResNet:为什么你的100层网络效果还不如20层?聊聊梯度消失与‘捷径’的艺术
  • 2026 机器人即服务(RaaS)主流供应商全景评测 —— 万机易租领跑全场景轻量化升级 - 奔跑123
  • 告别命令行恐惧:用DataGrip在Ubuntu 22.04的MySQL里建库、授权、查数据,一篇搞定
  • 怎么远程操作另一台手机 手机能远程控制别的手机吗