大模型输出的不确定性
同一个模型、同一段 Prompt,在闲时和高峰期可能会返回质量差距很大的结果,通常并不是厂商主观上更换了更激进量化版的“降智”模型,更可能是服务端调度的问题。
MoE 的路由层会把 token 分给少数几个对应的专家,不同专家的参数权重完全不同,分给谁就直接决定这一层的输出。与此同时,每个专家同一批次能处理的 token 数有硬上限 (Expert Capacity),用于防止显存溢出和计算卡顿。
而高并发时,大量同类请求被打包进同一个批次,挤向同一个专家。一旦触及容量阈值,推理引擎为维持整体吞吐会触发 Token Dropping 丟弃部分 token,或把溢出的 token 直接转给排序靠后的备选专家。因此同一段代码 Prompt,空闲时大概率由最优专家完整处理,高峰期如果很多用户有相同的需求比如编程,对代码 token 权重偏高的几个专家瞬间就被占满了,部分 token 会由次优的专家计算,甚至通过残差连接绕过专家计算,输出质量当场下降。
还有一个类似的现象与忙时无关,是对于单并发场景,即使严格控制变量,严格设定 temperature=0,同一段 Prompt 仍可能会返回有差异的结果。这是底层算子的原因,即并行归约时线程取分块与求和的顺序不确定,由于 GPU 中舍入误差的存在,浮点数运算不满足结合律 ((a+b)+c) 未必等于 (a+(b+c)),微小偏差就会被逐步放大,此外投机解码等原因也会影响输出。同一个prompt重复多次输入进 LLM,为啥得到的输出都不一样? - 知乎 这个问题下的回答给出了多方面的详细解释。