最近刷到姚顺宇的一句话“AI 不需要脑子本科生就能干做 AI 最重要的特质就是靠谱。”当时我还纳闷这么顶尖的 AI 研究员怎么会说 AI 这么“简单”直到我扒完大模型推理背后的这些优化技巧才发现原来那些听起来高大上的 RMSNorm、FlashAttention、Gumbel-Max本质上全是我们高中就学过的数学小技巧甚至和你生活里的买菜、排队、抽奖逻辑一模一样今天就用最生活化的例子带你把大模型里的这些“黑科技”拆得明明白白看完你就会说哦原来我早就懂AI了1. 为什么要给数据 “调平”从两个城市的气温说起先问你个问题 有两个城市A 城市一年四季都是 20℃不冷不热B 城市夏天 60℃热死人冬天 -20℃冻死人。 如果只看平均温度两个城市都是 20℃你会觉得它们一样宜居吗肯定不会啊B 城市的温度波动也太大了根本没法住。这就是大模型里最基础的问题数据的“波动”。大模型有上百层网络数据在层之间传递的时候数值会越变越大就像 B 城市的温度忽高忽低。 这会导致什么要么数值太大直接把 GPU 的计算搞溢出输出一堆乱码要么梯度消失模型学不到东西训练直接崩了。所以工程师们想了个办法给数据 “调平”也就是归一化。最早的 LayerNorm就像你整理一堆衣服 先把所有衣服的平均位置对齐减均值再把它们的大小拉到统一的尺度除以标准差这样不管原来的衣服多大整理完之后都整整齐齐不会乱。但是后来大家发现其实对齐平均这一步好像没那么重要 模型真正关心的不是数据的绝对位置而是它们之间的相对大小啊于是就有了 RMSNorm直接把对齐平均这一步砍了只做尺度的缩放。 就像你叠衣服不用先把所有衣服都铺平对齐直接叠就行叠完之后一样整齐还省了一半的时间这一下就把计算量砍了好多原来要两次遍历数据现在一次就够了原来要做一堆减法现在都省了。GPU 跑起来快了好多而且模型的效果几乎没差你看这就是最基础的 Infra 优化用一个数学上的小假设砍掉没用的计算把速度提上去就这么简单。2. 打分变概率选餐厅的“爱憎分明”法则周末你想出去吃饭给三个餐厅打了分 猫咖3.2 分日料1.5 分川菜-0.8 分。现在你想把这些分数变成你去每个餐厅的概率怎么算直接加起来算百分比不行啊有负数而且 3.2 比 1.5 高了一点但是直接算的话差距不够大你本来更想去猫咖结果算出来的概率差距没那么明显。这时候 Softmax 就来了它用了个指数函数把这些分数都变成正数然后再算比例。就像上面的图里3.2、1.5、-0.8经过 Softmax 一算直接变成了 0.7、0.2、0.1 也就是 70% 的概率去猫咖20% 去日料店10% 去川菜馆。而且它还放大了差距本来猫咖只比日料高 1.7 分算完之后概率直接差了 5 倍完美体现了你“更想去猫咖”的偏好爱憎分明。但是这里还有个小问题如果分数太大了怎么办比如有人给猫咖打了 1000 分那 e 的 1000 次方直接就把 GPU 的计算搞溢出了算出来一堆 NaN。工程师又想了个小技巧所有分数都先减去最高分 比如最高分是 1000那所有分数都减 1000这样最大的分数就变成 0 了其他的都是负数e 的负数次方都是小于 1 的小数再也不会溢出了 而且数学上这个操作结果完全不变因为分子分母都乘了同一个 e 的 -1000 次方约掉了。就像你打分的时候大家都先减去最高分这样所有分数都不会太大算起来就不会出错了是不是很聪明3. 排队的规矩AI 也不能 “插队看未来”你有没有过这种经历排队买奶茶你前面的人还没点单你就偷偷看后面的人点了什么 那肯定不行啊作弊了啊你排队的时候只能看你前面的人点了啥后面的你不能看不然就乱套了。大模型生成文字也是一样的道理比如你让 AI 写 “床前明月光”它生成第一个字 “床” 的时候不能看后面的 “前”“明” 这些字生成第二个字 “前” 的时候只能看 “床”不能看后面的生成 “光” 的时候才能看前面所有的字。如果它提前看了后面的字那就是作弊了相当于考试提前看了答案那还叫什么生成啊所以就有了 Causal Mask它就像排队的规矩给后面的字的分数直接加个负无穷这样 Softmax 一算这些后面的字的概率直接变成 0模型根本就不会看它们。就像上面的图里黄色的是能看的灰色的是不能看的每个字只能看自己和前面的后面的全屏蔽了完美保证了因果关系。而且现在的 FlashAttention连那个大的掩码矩阵都不用存了 直接在计算的时候跳过后面的块就行后面的数我根本就不读也不算直接省了一半的计算量和内存 就像排队的时候后面的人你直接不用管不用看他们的单直接处理前面的省了好多功夫。4. 把 “慢计算” 变 “快并行”FlashAttention 的快速分拣术你有没有见过快递站分拣快递 原来的老办法是把所有的快递都搬到大厅里然后一个个分但是大厅就那么大快递太多了放不下还要搬来搬去慢死了。后来的新办法是把快递分成小包裹一个个拿到分拣台处理完一个再拿下一个不用都搬到大厅这样就省了好多空间速度也快多了。FlashAttention 干的就是这个事原来的 Attention 计算要把所有的 Q、K、V 都搬到显存里还要存一个巨大的中间矩阵这个矩阵是 N×N 的序列越长这个矩阵越大显存直接就爆了还要频繁读写显存慢得要命。FlashAttention 就把这些矩阵切成小的块就像把快递分成小包裹一个个拿到 GPU 的小缓存SRAM里处理完一个再拿下一个。 而且它还搞了个 “边算边走” 的 Online Softmax不用等所有数据都到了再算来一块算一块中间的结果都存在寄存器里根本不用写回显存就像左边的图里原来的老办法要把所有数据都搬来搬去现在的 FlashAttention分块处理把内存的读写减了好多速度直接提了 7 倍多这就是所谓的 “内存墙” 的解法原来 GPU 的算力很强但是内存读写太慢了所以我们就少读写内存多用寄存器和小缓存把计算和读写流水线化这样速度就上去了。5. 抽奖的新玩法原来抽奖也能并行算完概率之后就要采样了也就是抽奖比如猫咖70%日料20%川菜10%你要按照这个概率抽一个出来决定你去哪个餐厅。原来的老办法就是轮盘赌 你转个轮盘指针停在哪就是哪但是这个操作要一个个算前缀和比如先算猫咖的 70%再加日料的 20%再加川菜的 10%然后看指针落在哪。但是这个操作是串行的啊GPU 是并行的一个个算太慢了尤其是大模型的词表有十几万个词一个个加要等到猴年马月这时候 Gumbel-Max 的技巧就来了 数学家发现只要给每个奖券的对数概率加一个随机的噪声然后直接选最大的那个结果和轮盘赌完全一样就像你给每个奖券都摇个随机数然后大家比大小谁大谁中不用一个个转轮盘了这个操作太爽了所有的奖券可以一起算完全并行GPU 一下子就能跑完不用等一个个加。 而且跨卡的话也不用把所有的结果都传过来每个卡算自己的最大的然后比一下就行通信量直接从十几万降到了几个原来要串行的抽奖一下子变成了并行的比大小速度直接翻了好几倍 你看这又是一个数学的等价变换把不适合硬件的操作变成了适合的就这么简单。写在最后大模型的优化本质上都是 “偷懒” 的艺术null能少算一步就少算一步RMSNorm 砍掉均值能不读写内存就不读写FlashAttention 分块计算能并行就绝不串行Gumbel-Max 把采样变成比大小能用数学变换等价简化就绝不硬算。这些操作没有一个需要什么高深的数学全是高中的数学知识但是就是这些小小的技巧把大模型的推理速度从原来的几秒一个字提升到了现在的几十字一秒把百万 Token 的长文本推理变成了可能。原来姚顺宇说的 “AI 不需要脑子靠谱就行”是这个意思啊 大模型本身就是个实验科学我们不用搞什么花里胡哨的新算法只要把这些基础的数学技巧用到位把硬件的效率榨干就能把 AI 的速度提上去让更多人用得起大模型。聊聊你的看法你平时用 AI 聊天、写东西的时候有没有调过 Temperature 这个参数你觉得调完之后AI 的回答变化大吗 或者你有没有发现原来 AI 背后的这些技术其实和我们生活里的小事这么像来评论区聊聊你的看法吧