同一个 prompt 会产生完全相同的答案吗?不一定,即使 temperature=0。问题未必出在模型,可能出在推理基础设施。

这是山景城小路在推文串里提出的问题。他给出的解释指向一个容易被忽略的环节:动态批量处理。

计算顺序被打乱了

在 dynamic batching 中,请求会根据到达时间和大小动态合并。这意味着每次运行的批次大小和形状都不同。

批次结构一变,底层 GPU kernel 的执行路径也跟着变。比如矩阵乘法的分块方式和累加顺序,都会因为批次不同而不同。

浮点运算本身不满足严格的结合律。微小的浮点误差在累加过程中逐步累积,最终足以改变 token 的选择。这就是为什么即使 temperature=0,相同输入也可能返回不同结果。

批次不变性是什么

批次不变性意味着:无论同时处理多少请求,同一个样本的计算结果都应该完全相同。

要实现这一点,通常需要重新设计关键算子的数值归约路径,比如 RMSNorm 和矩阵乘法。核心思路是让这些算子的计算结果不依赖于外部的批次结构。

换句话说,一个样本的计算路径要被固定下来,不能因为旁边多了几个请求就改变自己的累加顺序。这可能会带来一定的性能损失。

为什么工程师要关心这件事

这个问题在模型评估、强化学习和系统设计中都有影响。排查模型行为时,推理引擎和 GPU 内核的影响也需要纳入考虑范围。

山景城小路在推文里写道:这本来是量子物理学家的事,现在变成了 AI 工程师要头疼的问题。