← aipaipai.cloud · INDEX
01 输入 02 注意力 03 积木 04 架构 05 训练 06 现代
DOCS // INTERACTIVE SERIES 06/06 · FINALE

现代://
关键改进

经典 Transformer 到今天的大模型,关节上换了几把刀:KV Cache、GQA、RoPE、SwiGLU、Flash Attention、MoE。 教学性模拟--所有图示为确定性示意,用以理解原理,非真实模型实现。

MODERN_READY RECIPE: LLAMA-CLASS SLUG: transformer-modern STATUS: LOCAL_ONLY

00 从经典到现代

2017 的配方 vs 今天 Llama 系的配方。改了哪几样。

部位2017 经典现代 LLM (Llama 系)
归一化LayerNormRMSNorm(更快)
位置编码正余弦绝对RoPE(旋转,外推好)
激活ReLU / GELUSwiGLU(带门控)
归一化位置post-normpre-norm
注意力头标准 MHAGQA(省 KV cache)
推理逐 token 重算KV Cache + Flash Attention
FFN稠密可换 MoE(稀疏)

01 KV CACHE · 推理加速

生成时,已算过的 K/V 别重算,存起来直接复用。点 STEP 逐词生成。

今天 天气 很
GEN generated: 0 kv_cache: 3 // idle

没 KV Cache:每生成一个新词,要对前面所有词重算一遍 K/V--长度 N 就 O(N²) 累加。
有 KV Cache:旧 K/V 存着,新词只需算自己那一份,接到 cache 末尾。生成复杂度从 O(N²) 降到 O(N)。这就是为什么长文本生成能跑得动。

02 MQA / GQA · 瘦身 KV CACHE

KV cache 太占显存。让多个 Q 头共享同一份 K/V。点 tab 看三种。

MHA · 多头注意力

每个 Q 头有自己专属的 K/V 头。效果最好,但 KV cache = 头数 × 维度,最占显存。

MQA · 多查询注意力

所有 Q 头共享同一份 K/V。cache 直接砍到 1 份,但效果掉得明显。

GQA · 分组查询 · Llama2/3 用

折中:把 Q 头分成几组,组内共享一份 K/V。质量接近 MHA,cache 省好几倍。现代大模型几乎都选它。

03 ROPE · 旋转位置编码

不另加位置向量,而是按位置旋转 Q/K。(第 1 篇有直觉,这里讲为什么强)

Qpos = rotate(Q, pos·θ)    Kpos = rotate(K, pos·θ)
// 位置越远,旋转角差越大

Q·K 的点积,两个向量旋转后再点积,结果只取决于它们的旋转角差 = 相对位置。于是相对位置直接写进了注意力打分里。三个好处:① 不占额外参数(不是查表);② 外推好(训练没见过的长度也能用,配合长度扩展技巧可到百万 token);③ 易扩展(调旋转基底就能拉长上下文)。

04 SWIGLU + RMSNORM · 现代配方

两个小改动,省算力、提效果。

SwiGLU · 门控激活

FFN 升维后多一条门控分支SwiGLU(x) = Swish(xW) ⊙ (xV)。一半算值、一半当开关决定放多少。比 GELU 表达力更强,代价是多一组权重(所以 d_ff 常配 8/3·d_model 平衡参数)。

RMSNorm · 简化归一

LayerNorm 要算均值方差;RMSNorm 只用均方根去缩放,不算均值。少一步运算、效果几乎一样,大模型里这点算力×万亿次就省大了。Llama 全系用 RMSNorm。

05 FLASH ATTENTION · IO 优化

数学完全一样,快的是「搬数据」的方式。

注意力要把 N×N 的矩阵算出来,N 大了显存扛不住,得分块算(tiling)。普通做法在慢速显存(HBM)和快速缓存(SRAM)间反复搬运,搬运本身就慢。Flash Attention 重排计算顺序,让数据进一次 SRAM 就把该算的算完再写回,IO 次数大降。

标准注意力: HBM ↔ SRAM 反复搬  
Flash: 分块 + 重排,单次进出算完  快 ~2-4×

关键点:算出来的结果和标准注意力数学上等价,不是近似。它是「同样的算法、更聪明的实现」,长上下文必备。现在成了主流训练/推理后端的默认选择。

06 MOE · 混合专家

把一个大 FFN 换成多个小 FFN(专家),每个 token 只激活其中几个。点 RUN 路由。

输入 token "猫"
E1 E2 E3 E4 E5 E6 // idle

普通模型:每个 token 过同一个大 FFN,算力 = 参数量。
MoE:有 N 个「专家」(小 FFN),一个路由器(gate)把 token 送到 top-2/top-k 个专家,其余不激活。结果:参数量很大(知识多),但单次计算量小(省算力)。这就是 DeepSeek/Mixtral 等能做超大又跑得动的原因。

07 概念速查

术语一句话
KV Cache缓存已算 K/V,生成时复用,复杂度 O(N²)->O(N)
MQA所有 Q 头共享一份 K/V,省显存但掉点
GQAQ 分组、组内共享 K/V,质量与省兼顾,主流
RoPE按位置旋转 Q/K,注入相对位置,外推好
SwiGLU带门控的激活,替代 GELU,表达力更强
RMSNorm只去方根缩放不算均值,比 LayerNorm 快
Flash Attention数学等价、IO 重排,长上下文快 2-4×
MoE多专家稀疏激活,参数大而计算省
SERIES COMPLETE · 06/06

庖丁解牛到此结束

从「文字变向量」到「现代稀疏大模型」,六篇走完 Transformer 的骨肉关节。建议回头动手写一个 mini 版--把零件自己拼一遍,刀法才真在手里。

← 重读 01 输入 04 架构(参数计算器) 返回首页 ->