AI 推理工程 / 性能评测

本地推理容量规划工具

先按总参数与位宽估算名义权重存储,再固定 Ollama 模型 digest、生成参数和结构化任务采集质量、TTFT、总耗时与吞吐,为本地推理建立可复查容量基线。

2026-07 - 持续迭代当前代码
  • Node.js
  • Ollama
  • Qwen3
  • Streaming HTTP
  • Node Test Runner
  • JSON

Reuse contract

复用合同

已独立复现JSON 清单
最近核验
2026/07/19
固定版本
83952b3bae58
代码入口
project-kits/local-inference-capacity-planner/README.md公开副本固定源码

输入

  • 型号名、十进制名义总参数、可选激活参数与 16/8/4-bit 位宽
  • Ollama base URL、模型名称和由 /api/tags 返回的精确模型 digest
  • 带结构化验证器的固定任务集,以及预热、轮数和顺序合同
  • temperature、seed、num_ctx、num_predict、think 和 JSON format 设置

输出

  • 版本化名义权重 JSON:公式、型号输入、理想 GiB 与未覆盖的运行时开销
  • 每次请求的原始 JSON 文本、正确性、TTFT、总耗时和 token 统计
  • 完成率、任务正确率、TTFT P50/P95、总耗时 P50/P95 与输出吞吐 P50/P95
  • CPU、内存、操作系统、模型量化与 capture 时间等环境证据

可执行命令

model-memory-capture采集
npm run lab:model-memory -- --format json --out /tmp/younis-ai-lab-model-memory.json
平台
macOS 或 Linux;离线 Node.js
权威输出
/tmp/younis-ai-lab-model-memory.json;协议、公式、型号输入、16/8/4-bit GiB 与排除项
副作用
会修改运行环境
前置条件
  • Node.js >=22.12.0
  • POSIX /tmp 可写
local-inference-test测试
npm run lab:inference:test
平台
macOS、Linux 或 Windows;离线 fixture
权威输出
TAP stdout;流解析、指标、CLI、digest 漂移与冻结工件合同
副作用
不修改状态
前置条件
  • Node.js >=22.12.0
  • 仓库根目录;不需要真实 Ollama
local-inference-benchmark运行
npm run lab:inference:benchmark -- --base-url http://127.0.0.1:11434 --model qwen3:8b --expected-digest 500a1f067a9f782620b40bee6f7b0c89e17ae61f686b92c24933e4ca4b2b8b41 --rounds 2
平台
macOS 或 Linux;Ollama 本地 HTTP
权威输出
/tmp/younis-ai-lab-qwen3-8b.json;模型/环境身份、14 次运行、正确性与延迟吞吐汇总
副作用
会修改运行环境
前置条件
  • Ollama 已监听 127.0.0.1:11434
  • qwen3:8b 的 /api/tags digest 与合同完全一致
  • POSIX /tmp 可写且机器负载可记录

可直接复用

  • 在同一机器上比较模型或量化版本前冻结身份、任务和生成参数
  • 为结构化抽取、策略判断和简单代码审查建立延迟与正确性基线
  • 在容量扩展前增加并发、上下文长度和持续负载矩阵,估算 SLO 余量

明确边界

  • 冻结结果只有一台机器、一个 qwen3:8b 量化版本、14 次串行短请求,P95 样本量很小。
  • 未测并发、排队、长上下文、内存峰值、能耗、冷启动、持续负载或故障恢复。
  • 时间指标受机器负载与缓存影响,新 capture 是新观察,不能要求与历史结果逐字节一致。

固定结果工件

  • DeepSeek-R1 与蒸馏型号名义权重估算nominal-model-memory-estimates
    仓库路径
    labs/model-memory-estimator/results/nominal-weight-estimates-v1.json
    SHA-256
    beadddaf7bf3e118e78ee3b38550912c9f7e91a09fa785797463eda77577950b
    生成/验证命令
    model-memory-capture
  • Qwen3 8B 单机流式基线qwen3-8b-streaming-baseline
    仓库路径
    labs/local-inference-benchmark/results/2026-07-13-qwen3-8b.json
    SHA-256
    1f8ba8056d8978adf6f01d100e62805d223afcad92f97fc04d6a543fe03d863f
    生成/验证命令
    local-inference-benchmark

为什么需要容量合同

模型下载成功只证明权重能被运行时识别,不证明它能在业务任务上给出正确结构、满足首 token 延迟或承受目标并发。本项目把模型身份、任务质量和流式性能放进同一份报告,避免只展示一张聊天截图或单个 token/s 数字。

项目分为两层。labs/model-memory-estimator/ 先用名义总参数和位宽排除明显不可行的存储路线;它明确把 MoE 激活参数视为计算稀疏度,不拿 37B activated 替代 671B 总权重。冻结 JSON 覆盖 DeepSeek-R1 与六个蒸馏型号,并排除量化元数据、KV Cache、激活、运行时 workspace、通信和冗余。

labs/local-inference-benchmark/ 再直接调用本机 Ollama HTTP API,把“权重能放下”推进到“固定模型能否完成任务并满足流式性能”。评测器先从 /api/tags 读取模型 metadata,再发送预热请求,随后按固定顺序执行两轮七个任务。

输入与验收

任务覆盖事故分级、发票税号抽取、JavaScript 缺陷识别、政策时间查询、写操作审批判断和算术。每个任务要求只输出 JSON,并由独立 JavaScript 函数检查字段和值。事故分级同时保留含糊枚举和受约束枚举两个版本,用于区分模型能力问题与接口合同问题。

生成设置固定为 temperature: 0seed: 42num_ctx: 4096num_predict: 96think: false 和 JSON format。结果保存模型名称、digest、大小、量化信息,以及每轮每题的原始响应。这样更换模型文件或参数时不会静默沿用旧结论。

冻结观察

2026-07-13 工件记录的 qwen3:8b digest 为 500a1f067a9f782620b40bee6f7b0c89e17ae61f686b92c24933e4ca4b2b8b41,量化为 Q4_K_M。14 次请求全部完成,任务正确率为 0.8571428571;TTFT P50/P95 为 178.995/184.003 ms,总耗时 P50/P95 为 636.774/1869.235 ms,输出吞吐 P50/P95 为 14.98/15.828 token/s。

两次错误都来自“P1 或 P2”这一含糊字段示例;模型按字面输出了不符合验收器的值。把 schema 收紧为 severity 只能取字符串 P1 或 P2,并给出 JSON 示例后,两轮都返回 P1。这说明接口约束本身也是本地部署质量的一部分。

运行

ollama list
npm run lab:inference:test
npm run lab:inference:benchmark

单元测试使用本地 stream fixture,不需要真实 Ollama;benchmark 需要服务已经监听 127.0.0.1:11434 且目标模型已安装。脚本不会自动拉取权重,新结果写入 /tmp/younis-ai-lab-qwen3-8b.json,不覆盖历史工件。

怎样扩展成容量规划

第一步在相同模型和任务上增加并发数、输入长度、输出长度和冷/热启动矩阵,同时记录 RSS、模型内存和排队。第二步为每个工作负载定义质量下限、TTFT/TPOT SLO 与失败率,再计算满足门槛的最大稳定并发。第三步才比较量化、运行时或硬件的单位合格请求成本。

每次扩展都应保存模型 digest、运行时版本、机器规格、任务 revision 和原始逐请求结果。只比较平均 token/s 会掩盖首 token、尾延迟和错误输出,不足以决定生产容量。

当前边界

固定观察不是跨模型排名,也不是生产 serving 压测。14 次串行短请求无法支持可靠的尾延迟、并发或稳定性结论;本项目也未记录电力、人工运维和硬件摊销。当前 reproduced 等级只说明在记录环境中执行过该合同并保存结果。

Research links

关联文章

这些文章分别提供问题背景、设计依据、实验验证或运行证据。

  1. 本文实际运行名义权重存储估算器,区分 671B 总参数与 37B 激活参数,并用冻结 JSON 限定 16/8/4-bit 理想估算的适用边界。

  2. 发布 2026/06/27

    本文梳理本地部署在显存、速度、质量和维护上的取舍,本项目把其中速度与任务质量变成固定采集合同。

  3. 本文把 Prompt 定义为包含目标、上下文、约束、输出格式和评估标准的接口合同;本项目据此固定 JSON 任务、生成参数与独立验证器,并保留含糊字段与收紧 schema 的对照失败样本。

  4. 本文要求按满足质量与 SLA 的成功任务总成本选型,本项目先提供单机延迟、吞吐和正确性基线。

  5. 本文公开 qwen3:8b 的 14 次串行流式请求、固定模型身份、逐任务输出和含糊提示失败样本。