大模型量化避坑:为什么直接相加 imatrix 的均值会让你精度崩盘? LLaMA-7B 里那张ffn_down权重矩阵有 4500 万个数(11008×4096),而给它做量化的"重要性矩阵"只有 11008 个数——连权重总量的两千分之一都不到,44 KB 对 88 MB。更怪的是:这 11008 个数里没有一个来自权重本身。它们全是输入激活的平方和Σx²,一个数管一整列、广播到全部 4096 行。那么一个长度只有"输入维"的行向量,凭什么决定这 4500 万个权重里谁该用满码字、谁可以被牺牲?为什么是激活的平方,不是权重的大小?答案要从两头看。一头是tools/imatrix/imatrix.cpp里那行e.values[j] += x[j]*x[j]——llama.cpp 收集"重要性"没为它写一行前向传播,而是把这行统计塞进了计算图调度器的回调,模型照常推理,它在每个矩阵乘节点上"蹭"数据;另一头是ggml-quants.c里scale = sumlx/suml2那条加权最小二乘的闭式解。这篇我们把"采集 → 存储 → 消费"这条链一行一行走通,顺手把"为什么重要性 = Σ激活²"用 OBD(Optimal Brain Damage)的对角 Hessian 推一遍。读完你能自己回答三个问题:这个数为什么是 per-column 的、为什么文件里存的是"和"而量化器读到的是"均值"、为什么 IQ2/IQ1 这类低比特量化不给它就直接拒绝量化。读完你能带走:推导"重要性 = 输入二阶矩对角线"的能力、讲清 imatrix 采集如何不写前向的能力、解释形状/广播/MoE 专