离线速查 / 2026-11-08
Transformer 形状与公式速查
先标位置、再标head、最后标物理存储。所有公式默认标准decoder全注意力;MLA、SWA与跨卡分片要另算。
看shape仍然不直观?
打开逐格维度图解:从实际小矩阵看投影、分头、转置、合头、GQA、SwiGLU、packed与分页;点击元素追踪新旧坐标。
符号和Qwen3-0.6B实例
| 符号 | 含义 | 实例 |
|---|---|---|
| H / F / L | hidden / MLP中间宽度 / 层数 | 1024 / 3072 / 28 |
| Hq / Hkv / d | Q头 / KV头 / head_dim | 16 / 8 / 128 |
| Vocab | 词表大小 | 151936 |
| B / T / N | 请求数 / 序列长度 / packed本轮token数 | 由负载决定 |
实例值:模型官方config,2026-11-08核验;保存副本见docs/research/qwen3-0.6b-config.json。源码证据:Qwen3Attention。
一层的形状
X [N,H] → QKV [N,(Hq+2Hkv)d]
Q [N,Hq,d];K,V [N,Hkv,d]
Q/K norm → RoPE → attention
O [N,Hq,d] → flatten [N,Hq·d] → Wo [N,H]
gate_up [N,2F] → SiLU(gate)⊙up [N,F] → down [N,H]
Q [N,Hq,d];K,V [N,Hkv,d]
Q/K norm → RoPE → attention
O [N,Hq,d] → flatten [N,Hq·d] → Wo [N,H]
gate_up [N,2F] → SiLU(gate)⊙up [N,F] → down [N,H]
数学矩阵采用xW,W=[in,out];PyTorch Linear.weight=[out,in]。Qwen3的Hq·d=2048,不等于H=1024。课15 · 课20。
attention / mask / online softmax
A = softmax(QKᵀ/√d + M),O=AV
有p个历史token、新chunk长c:M[i,j]允许j≤p+i
m′=max(m,mᵦ);α=exp(m−m′);β=exp(mᵦ−m′)
l′=αl+βlᵦ;o′=αo+βoᵦ;最终O=o/l
有p个历史token、新chunk长c:M[i,j]允许j≤p+i
m′=max(m,mᵦ);α=exp(m−m′);β=exp(mᵦ−m′)
l′=αl+βlᵦ;o′=αo+βoᵦ;最终O=o/l
分块独立softmax后平均会出错;无可见key的全−∞行也不能直接正常归一化。课17 · 课22。
KV字节与分页
标准KV bytes = 2 · L · B · T · Hkv · d · dtype_bytes
Qwen3-0.6B BF16:112 KiB / token;4096 token = 448 MiB
slot = block_table[t // block_size] · block_size + t % block_size
Qwen3-0.6B BF16:112 KiB / token;4096 token = 448 MiB
slot = block_table[t // block_size] · block_size + t % block_size
不含权重、激活、workspace、图缓冲、页尾空槽;FP8还可能有scale开销。单步缓存dense attention约O(t),累计N步约O(N²),不能说整段生成O(N)。课21 · 课25。
容易误认的三种缓存
| 对象 | 保存什么 | 依赖什么 |
|---|---|---|
| 模型KV | 每层历史K/V | token及其上下文 |
| RoPE cos/sin表 | 旋转系数 | 位置与频率参数 |
| CUDA Graph缓冲 | 静态地址上的输入/输出 | 捕获shape和执行合约 |
完整术语见术语表;有疑问把公式与自己的形状标注发给老师。