跳转至

附录 习题参考答案

第一章 引言

  1. 训练贵在重复:7B 模型 + 1T tokens ≈ 1 万亿次前向 + 反向,每次反向算力 ≈ 2-3× 前向;推理一次只 1K 前向。算力差约 10⁶ 倍。
  2. 五层及例子:应用(ChatGPT)/ 框架(vLLM)/ 模型(Llama-3)/ 运行时(CUDA、FlashAttention)/ 硬件(H100)。
  3. PagedAttention 把 KV Cache 切成 block,用 block table 记录 seq→block 映射——本质是 OS 虚拟内存"页 + 页表"机制在 KV 上的复用,解决碎片与不可共享前缀问题。
  4. 8B × 2 bytes(fp16)= 16GB。
  5. 业务选开源模型 + LoRA 微调;从零训成本 $1M+ 起且需要大量数据与团队;SFT 用 Llama-3-8B + 业务 QA 数据即可。
  6. Static 等所有 seq 完成才释放槽位,短请求 GPU 空转;Continuous 每步重组 batch,完成即出,新请求即入,GPU 利用率 30-50% → 90%+。
  7. 五层视角:应用(前端解析错)/ 框架(prompt 模板错)/ 模型(理解力不足)/ 运行时(采样异常)/ 数据(RAG 召回错)。
  8. 陷阱示例:① 以为参数大就一定强;② 以为 benchmark 高业务就好;③ 以为 LLM 能精确算数;④ 以为开源模型一定不如闭源。

第二章 深度学习基础

  1. 没有非线性时多层线性变换 W2·W1·x = (W2·W1)·x 可合并为单层,模型表达力不增。
  2. 训练算力 ≈ 2-3× 推理:前向 + 反向(反向遍历计算图,要算每个节点梯度)+ 优化器更新。
  3. AdamW 把权重衰减从梯度中解耦(不进入动量),让正则化更稳定;LLM 训练对正则化敏感,AdamW 表现更好。
  4. loss = -Σ log P(x_{t+1} | x_{1..t})。看似简单但任务极难:要少错必须学语法、知识、推理、风格,故能涌现通用能力。
  5. bf16 范围同 fp32(8 位指数),不会 overflow;fp16 范围小(5 位指数),训练大模型易 NaN。bf16 精度低但够用。
  6. loss.backward() 沿计算图反向传播,按链式法则计算每个 requires_grad=True 参数的梯度并存入 .grad
  7. 可能原因:lr 太大、数据含异常值、bf16 数值溢出、初始化不当。处理:grad_clip、降 lr、查数据、上 fp32 warmup。
  8. warmup 让 lr 从 0 线性升到目标,避免初期梯度方差大导致发散;LLM 训练初期权重未稳定,必须 warmup。
  9. 7B 模型:权重 14GB + Adam 状态 56GB(fp32 m,v) + 激活(batch=128 × seq=4096 × hidden=4096 × 32 层 × 2 bytes ≈ 64GB) + 梯度 14GB ≈ 148GB。

第三章 Transformer

  1. Attention(Q,K,V) = softmax(QK^T / √d_k) · V。Q 问什么、K 匹配什么、V 提供什么;QK^T 得注意力权重,softmax 归一化,乘 V 加权聚合。
  2. d_k 大时 QK^T 方差变大,softmax 进入饱和区(接近 one-hot)导致梯度消失;除 √d_k 让方差稳定在 1。
  3. MHA 每 head 独立 K/V;MQA 所有 head 共享 1 个 K/V(极小 cache);GQA 多 head 共享一组 K/V(折中)。GQA 在 KV Cache 与质量间取得平衡。
  4. RoPE 在 Q/K 上乘旋转矩阵,使注意力只依赖相对位置;外推性好——训练 4K 可推 32K+ 而无需重训。
  5. FFN 占大头因为参数量 = 8d²(SwiGLU 三个矩阵,升维 4×),而 attention 每层仅 4d²。
  6. Causal Mask 是上三角为 -∞ 的矩阵,加到 scores 上后 softmax 让上三角权重为 0,每位置只看到自己和之前。
  7. 12 × 80 × 8192² ≈ 64B(粗估),实际 70B 因 GQA 与 FFN 比例略低。
  8. 1 token ≈ 2 × 7×10⁹ = 14 GFLOPS;4096 tokens ≈ 57 TFLOPS。
  9. 残差让梯度能"短路"回流,缓解深层梯度消失,让 100+ 层可训。

第四章 Tokenizer

  1. 子词级平衡:词表可控、无 UNK(回退字符 / 字节)、相似词共享子词有泛化。
  2. BPE:① 切字符级;② 统计相邻 pair 频次;③ 合并最高频 pair 入词表;④ 重复直到词表达目标。
  3. BBPE 以字节为基础单元,任何字符最终都能表示为字节序列,永不产生 UNK。
  4. 中文 1 字 ≈ 1.5-2 token;英文 1 词 ≈ 0.75-1.3 token。中文成本约 2-3 倍。
  5. Tied Embedding 让输入 embedding 与输出 LM head 共享权重(本质是同一映射的两侧),节省 V × d 参数(Llama-3 8B 约 500M)。
  6. RoPE 让注意力只依赖相对位置,外推性好——训练 4K 可推 32K+ 无需重训。
  7. 128K × 128K × 4 bytes(fp32 score) = 64GB(仅一层 attention score),加上 KV Cache 更大。
  8. 模板不匹配会让指令 token 与内容 token 混淆,模型无法区分系统/用户/助手,输出乱码或质量骤降。
  9. 中文一字可能是 2-3 token,单 token 的 bytes 可能不构成合法 UTF-8 边界,要缓冲到能 decode 再显示。

第五章 预训练

  1. next-token 预测足够通用(所有文本都可用)+ 足够难(要少错须学语法/知识/推理)+ 数据规模无上限 + scaling 友好。
  2. Chinchilla 建议 70B 训 1.4T tokens;Llama-3 实际训 ~15T(10 倍超训),仍降 loss。
  3. 清洗 4 步:去重(MinHash,去重复网页)/ 语言识别(fastText)/ 质量评分(perplexity)/ 安全 PII 过滤。
  4. 6 × 7e9 × 1e12 / (990e12 × 0.45) ≈ 9.4e7 GPU·秒 ≈ 26000 H100·时 ≈ 1100 H100·天。
  5. MoE 多 expert,router 每次只激活 Top-K(如 8 选 2),总参 47B 但激活 13B,相同算力下参数容量大幅提升。
  6. Phi-2 用教材级数据训 1.4B,性能逼近 7B 通用模型——证明数据质量 > 数据量。
  7. Llama-3 发现过训仍持续降 loss,且推理时小模型部署成本低,性价比高。
  8. 业务选 LoRA 或 SFT:投入产出比最高;CPT 仅在领域数据差异大(医疗/法律)才值得;预训练成本太高。

第六章 后训练

  1. 预训练目标是 P(text),给前缀续写最可能后继——你问"用三句话介绍 X",模型可能续写"用四句话介绍 Y"等无关内容,因为训练数据中这类结构多。
  2. prompt 部分是给定条件,不能算 loss;只对 completion 算 loss 才让模型学"如何回答"而非"如何提问"。
  3. 三阶段:SFT(监督微调)/ RM(训奖励模型,数据 chosen vs rejected)/ RLHF(PPO 用 RM 当环境训策略)。
  4. KL 约束防止 policy 漂离 SFT 模型太远;没约束会 reward hacking(输出乱码骗高分)。
  5. DPO 从偏好数据直接推导 loss,跳过 RM 与 PPO;只需 policy + ref 两个模型,超参少、稳定。
  6. LoRA 训参 < 1%(仅 A、B 两个低秩矩阵);有效因为模型权重更新通常是低秩的。
  7. over-refusal = 合理问题被拒答。监控:抽样拒答率、人工审计拒答是否合理。
  8. 决策:业务定制 → LoRA;要强对齐 → SFT;要偏好对齐 → DPO;要极致效果 → SFT+DPO 多轮。
  9. RLAIF 用 AI 当裁判替代人工标注,成本低、可大规模;现代主流因为人工偏好成本太高。

第七章 量化

  1. 7B:fp16=14GB / INT8=7GB / INT4=3.5GB。
  2. PTQ 训练后量化无需重训;QAT 训练时模拟量化,质量好但成本高。PTQ 常用因为 90% 场景质量够。
  3. AWQ 保护"显著权重"(激活幅度大对应的),用 per-channel scaling 给关键权重更高有效位,质量与速度兼顾。
  4. per-group 每 N 元素一组 scale,粒度细,离群值影响局部化,误差小;metadata 占比稍升。
  5. FP8 范围与 fp16 接近、几乎无损、无需校准、H100 原生支持;INT8 需校准、有精度损失。
  6. MoE 多 expert,router 选 Top-K,总参数大但激活少。代表:Mixtral 8×7B(总 47B 激活 13B)。
  7. 2:4 sparse 需要训练时引入稀疏 mask(每 4 个连续元素恰好 2 个 0),PTQ 无法达成,因硬件需特定结构。
  8. 不量化:训练 / 微调(量化为推理设计);高质量任务(数学代码 INT4 掉点);小模型(量化收益小损失占比大);不支持 INT4 kernel 的硬件。

第八章 KV Cache

  1. 无 cache:O(L²·d) 算力(每步重算全部 K/V);有 cache:O(L·d) per step(只算新 token 的 Q,K,V,append K,V)。
  2. 2 × 32 × 4096 × 8 × 128 × 2 × 8 ≈ 4.3GB。
  3. GQA 多 head 共享 K/V 组,KV heads 减少 4-8 倍,KV Cache 同比例下降。质量略降但工程上划算。
  4. PagedAttention 借鉴 OS 虚拟内存分页:KV Cache 切 block + block table 记录 seq→block;解决碎片、显存利用率低、不可共享前缀。
  5. Static 等所有 seq 完成才释放槽位,短请求 GPU 空转;Continuous 每步重组 batch,完成即出,新请求即入,GPU 利用率 30-50% → 90%+。
  6. 固定 system prompt + 变化 user query 场景,prefix cache 复用 system prompt 的 KV,延迟降 5-20×。
  7. 小模型生成 K 个候选 token,大模型一次前向验证;接受概率对齐的前缀,剩下重采。数学上等价于直接大模型采样,故质量无损。
  8. Prefill 处理 prompt 是 O(L²) 算力密集;Decode 逐 token 生成是 O(L) 但显存带宽密集。分离可分别优化(prefill 用算力强卡,decode 用带宽优卡)。

第九章 推理引擎

  1. 4090 24GB 跑 70B:llama.cpp Q4_K_M(约 35GB 装不下)→ 实际需 offload 部分到 CPU;或选 GGUF Q3_K_S(约 28GB)+ 部分层 GPU offload。
  2. vLLM 用 PagedAttention(显存利用率 30% → 90%)+ Continuous Batching(GPU 利用率 30-50% → 90%+),相比 HF transformers 默认(无 paging、static batching)2-4× 吞吐。
  3. TRT-LLM 牺牲灵活性(需 build engine、改模型要重 build、只 NVIDIA)换来极致延迟(编译期优化、fused kernel、In-flight batching)。
  4. vLLM prefix cache 显式按 prompt 前缀缓存;SGLang RadixAttention 用基数树自动复用任意前缀(多 prompt 共享子串时更激进)。
  5. TTFT = 首 token 延迟,受 prefill 影响;TPOT = 每 token 延迟,受 decode 与网络影响。
  6. P50=100ms P99=2s:长尾。可能原因:少数请求 prefill 长 prompt / KV Cache OOM 触发 eviction / 网络抖动 / 路由到冷启动 worker / 个别请求触发 safety 检查慢路径。
  7. vllm serve meta-llama/Llama-3-8B-Instruct --quantization awq --enable-prefix-caching --max-model-len 8192
  8. Continuous Batching 每 step 重组 batch,KV Cache 块要能在不同 seq 间重排;传统连续 KV Cache 无法高效重排,必须 PagedAttention 的分页机制。

第十章 分布式训练

  1. DP 切数据,每卡完整模型,all-reduce 梯度;TP 切权重维度,每层 all-reduce 结果,通信频繁需 NVLink;PP 切层,激活点对点传输,通信少有 bubble。
  2. ZeRO-1 切优化器状态(4× 节省);ZeRO-2 + 梯度(8×);ZeRO-3 + 参数(与 GPU 数线性)。
  3. FSDP = PyTorch 原生版 ZeRO-3,功能等价但 PyTorch 原生支持,是当前主流训练默认。
  4. 70B 用 8 H100:TP=4(机内)+ DP=2,PP=1。70B fp16=140GB,8 卡每卡 17.5GB 权重 + 优化器可承受。
  5. TP 通信频繁(每层 all-reduce),需 NVLink 高带宽;PP 通信稀疏(段间激活),带宽要求低,可跨机。
  6. 1F1B 一个前向紧跟一个反向,反向立即释放激活显存;GPipe 全部前向再反向,bubble 大且激活显存高。
  7. 6 × 7e9 × 1e12 / (990e12 × 0.45) ≈ 9.4e7 秒 ≈ 26000 H100·时 ≈ 1100 H100·天。
  8. loss spike 处理:① 检查数据(异常 token、含 NaN);② 降 lr 或加 warmup;③ 检查 bf16 数值溢出;④ 回滚到最近 ckpt;⑤ 检查 optimizer state。

第十一章 向量库与 RAG

  1. RAG 解决:知识截止(用最新片段)/ 幻觉(基于片段生成)/ 私有数据(企业文档入库)。
  2. HNSW 多层图,顶层稀疏入口、底层密集;查询从顶层贪心走向更近邻居,逐层下钻,复杂度 O(log N)。
  3. chunk 太小:精确匹配但丢上下文;太大:上下文足但召回泛化(一个 chunk 含多主题,相似度被稀释)。
  4. BM25 关键词精确匹配(专有名词、API 名),向量模糊语义匹配;融合两者召回互补,覆盖率显著提升。
  5. Cross-encoder (query, doc) 联合编码,能捕捉 query-doc 交互;双塔独立编码丢失交互信息,召回好但精度差。
  6. RAGAS 四维:Faithfulness(忠于片段)/ Answer Relevancy(切题)/ Context Precision(检索相关)/ Context Recall(召回完整)。
  7. faithfulness 低 = 答案不忠于检索片段 = 幻觉。修:prompt 强化"仅依据以下片段回答" / 加 citation / 用更强模型 / rerank 提升片段质量。
  8. 长上下文不能完全替代 RAG:成本高(每请求处理所有上下文)/ 知识更新需重新训或塞 prompt / needle-in-haystack 长尾丢失 / 私有数据量大时长 ctx 装不下。两者互补。

第十二章 模型服务

  1. API gateway 承担通用功能(鉴权 / 限流 / 计费 / 日志);Model router 按模型 / SLA / 成本 / 上下文长度分流到具体 worker pool。
  2. session affinity 让同会话路由到同 worker,复用 KV Cache,避免每请求重算 prefill,延迟降 5-20×。
  3. 伸缩难:GPU 稀缺(不能像 CPU 随时扩)/ 权重加载慢(70B 1-2 分钟)/ 多 GPU TP 一致性 / 冷启动期 P99 暴涨。
  4. LoRA 多租户:base 模型加载一次(共享),每租户 LoRA 权重小(<100MB)动态切换;省去每租户独立部署完整模型的成本,5-10× 降本。
  5. shadow 模式 100% 流量复制到新模型不影响用户,可提前发现质量退化与异常;A/B 影响真实用户体验。
  6. 5 层:业务(QPS、满意度)/ 模型(幻觉率、拒答率)/ 服务(TTFT、P99)/ 系统(GPU 利用率、显存)/ 集群(节点健康、副本数)。
  7. P99 飙到 5s:可能 KV Cache OOM 触发 eviction / 某请求 prompt 极长 / 路由到冷启动 worker / 网络抖动 / 个别请求触发 safety 慢路径 / batch 参数不当。定位:看监控面板 P99 与 batch size/KV 利用率相关性、查 trace 找慢请求。
  8. 降本:量化 2-4× / Speculative Decoding 1.5-3× / Prefix Cache 5-20×(system prompt 场景)/ LoRA 多租户 5-10× / 多模型路由小模型优先 30-50%。

第十三章 Agent

  1. 单轮 LLM 只生成文本;Agent = LLM + 工具循环(Thought → Action → Observation),能调 API、执行代码、操作浏览器等真实"做事"。
  2. ReAct 文本输出 thought + action,可解释但 token 多、不稳定;Function Calling 结构化 JSON、稳定、token 省,但失去 thought 可解释性。
  3. 长期记忆:向量库 RAG(chunk + embedding 召回)/ KV Cache 重写(压缩成几个 token)/ 摘要树(层级摘要)/ 知识图谱(结构化)/ 数据库(显式表)。
  4. Plan-Execute 适合多步可规划任务(一次制定计划再执行);ReAct 适合探索性任务(边想边做)。
  5. 4 种:supervisor+workers(主分派子)/ sequential pipeline(A→B→C 串行)/ debate(辩论综合)/ hierarchical(树状层级)。
  6. MCP 统一工具协议,服务端实现一次任意 LLM 客户端可调用——"AI 时代的 USB-C",解决工具生态碎片化。
  7. 循环检测:维护 (action, args) 历史,检测重复 / 步数上限 / 上下文相似度阈值;处理:强制 finish / 注入"你已尝试 X 次"提示 / 切换策略。
  8. 高风险工具:① 严格白名单 + 参数 schema 校验;② 沙箱执行;③ 速率与配额限制;④ 高风险操作人审;⑤ 完整审计日志;⑥ 失败回滚机制。

第十四章 评估与安全

  1. 三难点:输出开放性(多种合理答案)/ 主观性("好"难定义)/ 多维度(知识推理代码安全等)/ 数据污染。
  2. MMLU=知识 57 科选择;HumanEval=Python 函数补全;GSM8K=小学应用题数学。
  3. 污染:训练时见过测试集 → 分数虚高、不代表真实能力。LiveBench 持续更新题库防污染。
  4. LLM-as-judge 偏见:长答偏好(更长的回答得分高)/ 自偏好(同模型族评分高)/ 位置偏好(首个回答得分高)/ 风格偏好(结构化强但内容差也得分高)。
  5. 两类:直接注入(用户用 prompt 篡改系统指令)与间接注入(在 RAG 检索的网页里藏 prompt)。防御:强 system prompt + 输入审核 + 输出审核 + 沙箱 + 视觉隔离。
  6. checklist 6 项:红队测试 / AdvBench 通过率 / PII 脱敏 / Prompt 注入测试 / 输出审核 pipeline / 完整审计日志 / 高风险工具人审 / Model Card / 故障回滚预案。
  7. Agent 多了:工具滥用(调危险工具)、参数错(类型 / 字段错)、循环死锁、上下文爆炸、错误传播、副作用(写库转账删数据)。
  8. EU AI Act:风险分级,高风险需透明 + 人类监督 + 风险评估;中国生成式 AI 管理办法:内容安全、训练数据合规、AI 生成内容标识、安全评估。

第十五章 前沿与未来

  1. 短序列时算力是瓶颈(L² attention);长序列时 KV Cache 显存成主瓶颈(128K × 128K attention score = 64GB 仅一层)。优化重点从算力转到显存。
  2. 三架构:projection(视觉 token 投影到文本空间)/ cross-attention(在 LLM 中插入 cross-attn)/ native mixture(原生多模态预训练)。Native 是趋势。
  3. o1 适合:数学竞赛、复杂推理、代码 debug、多步规划。不适合:简单客服、实时对话、大规模低成本场景(成本 10-100× 普通模型)。
  4. 小模型生成 K 个候选 token,大模型一次前向验证;接受概率对齐的前缀,剩下重采。数学上等价于直接大模型采样(拒绝采样原理),故质量无损。
  5. MLA 把 K/V 投影到低维 latent 存储,需要时再恢复——4× 压缩且质量几乎无损;GQA 只是减少 KV heads 数,压缩有限。MLA 更激进但需重训。
  6. Mamba/SSM 是线性复杂度 O(L),长上下文友好且显存稳定;Transformer O(L²) 在长 ctx 受限。但 SSM 表达力略弱、训练成熟度不如 Transformer。
  7. 一句话:建词汇表、跑通最小链路、关注业务、不盲信 benchmark、成本敏感、安全合规、持续学习、关注开源。
  8. 开放题。可答:① 推理模型成本下降与普及——决定 Agent 是否能大规模商用;② Agent + MCP 协议成熟——决定 AI 能否真正"做事"而不只是"说话"。

返回前言