☰ inferserver 的数学基础

附录 B. 数学 ↔ 代码索引

数学概念文件与函数说明
内积 / 矩阵乘向量model/tensor.go MatVec\(y=Wx\),W 为 \([out,in]\)
softmaxmodel/tensor.go Softmax减最大值;全 \(-\infty\) 返回全 0
log-softmaxmodel/sample.go LogSoftmax32 / LogProbAt原始分布,不含温度/截断
交叉熵/困惑度无运行时实现训练侧概念;推理只算 logprobs
RMSNormmodel/norm.go RMSNormeps 在根号内,\(\gamma\) 直接乘
per-head QK-Normmodel/attn.go headRMSNorm逐头归一化,且在 RoPE 之前
SiLU / SwiGLUmodel/tensor.go SiLU,model/mlp.go MLP门控逐元素乘
残差 / pre-normmodel/block.go Layer.ForwardWith两条残差,均加在归一化前的 h 上
缩放点积注意力model/attn.go Attention因果掩码用 \(-\infty\)
RoPEmodel/rope.go ApplyRoPE劈半配对,只作用于 Q/K
GQAmodel/config.go KVGroupSize;attn.goQ 头 h 用 KV 头 \(h/G\)
KV cachemodel/kv.go NaiveKV / CacheKV增量 append
分页 KVmodel/pagedkv.go BlockManager / PagedKV块表 + 引用计数 + COW
online softmaxmodel/pagedattn.go attentionPaged跨块合并,stage B
采样model/sample.go Sample / SampleLogits温度→top-k→softmax→top-p→逆变换
批处理 / chunked prefillcmd/server/scheduler.go,model/batchstep.gotoken 预算、左 padding、绝对位置

结语:一条完整的公式链

把这一页浓缩成一次前向:

\[ \begin{aligned} x_0&=\text{embed}[t],\\ h&=x_0,\\ x&=\frac{h}{\operatorname{RMS}(h)}\gamma_1,\\ q&=R(p)\,W_qx,\quad k=R(p)\,W_kx,\quad v=W_vx,\\ \alpha&=\operatorname{softmax}\left(\frac{qK^\top}{\sqrt d}+M\right),\\ h&\leftarrow h+W_o\left(\alpha V\right),\\ h&\leftarrow h+W_d\Big(\operatorname{SiLU}(W_g\operatorname{RMS}(h)\gamma_2)\odot W_u\operatorname{RMS}(h)\gamma_2\Big),\\ \text{logits}&=W_{\text{lm}}\operatorname{RMS}(h)\gamma_f,\\ p&=\operatorname{softmax}(\text{logits}/T),\\ t'&\sim p\ \text{(top-k / top-p 截断后)}. \end{aligned} \]

每一步为什么长这样,都能在上面对应的小节里找到推导。真正容易出错的通常不是公式本身,而是下标、顺序、归一化范围、绝对位置这四类约定;每个小节的“常见坑”都是仓库里实际踩过的。