LLM推理入门指南①:文本生成的初始化与解码阶段

随着生成式AI的火热发展,高企的语言大模型(LLM)推理性能和成本成为阻碍其大规模应用的关键挑战。

LLM推理是指使用仅解码器Transformer模型生成词元,而大多数挑战及其相关的解决方法都来自这种特定的架构和用例。本系列文章将深入探讨LLM推理的不同层面及其挑战,同时,其中提供的有价值见解也适用于Transformer编码器模型的推理。

通过本系列内容的学习,希望帮助读者了解与LLM推理密切相关的术语,比如键-值(KV)缓存、内存带宽限制(memory-bandwidth bound)等,以便理解推理优化(量化、融合kernel、模型架构修改等)和配置(批处理大小、使用哪种GPU等)所涉及的各种技术,并最终将它们与关键的性能指标(时延、吞吐量和成本)联系起来。

希望读者建立起一个见解深刻的心智模型,从而能够在配置和优化LLM serving解决方案时做出明智且迅速的决策。本文是该系列的第1篇文章,主要关注文本生成的两个阶段:初始化阶段和生成(或解码)阶段。

在阅读本系列文章之前,读者需对Transformer架构以及在著名的《Attention Is All You Need》论文中介绍的缩放点积注意力(SDPA)机制有基本了解,但无需深入了解注意力机制背后的动机因素。

本文作者为AWS的GenAI解决方案架构师Pierre Lienhart。以下内容由OneFlow编译发布,转载请联系授权。原文:medium.com/@

plienhar/llm-inference-series-2-the-two-phase-process-behind-llms-responses-1ff1ff021cd5)

作者 | Pierre Lienhart

OneFlow编译

翻译|宛子琳、杨婷

本文回顾了Transformer架构以及使用基于Transformer的解码器进行文本生成的基础知识。更重要的是,我将构建起整个LLM推理系列中要使用的词汇表,并使用粗体标记出个人认为重要的术语。读者将主要了解文本生成的两个阶段:初始化阶段生成(或解码)阶段

首先,我们来回顾一下Transformer。为简单起见,我们假设一次只处理一个序列(即批处理大小为1)。在下图中,我描述了一个简单的基于Transformer的解码器(图1)的主要层,用于从一系列输入词元中生成输出词元。

图1---Transformer解码器模型概要

需要注意的是,解码器本身并不会输出词元,而是输出logit(其数量与词汇表大小相同)。输出logit的最后一层通常被称为语言模型头(Language Model Head)或LM头。将logit转换为词元是通过一种通常被称为 (词元)搜索策略((token) search strategy)生成策略(generation strategy)解码策略(decoding strategy) 的启发式算法来完成的。常见的解码策略如下:

  • 贪婪解码(Greedy decoding),简单来说就是选择具有最大logit的词元,在此之前可能会使用重复惩罚(repetition penalty)等方式,对logit进行一些调整。
  • 采样解码(Sampling decoding),将logit看作多项分布,然后从中采样。换句话说,我们通过随机采样从词汇表中选择一个词元。在采样过程中,可以先采用温度调节(temperature scaling)、top-k和top-p等常见方式,对从中采样的分布进行调整。
  • 更复杂的启发式算法,如束搜索(beam search)、对比解码(contrastive decoding)¹等。

简单起见,我们假设解码策略是模型的一部分(见图2)。这种心智模型(mental model)在提供LLM serving解决方案方面十分有用,这些接受词元序列作为输入,并返回相应输出词元的实体通常被称为执行引擎推理引擎

图2---一个高度简化的Transformer解码器模型

如果要生成多个词元呢?使用基于Transformer的解码器,从一个输入文本序列(通常称为提示(prompt) )中生成文本(通常名为完成(completion) )通常包含以下步骤:

  1. 将模型权重加载到GPU
  2. 在CPU上对提示进行分词,并将词元张量传输到GPU(见图3)

图3---分词步骤

  1. 利用神经网络运行经过分词的提示,生成完成的第一个词元。

这一单步骤阶段通常被称为"初始化阶段"。在下一篇文章中,这一阶段也经常被称为"预填充阶段"。

  1. 将生成的词元添加到输入词元序列,然后将其用作新的输入,以生成完成的下一个词元。然后,重复这一过程,直到生成停止序列(例如单个序列结束(EOS)词元),或达到预先配置的最大序列长度(见图4)。

这一多步骤阶段通常被称为生成阶段、解码阶段、自回归阶段甚至是增量阶段(incremental phase)。

步骤3和步骤4如下图所示(图4)。

图4---词元生成过程的初始阶段和解码阶段

  1. 将完成的词元传输到CPU,并进行逆词元化(detokenization)以获取生成的文本(见图5)。

图5---逆词元化步骤 图5---逆词元化步骤

注意: 最近出现的旨在实现更低时延的先进技术(如推测性采样²或前瞻解码³)并不完全遵循上述简单算法。

这种情况可能会让人感到失望、困惑,或二者兼具。你可能会疑惑:初始化阶段和解码阶段究竟有何不同?从这个角度来看,这两者之间的区别似乎只是人为设定的。确实,感觉上初始化阶段与while循环的初始化步骤类似。实际上,我们在这两个阶段做的事是一样的:在每次迭代中,我们都会对一个词元序列进行前向传播,这个序列每次都会增加一个词元。

你的想法可能是正确的。对于在硬件上计算的方式来说,这两个阶段确实没有任何区别,因此在这方面,这两个阶段并没有什么特别之处。

然而,正如我们将在下一篇文章中看到的,这种设置涉及大量冗余计算,在许多情况下效率并不高。对于这种情况,将我们不想重新计算的内容进行缓存处理是最显而易见的方式。这种优化方式即为"KV缓存",并由此引出了我一直在暗示的关键差异。下一篇文章将对此进行深入探讨。

[1]: A Contrastive Framework for Neural Text Generation (Su et al., 2022)

[2]: Fast Inference from Transformers via Speculative Decoding (Leviathan et al., 2022)

[3]: Breaking the Sequential Dependency of LLM Inference Using Lookahead Decoding (Fu et al. 2023)

【语言大模型推理最高加速11倍】 SiliconLLM是由硅基流动开发的高效、易用、可扩展的LLM推理加速引擎,旨在为用户提供开箱即用的推理加速能力,显著降低大模型部署成本,加速生成式AI产品落地。(技术合作、交流请添加微信:SiliconFlow01)

SiliconLLM的吞吐最高提升近4 倍,时延最高降低近4

数据中心+PCIe :SiliconLLM的吞吐最高提升近5 倍;消费卡场景 :SiliconLLM的吞吐最高提升近3

System Prompt场景 :SiliconLLM的吞吐最高提升11 倍;MoE模型 :推理 SiliconLLM的吞吐最高提升近10

试用OneDiff:
github.com/siliconflow/onediff

相关推荐
whaosoft-1431 小时前
大模型~合集3
人工智能
Dream-Y.ocean1 小时前
文心智能体平台AgenBuilder | 搭建智能体:情感顾问叶晴
人工智能·智能体
丶21361 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
春末的南方城市1 小时前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
zmjia1112 小时前
AI大语言模型进阶应用及模型优化、本地化部署、从0-1搭建、智能体构建技术
人工智能·语言模型·自然语言处理
jndingxin2 小时前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频
AI完全体2 小时前
【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)
人工智能·深度学习·神经网络·机器学习·过拟合·模型复杂度·偏差-方差
GZ_TOGOGO2 小时前
【2024最新】华为HCIE认证考试流程
大数据·人工智能·网络协议·网络安全·华为
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
新缸中之脑2 小时前
Ollama 运行视觉语言模型LLaVA
人工智能·语言模型·自然语言处理