《大规模语言模型:从理论到实践》-LLM基础阅读分享
<div class='showpostmsg'> 本帖最后由 ljg2np 于 2025-1-2 14:58 编辑<div> 本文分享对书中第2章“大语言模型基础”的阅读理解。</div>
<p>一、引言<br />
语言模型的目标是对自然语言的概率分布建模,大量的研究从n元语言模型、神经语言模型及预训练语言模型等角度开展工作。<br />
基于Transformer的各类语言模型的发展及预训练微调范式在NLP各类任务中取得突破性进展,从2020年OpenAI发布GPT-3开始,对LLM的研究逐渐深入,但基础理论仍是对语言的建模。</p>
<p>二、Transformer结构<br />
Transformer结构是Google在2017年提出并首先应用于机器翻译的神经网络模型架构。<br />
Transformer结构完全通过注意力机制完成对源语言序列和目标语言序列全局依赖的建模。<br />
基于Transformer的编码器和解码器结构如下图所示:<br />
<br />
左侧和右侧分别对应着编码器和解码器结构,它们均由若干个Transformer块组成,每个Transformer块都接收一个向量序列作为输入,并输出一个等长的向量序列作为输出。<br />
在从输入到输出的语义抽象过程中,涉及以下几个模块:<br />
(1)注意力层:使用多头注意力机制整合上下文语义,它使序列中任意两个单词之间的依赖关系可以被直接建模而不基于传统的循环结构,从而更好的解决文本的长程依赖问题。<br />
(2)前馈层( FFN):接收自注意力子层的输出作为输入,并通过一个带有 ReLU 激活函数的两层全连接网络对输入进行更复杂的非线性变换。实验证明,这一非线性变换会对模型最终的性能产生重要的影响。<br />
(3)残差连接与层归一化:进一步提升训练的稳定性。具体来说,残差连接主要是指使用一条直连通道直接将对应子层的输入连接到输出,避免在优化过程中因网络过深而产生潜在的梯度消失问题。</p>
<p>三、生成式预训练语言模型(GPT)<br />
受CV领域采用ImageNet对模型进行预训练的范式影响,以ELMo为代表的动态词向量模型开启语言模型预训练的大门,以GPT和BERT为代表的基于Transformer的大规模预训练语言模型的出现,使NLP全面进入预训练微调范式新时代。<br />
OpenAI公司在2018年提出的生成式预训练语言模型(Generative Pre-Training,GPT)是典型的生成式预训练语言模型之一,GPT的模型结构如图所示:<br />
<br />
它是由多层Transformer组成的单向语言模型,主要分为输入层、编码层和输出层三部分。<br />
目前,绝大多数LLM都采用类似GPT的架构,使用基于Transformer结构构建的仅由解码器组成的网络结构,采用自回归方式构建语言模型,但是在位置编码、层归一化位置、激活函数等细节上各有不同。<br />
LLaMA模型使用的Transformer结构与GPT-2类似,GPT-2的Transformer结构如下图所示:<br />
</p>
<p>四、注意力机制优化</p>
<div> 自注意力机制的时间和存储复杂度与序列的长度呈平方的关系,由于在Transformer结构中空间和时间占比很大,优化自注意力机制的时空复杂度是LLM面临的重要问题。</div>
<p>1、稀疏注意力机制</p>
<p> 对一些训练好的Transformer 结构中的注意力矩阵进行分析时发现,其中很多是稀疏的,可以通过限制Query-Key对的数量来降低计算复杂度。这类方法称为稀疏注意力(SA)机制。可以将稀疏化方法进一步分成基于位置的和基于内容信息的两类。</p>
<p> (1)基于位置的稀疏注意力机制的基本类型如图所示,主要包含如下五种类型:全局注意力(Global Attention)、带状注意力(Band Attention)、膨胀注意力(Dilated Attention)、随机注意力(Random Attention)、局部块注意力(Block Local Attention),如下图:<br />
<br />
现有的稀疏注意力机制,通常是基于上述五种基于位置的稀疏注意力机制的复合模式,下图给出了一些典型的稀疏注意力模型。<br />
<br />
(2)基于内容的稀疏注意力机制根据输入数据创建稀疏注意力,其中一种很简单的方法是选择和给定查询(Query)有很高相似度的键(Key)。</p>
<p>2、FlashAttention<br />
NVIDIA GPU中的内存(显存)按照它们物理上是在GPU芯片内部还是板卡RAM存储芯片上,决定了它们的速度、大小以及访问限制。<br />
GPU显存分为:全局内存(Global memory)、本地内存(Local memory)、共享内存(Shared memory,SRAM)、寄存器内存(Register memory)、常量内存(Constant memory)、纹理内存(Texture memory)。<br />
全局内存和本地内存使用的高带宽显存(High Bandwidth Memory,HBM)位于板卡RAM存储芯片上,该部分内存容量很大。全局内存是所有线程都可以访问,而本地内存则只能当前线程访问。NVIDIA H100显存架构如图中所示,其中全局内存有80GB空间,其访问速度虽然可以达到3.35TB/s,但是如果全部线程同时访问全局内存时,其平均带宽仍然很低。<br />
<br />
共享内存和寄存器位于GPU芯片上,因此容量很小,并且共享内存只有在同一个GPU线程块(Thread Block)内的线程才可以共享访问,而寄存器仅限于同一个线程内部才能访问。NVIDIA H100中每个GPU线程块在流式多处理器(Stream Multi-processor,SM)可以使用的共享存储容量仅有228KB,但是其速度非常快,远高于全局内存的访问速度。<br />
FlashAttention利用GPU硬件中的特殊设计,针对全局内存和共享存储的I/O速度的不同,尽可能地避免HBM中读取或写入注意力矩阵。<br />
自注意力机制在GPU中进行计算时,传统的方法需要引入两个中间矩阵 S 和 P 并存储到全局内存中。具体计算过程如下:<br />
<br />
按照上述计算过程,需要首先从全局内存中读取矩阵 Q 和 K,并将计算好的矩阵 S再写入全局内存,之后再从全局内存中获取矩阵 S ,计算Softmax得到矩阵 P 再写入全局内存,之后读取矩阵 P 和矩阵 V,计算得到矩阵 O。<br />
这样的过程会极大占用显存的带宽。在自注意力机制中,计算速度比内存速度快得多,因此计算效率越来越多地受到全局内存访问的瓶颈。<br />
FlashAttention的目标是尽可能高效地使用SRAM来加快计算速度,避免从全局内存中读取和写入注意力矩阵。达成该目标需要能做到在不访问整个输入的情况下计算Softmax函数,并且在后向传播中不能存储中间注意力矩阵。<br />
FlashAttention 提出了不使用中间注意力矩阵,通过存储归一化因子来减少全局内存消耗的方法。<br />
FlashAttention 算法没有将S、P 整体写入全局内存,而是通过分块写入,存储前向传递的Softmax 归一化因子,在后向传播中快速重新计算片上注意力,这比从全局内存中读取中间注意力矩阵的标准方法更快。<br />
虽然大幅减少了全局内存的访问量,重新计算也导致FLOP 增加,但其运行的速度更快且使用的内存更少。</p>
<p>3、多查询注意力</p>
<div> 多查询注意力(MQA)是多头注意力的一种变体。其特点是,在多查询注意力中不同的注意力头共享一个键和值的集合,每个头只单独保留了一份查询参数,因此键和值的矩阵仅有一份,这大幅减少了显存占用,使其更加高效。</div>
<p>五、结语</p>
<div> 通过对LLM基础的学习,学习了LLM的内部处理机制和网络结构(Transformer结构),了解了GPT范式的产生和发展,尤其对注意力机制的内存优化作了深入解析,这在实际工程项目中是很有帮助的。</div>
<div> </div>
<div>推荐阅读:</div>
<div>1、《自然语言处理导论》。</div>
<p><!--importdoc--></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>GPT-2的Transformer结构贴图很好,一目了然</p>
<p>楼上的贴图是从那里整来的,书中的么</p>
Jacktang 发表于 2025-1-3 07:29
GPT-2的Transformer结构贴图很好,一目了然
楼上的贴图是从那里整来的,书中的么
<p>是书中给出的贴图,我从课件里摘出来的,感觉比拍照效果要好些。</p>
页:
[1]