LLM推理:预填充阶段(Prefill)

预填充阶段(Prefill)是使用KV Cache技术进行推理时的初始阶段,其核心目标是为整个输入序列预先计算并缓存所有键(Key)和值(Value)向量,为后续解码阶段的高效生成奠定基础。以下从多个维度详细解析这一阶段:


1. 预填充阶段的作用

  • 建立初始缓存:在生成第一个输出token前,模型需处理完整的输入序列(如用户输入的提示词),计算每个Transformer层中所有输入位置的Key和Value向量,并将其存入KV Cache。

  • 避免重复计算:解码阶段生成后续token时,可直接复用预填充阶段缓存的Key/Value,无需重新计算历史token的中间结果,显著降低计算量。


2. 预填充阶段的触发时机

  • 首次生成时启动:当模型开始生成第一个输出token时,预填充阶段立即启动。

  • 仅执行一次:对于单次推理请求(如生成一段文本),预填充阶段仅在处理输入序列时运行一次

### Transformer 模型 Prefill 实现与工作机制 #### 1. Prefill 的定义及其重要性 Prefill 是指当给定一个新的输入序列时,模型会先计算并缓存一部分中间状态,以便后续解码过程中可以更高效地生成输出。这种机制特别适用于自回归语言模型,在首次接收输入时完成初始化工作,从而加速推理过程。 对于基于Transformer架构的语言模型而言,prefill阶段主要涉及对输入序列的位置编码、注意力掩码以及初始隐藏状态的构建[^2]。 #### 2. Prefill 过程中的关键技术点 - **Tokenization 和 Embedding Lookup** 在接收到原始文本后,首先需要对其进行分词处理(即 tokenize),将其转化为一系列 token ID 组成的列表;接着利用训练好的 embedding 层查找对应的 word embeddings 向量表示形式。此部分操作通常由 tokenizer 工具包自动完成。 ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('model_name') input_ids = tokenizer("Hello world", return_tensors="pt").input_ids ``` - **Positional Encoding 添加** 为了使模型能够捕捉到单词之间的相对位置关系,需向每个 token 的 embedding 上附加特定模式的位置编码。这一步骤确保即使是在无序的数据集上训练得到的模型也能有效地区分不同顺序下的相同词汇组合[^3]。 - **Attention Mask 构建** 由于实际应用场景中可能存在变长输入的情况,因此还需要创建 attention mask 来屏蔽掉 padding 部分的内容,防止其干扰正常的上下文关联学习。此外,在多轮对话场景下,attention mask 可以帮助维持历史交流记录的影响范围控制[^1]。 ```python import torch # 假设 input_ids 形状为 (batch_size, seq_length) attention_mask = torch.ones_like(input_ids).masked_fill_(input_ids == tokenizer.pad_token_id, value=0) ``` - **Initial Hidden States 计算** 最后一步则是调用 encoder 或 decoder 中的第一层或多层网络单元,传入上述准备完毕的各种张量作为输入参数,以此获得整个序列经过初步变换后的 hidden states 表达。这部分结果会被保存下来供之后逐步扩展测使用。 ```python from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained('model_name') with torch.no_grad(): outputs = model.generate( inputs=input_ids, max_new_tokens=50, do_sample=True, top_k=50, temperature=0.7, pad_token_id=tokenizer.eos_token_id, past_key_values=None # 此处设置为 None 即代表执行 prefill 操作 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值