q = q_proj(hidden_states)k = k_proj(hidden_states)v = v_proj(hidden_states)Linear 计算 X @ weight.TLinear.weight 存储为 [out_features, in_features]

<PAD> 用于把不同长度的序列补齐为同样长度

torch.softmax 对齐| 步骤 | Shape |
|---|---|
| 输入与 Q/K/V 投影 | |
view 后 |
|
transpose(1, 2) 后 |
|
| score 与注意力权重 | |
| 每个头的输出 | |
转置、拼接、o_proj 后 |
q_proj: Linear(2048, 2048, bias=False)
k_proj: Linear(2048, 512, bias=False)
v_proj: Linear(2048, 512, bias=False)
o_proj: Linear(2048, 2048, bias=False)
| 形式 | Query 头数 |
KV 头数 |
共享关系 |
|---|---|---|---|
| MHA | 8 | 8 | 每个 Q 头有对应的 K/V 头 |
| GQA | 8 | 2 | Q₀–Q₃ → KV₀;Q₄–Q₇ → KV₁ |
| MQA | 8 | 1 | 所有 Q 头 → KV₀ |
num_attention_heads、num_key_value_headsrepeat_interleave 显式复制 KV,便于对应 Query 头课后:用 notebook 完成带 causal mask 的 MHA,并核对输出与参考实现。
https://marp.app/