LLM推理不确定性根源与确定性方案

AAI脑图#5109222025-09-14 10:38
19900

内容详情

背景与问题

现象

  • 温度=0仍不一致
    • 贪婪采样(temperature=0)理论上确定,但API与开源引擎(vLLM/SGLang)仍输出不同结果
  • 影响
    • 科学可重复性缺失
    • 在线策略RL退化为离线策略

误区:并发+浮点假说

常见解释

  • 浮点非结合性
    • (a+b)+c≠a+(b+c)因舍入误差
  • 并发原子加
    • 多线程完成顺序随机→累加顺序随机

反例

  • 矩阵乘法实验
    • 同一GPU重复运行torch.mm得按位相同结果→并发本身非元凶

真因:批次大小敏感性(缺乏批次不变性)

定义

  • 批次不变性
    • 同一请求的输出与batch中其他请求存在与否无关
  • 观察
    • 同一matmul,单元素vs整批提取首元素,差值可达1e3量级

系统视角

  • 推理服务器内部
    • 前向pass确定(无原子加)
  • 用户视角
    • 并发负载随机→batch size随机→数值路径随机→输出随机

核心算子批次不变性改造

RMSNorm

  • 数据并行策略
    • 每SM处理整行→缩减顺序固定
  • 小batch挑战
    • SM过剩→需split-reduction,破坏不变性
  • 解决方案
    • 忽略小batch性能或采用固定缩减策略

MatMul

  • 数据并行tiling
    • 输出tile整块归约保留于单SM
  • Split-K与Stream-K
    • 沿K维拆分→多SM累加→顺序随机
  • 固定策略
    • 统一tile配置/PTX指令,牺牲<20%性能换确定性

Attention(FlashAttention)

  • 数据并行Q
    • 沿Q并行,K/V归约留在单SM
  • KV-cache边界
    • 分块预填充→块数变→归约顺序变
  • Split-KV解码
    • 查询长度短→需沿KV拆分→策略随长度变
  • 固定拆分大小
    • 每段长度固定,段数随总长变化→归约顺序恒定

实现与验证

工具链

  • vLLM + FlexAttention
    • 非侵入式替换PyTorch算子
  • 仓库
    • thinking-machines-lab/batch-invariant-ops

实验

  • 不确定性量化
    • Qwen3-235B温度0,1000次生成→80种不同完成;启用批不变内核→100%一致
  • 性能评估
    • Qwen-8B单GPU:默认26s→确定性55s→优化注意力42s

在线策略RL

  • 问题
    • 采样/训练数值不一致→隐式离策略
  • 解决
    • 位级确定性→KL=0,奖励曲线平稳,无需重要性加权

结论与启示

拒绝"概率系统可容忍随机"思维

深入抽象层定位数值差异

批次不变性为LLM推理确定性的关键