NInfer 项目演进笔记
记录:2026-10-27 · 方法:本仓库 git 日志(master,1199 提交)+ README / docs / HANDOFF 交叉核对
范围:ninfer → ninfer-v100 → ninfer-v100-duo → ninfer-v100-duo-win 各阶段的基础形态与重要更新
性质:历史整理笔记(record),非产品契约;产品现状以 docs/ 与源码为准。本文件位于 gitignore 的
AI整理的,我大概了解下哪些特性、功能大概哪个阶段加入的。
一、谱系总览
Neroued/ninfer(上游主线) RTX 5090 · sm_120a · 单卡 · CUDA 13 · Linux
06-25 首提交 410b9f6c ── 分叉点 5973313d (09-02)
│
▼
geoffwatts/ninfer-v100(单卡 V100 移植) 1× V100 · sm_70 Volta · CUDA 12.8
08-23 71eb3565 完整移植发布(软件 NVFP4)
09-10 51e3d9c3 合并上游 master(DFlash2 + ~120 提交,全日志最大 merge)
09-11 7bf47863 DFlash2 完整移植
│
▼
plus1998/NInfer-V100-Duo(双卡 TP2) 2× V100-SXM2 16 GB · NVLink · TP2 · Linux
09-19 7028d96a 双卡 NVLink 推理(TP2 起点)
10-15 c9674493 内嵌 Web 面板 ← 本仓库 fork 基点(tag fork-base/upstream-c9674493)
│
▼
Xxx-Bin/NInfer-V100-Duo-Win(本仓库) Windows 11 · 2× V100 TCC · MSVC 14.38 + 便携 CUDA 12.8
65 个线性提交,无自身 merge
10-18 e3bcc1f4 Windows 构建落地 ── 10-26 v0.1.1-win.6 验收(当前发布)
提交量分布(rev-list 计数,含阶段 2 合并进来的上游提交):
上游主线 ~807 · v100 阶段 ~292 · duo 阶段 33 · 本仓库 65。
二、分阶段
1. ninfer(上游主线)
- 窗口:2026-06-25 首提交起;本谱系以 09-02
5973313d 为分叉点(上游自身此后仍推进,
至 09-09 后被 v100 fork 合并)。
- 硬件基线:RTX 5090(sm_120a)· 单卡 · CUDA 13 · Linux。
- 基础形态:从零自研 C++/CUDA 推理引擎。一个 GPU、一个常驻模型,启动固定并发 1–8,
有界 FIFO 入口、无抢占、每轮一个紧凑 decode batch。.ninfer 是唯一 C++ 产物,
CLI / serving / bench 全部走公开 Engine,无 Python 推理路线;serving 同时暴露
OpenAI(Chat Completions / Responses)与 Anthropic(Messages)协议。
- 重要更新:
- L0/L1 基础设施 + kernel 库:rmsnorm / rope / causal_conv1d / gdn_gating 等逐 kernel
"正确性 → DRAM roofline" 两阶段交付(06-26)。
- q5090 量化转换/加载(06-26);prefill/decode tok/s 分列(07-01);CUDA Graph decode(07-01)。
- 并发推理:concurrent MTP + batched speculative(08-10
bfebc647);
paged KV 物理容器(08-21 9d4cc6f9)。
- Qwen3.8-27B 支持(08-14
52320554);qwen3.8 nvfp4 产物 + fp8 Op 全套
(t1 投影 / attention / MLP / GDN / embedding / output head,08-16~17)。
- eval 套件:gpqa / ifbench / erqa / real_world_qa(08-19~20);
prefix 缓存资源调度(08-23 f7bcd2ba)。
- context-lookup MTP(09-02
cd6ed9ce);DFlash2 Op 全套 + engine 集成
(09-04~06,385b30ce)。
- 阶段末状态:分叉点时产品面(Text / Vision / MTP / prefix reuse / CLI / 双协议 serving)
完整;09-02~09-06 还有 100+ 提交的收尾窗口留在上游。
2. ninfer-v100(单卡 V100 移植)
- 窗口:2026-08-23 ~ 2026-09-19(duo 阶段开始前)。
- 硬件基线:1× V100(sm_70 Volta)· CUDA 12.8(CUDA 13 移除 Volta 离线编译,构建钉死 12.8)。
- 基础形态:同一产品面的 sm_70 对等硬件实现——不改产品契约,只换硬件后端。
Volta 无 FP8/FP4 tensor core → 软件 NVFP4:权重以 checkpoint 原生布局上传后原地置换为
Volta QPN fragment 顺序(code/scale 两平面),decode 直接消费 QPN 布局,宽 prefill 重建 FP16
走 tensor-core GEMM;FP16 TC + CUTLASS 为主计算路线;INT8 group-64 KV + D256 Hadamard 旋转;
长因果 prefill 用 vendored llama.cpp MMA flash-attention。
- 重要更新:
71eb3565(08-23)完整 V100 移植发布(software NVFP4)——阶段起点。
- 上游同步两轮:PR #2(09-01
f99548e3)与 670ace57(09-03);nvfp4/k8v4 KV 模式
(4ac73c47)。
2613471d(09-05)QPN 量化权重预打包;8fd0e2ef 7-token draft 窗口。
51e3d9c3(09-10)合并上游 master(DFlash2 + ~120 提交)——全日志最大 merge。
7bf47863(09-11)DFlash2 完整投机解码移植 + Volta merge 回归修复;
f6f80c1e 恢复 bf16 tensor-core decode;a982c408 解除 MTP width-6+ verify 上限。
- 09-12~14:DFlash2 octet sliding attention、proposal top-k 融合、control/MLP epilogue 融合、
vision 编码加速。
- 阶段末状态(docs/v100.md):合成语料 decode 峰值 219 tok/s(K=1,接受率 99.2%);
五产物 sweep 中 NVFP4 MTP K=5 199.58 tok/s;真实文本实践甜点 K=3。
3. ninfer-v100-duo(双卡 TP2)
- 窗口:2026-09-19 ~ 2026-10-15(fork 点
c9674493)· 33 提交。
- 硬件基线:2× V100-SXM2 16 GB · NVLink · TP2 · Linux · CUDA 12.8。
- 基础形态:单卡移植之上的 TP2 张量并行——权重跨双卡切分(每卡 ~10 GiB),跨卡 allreduce;
一个构建支持四个 artifact(官方 Qwen3.8-27B NVFP4 / GSQ-RCO IQ3_S / Swift-1.5 / Coder390),
启动时择一;launcher tools/v100/ninfer-v100-duo.sh 默认 TP2 GPU 0/1 · INT8 KV ·
CUDA Graph · MTP3 · 单请求 · 127.0.0.1:8080。
- 重要更新:
7028d96a(09-19)add dual V100 NVLink inference——TP2 起点;
同日 88ed32f4 / 2b61144c 构建简化并自包含化。
- 09-21~28:TP2 decode/prefill 调优(fp8 投影加速、NVFP4 SwiGLU epilogue 融合、
attention decode 调优);8969d7d5 launcher 增 draft-tokens;vision-off 上下文提到 200000。
2be8b7b9(09-29)TP2 Vision + 可配置视觉预算。
78e12552(09-30)GGUF-blocks(GSQ-RCO IQ3_S)上双卡 TP2;10-01 连续 5 个 GGUF 性能提交
(shared memory 权重/codebook、int8 激活、MTP 验证形状调优)。
17f8e53a(10-01)one-shot NVLink all-reduce(小 TP2 消息)。
dc38f1d5(10-02)DFlash2 上双卡;960acfa1(10-11)Coder390 q6_k MTP。
0e748934 → c9674493(10-15)内嵌 Web 面板(chat / monitor / about)——fork 基点。
- 阶段末状态(README):NVFP4 MTP3 平均 138.06 tok/s、5s 峰值 148.2;MTP5 峰值 176.0;
GSQ 原生 262K 上下文;Agent 首请求 TTFT(Codex 11.7K token:GSQ 6.213 s vs NVFP4 10.452 s)。
4. ninfer-v100-duo-win(本仓库)
- 窗口:2026-10-18 ~ 今 · 65 个线性提交,无自身 merge,全部位于
上游 plus1998/NInfer-V100-Duo @ c9674493(tag fork-base/upstream-c9674493)之上。
- 硬件基线:Windows 11 x64 · 2× V100-SXM2 16 GB(TCC)· MSVC 14.38 + 便携 CUDA 12.8 · TP2。
- 基础形态:duo 产品面的 Windows 原生构建。产品面不变(同一
.ninfer / CLI / serve /
Op 契约);平台工作严格限制在文件 I/O(mapped-file + 对齐读的 artifact reader)、
终端检测、时间戳、构建管线;media 默认 stub(NINFER_STUB_MEDIA=ON),
CUDA runtime 静态链接,可执行文件自包含。
- 重要更新:
e3bcc1f4(10-18)Windows 构建落地(stub media)——阶段起点;81986726 artifact reader
与平台层上 Windows;9e51e9c7 inspect 模式;e73e5d83 TP2 长上下文 + soak 测试。
- 10-19:v0.1.0-win.1 发布验证。
- 10-20:
a7b7d53f media 移植 Winsock + UTF-8 路径;faff0f05 宿主测试套件上 Windows;
CI 全面换成 Windows 媒体管线(windows-2022 固定——CUDA 12.8 拒 14.51 MSVC;
zip 单包 + sha256;release body 脚本化)。
- 10-22~24:serve 精确逐请求速率;峰值 prefill/decode sweep;prefix registry 系列
(准入前回收 KV 页、admission plan 为可回收页唯一账本、registry 条目只持 rewrite checkpoint);
10-24 采纳文档治理政策 + V100X2 移植评估。
- 10-25(移植战役仅采纳的两项):
df1f2958 两 epoch packet 邮箱 collective(≤80 KiB 消息,decode +4.523%)
f9e5ce82 prefill 宽 T 路由 nvfp4_cutlass_sm70(prefill +25.274%,oracle A 类逐位一致)
- 10-26:
v0.1.1-win.6 验收(当前发布);战役终局记录封档(无挂起项)。
- 阶段末状态(docs/notes/v100-port-campaign.md):基线
34412f4f → 终态 77a493a5:
prefill 945.8 → 1187.1 tok/s(+25.5%),decode 129.7 → 135.8 tok/s(+4.7%),
oracle sha1 不变;17 项候选判决 15 项否决/出队、2 项合并。
三、演进主线
一句话:硬件/平台逐段收窄,能力面保持稳定。
| 阶段 |
窗口 |
硬件基线 |
基础形态一句话 |
代表更新 |
| ninfer |
06-25 ~ 09-02 |
5090 单卡 · sm_120a · CUDA 13 · Linux |
单卡极限引擎 + 完整产品面 |
并发/paged KV/prefix 缓存;Qwen3.8 nvfp4;MTP + DFlash2 |
| ninfer-v100 |
08-23 ~ 09-19 |
1× V100 · sm_70 · CUDA 12.8 |
软件 NVFP4 + FP16 TC 的对等实现 |
完整移植发布;合并上游 ~120 提交;DFlash2 移植 |
| ninfer-v100-duo |
09-19 ~ 10-15 |
2× V100 · NVLink · TP2 · Linux |
权重切分 TP2,2×16G 跑 27B,四 artifact |
双卡 NVLink TP2;TP2 Vision;GGUF-blocks;one-shot allreduce |
| ninfer-v100-duo-win |
10-18 ~ 今 |
Win11 · TCC · MSVC + 便携 CUDA 12.8 |
duo 产品面的 Windows 原生构建 |
mapped-file/Winsock/UTF-8;CI + 发布流 win.1→win.6;packet collective + cutlass prefill |
四、口径差异备注
- 卡间互联:阶段 3 按 NVLink 设计(one-shot NVLink allreduce);本仓库终局记录
(docs/notes/v100-port-campaign.md,2026-10-26 封档)写明本机为 PCIe 3.0 x4 P2P,
非 NVLink;而 HANDOFF.md 早期验收表记 "6 NVLink links @ 25.781 GB/s"。以终局记录为准,
早期数字疑为驱动层枚举口径。
- 40.3 tok/s vs 129.7 tok/s:HANDOFF 的 40.3 是 TCC 模式首通冒烟(batch 1);
战役基线 129.7 是 10-24 基线扫描(已含 duo 阶段全部调优)。测量口径不同,不矛盾。
- V100X2 平行线:tuxKOH/ninfer-V100X2 不在本仓库历史内——同源上游的平行分支
(自研 100+ 提交),卡间互联假设(PCIe P2P)与本机一致;10-24 的移植评估
(docs/notes/v100x2-port-assessment.md,已 superseded)结论:逐文件差异过大,
整体合并/cherry-pick 不可行,只采纳 packet collective 与 cutlass prefill 两项机制。
五、关键锚点与参考
commit / tag 锚点
| 锚点 |
日期 |
含义 |
410b9f6c |
06-25 |
首提交:qwen3.6-ultraspeed 设计总纲 |
5973313d |
09-02 |
v100 fork 分叉点(上游 master) |
71eb3565 |
08-23 |
完整 V100 移植发布(软件 NVFP4) |
51e3d9c3 |
09-10 |
合并上游 master(DFlash2 + ~120 提交) |
7028d96a |
09-19 |
双卡 NVLink 推理(TP2 起点) |
c9674493 |
10-15 |
内嵌 Web 面板 = 本仓库 fork 基点(tag fork-base/upstream-c9674493) |
e3bcc1f4 |
10-18 |
Windows 构建落地(本仓库首提交) |
34412f4f / 77a493a5 |
10-25 |
战役基线 / 终态(tag baseline/port-study-34412f4 / result/final-confirm→f9e5ce82) |
v0.1.1-win.6 |
10-26 |
当前发布(验收记录 docs/Releases/v0.1.1-win.6.md) |