Lazy loaded image
AI&机器学习
Lazy loaded image大模型为什么输出有不确定问题,如何解决?
Words 668Read Time 2 min
2025-9-24
2025-9-24
slug
大模型为什么输出有不确定问题,如何解决?
type
Post
status
Published
date
Sep 24, 2025
tags
大模型
思考
summary
大模型输出不确定性并非仅因“浮点运算+并发”,而是核心算子缺乏 batch invariance:不同批次大小会改变归约/并行策略,进而影响解码路径。通过让 RMSNorm、Matmul、Attention 等关键 kernel 保持批次不变性,可以实现温度 0 下的完全可复现推理。这意味着:在创意生成中,不确定性是有意的;在金融、医疗等场景,则可通过 batch-invariant kernel 获得稳定确定的结果。
category
AI&机器学习
icon
password

网址链接

 

自我感悟

最近读到一篇硬核长文《Defeating Nondeterminism in LLM Inference》,瞬间把我之前的困惑都串起来了。 我们常说:大模型像“文字接龙”。想要更有创意,就把 temperature 调高一点;若把温度调成 0,理论上每次都选概率最大的词,应该是确定的。可现实是:温度 0 也经常不确定,同样的输入,结果有时仍不一样。 很多解释会把锅甩给“并发 + 浮点非结合性”。但这篇文章指出:这解释不完整。事实是,许多前向 kernel(比如常见的矩阵乘法)在相同形状下是 run-to-run 位级相同 的;给定一模一样的整批请求,前向也可以被视为确定。
那用户为啥还会遇到不确定?关键在一个词:batch invariance(批次不变性)。 当你的请求被放进推理引擎时,这一次的 batch 大小(由并发和负载决定)会影响底层 kernel 的归约/并行策略,从而改变数值细节→最终的解码路径。 负载对你来说是“随机”的,因此同样输入、一次次调用就体感不确定。
作者给的解法是:把涉及归约的关键算子都做成 batch-invariant——RMSNorm:保持数据并行,避免小 batch 时切到改变归约顺序的策略; Matmul:回避随形状切换到 Split-K/stream-k,尽量用固定的 tiles/指令组合; Attention:让 KV cache 与当前 token 的 K/V 在 kernel 里统一布局与归约顺序,并用 “固定 split 大小”的 Split-KV,保证不因切片/并发不同而改顺序。 结果很硬气:温度 0、同一提示跑 1000 次,默认栈出现约 80 种不同;启用 batch-invariant kernels 后,1000/1000 次完全一致。性能会慢一些,但在优化后仍在可接受范围。
我的看法: 创作/营销场景里,我们有意用温度造“好不确定”; 金融、法律、医疗里,需要的是底层可复现的“好确定”。 这篇文章的价值,就在于直指根因:不是简单“浮点+并发”,而是kernel 缺乏 batch invariance;只要把 RMSNorm/Matmul/Attention 做到 batch-invariant,推理就能“所见即所得”。 这一步迈过去,True On-Policy RL 也就有了现实基础。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
上一篇
策略思维入门 《战略的艺术》
下一篇
当代爱情:在欲望森林里迷路的人们