Arganzheng's Blog

stay hungry, stay foolish

高效推理与压缩(07):系列总结与通关自测

Efficient Inference and Model Compression: Series Recap and Final Self-Test

六篇正文回答了一个问题:不改硬件、不改推理引擎,怎么让同一个模型更快、更小、更便宜——以及每种办法让模型的输出改变了多少。第一篇讲从分布里怎么取一个 token,第二篇讲唯一不改变分布的加速(投机解码),第三、四篇讲权重与激活的低比特表示(PTQ 与 QAT),第五篇讲训好之后还能对 KV 做什么,第六篇讲删掉一部分参数之后怎么恢复、以及一个 70B 怎么变成一个能用的 8B。六篇合起来,是《现代 LLM 结构》那条成本公式的算法侧。 本文不讲新内容,做三件事:把六篇压成一张表与六段回顾,把贯穿六篇的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”六篇能不能连起来用”。第六篇末尾的...

高效推理与压缩(06):剪枝、深度缩放与小模型配方

Pruning, Depth Scaling and How Small Models Are Made

前五篇改的是表示(量化)、过程(解码、投机)与缓存(KV),模型的参数数量与结构没有变。最后一条线改参数的数量:删掉一部分权重、一部分 head、一部分层,让模型本身变小。剪枝是最老的压缩方法(LeCun 等 1989 的 Optimal Brain Damage),在 CNN 时代成熟,在 LLM 上重新变得重要——因为”一个 70B 怎么变成一个能用的 8B”这个问题有了新的答案:不是从头训一个 8B,而是从 70B 剪出来再蒸馏,用十分之一的 token 达到相近的效果。 剪枝与前几篇的根本区别是:剪掉的东西不能靠更好的舍入找回来,必须靠训练恢复。所以剪枝几乎总是”剪枝 + 蒸馏”的组合(《后训练(07):蒸馏:logits 级、序列级与 on-policy...

高效推理与压缩(05):KV cache 压缩:量化、驱逐与稀疏 attention

KV Cache Compression: Quantization, Eviction and Sparse Attention

现代 LLM 结构(04)算过 KV cache 的账:Llama-3.1-70B 在 128K 上下文下每个请求的 KV 是 40 GiB,约为 141 GB 权重体积的三成,也接近 80 GB 显存的一半。decode 每步都要读取上下文里的 KV;batch 到 4 时,KV 读取量已接近权重读取。长上下文和并发会让 KV 成为 decode 的主要流量。GQA 将 KV head 数降到八分之一;MLA 每层每 token 只存 576 个数。这些是训练时确定的结构,训好之后不能改。 这一篇讲训好之后还能对 KV 做什么。三条路:量化(每个元素的字节从 2 降到 1 或 0.5 甚至 0.25)、驱逐(丢掉一部分 token 的 KV,只留”重要”的)、稀...

高效推理与压缩(04):量化感知训练、低比特与量化模型的评测

Quantization-Aware Training, Extreme Low-Bit and How to Evaluate a Quantized Model

上一篇的 PTQ 在 4 bit 权重上把困惑度损失压到 0.1–0.3,在 W8A8 上接近无损。再往下——3 bit、2 bit、三值权重,或者激活也到 4 bit、KV 也到 4 bit——逐层最小化输出误差的代理目标不够了:误差太大,后面的层”消化”不掉,最终 loss 的退化不再与逐层误差成比例。这时需要训练参与:让模型在知道自己会被量化的前提下学习,把量化误差学回去一部分。这是量化感知训练(QAT)。 QAT 的核心技术问题只有一个:量化的 round 函数梯度处处为零(或无定义),怎么反向传播?答案是直通估计器(STE)——一个数学上”错”但实践上有效的技巧。围绕它有一族方法:让 scale 可学习(LSQ)、只在训练末段做 QAT、用全精度的自己做...

高效推理与压缩(03):训练后量化:误差模型、GPTQ、AWQ 与旋转

Post-Training Quantization: Error Models, GPTQ, AWQ and Rotation

量化是把权重(有时也把激活、KV cache)从 16 bit 浮点变成 4 bit 或 8 bit。它与现代 LLM 结构第十篇的数值格式强相关,但不是一回事:数值格式问的是”训练和计算该用什么格式算,误差在哪里积累、怎么控制”,目标是误差可控、训练稳定;量化问的是”哪些张量可以压到比计算格式更少的位、按什么粒度放 scale、用什么校准补偿误差”,目标是字节数下降、输出分布尽量不变——它允许有损。两者共享词汇(INT8、FP8、E4M3、scale、累加精度),交汇点是细粒度 scale:DeepSeek-V3 的 FP8 训练给每个 \(1 \times 128\) 激活块、\(128 \times 128\) 权重块各配一个 scale,用的正是量化的手段。...

高效推理与压缩(02):投机解码:草稿、接受率与树

Speculative Decoding: Drafters, Acceptance Rates and Draft Trees

投机解码是本系列里唯一不改变输出分布的方法。现代 LLM 结构(08)已经完成了它的基础部分:拒绝采样保证输出严格等于目标分布的证明、期望接受长度 \(\frac{1 - \alpha^{\gamma+1}}{1 - \alpha}\)、以及 Roofline 决定的收益区间——验证 \(\gamma + 1\) 个 token 几乎免费的条件是 \(B(\gamma + 1) \lesssim \text{ridge}\),超过就亏本。那一篇把草稿方案列成了一张表(独立小模型、Medusa、EAGLE、n-gram、MTP),给了各自”通常报告”的接受率区间。 这一篇从那张表往下挖。加速比只由两个量决定——接受率 \(\alpha\) 与草稿成本 \(c\)——...

高效推理与压缩(01):解码策略、采样与约束生成

Decoding Strategies: Sampling, Truncation, Penalties and Constrained Generation

模型的一次前向给出的不是一个 token,是一个 \(V\) 维的分布。从这个分布里取一个 token 的规则——greedy、beam、temperature、top-k、top-p、min-p、重复惩罚、语法约束——统称解码策略。它不改变模型的任何参数,不改变一次前向的成本,但决定了用户看到的每一个字、决定了评测报出的每一个数字、也决定了 RL 训练时策略探索到什么。同一个模型在 GSM8K 上,greedy 报 78、temperature 0.6 采样报 76、多次采样投票报 85——三个数字都”对”,说的是不同的事。 这一篇放在系列开头,是因为后面五篇都要回答”这个方法让输出分布变了多少”,而采样参数本身就在改分布。不先把”从分布里怎么取”说清楚,量化前...

高效推理与压缩(算法侧):解码、投机、量化与 KV(总纲)

Efficient Inference and Model Compression: The Algorithm Side

内容简介 《高效推理与压缩(算法侧)》是一组共六篇的系列文章,对应《AI 算法工程师学习地图》的第 L6 层。它面向已经理解 Transformer 的成本结构(L4,《现代 LLM 结构》)、并且做过或准备做后训练(L5,《后训练》)的读者,回答的是一个部署前必然遇到的问题:不改硬件、不改推理引擎,怎么让同一个模型更快、更小、更便宜——以及每种办法让模型的输出改变了多少。 “推理优化”这个词下面混着两类完全不同的东西。一类改变模型或解码过程:量化把权重从 16 bit 变成 4 bit,投机解码让一次前向产出多个 token,KV 驱逐丢掉一部分缓存,剪枝删掉一部分参数。另一类改变调度与内存管理:PagedAttention、continuous batchi...

算法工程师的实验方法论:用有限的算力得出可信的结论

Experimental Methodology for AI Algorithm Engineers: Credible Conclusions on a Finite Compute Budget

本文是《AI 算法工程师学习地图》“横切:实验方法论”一层的导读。它不属于任何一层,对每一层都适用;放在 L5 之后,是因为它要用到的例子——scaling law 的外推(预训练(03))、评测的置信区间(后训练第八篇)、loss spike 的归因(预训练(05))——到这里都已经讲过了。 一个算法工程师一年里做的事,绝大部分不是”提出新方法”,而是回答一个个具体的问题:这批数据加进去有没有用?lr 调高一倍是不是更好?这个 attention 变体值不值得付出 KV 的代价?换一个 tokenizer 会不会伤中文?每个问题都要用实验回答,而每个实验都花钱——一次 7B 的 SFT 消融几十 GPU 小时,一次预训练配方的对照几千。算力是有限的,问题...

后训练(09):系列总结与通关自测

Post-Training: Series Recap and Final Self-Test

八篇正文回答了一个问题:一个只会续写的基座模型,经过哪几步变成能回答、能拒绝、能一步步推导、能调工具的模型——每一步的目标函数是什么、要几个模型在显存里、生成多少 token、怎么证明它真的变好了。第一篇用 SFT 教格式,第二篇把人的判断造成一个可微的奖励,第三、四篇是用奖励改策略的在线与离线两种解法,第五篇把奖励换成验证器,第六篇把验证器推到多轮环境,第七篇把奖励换成教师的分布,第八篇是贯穿全程的度量。八篇合起来是《AI 算法工程师学习地图》的第 L5 层。 本文不讲新内容,做三件事:把八篇压成一张表与八段回顾,把贯穿八篇的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”八篇能...

×