跳到主要内容

公式与符号约定

本课程统一采用下面的符号。后续章节如果没有特别说明,都按本页理解。

公开资料怎么转成本页约定​

公开资料中的公式口径并不总是统一:量化教程可能把 scale 写成不同方向,benchmark 资料会区分平均值、分位数和场景口径,runtime 资料会把 tokens/s、prefill、decode、KV Cache 和内存带宽放在不同层面。本页只统一课程会反复用到的最小符号集,避免 Qwen GGUF、Q8/Q5/Q4、profiling 和 local API 报告里同一个词有多种算法。

外部资料中的公式口径本页统一成什么课程落点
DeepLearning.AI、PyTorch、ONNX 的线性量化scale = real_range / integer_range,再写 q 和反量化量化数学、Q8/Q5/Q4 质量解释
MLPerf、llama-bench、serving 资料平均值、P99、throughput、tokens/s 分开写profiling 表和 API 服务记录
Roofline 论文和 runtime 优化资料用算术强度判断 compute-bound / memory-bound解释低比特不一定更快
Hugging Face KV Cache、vLLM、LLM runtime 资料用粗估公式说明 cache 随上下文增长ctx-size、长上下文、Jetson 内存风险

本课程重绘:公式来源地图​

外部资料帮助统一本课程的符号来源:量化方案决定 scale 和粒度怎么解释,KV Cache 决定上下文和内存公式怎么解释,metrics 图决定平均值、分位数和吞吐不能混写。

来源图重点本页统一什么后续使用
vLLM quantization schemesscale、zero-point、bit-width、量化对象Q8/Q5/Q4 误差和格式说明
vLLM KV Cachecontext、batch、bytes_per_value 影响缓存ctx-size、长上下文、Jetson 内存估算
vLLM metricslatency、throughput、tokens/s、P99 要分开profiling 表、API smoke test、最终报告

公式页不是证明课。它的作用是让所有章节用同一套符号解释日志、表格和工程判断。

量化符号​

本课程统一采用:

scale = real_range / integer_range

不要把这里的 scale 理解成 inverse scale。

非对称线性量化:

q=clamp(round(xs)+z,  qmin⁡,  qmax⁡)q = \mathrm{clamp}\left(\mathrm{round}\left(\frac{x}{s}\right) + z,\; q_{\min},\; q_{\max}\right) x^=s(q−z)\hat{x} = s(q - z)

其中:

s=xmax⁡−xmin⁡qmax⁡−qmin⁡,z=round(qmin⁡−xmin⁡s)s = \frac{x_{\max} - x_{\min}}{q_{\max} - q_{\min}}, \qquad z = \mathrm{round}\left(q_{\min} - \frac{x_{\min}}{s}\right)

对称量化取 z=0z = 0,常用:

s=max⁡∣x∣2b−1−1s = \frac{\max |x|}{2^{b-1} - 1}

clipping 范围内,舍入误差上界是:

∣x−x^∣≤s2|x - \hat{x}| \le \frac{s}{2}

P99 延迟​

给定 nn 次请求延迟 t1,t2,…,tnt_1,t_2,\ldots,t_n,P99 表示 99% 请求不超过的延迟值:

P99=inf⁡{t∣F(t)≥0.99}P_{99} = \inf \{t \mid F(t) \ge 0.99\}

工程计算时:

sorted_t = sort(t)
P99 = sorted_t[ceil(0.99 * n) - 1]

平均延迟看总体快不快,P99 看尾部慢请求会不会影响体验。端侧交互场景通常不能只报平均值。

Throughput​

传统模型吞吐:

throughput=batch_sizebatch_elapsed_timethroughput = \frac{batch\_size}{batch\_elapsed\_time}

LLM 生成吞吐:

tokens/s=generated_tokensdecode_elapsed_timetokens/s = \frac{generated\_tokens}{decode\_elapsed\_time}

LLM 中不要把 requests/s 和 tokens/s 混为一谈。一个请求生成 32 tokens 和 512 tokens,对服务压力不同。

Roofline 与算术强度​

算术强度:

AI=FLOPsBytesAI = \frac{FLOPs}{Bytes}

Roofline 上限:

Performance≤min⁡(PeakFLOPs, AI×MemoryBandwidth)Performance \le \min(PeakFLOPs,\ AI \times MemoryBandwidth)

单位检查:

AI 的单位是 FLOPs/Byte。
MemoryBandwidth 的单位是 Byte/s。
AI x MemoryBandwidth 的单位是 FLOPs/s。

LLM decode 常接近 memory-bound,因为每生成一个 token 都要重复读取大量权重和 KV Cache。

KV Cache 粗估​

KV Cache 占用和层数、KV head 数、head 维度、上下文长度、batch、并发和数据类型有关。

粗略写法:

KVBytes≈2×layers×kv_heads×head_dim×context×batch×bytes_per_valueKVBytes \approx 2 \times layers \times kv\_heads \times head\_dim \times context \times batch \times bytes\_per\_value

前面的 22 来自 key 和 value 两份缓存。实际 runtime 可能有 padding、对齐和额外 workspace,最终以日志和 profiling 为准。

参考资料​

本章吸收方式: