kekzl/imp
GitHub: kekzl/imp
一款专为NVIDIA Blackwell显卡极限优化、从零构建的CUDA大模型推理引擎,旨在实现单卡上的最高推理速度。
Stars: 17 | Forks: 2
一款从零开始构建、面向 NVIDIA Blackwell 的 CUDA 推理引擎。
单 GPU, sm_120a, 原生 NVFP4 权重 + KV — Qwen3.6-35B-A3B NVFP4 MoE 解码约 200 tok/s。
每一行均由 Claude Code 编写。
## 项目概述
这是一个从零开始构建的 CUDA 推理引擎,专为单一架构设计:NVIDIA Blackwell,计算能力 12.0。没有可移植性层,没有在关键路径上的 FP16 反量化回退,也没有对 llama.cpp 或 vLLM 的封装。imp 自带 GGUF 和 SafeTensors 加载器、BPE 分词器、分页 KV 缓存、注意力内核、MoE 路由、Gated DeltaNet、CUDA Graphs,以及一个兼容 OpenAI 和 Anthropic 的 HTTP 服务器。
每一行代码都由一个 AI 编码代理([Claude Code](https://claude.ai/claude-code))生成——这是一个关于这种方法在严肃系统工作中能扩展到何种程度的长期实验。
## 有趣之处
- **针对单一芯片家族优化。** 关键路径内核使用 Blackwell 特有功能:PDL、Green Contexts、NVFP4 块缩放 MMA、FP8 MMA `kind::f8f6f4`、T warp 专用化分组 GEMM、打包 `cvt.e4m3x2`。没有 SM80 / SM90 回退路径。
- **原生 NVFP4 权重 + KV。** SafeTensors NVFP4 预量化(NVIDIA Model Optimizer + llm-compressor)直接加载到 NVFP4 张量核内核中。NVFP4 KV 缓存 (`--kv-nvfp4`) 在解码 tok/s 持平的前提下,将上下文压缩 3.9 倍 —— Qwen3-8B Q8 模型在相同的显存中,可支持的上下文长度从 16k (FP16) 提升至 40k。
- **Gated DeltaNet + Mamba2 + MoE 混合体。** Qwen3.5、Qwen3.6、Nemotron-H 作为完整的混合体运行(GDN / Mamba2 + 注意力 + MoE),具有融合的多标记递归扫描和寄存器缓存状态。
- **OpenAI + Anthropic API 接口。** `imp-server` 支持 `/v1/chat/completions` 和 `/v1/messages`(流式 + 非流式),具备前缀缓存、JSON 模式约束和工具调用功能。
## 状态
**实验性。** 代码库为单作者/单目标/单 GPU 设计。存在已知缺陷(见 `TODO.md`),某些量化路径仅在特定模型系列上一致,且由于 cuBLAS 自动调优,预填充数据在容器重启间可能有高达 2.6 倍的差异。请勿在关键环境中部署。
## 快速入门
所有操作都在 Docker 中运行;本地无需 CUDA 工具包。
```
# 1. 克隆
git clone https://github.com/kekzl/imp.git && cd imp
# 2. 将 GGUF 或 SafeTensors 模型放入 ./models/ 目录
mkdir -p models
# (示例:任何 *.gguf 或 NVFP4 预量化 SafeTensors 目录)
# 3. 构建服务器镜像
docker compose build imp-server
# 4. 启动服务
docker run --gpus all -v ./models:/models -p 8080:8080 \
imp:latest --model /models/your-model.gguf
# 5. 访问 OpenAI 兼容端点
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hello!"}],"max_tokens":64}'
```
完整的 CLI 参考、服务器标志和 C-API 集成指南请参阅 [`docs/usage.md`](docs/usage.md)。
## 支持的硬件
**目标。** NVIDIA Blackwell `sm_120` 系列 — GeForce RTX 5090 / 5080 / 5070 Ti, RTX PRO 6000 Blackwell。
**已测试。** 仅 RTX 5090 (GB202, 32 GB GDDR7)。本仓库中的所有性能数据均来自同一台机器。
**Fatbin 布局。**
- `arch=compute_120a, code=sm_120a` — 面向 GB202 (RTX 5090, RTX PRO 6000) 的 SASS。具有架构特定功能集(NVFP4 块缩放 MMA、FP8 MMA `kind::f8f6f4`、T warp 专用化分组 GEMM)。
- `arch=compute_120f, code=compute_120f` — 家族可移植 PTX,加载时针对 GB203 (RTX 5080, 5070 Ti) 进行 JIT 编译。会失去 T-WS 分组 GEMM 策略;CUTLASS 会自动选择次优回退方案,但在 Mamba2 形状上的 NVFP4 快速路径会退化。可通过 `-DIMP_DISABLE_120F_FALLBACK=ON` 禁用,以获得更小、仅支持 RTX 5090 的 fatbin。
**不支持。** 不支持 Hopper、Ada、Ampere 或更早架构。不支持 AMD / Apple / CPU 路径。
## 支持的模型
| 模型系列 | 变体 | 量化格式 |
|---|---|---|
| Qwen3 / Qwen3-MoE | dense + MoE | Q4_K_M, Q6_K, Q8_0, NVFP4, MXFP4 |
| Qwen3.5 / Qwen3.6 | GDN + attention (+ MoE) | Q4_K_M, Q8_0, NVFP4 |
| Gemma-4 (26B-A4B MoE) | MoE | Q4_K_M, Q5_K_M, Q8_0, NVFP4 |
| Llama / Mistral / Mixtral / DeepSeek | dense + MoE | GGUF (Q*_K, Q8_0), FP8 |
| Gemma-3 | text + vision (SigLIP) | GGUF |
| Nemotron-H | Mamba2 + Attention + MoE | GGUF |
经过测试验证的模型及其显存占用和解码 `tok/s`:[`docs/supported-models.md`](docs/supported-models.md)。
## 性能
解码亮点(贪心解码,256 输出标记,3 次重复平均,RTX 5090,刷新于 2026-05-10):
- **Llama-3.2-3B Q8_0**: 306 tok/s
- **Nemotron-3-Nano-30B-A3B NVFP4**(混合 Mamba2+MoE+注意力):325 tok/s
- **Qwen3.6-35B-A3B Q4_K_M** (MoE): 使用 `IMP_EXPERT_OVERHEAD_PCT=10` 时 243 tok/s
- **Qwen3-Coder-30B-A3B NVFP4**: 261 tok/s
长上下文预填充 (`pp=8192`) 在 dense 模型上持续领先 llama.cpp:在 [`docs/performance.md`](docs/performance.md) 中列出的模型上,领先幅度为 ×1.13 至 ×1.70。NVFP4 预量化解码(Qwen3.6、Gemma-4、Qwen3-Coder)范围在 200–260 tok/s。
完整数据、方法论以及 `tests/perf_baseline.json` 回归测试门控:[`docs/performance.md`](docs/performance.md)。
## 从源码构建
```
# 在开发容器内,或主机上使用 CUDA 13.2+:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
```
完整的构建选项、测试命令和验证门控设置:[`docs/usage.md`](docs/usage.md)。
## 文档
| 文档 | 描述 |
|---|---|
| [用法与参考](docs/usage.md) | 构建、服务器、CLI、C API |
| [支持的模型](docs/supported-models.md) | 已测试模型系列,含显存占用和 tok/s |
| [量化](docs/quantization.md) | GGUF Q*_K、NVFP4、MXFP4、FP8 KV — 格式、流程、权衡 |
| [性能](docs/performance.md) | 解码 + 预填充吞吐量、方法论 |
| [imp.conf 参考](imp.conf.example) | 所有运行时配置键 |
| [sm_120a 内核](docs/sm120.md) | 内核优化说明 |
| [路线图](docs/roadmap.md) | 已知缺陷和进行中的性能优化工作 |
| [更新日志](CHANGELOG.md) | 版本发布说明 |
## 贡献指南
构建、测试和 PR 工作流程请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
## 许可证
MIT — 详见 [`LICENSE`](LICENSE)。
## 致谢
由 [@kekzl](https://github.com/kekzl) 使用 [Claude Code](https://claude.ai/claude-code) 构建,作为一个长期实验。
站在 [llama.cpp](https://github.com/ggerganov/llama.cpp) 的肩膀上——GGUF 格式、GGML 量化方案以及本地 LLM 推理的大部分实用惯例都源自于此。
大量使用了 [CUTLASS](https://github.com/NVIDIA/cutlass) 来实现 SM120 FMHA、NVFP4 / MXFP4 GEMM 和分组 MoE 内核。其他参考:Flash Attention 2、EAGLE、NVIDIA Model Optimizer、[llm-compressor](https://github.com/vllm-project/llm-compressor)。
标签:AI生成代码, Apex, API兼容, BPE分词器, C++, CUDA, CUDA Graphs, CUDA编程, DLL 劫持, Gated DeltaNet, GGUF, GPU计算, HTTP服务器, KV缓存, MoE路由, NVFP4, NVIDIA Blackwell, NVIDIA RTX, SafeTensors, 人工智能, 分页KV缓存, 单GPU优化, 大模型推理, 大语言模型, 推理引擎, 推理速度优化, 数据擦除, 机器学习, 权重压缩, 注意力内核, 深度学习, 混合专家模型, 用户模式Hook绕过, 解码速度, 请求拦截, 量化, 量化技术, 高性能推理, 高性能计算