推理全过程 —— 一段音频到一行文字的完整旅程
第 7 课你在纸上算过每一站的矩阵;这一课把它们串成一次真实的推理调用,并补讲此前刻意跳过的两个引擎机制:KV Cache 和 Prefill/Decode 两阶段。理解了它们,你就理解了压测报告里 TTFT 为什么随并发上升、流式为什么会积压。
出发:一段 10 秒的音频
例子贯穿全课:10 秒录音,内容是「明天下午三点开会」。按已学知识,进引擎前它已经变成:
- 160,000 个采样点 → 998 帧 × 128 维 mel → AuT 编码 → 124 个音频嵌入(每嵌入 80ms,第 6 课)
- 这些嵌入经投影器对齐到 LLM 空间(1024 → 1024,0.6B 版)
接下来的问题是:这 124 个向量怎么「变成」文字?答案分四站。
第 1 站:输入组装(模板即序列)
第 6 课的对话模板,现在从张量视角看——它就是最终送入 LLM 的位置序列:
| 位置 | 内容 | 嵌入来源 |
|---|---|---|
| 1–6 | <|im_start|>system … 热词(如有)…<|im_end|> | 词嵌入表(第 7 课第 5 站:查表 = one-hot 左乘) |
| 7–9 | <|im_start|>user<|audio_start|> | 词嵌入表 |
| 10–133 | <|audio_pad|> × 124 | 音频嵌入(投影器输出) |
| 134–136 | <|audio_end|><|im_end|><|im_start|>assistant | 词嵌入表 |
| 137–142 | language Chinese <asr_text> | 词嵌入表(输出前缀,强制语言) |
合计约 142 个位置。注意:序列里没有「明天下午三点开会」——那是模型要生成的,不是输入。
第 2 站:Prefill(预填充)—— 一次算完全部输入
Prefill 把这 142 个位置一次性并行过一遍 28 层 Transformer:
- 每层:142 个位置各自算 Q/K/V,做自注意力(第 2 课),过 FFN;
- 关键副产物:每层每个位置的 K、V 向量被缓存下来——这就是 KV Cache;
- 读出最后一个位置的隐藏态 → 输出层(词表 151,936)→ logits → softmax → 本步预测:「language」。
Prefill 的算力特征:大量并行矩阵乘——142 个位置同时算,GPU 的并行能力正好吃满。它是「算力 bound」的活儿。
第 3 站:Decode(逐词元解码)—— 一步一个字
从「language」开始,进入循环:每步把上一步的输出 token 嵌入送入模型,只计算一个新的位置,注意力通过 KV Cache 读取全部历史:
| 步 | 已生成 | 本步输出 |
|---|---|---|
| 1 | (prefill 后) | language |
| 2 | language | Chinese |
| 3 | language Chinese | <asr_text> |
| 4 | …<asr_text> | 明 |
| 5–10 | …明 | 天 → 下 → 午 → 三 → 点 → 开 |
| 11 | …开会 | 会 |
| 12 | …开会 | <|im_end|>(停止) |
Decode 的算力特征与 Prefill 完全相反:每步只算 1 个位置(并行度=1),但每一步都要把全部权重从显存读一遍。算一下账:1.8GB 权重 ÷ T4 的 320GB/s 带宽 ≈ 每步 5.6ms 的纯读取下限——这就是「访存 bound」:瓶颈不在算,而在搬。
第 4 站:Detokenize(后处理)—— 从词元到正文
解码出的是词元 id 序列,后处理三步:① id → 词表文本(词嵌入表的反查,不是矩阵乘,是查字典);② 剥离特殊词元(language、Chinese、<asr_text>、<|im_end|>);③ 取 <asr_text> 之后的正文 → 「明天下午三点开会」。processor.batch_decode(..., skip_special_tokens=True) 一步做完。
推理账本:一段音频的全部开销(可运行)
把四站的账算成数字(0.6B、T4 fp16、10 秒音频;理论下限,真实值含框架开销):
检索练习
本课主读材料
Karpathy: Let's build GPT — the coding part(Zero to Hero 系列后半):视频里 idx_cond = idx[:, -block_size:] 那一行,就是"decode 只看最后 block_size 个位置"的代码形态;KV Cache 是它的工程化改造。
进阶(可选):vLLM 文档的 PagedAttention 概念页——KV Cache 的"操作系统级"管理,生产推理引擎的核心。
本课新术语已入 术语表:KV Cache、Prefill、Decode、Detokenize。