本文深入剖析了大模型推理中 Batch Invariance(批次不变性)缺失的底层技术根源,指出 GPU 算子动态调度策略(如 Split-K、BLOCK_K 变化)导致的浮点加法顺序改变是导致结果波动的核心原因,并探讨了在 AI Infra 层面的优化与 Trade-off。
📝 详细摘要
文章从大模型推理的可重复性问题出发,揭示了为何在相同硬件与提示词下,不同批次(Batch)请求会导致输出结果不一致。作者通过分析 GPU 底层 GEMM 算子优化策略(如 Tiling、Split-K、Swizzle),指出浮点加法不满足结合律是根本原因。文章详细拆解了现代推理引擎(如 vLLM)中,为了掩盖访存延迟而引入的动态调度参数(BLOCK_K、SPLIT_K 等)如何重塑浮点数累加的归约拓扑,并进一步探讨了 CUDA 与 Triton 编程范式下的性能调优逻辑。最后,文章分析了在不同 GPU 架构(SM8x vs SM90/100)下实现 Batch Invariance 的工程挑战与路径。
💡 主要观点
- 浮点加法不满足结合律是导致结果波动的数学根源。 浮点数运算的顺序改变会直接影响最终结果。在 GPU 推理中,为了追求极致性能,底层算子会根据输入特征动态调整计算拓扑,从而改变了加法顺序。
💬 文章金句
- Reproducibility is a bedrock of scientific progress.
- 从系统设计的角度来看,导致结果波动的根本原因,不在于信息干扰,而在于系统为了掩盖访存延迟,在底层触发了非确定性的硬件级并行优化。
- 现代 GPU 的计算单元(Tensor Core)算力增长太猛,远远甩开了显存带宽的增速。这就导致 GPU 大部分时间都在等数据搬运,计算单元由于未能及时获取输入数据,大量时间处于空闲等待状态。
📊 文章信息
AI 初评:90
来源:腾讯技术工程
作者:腾讯技术工程
分类:人工智能
语言:中文
阅读时间:87 分钟
字数:21649
标签: AI Infra, GPU, GEMM, vLLM, 大模型推理