LLM推理和优化(1):基本概念介绍

一、LLM推理的核心过程:自回归生成
LLM(如DeepSeek、ChatGPT、LLaMA系列等)的推理本质是自回归生成:从初始输入(如[CLS]或用户prompt)开始,逐token预测下一个词,直到生成结束符(如[EOS])。其核心分为两个阶段:
1. Initialization阶段(初始化)
- 目标:准备第一个token的生成条件。
- 关键步骤:
- 输入编码:将初始prompt转换为token序列(如
[CLS]你好),嵌入为向量x_0。 - 初始隐藏状态:通过Transformer的编码器(或直接使用预训练参数)生成第一层的隐藏状态
h_0。 - KV Cache初始化:为每一层的每个注意力头创建空的Key/Value缓存(形状:
[batch, heads, seq_len, head_dim])。此时seq_len=0,因为尚无历史token。
- 输入编码:将初始prompt转换为token序列(如
示例:生成首词“今天”时,输入为[CLS],初始化后仅计算第一层的h_0,KV Cache为空。
在LLM推理中,Initialization阶段(初始化阶段)又称“预填充阶段”(Prefill Stage)。这一命名源于其核心功能:为后续的逐token生成预填充(Prefill)KV Cache和初始隐藏状态。
工程实现
Hugging Face的transformers库、NVIDIA的FasterTransformer均采用prefill和generation区分这两个阶段。例如:
# 伪代码:Hugging Face生成逻辑
outputs = model.prefill(prompt) # 预填充KV Cache(Initialization)
for _ in range(max_new_tokens):outputs = model.generate_step(outputs) # 解码阶段,逐token生成
术语对比:Initialization vs Prefill
| 场景 | 常用术语 | 含义侧重 |
|---|---|---|
| 学术描述 | Initialization | 强调“初始化隐藏状态和缓存” |
| 工程实践 | Prefill | 强调“预填充固定长度的输入” |
| 用户视角 | 输入处理阶段 | 对应“用户输入的prompt处理” |
本质是同一阶段,但“Prefill”更直观反映了其“为生成提前准备历史KV”的工程目标。
2. Decoding阶段(解码)
- 目标:逐token生成,每步复用历史计算结果。
- 核心逻辑(以生成第
t个token为例):- 当前token处理:将第
t-1步生成的token嵌入x_t,与前一步隐藏状态拼接,输入Transformer层。 - 注意力计算优化:
- 查询(Query):仅计算当前token的Query向量
Q_t(因为只关注当前位置)。 - 键值(Key/Value):复用KV Cache中的历史Key/Value,并追加当前token的Key_t、Value_t。
- 注意力得分:计算
Q_t与所有历史Key的相似度(仅需一次矩阵乘法,而非重复全量计算)。
- 查询(Query):仅计算当前token的Query向量
- 更新KV Cache:将当前层的Key_t、Value_t追加到缓存中(
seq_len += 1)。 - 生成概率:通过LM头输出第
t个token的概率分布,选择下一词(贪心/采样)。
- 当前token处理:将第
3. 举个栗子🌰
- 输入:用户prompt“请写一首诗:”(4个token)。
- Prefill阶段:
- 计算这4个token的所有层Key/Value,填充到KV Cache(此时缓存长度=4)。
- 生成第一个待扩展的隐藏状态(对应第4个token的输出)。
- Decoding阶段:
逐句生成诗句,每步:- 计算当前token的Q(仅1个token)。
- 复用Prefill的4个KV + 之前生成的KV,计算注意力。
- 追加当前token的KV到缓存(缓存长度逐步增加到4+N)。
通过“预填充”,避免了每次生成新token时重复计算prompt的KV,这正是LLM实现高效推理的关键优化之一。
二、原始Transformer的效率瓶颈:O(n²)的重复计算
- 时间复杂度:训练时并行计算所有token的注意力(O(n²)),但推理时需自回归生成,每步需重新计算所有历史token的Key/Value,导致总复杂度为O(n³)(n为序列长度)。
- 空间复杂度:每次推理需保存所有中间层的Key/Value,内存占用随n线性增长,长文本(如n=4k)时显存爆炸。
- 现实痛点:生成1000字的文章需重复计算百万次注意力,传统Transformer无法支持实时交互。
三、KV Cache:用空间换时间的核心优化
1. 方法本质
缓存历史层的Key/Value,避免重复计算。每个Transformer层维护独立的KV Cache,存储该层所有已生成token的Key/Value向量。
2. 具体实现步骤(以单batch为例)
-
初始化缓存(t=0):
- 每层创建空缓存:
K_cache = [],V_cache = [](形状:[num_layers, heads, 0, head_dim])。
- 每层创建空缓存:
-
第t步生成(t≥1):
- 前向传播:输入当前token嵌入,通过Transformer层计算当前层的
Q_t, K_t, V_t。 - 拼接缓存:
K_cache[t_layer] = torch.cat([K_cache[t_layer], K_t], dim=2) # 在seq_len维度追加 V_cache[t_layer] = torch.cat([V_cache[t_layer], V_t], dim=2) - 注意力计算:
attn_scores = Q_t @ K_cache[t_layer].transpose(-2, -1) # Q_t: [1, heads, 1, d], K_cache: [1, heads, t, d] attn_probs = softmax(attn_scores / sqrt(d)) @ V_cache[t_layer] # 仅需O(t)计算 - 更新隐藏状态:将注意力输出传入下一层,直到LM头生成token。
- 前向传播:输入当前token嵌入,通过Transformer层计算当前层的
-
循环:重复步骤2,直到生成
[EOS]或达到最大长度。
3. 优化效果
- 时间:每步注意力从O(n²)→O(n),总复杂度O(n²)(接近线性)。
- 空间:缓存占用O(n)(每层存储历史K/V),但避免了重复计算的中间变量,实际显存节省50%+。
- 典型案例:LLaMA-2 70B在4k序列长度下,KV Cache使推理速度提升4倍(NVIDIA官方数据)。
四、延伸:KV Cache的局限性与改进
- 显存瓶颈:长上下文(如100k token)的KV Cache占用巨大(每层约4k token×4byte×2(KV)≈32KB,64层×100k≈2GB)。
- 优化方向:
- 分页缓存(Paged Attention):NVIDIA提出,用非连续内存存储KV,减少碎片化(2023年突破)。
- 动态缓存:仅保留最近相关token的KV(如检索增强LLM)。
KV Cache是LLM落地的基石,其设计思想(复用历史计算)贯穿现代推理优化(如FlashAttention、QLoRA),最终实现了从“实验室模型”到“实时对话”的跨越。
相关文章:
LLM推理和优化(1):基本概念介绍
一、LLM推理的核心过程:自回归生成 LLM(如DeepSeek、ChatGPT、LLaMA系列等)的推理本质是自回归生成:从初始输入(如[CLS]或用户prompt)开始,逐token预测下一个词,直到生成结束符&…...
Kubernetes教程(七)了解集群、标签、Pod和Deployment
了解集群、标签、Pod和Deployment 一、K8s资源对象二、K8s集群1. Master2. Node 三、Namespace(命名空间)四、Label(标签)五、Pod1. 共享网络命名空间2. 共享数据 六、工作负载1. 设置副本数2. 应用升级 结语 Kubernetes的知识真的…...
zerotier搭建免费moon服务器
🌟 前言 ZeroTier是一种基于P2P的虚拟组网工具,通过搭建Moon服务器可大幅提升跨运营商/跨国节点的连接质量。本文使用云服务演示部署流程。 📋 准备工作 注册三丰云账号 创建CentOS 8.5实例 (这里选择centos8以上&a…...
【网络安全 | 漏洞挖掘】四链路账户接管
未经许可,不得转载。 文章目录 正文正文 这一过程始于身份验证流程中的 IDOR 漏洞。登录时,后台会发送多个请求。在 Burp Suite 分析这些请求时,我注意到一个值得关注的请求: 请求: POST /validateUser {"email": "victim@example.com" }响应: {…...
【最新】DeepSeek 实用集成工具有那些?
deepseek 系列github仓库地址 【主页】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重点介绍】awesome-deepseek-integration 注意:以下内容来自awesome-deepseek-integration DeepSeek 实用集成(awesome-deepseek-integration) 将…...
linux 的免密切换用户PAM配置
/etc/pam.d/su是Linux系统中与用户切换(su命令)相关的PAM(Pluggable Authentication Modules,可插拔认证模块)配置文件。以下是对它的详细介绍: 简介 作用 PAM是一种用于管理系统认证的机制,…...
Flutter_学习记录_video_player、chewie 播放视频
1. video_player 视频播放 插件地址:https://pub.dev/packages/video_player 添加插件 导入头文件 import package:video_player/video_player.dart;Android配置(iOS不用配置) 修改这个文件:/android/app/src/main/AndroidMani…...
【MySQL】增删改查进阶
目录 一、数据库约束 约束类型 NULL约束:非空约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…...
为什么会出现redis数据库?redis是什么?
什么是 Redis? 为什么要用 Redis? 下面我将从 Redis 出现的背景、Redis 的解决方案个来回答。 1、Redis 出现的背景 互联网的应用越来越多,例如社交网络、电商、实时服务发展的十分迅速,这就导致了传统技术栈(如关系型数据库)…...
静态时序分析:SDC约束命令set_ideal_latency详解
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 当使用set_ideal_network命令将当前设计中的一组端口或引脚标记为理想网络源后,理想属性会沿着组合逻辑进行传播,理想网络中的线网和单元…...
达梦数据库查看字符集编码
select SF_GET_UNICODE_FLAG(); 返回 0 代表数据库字符集编码为 GB18030 1 代表数据库字符集编码为 UTF-8 2 代表数据库字符集编码为韩文字符集 EUC-KR...
LPDDR5x电源使用Si电容对PI和PSIJ影响分析
SoC可能包含许多高速接口,其中LPDDR5X目前因为高带宽、低功耗、大容量等性能优势开始逐渐在AI计算、5G通信、视频处理等领域开始使用。LPDDR5X目前的速率高达8.533 GT/s,以及多个为这些接口供电的IO电压轨,而这些IO轨的PDN需要提供低阻抗&…...
【玩转23种Java设计模式】结构型模式篇:组合模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...
Pac-Man(吃豆人) 游戏
目录 前言 1. Pygame游戏开发基础 1.1 Pygame简介 1.2 游戏开发基本概念 1.3 Pygame核心模块介绍 2. 游戏设计与规划 2.1 游戏规则设计 2.2 游戏对象规划 2.3 技术方案选择 3. 创建游戏窗口与初始化 3.1 初始化Pygame环境 3.2 设置游戏窗口 3.3 定义颜色和游戏参数…...
内网安全防护新思路 —— HFish + ELK 与 T-Pot 全面蜜罐系统比较分析
在当前网络安全环境日益复杂的背景下,企业和组织面临着来自外部与内部的多种威胁。为了更好地了解攻击者行为、捕获恶意活动并及时响应,部署蜜罐(Honeypot)系统已成为提升内网安全防护的重要手段。本文将重点介绍两种内网蜜罐防护…...
贪心算法(5)(java)k次取反后最大化的数组和
题目:给定一个整数数组 nums 和一个整数 k,你可以进行最多 k 次取反操作。每次操作可以选择数组中的一个元素并将其取反(即 x 变为 -x)。最终返回经过 k 次取反操作后,数组可能的最大总和。 解法:分情况讨…...
【Spring】@PostConstruct详解
在 Java 开发中,尤其是在基于 Spring 框架的项目里,我们常常会遇到需要在对象创建并完成依赖注入后,执行一些初始化操作的场景。PostConstruct注解正是为解决此类问题而诞生的,它为我们提供了一种便捷且优雅的方式来处理对象的初始…...
OEM SQL Details and Session Details 5s 或者parallel 才会在sql monitor显示
从企业管理器 13.4 版本更新 10 (RU10) 开始,ASH Analytics 的 SQL 详细信息和会话详细信息深入屏幕已更新为使用 Oracle JET UI。 在 Ash Analytics 中,单击左下角区域中“热门 SQL”中的 SQL ID 即可深入了解 SQL 详细信息。 单击右下角“热门会话”区…...
JSAR 基础 1.2.1 基础概念_空间小程序
JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明,官网之前的文档准备废除了,基于xsml的开发将退出历史舞台,three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…...
Spring Security的作用
一、概述 Spring Security是一个框架,提供认证(authentication)、授权(authorization)和保护,以抵御常见攻击。对 常见漏洞 的保护提供了全面的支持,它对保护命令式和响应式应用程序有一流的支…...
数据结构与算法效率分析:时间复杂度与空间复杂度详解(C语言)
1. 算法效率 1.1 如何衡量一个算法的好坏? 在计算机程序设计中,衡量算法优劣的核心标准是效率。但效率不仅指运行速度,还需要综合以下因素: 时间因素:算法执行所需时间 空间因素:算法运行占用的内存空间…...
数据类设计_图片类设计之4_规则类图形混合算法(前端架构)
前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…...
从零使用docker并安装部署mysql8.3.0容器
在开始使用docker到完成mysql的安装部署,中间有很多的坑等着 安装docker并配置 sudo yum install docker-ce 启动docker并设置开机启动项 sudo systemctl start docker sudo systemctl enable docker查看docker是否启动 sudo systemctl status docker 或者直接…...
【从零开始学习计算机科学】编译原理(二)高级编程语言及其语法描述
【从零开始学习计算机科学】编译原理(二)高级编程语言及其语法描述 高级语言及其语法描述程序语言的定义形式语言与自动机文法的类型语言的类型自动机词法规则语法规则四则运算的语法描述布尔表达式语法描述赋值、分支、循环、程序块语句语法描述数组说明语句过程调用语句语义…...
STM32全系大阅兵(2)
接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客...
cpu 多级缓存L1、L2、L3 与主存关系
现代 CPU 的多级缓存(L1、L2、L3)和主存(DRAM)构成了一个层次化的内存系统,旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析: 1. 缓存层次结构 现代 CPU 通…...
MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?
MyBatis 的核心配置文件(通常命名为 mybatis-config.xml)是 MyBatis 应用程序的入口点,它定义了 MyBatis 的全局配置信息 。 核心配置文件的作用: 配置 MyBatis 的运行时行为: 通过 <settings> 标签设置全局参数ÿ…...
哪些业务场景更适合用MongoDB?何时比MySQL/PostgreSQL好用?
哪些业务场景更适合用MongoDB?何时比MySQL/PostgreSQL好用? 就像淘宝的个性化推荐需要灵活调整商品标签,MongoDB这种"变形金刚"式的数据库,在处理以下三类中国特色业务场景时更具优势: 一、动态数据就像&q…...
Java学习——day20
文章目录 1. 异常处理与优化1.1 在文件操作中使用 try-catch1.2 try-with-resources 语法1.3 使用 finally 块关闭资源1.4 代码健壮性与优化 2. 实践任务2.1 改进思路2.2 示例改进要点2.3 检查点 3. 总结3.1 改进后的完整代码: 4. 今日生词 今日学习目标:…...
基于Python+SQLite实现校园信息化统计平台
一、项目基本情况 概述 本项目以清华大学为预期用户,作为校内信息化统计平台进行服务,建立网页端和移动端校内信息化统计平台,基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求,如活动报名、实验室招募、多…...
