LLM 中增量解码与模型推理解读

在【LLM】LLM 中 token 简介与 bert 实操解读一文中对 LLM 基础定义进行了介绍,本文会对 LLM 中增量解码与模型推理进行解读。

一、LLM 中增量解码定义

增量解码(Incremental Decoding)是指在自回归文本生成过程中,模型每次只计算并生成一个新的 token,并且会利用之前计算得到的中间结果,而不需要重新计算整个序列的表示,以此来提高生成效率和减少计算资源消耗。

在 GPT 系列模型生成对话回复、文章续写等场景中广泛应用了增量解码。

二、增量解码工作过程

  1. 初始输入:在生成文本时,首先输入一个初始的文本序列(比如一个问题或者提示词 ),模型通过 Prefill 阶段计算这个初始序列的隐藏状态,同时生成并缓存与注意力机制相关的键(Key)和值(Value)矩阵,即 KV 缓存(KV Cache) 。
  2. 逐个生成 token:接下来进入解码阶段,模型会基于上一步生成的 token 和缓存的 KV 矩阵,计算当前位置的隐藏状态,然后预测下一个 token。例如,在生成第一个 token 后,将其与之前缓存的 KV 矩阵结合,计算得到第二个 token 的隐藏状态,进而预测第二个 token 。每生成一个新的 token,模型就更新相关的计算状态,但不需要重新计算整个输入序列的隐藏状态,只是在之前计算结果的基础上增量式地进行计算。
  3. 循环直至结束:重复上述步骤,直到达到预设的结束条件,比如生成了特定的结束标记、达到了最大文本长度限制或者满足了其他停止生成的条件 。 总之,增量解码通过复用计算结果和 KV 缓存,可以有效提升自回归模型文本生成的效率和性能。

注意:当 KV cache 的长度超出阈值(例如 1024KB)会进行清理,清理策略取决于大模型的处理策略,有滑动窗口(清理最早的)和全部清理等。

三、新 token 选择

模型在生成新 token 时,从可能的下一个词表(token)中选择一个特定的词。词表中有多个词,词的个数可以理解为 vocab size,其中每个位置的大小表示选取这个 token 的概率,如何基于这个信息选择合适的 token 作为本次生成的 token。

  • 贪婪采样(Greedy Sampling) 在每一步,模型选择概率最高的词作为下一个词。这种方法快速且计算成本低,但它可能导致重复。
  • 随机采样(Random Sampling) 模型根据概率分布随机选择下一个词。这种方法能够引入随机性,从而生成更多样化的文本。但是,随机性也可能导致文本质量下降,因为模型可能选择低概率但不相关的词。
  • Top-k 采样(Top-k Sampling) 这种方法首先选择 k 个最可能的词,然后从这个子集中随机选择下一个词。这种方法旨在平衡贪婪采样的确定性和随机采样的多样性。

四、Prompt(提示词)

Prompt 是用户与 LLM 交互的入口,Prompt 进入 Prefill 阶段处理,并成为生成后续内容的“上下文语境”。其核心作用是引导模型生成特定类型、风格或内容的输出。简单来说,Prompt 就是你告诉模型 “要做什么” 的一段话。

在大模型推理中,Prompt 是用户与模型交互的起点,它在 Prefill 阶段被模型处理,作为生成后续内容的基础。例如:

Prompt: "请写一首关于秋天的诗。"

LLM 根据此提示生成对应内容。

设计优质 Prompt 是激发 LLM 能力的关键,需要明确任务、约束条件和期望输出,例如:明确任务指令/给出格式规范/提供上下文例子

五、模型推理:Prefill 与 Decode

参考链接:https://blog.csdn.net/firehadoop/article/details/146341556

LLM 推理分为两个阶段:

  1. Prefill 阶段(批量处理)
  • 输入 token 序列一次性通过所有层。
  • 并行计算生成每个 token 的 Key-Value (KV) 缓存,用于后续的高效生成。
  1. Decode 阶段(自回归处理)
  • 每次生成一个新 token,需要经过模型所有层。
  • 依赖 Prefill 阶段生成的 KV 缓存。
  • 推理过程是串行的,需等待前一个 token 生成完毕。

通过 KV Cache,避免了重复计算,提高生成效率。

Description

prefill 与 decode 的关系类似于接力赛:Prefill 阶段跑完第一棒,然后 Decode 阶段接过接力棒,一个接一个地完成余下的路程。

以查询 “介绍一下爱因斯坦” 为例,其核心流程如下:

5.1 初始化阶段(Prefill)

  • 输入完整 prompt:“介绍一下爱因斯坦”
  • 模型处理输入并生成初始 KV 缓存(存储注意力机制的键值对)
  • 生成第一个输出 token:“爱”

5.2 循环迭代解码阶段(Deocde)

Description

  • 关键机制:每次循环仅处理单个新 token,复用之前缓存的 KV 矩阵,计算复杂度从 O(N^2) 降至 O(N)。
  • 输出连贯性:新 token 的生成依赖于历史所有 token (原始输入+已生成内容)的语义信息,确保上下文逻辑一致。

5.3 小结

Description

未来会再介绍 LLM 中评价指标与训练部署~

六、MoE 简介

一般来说,一个 MoE layer 包含 N 个 Experts(FFN 网络)和一个 Gating Network。其中 Gating Network 可以将一个 token routing(Token 路由)到少数的专家进行计算。可参考下图:

Description

  • 把不同领域专家模型(比如数学专家 LLM、编程专家 LLM ),抽象成 “专家 Token” 塞进一个 “元模型(meta LLM)” 的词表。
  • 用户输入问题时,元模型生成特殊 Token 来 “路由”(决定调用哪个专家模型 )。比如遇到数学题,就触发 “数学专家 Token”,让数学专家 LLM 处理;遇到编程问题,调用 “编程专家 Token”。

总结:Token routing 就是给不同重要性、不同功能的 Token,规划调用不同专家模型,让大模型更聪明分配算力、协同专家能力,最终实现 “又快又准又省资源” 的推理。

从整体看,MoE 在 LLM 模型的什么位置呢?如下图:

参考 https://github.com/jingyaogong/minimind?tab=readme-ov-file

在这里插入图片描述

Description

me-ov-file

[外链图片转存中…(img-yOYHNEwg-1756030828642)]

[外链图片转存中…(img-wwGuNHge-1756030828642)]

以上就是本文的全部介绍啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94458.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.Spring Boot:超越配置地狱,重塑Java开发体验

目录 一、Spring框架:伟大的基石 历史背景与挑战 Spring的革命性贡献 新的挑战:配置地狱 二、Spring Boot:约定大于配置的革命 四大核心特性 1. 快速创建独立应用 2. 自动配置:智能化的魔法 3. 起步依赖:依赖管…

assert使用方法

assert 是 Python 中用来进行 调试 和 验证 的一个关键字,它用于测试一个 条件表达式 是否为真。如果条件为假,assert 会抛出一个 AssertionError 异常,通常带有错误信息。语法:assert condition, "Error message"condi…

【实习总结】快速上手Git:关键命令整理

目录 git的四大工作区域 git首次配置 克隆远程仓库 提交代码到远程仓库 查看文件状态(可选) 添加文件到暂存区 将暂存区的内容提交到本地仓库 将本地的提交上传到远程仓库 拉取并合并代码 第一种方式 第二种方式 分支管理 查看与创建分支 …

02-开发环境搭建与工具链

第2课:开发环境搭建与工具链 📚 课程目标 掌握DevEco Studio的下载、安装和配置熟悉HMS Core(华为移动服务)的使用了解鸿蒙模拟器与真机调试环境掌握必备开发工具的使用 🛠️ DevEco Studio环境搭建 2.1 下载与安装…

删掉一个元素以后全为1的最长子数组-滑动窗口

1493. 删掉一个元素以后全为 1 的最长子数组 - 力扣&#xff08;LeetCode&#xff09; Solution #include<iostream> #include<vector> using namespace std;class Solution { public://滑动窗口//动态维护一个窗口&#xff0c;窗口内只能有1个0&#xff0c;记录窗…

【计算机网络 | 第8篇】编码与调制

文章目录通信系统中的编码与调制&#xff1a;从信道基础到信号传输技术一、信道与通信电路&#x1f342;二、三种基本通信方式&#x1f4d6;1. 单向通信&#xff08;单工通信&#xff09;2. 双向交替通信&#xff08;半双工通信&#xff09;3. 双向同时通信&#xff08;全双工通…

当AI遇上终端:Gemini CLI的技术魔法与架构奥秘

"代码不仅仅是指令的集合&#xff0c;更是思想的载体。当AI与终端相遇&#xff0c;会碰撞出怎样的火花&#xff1f;" 在这个AI技术日新月异的时代&#xff0c;Google推出的Gemini CLI无疑是一颗璀璨的明星。它不仅仅是一个命令行工具&#xff0c;更是一个将人工智能无…

ViLU: Learning Vision-Language Uncertainties for Failure Prediction

研究方向&#xff1a;Image Captioning1. 论文介绍本文提出ViLU&#xff08;Vision-Language Uncertainties&#xff09;&#xff0c;一个用于学习视觉语言不确定性量化&#xff08;UQ&#xff09;和检测视觉语言模型故障的事后框架。使用VLMs进行量化&#xff08;UQ&#xff0…

数据集笔记:百度地图高德地图坐标互转

1 为什么会有高德坐标系和百度坐标系&#xff1f;根据《测绘法》和国家保密法规&#xff0c;在中国大陆范围内的地理坐标数据必须做加密处理&#xff0c;不允许直接使用 WGS84&#xff08;openstreetmap&#xff09;所以出现了GCJ-02 和 BD-09高德、腾讯、谷歌中国都遵循 GCJ-0…

SkyWalking高效线程上下文管理机制:确保调用链中traceId来自同一个请求

SkyWalking Agent 能确保获取到“正确”的 traceId,其核心在于它建立并维护了一套高效的线程上下文管理机制。这套机制确保了即使在复杂的多线程、异步环境下,也能将正确的上下文(包含 traceId)与当前正在执行的代码逻辑关联起来。 其工作原理可以概括为下图所示的流程: …

Kafka-Eagle安装

目录Eagle环境安装Mysql环境准备Kafka环境准备Eagle安装Kafka-Eagle框架可以监控Kafka集群的整体运行情况&#xff0c;在生产环境中经常使用 Eagle环境安装 Mysql环境准备 Eagle的安装依赖于Mysql&#xff0c;Mysql主要用来存储可视化展示的数据 将mysql文件夹及里面所有内…

Matlab系列(005) 一 归一化

目录1、前言2、什么是归一化&#xff1f;3、为什么要进行归一化4、归一化方法详解与Matlab实现5、总结1、前言 ​   归一化技术是数据预处理的核心环节&#xff0c;本文将深度解析主流归一化方法&#xff0c;提供可复现Matlab代码&#xff0c;并探讨其在各领域中的应用场景。…

【K8s】整体认识K8s之namespace

命名空间将资源划分为相互隔离的组。kubectl get namespace/ns系统默认创建四个namespace&#xff0c;分别是default、kube-node-lease、kube-public、kube-system。default 没有指明使用其它命名空间的对象所使用的默认命名空间、kube-system 系统创建对象所使用的命名空间。…

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格

使用表格egui_extras::TableBuilder // Cargo.toml [dependencies] eframe "0.32.1" egui "0.32.1" egui_extras "0.32.1"egui_extras::Column::auto() 列宽根据内容自动计算.resizable(true) 允许用户手动拖动调整列宽 fn main() -> efra…

【C#】构造函数实用场景总结

文章目录前言一、构造函数是什么&#xff1f;二、构造函数的用法1.初始化对象&#xff0c;避免无效状态2 初始化静态成员3 构造函数重载4.构造函数链5. 单例模式&#xff0c;多次实例化保持一个对象6. 依赖注入7. 初始化只读对象前言 构造函数是我们平常编程里经常能碰到的老伙…

LLM预训练架构全解析:从零构建一个语言世界的“操作系统”

导读&#xff1a;作为开发者&#xff0c;我们每天都在import或#include各种库&#xff0c;我们信任这些由无数代码构成的底层依赖。那么&#xff0c;当我们调用一个LLM时&#xff0c;它所依赖的那个更底层的、无形的**“语言操作系统”**&#xff0c;又是如何被“编译”出来的&…

Linux服务测试题(DNS,NFS,DHCP,HTTP)

一&#xff0c;实验拓扑&#xff1a;二&#xff0c;需求APPSRV&#xff1a;主机名&#xff1a;appsrv.example.comip地址&#xff1a;192.168.100.10网关&#xff1a;192.168.100.254网卡为NAT模式STORAGESRV&#xff1a;主机名&#xff1a;storagesrv.example.comip地址&#…

DevOps 简介及就业前景

DevOps 简介及就业前景 目录 DevOps简介核心概念重难点解析具体场景使用就业前景学习路径最佳实践 DevOps简介 什么是DevOps DevOps是Development&#xff08;开发&#xff09;和Operations&#xff08;运维&#xff09;的组合词&#xff0c;是一种软件开发和IT运维的文化…

《CF1120D Power Tree》

题目描述 给定一棵有 n 个顶点的有根树&#xff0c;树的根为顶点 1。每个顶点都有一个非负的价格。树的叶子是指度为 1 且不是根的顶点。 Arkady 和 Vasily 在树上玩一个奇怪的游戏。游戏分为三个阶段。第一阶段&#xff0c;Arkady 购买树上的一些非空顶点集合。第二阶段&…

CPTS-Agile (Werkzeug / Flask Debug)

枚举 nmap -sC -sV -T4 -Pn -n -p- 10.10.11.203进行常规的网页枚举和测试发现报错信息&#xff0c;‘Werkzeug / Flask Debug’ 测试Export导出功能发现存在路径遍历查看这篇文章 https://book.hacktricks.wiki/zh/network-services-pentesting/pentesting-web/werkzeug.html#…