返回 M01~M90 教材库
M52 · 预习教材教材已备 ≠ 学习已完成

M52:小型推理 Benchmark:同时记录时间、内存与质量

有效的推理 benchmark 在固定模型和输入上只改变 context/output 或 precision,并把延迟、内存与输出质量作为彼此独立的观测量。

2026-10-14benchmark、latency、memory、precision、quality

内容类型:预习教材(不代表已完成)
日期:2026-10-14
阶段:P1 · AI Model Engineering 90
周次:W8 · 推理、KV Cache、量化与 serving
节奏:周三引导练习
状态:教材已备;学习未完成
标签:benchmark、latency、memory、precision、quality

一句话定义

有效的推理 benchmark 在固定模型和输入上只改变 context/output 或 precision,并把延迟、内存与输出质量作为彼此独立的观测量。

学习目标

  1. 能设计两种配置的公平小型 benchmark。
  2. 能区分 warm-up、TTFT、decode 速度、峰值内存与质量代理。
  3. 能避免把单机一次运行外推为通用后端排名。

核心知识

Benchmark 首先需要定义工作负载:模型/权重版本、后端、设备、输入 token 数、输出上限、batch、解码策略、cache、precision 和并发。缺少其中任何一项,数字都难以解释。

首次运行可能包含模型加载、图编译、内核选择和缓存建立,因此冷启动与热运行应分开。同步加速设备也很重要:若计时前后未同步,记录的可能只是异步提交时间。

质量不能只用“文本看起来一样”。精度或量化变化可能改变 logits,并在自回归中逐步放大。教学小测可固定 5~20 条探针,记录 exact token、结构合法、关键字段一致或小任务 loss;这不是完整质量评估,但比单个例子可靠。

内存至少区分静态权重与动态 cache/activation。不同平台的监控口径不同,应注明是进程 RSS、设备已分配、保留内存还是峰值估计,不能把不同口径放同一列直接比较。

机制/推导

两种常见实验:

  • 长度实验:模型、精度、batch 不变,比较短/长 context 或短/长 output。可观察 prefill 与 decode 的不同扩展趋势。
  • 精度实验:输入输出边界、模型结构不变,比较 FP32/FP16/BF16 或可用的量化配置。权重字节减少不保证速度线性提升,后端内核和反量化开销会影响结果。

吞吐可写 generated_tokens / decode_time,但应排除或明确是否包含 prefill。P50 只反映中位数;交互服务还关心 P95/P99。单用户小测可先报告每次值与范围,不必制造统计精度。

最小练习或观察步骤

  1. 在“两个 context/output 配置”与“两种 precision”中只选一种。
  2. 写 benchmark 协议,固定模型、prompt、seed/greedy、batch、输出上限和后端。
  3. 执行 1~2 次 warm-up;记录冷启动但不与热运行混合。
  4. 对每个配置重复少量次数,分别记录 TTFT、decode 时间、token 数和内存口径。
  5. 在同一固定探针上比较关键 token、字段或 loss;结果不一致时保留差异。
  6. 表格同时保留配置、时间、内存、质量四组列。
  7. 结论仅限当前设备、后端和工作负载。

常见误区

  • A 配置先冷启动、B 配置热运行,却直接比较。
  • 输出 token 数不同仍用总时间判断速度。
  • 不同步设备计时,得到过低耗时。
  • 只测一条 prompt,且它恰好提前遇到 EOS。
  • 量化文件更小就宣称速度更快、质量不变。

金融 / Web3 / 文档场景连接

文档抽取的质量探针可检查金额、日期、账户尾号和证据坐标;Web3 场景可检查地址是否逐字符一致。速度提高却使一个数字 token 改变,可能远比一般语句差异严重,因此需按字段风险分层。

自检问题

  1. 为什么冷启动和热运行要分开?
  2. 如何公平比较输出长度不同的两次生成?
  3. 内存数字必须附带什么口径?
  4. 为什么量化后的文件大小不能直接推出延迟?

专业课程对齐

  • 精读 Stanford CS336 的 systems、inference 和 benchmarking 课题,学习先定义 workload 再解释 throughput/latency 的方式。
  • 精读 PyTorch Tutorials 的 profiler、benchmark utilities、CUDA synchronization 与内存主题,确认 warm-up、异步计时和 allocated/reserved 口径。
  • 选读 vLLM PagedAttention 中 cache 访存路径,仅用于解释 context、batch 为何会改变资源曲线。

深入学习提示

阅读顺序为 CS336 协议设计→PyTorch 测量实现→vLLM 机制解释。先写冻结的 workload manifest:model/weights、backend、device、precision、batch、input/output tokens、decode policy、cache 和并发;然后分开 cold/warm,报 TTFT、TPOT、E2E、generated tokens/s 及明确口径的峰值内存。质量列使用固定探针的 exact token、关键字段或 loss,不与性能合成单分。反例是未同步 GPU 就计时,或把模型加载/编译只计入其中一个配置,最后将单机一次数字外推为后端通用排名。

学后填写区

  • Benchmark 问题:
  • 固定条件:
  • 两个配置:
  • 实际测量表位置(未运行可留空):
  • 结论适用边界:
学完后,请把自己的理解、练习结果和仍不确定的问题写入文末“学后填写区”,再到唯一进度账本更新状态。预先阅读后续教材不会自动增加完成数。