news 2026/9/9 13:48:58

推理阶段不同batch size对大模型推理结果的影响

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
推理阶段不同batch size对大模型推理结果的影响

SGLang最新版本提供了确定性推理的方法:SGLang的确定性推理


!!!Thinking Machines Lab对这个问题基本上画上了句号,在其官方blog


大模型推理阶段,进行batch inference批处理推理解码,会像预期的那样速度很快推完吗?会不会有什么问题?

batch inference推理的结果居然会和一条一条推理结果差的很远?!!
Batch Decoding/Inference of LLMs will cause different outputs with different batch size?!

行为表现

测试中可以发现,即使是在推理阶段,不是在训练阶段,对于多模态大模型VLLM,如果推理时候为了加速推理,不是一条一条数据让模型推,而是一次推理batch_size>1条数据,对比batch_size=1和batch_size>1的结果,会发现这两份结果分布是不一样的,why?

  • 可能表现为,batch_size=1测下来的模型推理结果基本上都是对的,例如本身让模型回复“是”或者“否”,很短的回答,模型回答的挺好的,不仅正确而且简短没有废话
  • 调试好了之后大规模数据上batch inference批处理,batch_size>1,发现推理没有变快,推理结果还有问题,准确性大幅下降,模型甚至给出了很多长回复(例如模型开始解释,或者开始模棱两可说为什么不能回答这个问题)

是否是模型随机种子、采样影响

推理阶段影响模型随机性的参数

推理阶段影响模型随机性的参数,可以控制的主要有3个,分别为temperature、topK和topP:

  • temperature:温度参数影响输出的概率分布,当温度接近0时,模型会变得非常确定性,几乎总是选择具有最高概率的下一个词,从而产生更加一致但可能较为重复或缺乏创意的输出。如果希望减少随机性,可以将温度设得低一些
  • topK:只考虑最有可能的k个词汇,并从中进行随机选取,设置一个较小的k值可以帮助减小随机性,因为只有少量高概率的词汇会被选中
  • topP:它基于累积概率来决定候选词汇集。具体来说,模型会选择累积概率达到p阈值的最少数量的词汇作为候选。p值通常设定为0.8或0.9左右,这意味着大约80%或90%的累计概率被覆盖。如果想进一步降低随机性,可以提高这个值

有的人会觉得batch inference结果的差异是模型本身随机性导致的,从分布里面采样,采出来结果不可能每次都一样。为了去掉随机性干扰,可以把temperature设置为0,topK和topP都做类似的设置。当然最好的方式,直接设置do_sample或者是sampling=False,解码时不进行随机采样,这样结果按理就是确定的。

结果表明,即使sampling=False,batch inference的结果还是会和batch_size=1不一样

batch inference结果受到哪些因素影响

在do_sample=False的情况下,已知的,会影响推理结果的因素主要有:

  • batch size,不同batch size大小结果会很不一样
  • padding side (left/right),无论左还是右都不能消除,左和右的推理结果也会很不一样
  • padding value (<unk><eos><bos><0>),用不同的padding值都不能消除差异,不同padding的值也会右影响
  • dtype,数据类型也会有影响(有人怀疑是RMSNorm导致的浮点溢出的问题),FP32、BF16、FP16等都会有影响,即使和原始模型的dtype一样,batch inference解码结果也会不一样
  • KV-cache,是否打开KV-cache也会影响,但是关闭KV-cache并不能解决问题

已知的,会影响到的模型包括所有使用旋转位置编码的模型

解决方法:无,目前还没有修复,可以参考下面的github上gante的comment

缓解的方式

在使用多模型模型MiniCPM-V-2.6尝试,保证每个batch里面输入的token长度是一样的(都是问同一个问题,并且图片的数量一样),这种情况下就不需要padding,得到的batch inference的结果统计下来和batch_size=1的结果是一致

避免的方式

微调模型,如果是需要确定性回答的,比如让模型做分类任务,输出class标签或者VQA做选择题,让微调时prompt和inference一样,被batch size影响的程度会比较小,目前测下来是这样的,可能F1上偏差<3%

参考

  1. 探究inference阶段batch inference差异的论文:The batch size can affect inference results,Openreview
  2. github上的深入探究:huggingface的探究
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:48:40

编码智能体崛起:从代码补全到自主完成任务

Simon Willison 是我在开发者社区里一直比较信任的一个观察者。他不是那种只会转发新闻稿的人&#xff0c;而是真的会把手上的工具拆开、试用、写测试、然后告诉你哪里好用哪里难用。最近他连着好几期内容都在聊同一个话题&#xff1a;OpenAI 内部的研究节奏明显加快了&#xf…

作者头像 李华
网站建设 2026/9/9 13:47:47

信息论视角下的复杂系统:用编码理论平衡确定性与不确定性

通信的根本问题&#xff0c;是在一点精确地或近似地复现另一点选择的消息。香农这句话已经被人引用过无数遍了&#xff0c;但我在做了多年复杂系统仿真、又用信息论与编码理论拆解各种系统行为之后&#xff0c;发现绝大多数人都把重点放在“精确复现”四个字上&#xff0c;却忽…

作者头像 李华
网站建设 2026/9/9 13:46:05

STM32F103 LoRa代码整理实战:基于SX1278的无线通信架构与移植指南

简介&#xff1a;正点原子LORA代码整理版面向STM32F103平台&#xff0c;从原子哥原始工程中删去屏显、按键等外围代码&#xff0c;重写后只保留LORA通信的收发核心&#xff0c;适合需要快速搭建点对点无线链路、做数据透传或二次开发的嵌入式开发者。代码剥离了与通信无关的干扰…

作者头像 李华
网站建设 2026/9/9 13:45:44

GPU利用率99%却训练慢?用PyTorch Profiler与Kineto Trace定位性能瓶颈

我刚开始做GPU性能优化那阵子&#xff0c;就遇到过一件让我特别困惑的事&#xff1a;一块训练卡&#xff0c;nvidia-smi里显示的利用率已经到 99%&#xff0c;任谁看都是“满负荷运转”&#xff0c;可训练一个 step 的实际耗时就是压不下去。后来我借着 PyTorch Profiler 背后的…

作者头像 李华
网站建设 2026/9/9 13:45:33

RESTful API设计最佳实践:Python后端实战指南

作为一个常年写Python后端的人&#xff0c;我见过太多“能跑就行”的接口了&#xff1a;有的是随手用Flask写几个路由&#xff0c;URL命名随心所欲&#xff0c;动词名词混在一起用&#xff1b;有的是所有接口统一返回{"code": 0, "msg": "success&quo…

作者头像 李华
网站建设 2026/9/9 13:44:47

把 KernelSU 刷进你的手机:从自检到救砖的全流程

把 KernelSU 刷进你的手机&#xff1a;从自检到救砖的全流程 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU KernelSU 是一个基于内核的 Android root 方案&#xff0c;它修改的是内核…

作者头像 李华