ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

NInfer 性能测量方法论:如何像官方一样复现 tok/s 与 TTFT 基准测试

2026/10/2 21:57:08 拓冰建站 浏览量
NInfer 性能测量方法论:如何像官方一样复现 tok/s 与 TTFT 基准测试 NInfer 性能测量方法论如何像官方一样复现 tok/s 与 TTFT 基准测试【免费下载链接】ninferHigh-performance single-GPU inference for selected model checkpoints and GPUs.项目地址: https://gitcode.com/gh_mirrors/ni/ninfer想知道 NInfer 单卡推理到底有多快本文带你用官方同一套方法复现tok/s 吞吐与TTFT首 token 延迟基准测试从固定测试环境、指标定义到一条命令跑出可对比的报告全部讲清楚。一、先搞清楚NInfer 的三层基准测试体系NInfer 的性能数字不是一锤子测出来的而是分三层、各有分工详见 bench/README.md层级工具测什么能证明什么Op 层ninfer_op_bench系列单个算子Linear、Attention、RMSNorm…内核实现效率引擎层ninfer_bench完整 Engine 的 prefill/decode 吞吐引擎路线吞吐服务层ninfer-serve Python runner真实 HTTP 请求下的 tok/s 与 TTFT官方发布的性能数字⚠️ 新手最容易踩的坑Op 层的速率不能代表 HTTP 服务性能。官方文档明确要求三者边界不可混用见 bench/README.md 开头。本文重点教你复现第 2、3 层。二、官方通用测试环境复现数字的第一块基石官方所有公开数据都来自同一张NVIDIA RTX 509032 GiB的固定画像完整定义在 docs/performance/methodology.md 的 Common serving profile路由常驻ninfer-serve本地回环 OpenAI Chat CompletionsstreamfalsePrefill 分块1024 tokensKV 缓存Qwen3.8 用 FP8 E4M3 row-256Qwen3.6 用 INT8 group-64CUDA Graph 开启、前缀复用关闭采样固定温度 0.6、top-p 0.95、top-k 20贪心则为精确 argmax启动与预热不计入测量请求复现时只要改变其中任何一项结果就和官方数字不可直接对比——这正是方法论的价值所在。三、读懂 tok/s三个解码速率千万别混用NInfer 的方法论里最严谨的一点是把时间边界写死在指标定义里methodology.md Metrics and statistics 一节指标公式适合回答的问题Prefill phase (tok/s)prompt_tokens ÷ prefill 秒数长文档处理速度Server TTFT (ms)prepare vision prefill 三阶段之和服务端首响应快慢Decode phase (tok/s)(completion_tokens − 1) ÷ decode 秒数单请求解码速度Corpus decode (tok/s)总解码 token ÷ 整个语料 makespan一批请求整体有多快Steady decode (tok/s)稳态区间提交 token ÷ 区间秒数满并发下可持续吞吐 记住三种 decode 速率的时间分母不同官方严禁把它们放进同一个不带标签的列里。四、如何复现 tok/s 吞吐基准测试4.1 引擎级ninfer_bench先开启 benchmark 目标并构建约两步cmake -S . -B build -DNINFER_BUILD_BENCHMARKSON cmake --build build -j --target ninfer_bench然后跑一个 2048 输入 128 输出的用例./build/bench/ninfer_bench --weights out/qwen3_6_27b.ninfer -pg 2048,128 -r 5 --warmup 1它从冻结语料 bench/fixtures/bench_corpus.ids 中切片出精确 token 数只走公开的Engine::generate()报告 schema v15。想要整套矩阵可直接用编排脚本默认输出 JSON summary.csv 到profiles/bench/python3 tools/bench/run_ninfer_bench_matrix.py --preset core4.2 服务级真实 HTTP 吞吐官方模型页如 docs/performance/qwen3.6-27b.md里的表格全部由 tools/bench/run_serve_corpus.py 串行跑固定 fixture 得到。复现命令长这样python3 tools/bench/run_serve_corpus.py \ --serve build/apps/ninfer-serve \ --artifact qwen3_6_27bout/qwen3_6_27b.ninfer \ --mode mtp3 \ --output profiles/bench/my_mtp3_run工作负载是冻结的15 个 fixtureAIME 长推理 ×3 Code/Story/Translation/Structured ×12× 5 个种子 75 个请求定义见 examples/cli/manifest.json。输出包含run.jsonl原始请求响应、summary.csv/summary.md分类汇总——原始报告就是你复现结果的可审计证据。并发饱和测试C1/2/4/8 的 steady decode则用 tools/bench/run_serve_concurrency.py每个并发点都会新起一个 Serve 进程避免状态污染。五、如何测量 TTFT 首 token 延迟TTFT 在 NInfer 里有两个边界必须分清Server TTFT内部相位和prepare vision prefill 三阶段时长之和不含网络传输与排队外部流式 TTFT黑盒测量由 tools/bench/ttft/README.md 定义的客户端计时——TTFT t1 − t0其中 t0 是请求字节写出的瞬间t1 是收到第一个非空模型输出 delta的时刻。建连、JSON 序列化不算在内HTTP 头、usage 等元数据也不算模型输出。黑盒客户端只发公开 HTTP 请求从不调用 Engine、不读服务端日志保证测量的独立性。它使用冻结的文本/媒体 fixture——比如这 56 张字节确定、互不相同的 1024×1024 测试图bench/fixtures/ttft/README.md每张展开成 12 MiB 的 Vision 预处理张量专门压测媒体路径一条命令跑完整个受控 campaign自动为每个样本启动全新 Serve 进程、落盘 raw/summary 三件套python3 tools/bench/run_serve_ttft_campaign.py --campaign resource --samples 5汇总报告给出 min / 中位数 / max / MAD不发布QPS、P95 或推测性内部缓存动作——报告里没写的就不要自己脑补。六、像官方一样发布统计与对比规则 复现出数字只是第一步methodology.md 还规定了怎么诚实地使用它们单请求表报告算术平均 ± 样本标准差单波/单语料点没有样本偏差接受率acceptance在相位表里取逐请求比值的平均在语料表里取总接受/总起草两种聚合方式不可互换对比公式写死吞吐加速 new / baselinemakespan 加速 baseline / new异常样本重复、输出截断保留在统计里并在旁边标注不悄悄删数据每次复现记录日期、权重身份、Git 修订、硬件/工具链、样本数、运行配置七、复现陷阱清单新手速查✅KV 类型不匹配Qwen3.8 用--kv-dtype fp8Qwen3.6 用int8runner 会校验并记录实际 KV 表示随机续写同 prompt 种子在不同权重/后端下仍可能产生不同 token 总量报告时把 token 总数和速率一起贴出来别用旧 corpus 片段拼新结果并发点报告不可断点续传跨进程拼接会破坏 makespan 与稳态区间的定义预热与启动不算成绩官方画像中它们永远在计时窗口之外换硬件请重测固定参考带宽如 RTX 5090 的 1792 GB/s DRAM写进了 Op 层报告换卡后百分比全部作废八、延伸阅读测量与发布总纲docs/performance/methodology.md各模型实测结果页docs/performance.mdRunner 用法与报告文件说明tools/bench/README.md全部 Op 基准契约bench/README.md困惑度离线因果打分方法论docs/perplexity.md按这套方法跑一遍你得到的不只是几个 tok/s 数字而是一份别人可以逐行复核的性能证据——这正是 NInfer 官方数据的底气所在。【免费下载链接】ninferHigh-performance single-GPU inference for selected model checkpoints and GPUs.项目地址: https://gitcode.com/gh_mirrors/ni/ninfer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考