Appearance
Transformer 推理图 — 概念
Transformer 层结构
标准 LLaMA 层的计算图:
RoPE (Rotary Position Embedding)
rope 将位置信息编码到 Q 和 K 中:
对于位置 pos 和维度 d:
cos(θ) = cos(pos / 10000^(2d/dim))
sin(θ) = sin(pos / 10000^(2d/dim))
RoPE(x, pos) = [x_even * cos(θ) - x_odd * sin(θ),
x_even * sin(θ) + x_odd * cos(θ)]变体:
- LLaMA RoPE — 标准 RoPE
- RoPE Neox — 调整频率基准
- mRoPE — 多维 RoPE(用于多模态)
- LongRoPE — 支持更长上下文
DeepSeek Sparse Attention (DSA)
DeepSeek V3.2 引入了全新的 DSA 机制,使用 lightning indexer 实现稀疏注意力:
- 新增
llama_kv_cache_dsa,在 KV cache 基础上附加 lightning indexer 缓存 - 支持基于 NVFP4 的稀疏检索
- 计算图中引入
GGML_OP_FILL的 f16 路径用于 indexer 构建 - KQ mask 使用 DS32 类型确保类型安全
注意力计算
c
// Scaled Dot-Product Attention
QK = ggml_mul_mat(ctx, K, Q) // Q @ K^T
QK = ggml_scale(ctx, QK, 1/sqrt(d_k)) // 缩放
QK = ggml_add(ctx, QK, mask) // 因果 mask(现在支持 f16 节省 VRAM)
S = ggml_soft_max(ctx, QK) // softmax
O = ggml_mul_mat(ctx, V, S) // S @ VFlash Attention f16 mask:
set_input_k_q_mask_impl已从仅支持 float 模板化为支持<typename T>,现在 KQ mask 可使用 f16 类型,在大模型上显著减少 VRAM 占用。
SwiGLU FFN
LLaMA 系列使用 SwiGLU 激活:
c
// SwiGLU(x) = (SiLU(x @ W_gate) ⊙ (x @ W_up)) @ W_down
gate = ggml_mul_mat(ctx, w_gate, x);
up = ggml_mul_mat(ctx, w_up, x);
gate = ggml_silu(ctx, gate); // SiLU = x * sigmoid(x)
ffn = ggml_mul(ctx, gate, up);
out = ggml_mul_mat(ctx, w_down, ffn);注意:
ffn_latent_down/ffn_latent_up等张量被标记为MUL_MAT操作(而非逐元素MUL),确保后端类型探测(buft probe)能正确选择量化矩阵乘法路径。
Multi-Token Prediction (MTP) 图基础设施
MTP 推测解码的推理图现在有了专用输入类型 llm_graph_input_mtp:
- 独立于主图的 MTP token 输入管理
- Qwen 3.5 使用后归一化(post-norm)隐藏状态进行 MTP,与标准前归一化路径不同
- StepFun 3.5 支持单层 MTP
- Draft context 始终配置
n_parallel个输出,n_outputs_max参数可限制最大输出数以节省 VRAM
相关概念
- rope — 旋转位置编码详解
- compute-graph — 计算图的构建与执行
- kv-cache — KV Cache 如何加速注意力计算