Hacker News 中文摘要

RSS订阅

在LLM推理中击败非确定性 -- Defeating Nondeterminism in LLM Inference

文章摘要

文章探讨了在大型语言模型推理中如何克服非确定性问题,重点分析了浮点数非结合性对计算顺序的影响,并提出了通过批处理不变性技术(如批处理不变的RMSNorm、矩阵乘法和注意力机制)来实现确定性推理的方法。

文章总结

标题:解决LLM推理中的非确定性问题

主要内容:

在大型语言模型(LLM)的推理过程中,非确定性是一个常见问题,即使将温度参数设置为0(即贪婪采样),模型的输出仍然可能不一致。这种现象不仅出现在API调用中,即使在使用开源推理库(如vLLM或SGLang)时,推理结果也可能存在非确定性。

非确定性的根源: 1. 浮点数非结合性:浮点数运算中的非结合性(即(a+b)+c ≠ a+(b+c))是导致数值差异的主要原因。GPU的并行计算进一步加剧了这一问题,因为不同线程的执行顺序可能影响最终结果。 2. 并发执行:GPU的并发计算可能导致不同核心的运算顺序不一致,从而引入非确定性。

批处理不变性与非确定性: LLM推理中的非确定性主要源于批处理大小的变化。推理服务器的负载决定了批处理大小,而负载的变化会导致不同请求的输出结果不一致。即使推理服务器本身是确定性的,从单个用户的角度来看,其他并发用户的存在使得系统表现出非确定性。

如何实现批处理不变性: 为了实现LLM推理的确定性,必须确保核心操作(如RMSNorm、矩阵乘法和注意力机制)在不同批处理大小下保持一致。具体策略包括: 1. RMSNorm:通过数据并行策略,确保每个批处理元素的归约顺序固定。 2. 矩阵乘法:采用固定大小的分块策略,避免因批处理大小变化而改变归约顺序。 3. 注意力机制:在处理KV缓存时,确保归约顺序不依赖于批处理大小或序列的分块方式。

实验与结果: 通过实验验证,使用批处理不变性内核后,LLM推理的输出完全一致,且性能损失在可接受范围内。此外,确定性推理还使得强化学习(RL)训练中的采样与训练过程保持一致,避免了因数值差异导致的策略偏离。

结论: 通过深入理解非确定性的根源,并采取相应的技术手段,可以有效解决LLM推理中的非确定性问题。这不仅提高了推理结果的可重复性,还为强化学习等应用提供了更稳定的训练环境。

引用: He, Horace and Thinking Machines Lab, "Defeating Nondeterminism in LLM Inference", Thinking Machines Lab: Connectionism, Sep 2025.

或使用BibTeX引用: @article{he2025nondeterminism, author = {Horace He and Thinking Machines Lab}, title = {Defeating Nondeterminism in LLM Inference}, journal = {Thinking Machines Lab: Connectionism}, year = {2025}, note = {https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/}, doi = {10.64434/tml.20250910} }

评论总结

评论主要围绕大语言模型(LLM)的确定性问题展开,观点分为支持确定性和认为非确定性难以解决的两派。

支持确定性的观点: 1. 确定性可实现:lrvick认为通过Stagex等工具可以实现确定性输出,并分享了自己的实验经验,指出在相同提示和种子下,LLM输出一致。他还提到在GPU集群中硬件差异会增加复杂性。 - "Run two of these with the same prompts and same seed and you get the same results." - "Obviously in GPU clusters with different hardware things get more complicated."

  1. 技术手段支持:threeducks提到PyTorch提供了确保确定性的方法,如设置随机种子和使用确定性算法,尽管不同驱动和GPU之间结果可能仍有差异。
    • "Seed your PRNGs and call torch.usedeterministicalgorithms(True) to get the deterministic kernels."
    • "Note that results will still differ between different drivers and GPUs."

认为非确定性难以解决的观点: 1. 硬件和编译器影响:measurablefunc指出不同硬件和编译器可能导致结果不一致,质疑内核在不同GPU和TPU版本上的表现是否一致。 - "I don't think they verified that the kernels will work the same on different GPU & TPU versions." - "How do they know that the compiler will not re-order the operations behind their back?"

  1. 上下文和输入变化:lsy认为即使解决了封闭系统的非确定性问题,实际应用中上下文和输入的微小变化仍会导致不同结果,限制了确定性的实用性。
    • "The exact same input gives different results given different preceding context."
    • "A slightly transformed input doesn't give a correctly transformed result."

其他相关观点: 1. 开发者合作问题:mg提到非确定性阻碍了开发者之间的合作,特别是在共享提示和生成代码或图像时,非确定性使得结果难以复现。 - "How do you share prompts among developers when they produce different code every time?" - "Most image models will not create the same image when given the same prompt and parameters."

  1. 模型性能与确定性平衡:cubefox指出贪婪采样(temperature 0)可能影响模型性能,但通过固定种子的伪随机采样仍可实现确定性推理。
    • "Deterministic inference with temperature >0 can still be achieved by using pseudorandom sampling with a fixed seed."

总结:评论中对LLM确定性的讨论集中在技术实现的可行性和实际应用的挑战上,支持者认为通过工具和方法可以实现确定性,而反对者则指出硬件、上下文和输入变化等因素使得非确定性难以完全解决。