克服 LLM 推理的非确定性
摘要
本文探讨了大语言模型推理结果不可复现的深层原因。作者指出,即使将温度设为0(贪婪采样),LLM API和开源推理库如vLLM、SGLang仍会产生不确定结果。常见的"并发+浮点"假说认为GPU并行执行顺序不确定导致浮点累加结果不同,但这一解释并不完整。实际上,单独的矩阵乘法在GPU上是可复现的,真正的问题根源需要从更底层的内核实现角度来理解。
内容框架与概述
文章开篇指出可复现性是科学进步的基石,但LLM推理难以获得可复现结果。即便采用贪婪采样(temperature=0),无论是商业API还是本地部署的开源库,都无法保证确定性输出。作者引用了多方资料说明这一现象的普遍性。
接着,文章批判性地审视了流行的"并发+浮点"假说。该假说认为GPU的浮点非结合性((a+b)+c ≠ a+(b+c))加上并行执行的不确定顺序导致了结果不一致。作者通过一个简单实验证明,相同数据的矩阵乘法在GPU上可以得到完全一致的结果,这说明仅凭"并发+浮点"无法解释全部问题。
文章深入解释了浮点非结合性的本质——不同数量级的浮点数相加时会丢失精度,不同的累加顺序会产生不同结果。作者用十进制浮点数的例子清晰展示了这一机制,并指出一个8元素数组可能产生102种不同的求和结果。然而,这只解释了数值差异的来源,而非不确定性的真正根源。
最后,作者将目光转向内核实现层面。虽然原子加法(atomic add)确实会引入不确定性,但现代GPU内核很少使用这种方式。文章暗示真正的答案在于内核的具体实现方式,而非简单的并发执行模型。
核心概念及解读
浮点非结合性(Floating-point Non-associativity):浮点数运算不满足结合律,即(a+b)+c ≠ a+(b+c)。这是因为浮点数只能维持有限精度,当不同量级的数相加时会发生精度丢失,导致累加顺序影响最终结果。
贪婪采样(Greedy Sampling):将temperature设为0时,LLM始终选择概率最高的token,理论上应产生确定性输出。但实际上API和推理库仍表现出不确定性。
“并发+浮点"假说:一种常见解释,认为GPU并行线程完成顺序的不确定性导致浮点累加顺序不同,进而产生不同结果。作者认为这一假说虽非完全错误,但未揭示问题全貌。
原子加法(Atomic Add):一种硬件同步原语,保证多核并发累加时每次加法都会被处理,但不保证执行顺序。这是真正引入不确定性的机制之一,但现代高效内核往往采用其他策略避免使用它。
原文信息
| 字段 | 内容 |
|---|---|
| 原文 | Defeating Nondeterminism in LLM Inference |
| 作者 | Horace He in collaboration with others at Thinking Machines |
| 发表日期 | 2025-09-10 |
此摘要卡片由 AI 自动生成