transformer之KV Cache

一、为什么要研究KV Cache

非常有效的加速推理速度,效果如下所示:

import numpy as np
import time
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
NAME_OR_PATH = r'***************'
device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(NAME_OR_PATH)
model = AutoModelForCausalLM.from_pretrained(NAME_OR_PATH).to(device)
model.config.pad_token_id = tokenizer.eos_token_id
for use_cache in (True, False):
  times = []
  for _ in range(10):  # measuring 10 generations
    start = time.time()
    model.generate(**tokenizer("What is KV caching?", return_tensors="pt").to(device), use_cache=use_cache, max_new_tokens=10)
    times.append(time.time() - start)
  print(f"{'with' if use_cache else 'without'} KV caching: {round(np.mean(times), 3)} +- {round(np.std(times), 3)} seconds")
  #===================================max_new_tokens=1=======================================================
with KV caching: 0.072 +- 0.008 seconds
without KV caching: 0.081 +- 0.02 seconds
#===================================max_new_tokens=10=======================================================
with KV caching: 0.428 +- 0.021 seconds
without KV caching: 0.751 +- 0.04 seconds
#===================================max_new_tokens=100=======================================================
with KV caching: 4.606 +- 0.072 seconds
without KV caching: 19.257 +- 1.663 seconds
#===================================max_new_tokens=1000=======================================================
with KV caching: 42.941 +- 0.711 seconds
without KV caching: 349.954 +- 1.523 seconds

使用KV Cache的推理速度是明显优于没有使用KV Cache的,而且生成的token越长速度提升就越明显,当最大生成token数为1000时,近10倍的加速,一次推理近6分钟。

二、为什么KV Cache能加速

2.1 原理是什么

最本质的原理是避免重复计算,将需要重复计算的结果进行缓存,需要缓存的值为历史token对应的KV值,所以叫KV Cache。

2.2 为什么只需要KV

预测新的token只与输入的最后一个token相关,输入的最后一个token因为只需要计算注意力值,而注意力的值需要将输入token的V值进行加权即得到结果,进行加权就需要将当前的Q与与所有的K进行计算得到权重,所以只需要缓存历史token的KV值。

2.2 为什么会存在重复计算

首先,生成式模型每生成一个新token都需要调用整个模型进行一次推理,历史token计算得到的中间激活值在Decoder架构的模型中每次推理时都是一样的,所以可以进行缓存。
这是因为Decoder架构中,当前token只用之前的token计算得到注意力值,通过Causal Mask实现,换句话说,在推理的时候前面已经生成的字符不需要与后面的字符产生attention,从而使得前面已经计算的K和V可以缓存起来。

2.3 预测新token的计算步骤

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
由于Causal Mask矩阵的存在,预测下一个token只与输入的最后一个token的QKV和历史token的KV有关;
如果没有Causal Mask,比如说是encoder架构,每次推理时每个token需要考虑所有输入的token,所以得到的注意力值都会变化,就不存在重复计算的情况。

三、结论

1、KV Cache是通过空间换时间,避免重复计算进而提升推理速度
2、预测新token只与输入的最后一个token的注意力值相关,而注意力值与最后一个token的Q和所有输入token的KV相关,每一层的注意力不变,进而每一层的KV都是不变的
3、只适用于Decoder架构,因为只与之前的token进行计算,得到的注意力值不会变化,第一层、第二层、第三层到第 l l l层; 如果只有一层,那就不仅仅适用于Decoder架构

本课程了有关Transformer和大语言模型(LLM)的关键前置知识, 包括注意力机制、多头注意力、编码器-解码器结构等Transformer原理, 以及LLM的文本生成和LLM微调技术原理。在此基础上, 重点介绍了Llama 3模型的进化历程、技术原理和代码实现。其中涉及RMSNorm归一化、SwiGLU激活函数、RoPE位置编码、GQA注意力和KVCache等关键技术。通过代码解析, 深入剖析了Llama 3的架构设计和代码实现。在实践部分, 课程还介绍了如何在阿里云使用Ollama和vLLM部署Llama 3模型, 以及使用llama_factory工具进行基于LoRA和QLoRA的llama3 8B大模型微调。项目实战环节则提供了从准备数据集到训练、推理、评估的全流程指导, 聚焦中文增强和医疗问答两大应用方向。这是一门内容全面、理论实践并重的大模型课程。不仅系统讲解了LLM和Llama 3的技术原理, 还通过代码解析和实战项目深度剖析了相关技术在工程落地中的关键环节, 有助于学员全面掌握大模型相关知识和动手实战能力。-------------------------------------------------------------------------------具体课程内容如下:前置知识1:Transformer原理与代码精讲- 注意力机制:了解注意力机制如何使模型能够捕捉输入序列中不同位置之间的相关性。- 自注意力:解释自注意力如何允许序列的每个元素都与序列中的其他元素进行交互。- 多头注意力:探讨多头注意力如何通过并行处理多个注意力层来增强模型的能力。- 位置编码:学习位置编码如何为模型提供序列中单词的位置信息。- 编码器和解码器:深入分析Transformer的编码器和解码器结构,以及它们在模型中的作用。- 层归一化(LayerNorm)和前馈网络(FFN):介绍这两种技术如何帮助稳定和增强模型的训练过程。- 代码精讲:讲解Transformer模型的PyTorch代码实现细节等。 前置知识2:大模型(LLM)文本生成- LLM的推理方式- LLM的文本生成模式: 主要有Completion模式和Chat模式两种- LLM的文本生成策略: 包括贪婪搜索、束搜索、随机采样、温度采样、Top-k采样和Top-p采样等- LLM中的Token与分词器- llama3的文本生成过程- LLM文本生成的预填充和解码阶段- LLM文本生成中的Q、K、V机制 前置知识3:大模型微调原理- LLM的开发流程可分为预训练、有监督微调、奖励建模和强化学习四个阶段- 从基座模型到对话模型的转变。- 针对特定领域的SFT微调- 微调的技术方法包括全参微调、冻结微调、LoRA、QLoRA- LoRA技术原理和有效性- QLoRA技术原理 Llama3进化史和生态 Llama3原理精讲- Llama3模型架构- RMSNorm归一化技术- SwiGLU激活函数- RoPE旋转位置编码- GQA分组查询注意力- KVCache Llama3代码解析- 各文件功能- completion和chat应用脚本代码解析- generation.py代码解析- model.py代码解析- tokenizer.py代码解析- RMSNorm代码解析- SwiGLU代码解析- GQA代码解析- RoPE代码解析- KVCache代码解析 Llama3部署- Ollama部署llama3-阿里云免费GPU算力领取及实例创建、ollama安装、llama3推理- VLLM部署llama3 Llama3项目实战1-llama_factory微调llama3中文增强大模型- llama_factory介绍- llama_factory安装及llama3模型下载- LoRA微调训练llama3 8B Instruct模型- llama3中文增强大模型推理- llama3中文增强大模型评估(MMLU, CEVAL, CMMLU)- LoRA文件合并 Llama3项目实战2-llama_factory微调llama3医疗问答大模型(LoRA)- 准备医疗问答大模型数据集- LoRA微调训练llama3 8B Instruct模型- llama3医疗问答大模型推理 Llama3项目实战3-llama_factory微调llama3医疗问答大模型(QLoRA)- QLoRA微调训练llama3 8B Instruct模型- llama3医疗问答大模型推理-----------------------------------------------------------------------------------购课后可加入课程学习QQ群:364717673
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值