跳到正文
LLM 推理

参考

术语表

39 个术语,按本课程中的用法定义。每一条都链接到构建它的那一章。

不规则 batchS09
成员序列长度各不相同的 batch,采用扁平化而不是补齐。
队首阻塞S10
在严格先到先服务下,队首一个特别大的请求会拖住它后面的一切。
分块 prefillS11
把长 prefill 拆到多步执行,并把这些块混进 decode 批次,使任何一步都不足以让流式用户察觉。
分离部署S18
让 prefill 和 decode 跑在不同机器上,并在它们之间搬运 KV 缓存,使两者的 SLO 不再互相竞争。
拒绝采样S14
以 min(1, p/q) 的概率接受草稿 token,否则从 norm(max(0, p−q)) 重新采样。它让投机解码可证明地无损。
空泡S17
流水线填充和排空期间的空闲时间。占比为 (阶段数−1)/(micro-batch 数+阶段数−1)。
连续批处理S09
在两次前向之间、而不是两个 batch 之间准入和退出请求。也叫迭代级批处理或 in-flight batching。
内部碎片S06
已预留却从未写入的显存。有了分页,每请求的期望浪费是 block_size/2 个 token(最坏情况是一个未填满的 block),与长度无关。
前缀缓存S07
复用那些 token 内容(及位置)此前已计算过的 KV block,通过链式哈希进行匹配。
抢占S10
在池子耗尽时回收某个运行中请求的 KV 显存,之后要么重算、要么换出到主机内存。
容量系数S16
相对于均分份额,一个 MoE 专家最多可接受多少 token。溢出的 token 会无声地跳过该专家。
水位线S10
为让运行中的请求还能增长而保持空闲的 KV block。准入到 100% 会死锁。
算术强度S03
每从显存读取一字节所执行的浮点运算次数。H100 大约需要 300 才能吃满算力,而一次 decode 只给出约 1。本课程的优化,要么在抬高这个数字,要么在绕开它。
跳跃解码S15
当语法只允许一种后续时,直接输出它,不必再做采样决策。真实引擎仍要在这段强制内容上跑模型来填 KV 缓存,但只需一次批量前向,而不是许多次——受约束生成比无约束更快,靠的就是这一点。
投机解码S14
廉价的提议器给出 k 个 token;目标模型一次前向验证全部,并接受最长的合法前缀。
有效位宽S08
把每组的 scale 也算进去之后的每权重比特数。所谓「4-bit」格式实际是 4.25–4.8,具体取决于分组大小,以及是否存零点。
在线 softmaxS12
用滚动最大值和滚动求和增量地计算 softmax,每当最大值移动时,把已累积的值乘以 exp(m_old − m_new) 重新缩放。
All-reduceS17
一种集合通信:把张量在所有 rank 上求和,并让每个 rank 都拿到结果。张量并行每个子层需要一次,而且它是阻塞的。
AWQS08
激活感知的权重量化。从激活统计中识别出占比很小的显著通道,在量化前把它们放大,使其落在更细的码上。
Block tableS06
每个请求一份的数组,把逻辑 KV block 下标映射到物理 block 下标。它就是一张页表,只不过用在了注意力上。
cu_seqlensS09
描述不规则 batch 的累积序列长度数组:一个扁平的 token 缓冲区加偏移量,没有任何填充。
DecodeS01
prefill 之后的阶段:一次前向一个 token,受显存带宽限制,每个请求要跑成千上万步。
FlashAttentionS12
使用在线 softmax 的分块注意力,使 N×N 分数矩阵从不写入 HBM。它给出的结果是精确的,不是近似。
GQAS03
分组查询注意力:一个 KV 头被若干 query 头共享。按比例缩小 KV 缓存,而质量代价几乎为零。
ITL / TPOTS19
token 间延迟,或每输出 token 耗时:相邻流式 token 之间的间隔。汇报时用分位数,别用均值。
K-quantS08
GGUF 的嵌套 scale 格式:32 权重的子块配量化后的 scale,再组成 256 权重的超块,配一个 fp16 的「scale 的 scale」。
KV 缓存S05
已处理的每个 token 的 key 和 value 的存储。把 O(N³) 的引擎变成 O(N²),并随之成为稀缺资源。
min-pS04
保留概率不低于 m × p_max 的 token。阈值随模型自身的置信度伸缩,所以在高 temperature 下,它比 top-p 退化得更平缓。
MoES16
专家混合:若干个 FFN,路由器为每个 token 激活其中 k 个。算力下降,显存不降。
PagedAttentionS06
把 KV 缓存存成固定大小的 block、通过 block table 寻址,从而实现按需分配和 block 共享。
PrefillS01
对整个 prompt 的第一次前向。受算力限制、在各位置上并行,也是 TTFT 花掉的地方。
RMSNormS03
不减均值、不加 bias 的 LayerNorm:x / rms(x) × g。
RoPES03
旋转位置编码:通过旋转 q 和 k 中成对的维度来注入位置。存在两种互不兼容的布局(NeoX 与交错)。
SLOS18
服务等级目标,通常是一个 TTFT 上限加一个 ITL 上限。几乎每个调度决策都是在两者之间做取舍。
SmoothQuantS08
把激活中的离群值迁移进权重:把激活的第 i 个通道缩小、对应权重放大,乘积保持不变。
SwiGLUS03
现代 decoder 使用的门控 FFN:(silu(x@W1) * (x@W3)) @ W2。每个 block 要做三次 matmul,传统 FFN 只要两次。
token 预算S10
max_num_batched_tokens:每步处理 token 数的上限,它限制了单步耗时,也就限制了 token 间延迟。
top-p / nucleusS04
保留累积概率达到 p 的最小 token 集合,跨过阈值的那个 token 也算在内。
TTFTS19
首 token 时间,从请求到达起算,包含排队。把排队时间排除掉,恰好会盖住最需要看到的那种故障。