OpenAI联合创始人伊利亚・萨茨凯弗(Ilya Sutskever)在一次采访中曾表示:
“只要在足够大的数据集上训练一个足够庞大且足够深的神经网络,你就必然会取得成功。”
这句话的价值在于,它明确强调了“规模”至今仍是所有新的最优模型(SOTA)所遵循的核心逻辑。
2020年,AI研究人员发表了《神经语言模型的缩放定律》一文,通过实验探索了语言模型性能的缩放规律,发现决定模型性能的因素主要有三个:计算量、数据集大小、参数规模。
这其中,最值得关注的发现是:随着模型规模、数据集大小及训练所用计算量的增加,大语言模型(LLM)的性能会逐步平稳提升。这一规律同样影响着推理过程——模型规模越大,所需的计算资源就越多,唯有如此才能实现高效部署,同时将延迟控制在合理范围内。
(OpenAI关于LLM预训练的缩放定律研究成果)
本文将详细解析LLM的推理机制,通过以一个自定义提示词为例,逐步拆解预填充(prefill)和生成(generation)两个阶段,同时解释token采样(token sampling)、线性投影(Linear Projection)的工作流程,以及如何通过对logits应用Softmax函数来获取下一个token的概率分布。
此外,本文还会说明TopN、TopK等是如何影响token选择,以及生成过程如何终止。
什么是模型推理与部署?
在机器学习运维(MLOps)的生命周期中,推理过程属于部署与反馈阶段。当完成数据的收集、清洗、标注等准备工作,经过多轮训练实验并选定最优模型后,便需要对模型进行部署,随后输入真实世界中未曾见过的数据,以此获取预测结果。
推理指的是:将训练好的模型与未见过的输入数据(推理数据)结合,生成预测输出供用户或服务使用的过程。
而模型部署(model serving)则是指将模型打包并部署,使其在生产环境中作为实时数据处理服务或可调用的API服务可用。
简单来说,模型本质上是按层组织的结构化数学运算图,每个神经元或层都附着有预定义的常量(权重和偏置值),这些是模型训练过程中学到的参数。要让模型可部署,需配置相应的库、框架、依赖项和流水线,将输入数据处理为模型可理解的标准化格式,同时将模型输出(即预测结果)转换为与应用兼容的格式。
LLM的推理过程
大多数主流的仅解码器大语言模型(decoder-only LLMs)都以因果建模为目标进行预训练,核心能力是“下一词预测”。它们接收一系列token作为输入,持续生成序列的下一个token,直到满足停止条件——要么生成特殊token(如, , <end_of_text>),要么达到指定的max_tokens参数限制。
这个过程具有自回归特性:T0…T(n-1)token生成T(n)令牌,随后T0…T(n)又生成T(n+1)token。
理解LLM推理需掌握两个阶段:预填充(初始化)阶段和解码(生成)阶段。
LLM的预填充阶段
预填充(prefill)也称为输入处理阶段,是LLM接收token输入并计算中间状态(键和值)以生成“第一个”新token的过程。
以“Neural Bits Newsletter is”作为输入文本为例:在预填充阶段,文本会被tokenized,模型进入“热身”阶段,根据输入文本计算初始的K(键)和V(值)矩阵。
需要注意的是,在推理中,预填充阶段会占用较多GPU内存,因为模型在第一次处理提示时需要加载整个输入上下文。此阶段的注意力机制可视为矩阵到矩阵的运算,在GPU上具有高度并行性。
(Neural Bits Newsletter”通过tokenizer的转换过程)
每个LLM模型都会训练自己的tokenizer,且tokenizer与预训练数据集的文本语料高度相关。以下示例使用的是GPT-4o和GPT-4o-mini的tokenizer。
一个常用的指标是首token生成时间(TTFT,time to the first token),它衡量预填充时间、token化过程和初始K、V状态计算的耗时,通常用于测试预填充阶段的性能。
当第一个新token被添加到序列中,就进入了自回归生成阶段。

(展示预填充阶段生成第一个“新”token的过程。当输入提示经token化处理并传入LLM后,最后一层会对logits执行线性投影+Softmax运算,得到覆盖模型整个词汇表的概率分布,进而选出下一个token)
该阶段后,Q(查询)、K(键)和注意力矩阵完成“热身”,由于内存已完成分配,生成过程会运行得更快。
LLM的生成阶段
生成阶段指的是LLM通过自回归过程逐个生成token,直到满足停止条件的过程。每个连续输出的token都需要参考所有先前生成token的输出状态(键和值)。
这里有一个重要的点需要说明:生成阶段受内存限制。原因如下:
权重、键、值和激活值从CPU内存传输到GPU的速度,慢于计算这些数据本身所需的时间。每个新token、键和值的规模呈线性增长,而注意力计算的规模则大致呈二次方增长。
要理解这种缩放关系,请参考下图,该图展示了输入提示词的嵌入向量如何在Transformer层中进行流转:
在每个网络层中,模型都会为输入序列中的每个token计算查询(Query,Q)、键(Key,K)和值(Value,V)向量,以及一个注意力矩阵。随着这些表征流经更深层的网络,它们会被不断优化,从而具备更强的上下文理解能力。
向序列中添加一个token会使Q、K、V矩阵的行数线性增加。对于尺寸为N×N(其中N为序列长度)的注意力矩阵而言,新增token会使其规模相应扩大,进而导致注意力计算量呈二次方增长。
LLM中另一个核心组件是最后一层——其本质上是一个分类层。
该层包含线性投影(Linear Projection)过程:将前层的中间输出映射到n_vocab维度(n_vocab表示模型训练时的词汇表大小)。
简而言之,如果模型包含100个token,那么经过线性投影后,logits的形状将为(100)。将这些logits输入Softmax激活函数后,会得到整个词汇表上的概率分布,该分布代表了每个token作为下一个令牌的可能性。接下来,LLM会根据生成配置参数(TopK、TopP、温度)选择最优的“下一个token”,并将其添加到序列中,之后重复这一过程。
可通过下图查看整个过程:
(基于nano-GPT模型架构的LLM输入部分结构)
为解析上述生成配置参数,可通过调整温度(Temperature)、TopK和TopN阈值来控制token的采样过程。以下是这些参数的作用:
温度(Temperature):应用于最终Softmax层的缩放因子,影响模型计算的下一个token的概率分布。较高的温度(≈1)会使token选择更随机/更具创造性,较低的温度则会使行为更具确定性。
TopK:也称为贪婪采样,它让模型仅考虑最可能的K个token。较小的K会使行为更确定(具体),较大的K则会使行为更随机(stochastic)。
TopN:也称为核采样,与TopK类似,但它并非限定考虑K个token,而是以这些token的累积概率为条件:模型会选择累积概率超过阈值的N个token。
例如,若将阈值设为0.5:第一次迭代中,若“awesome”的概率为0.6,则仅考虑该token;若“awesome”的概率为0.1、“amazing”的概率为0.2、“marvelous”的概率为0.3,三者累积概率为0.6(超过阈值),则会考虑这3个token。
结合实际示例理解会为更简单。
回到“Neural Bits Newsletter is”这个提示,假设第一个预测token是“awesome”,那么整体过程如下:
LLM中自回归解码的工作原理:此图展示新token如何被添加至初始序列并传入LLM,通过应用线性投影和Softmax运算来获取“下一个”token。

(基于nano-GPT模型架构的最后一层功能(线性投影+Softmax))
我们能清晰看到这个重复过程:将新token添加到序列中,传入模型,获取下一个token,再次添加并传入模型,直到达到max_tokens限制或模型生成(序列结束)token。
了解这个原理后,当你使用LLM模型(如ChatGPT、Gemini、Perplexity等)时,聊天界面中文字开始出现前的短暂延迟,就是预填充和第一个token生成的耗时,之后逐个出现的新词汇,则来自生成阶段。
结论
综上,本文详细阐述了LLM的推理机制,包含了仅解码器型LLM的预填充(Prefill)和生成(Generation)两个阶段,这两个阶段是理解推理过程中吞吐量和整体延迟的关键。
上述内容不仅揭示了大模型的思考过程,也为理解LLM生成文本的底层逻辑提供了清晰的路径。

被折叠的 条评论
为什么被折叠?



