1. Transformer推理流程概述
在大模型推理过程中,Transformer架构通常分为两个关键阶段:Prefill(预填充)阶段和Decoder(解码)阶段。这两个阶段共同构成了大模型生成文本的核心流程。
Prefill阶段负责处理用户输入的提示词(prompt),一次性计算并缓存所有token的Key和Value(KV Cache)。这个阶段的特点是:
- 并行处理整个输入序列
- 计算复杂度为O(n²),其中n是输入序列长度
- 生成KV Cache供后续解码使用
Decoder阶段则基于Prefill阶段的结果,逐个生成新的token。这个阶段的特点是:
- 串行生成,每次只处理一个token
- 利用KV Cache避免重复计算
- 计算复杂度为O(1)(相对于序列长度)
python复制# 简化的推理流程示意
def generate(prompt):
# Prefill阶段
tokens = tokenize(prompt)
hidden_states, kv_cache = prefill(tokens)
# Decoder阶段
while not stop_condition:
next_token = decode_step(hidden_states[-1], kv_cache)
tokens.append(next_token)
hidden_states = update_hidden_states(hidden_states, next_token)
return detokenize(tokens)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Prefill阶段详解
2.1 Tokenization(分词)
分词是将自然语言文本转换为模型可处理的token序列的过程。以Llama-2为例:
python复制from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b")
prompt = "The capital of France is"
tokens = tokenizer.encode(prompt, return_tensors="pt")
# 输出: tensor([[ 1, 1576, 7483, 310, 8363, 5799]])
# 对应: [BOS, The, capital, of, France, is]
关键点:
- 特殊token处理(如BOS、EOS)
- 子词切分(如"capital"可能被拆分为"cap"+"ital")
- 不同模型的分词器实现不同,需要与训练时保持一致
2.2 Embedding层
Embe
