作为一名长期从事自然语言处理技术研发的工程师,我经常需要向团队新人解释大语言模型(LLM)的工作原理。今天我就用最直白的语言,带大家完整走一遍LLM处理文本的全过程。这个过程就像是一个高度智能的"文字加工厂",从原材料(输入文本)到成品(输出回答),要经历六个关键工序。
理解这个流程对开发者特别重要,因为:
当你在聊天框输入"你好,请介绍一下大模型"时,模型看到的可不是汉字,而是一串数字。这个转换过程的第一步就是分词。
分词的几个关键点:
注意:不同模型的分词方式差异很大。比如GPT系列使用Byte Pair Encoding(BPE),而BERT使用WordPiece。这会导致相同的输入产生不同的token序列。
每个token会被映射为一个唯一的整数ID,这个过程看似简单,实则暗藏玄机:
例如在GPT-3的词表中:
code复制"你好" → 177519
"," → 11
"大" → 1640
"模型" → 45632
最终文本变成数字序列:[177519, 11, 1640, 45632,...]
Token ID接下来会被转换为高维向量(通常是768-12288维)。这个转换通过嵌入层(Embedding Layer)完成,其核心作用是:
有趣的是,经过良好训练的嵌入空间会呈现有趣的几何特性。比如:
code复制vec("国王") - vec("男") + vec("女") ≈ vec("女王")
向量序列进入Transformer结构后,会经历多层处理。以GPT为例,主要包含:
自注意力层(Self-Attention):
前馈神经网络(FFN):
实操技巧:在预填充阶段,所有token是并行处理的,这也是为什么模型能"同时读懂"整个输入。
在预填充阶段生成的Key-Value缓存(KV Cache)是解码阶段的关键。它:
在实现上,KV Cache的优化直接影响推理速度。常见优化手段包括:
解码阶段的核心是next token prediction。以生成回答"大模型是指..."为例:
模型计算词表中所有token的概率分布
采样策略决定最终选择:
选中的token被追加到序列中
这个过程的数学表达式是:
P(yt|y<t,x) = softmax(W·ht)
其中ht是当前隐藏状态,W是输出投影矩阵。
在实际部署时,自回归生成有几个关键优化点:
内存管理:
计算优化:
停止条件:
不同解码策略的效果差异明显:
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 贪心搜索 | 简单高效 | 易陷入重复 | 确定性输出 |
| 束搜索 | 质量较高 | 内存占用大 | 短文本生成 |
| 核采样 | 多样性好 | 不可控性强 | 创意写作 |
| 温度采样 | 可控随机 | 需调参 | 对话系统 |
在真实业务场景中,我们经常遇到这些问题:
生成结果不符合预期:
推理速度慢:
显存不足:
经过多个项目的积累,我总结出这些有效优化手段:
预处理阶段:
推理阶段:
系统层面:
当前LLM推理技术的最新进展包括:
推测解码(Speculative Decoding):
连续批处理(Continuous Batching):
量化压缩:
在实际项目中,我们通常需要根据业务需求选择合适的技术组合。比如对话系统更关注低延迟,而批量处理任务则优先考虑吞吐量。