一文为你深度解析 LLaMA2 模型架构
一、前言
随着人工智能技术的不断发展,自然语言处理(NLP)领域也取得了巨大的进步。在这个领域中,LLaMA 展示了令人瞩目的性能。今天我们就来学习 LLaMA2 模型,我们根据 昇思MindSpore技术公开课·大模型专题(第二期)第六讲_云视界live_直播_云社区_华为云 (huaweicloud.com) 视频内容进行了学习整理,输出如下内容,欢迎大家前来指正。
二、LLaMA 介绍
1. LLaMA 简介
LLaMA 由 Meta AI 公司 2022 年发布的一个开放且高效的大型基础语言模型,共有 7B、13B、33B、65B(650 亿)四种版本。其数据集来源都是公开数据集,无任何定制数据集,整个训练数据集在 token 化之后大约包含 1.4T 的 token。LLaMA 的性能非常优异:具有 130 亿参数 Llama 模型「在大多数基准上」可以胜过 GPT-3( 参数量达 1750 亿),而且可以在单块 V100 GPU 上运行;而最大的 650 亿参数的 LLaMA 模型可以媲美谷歌的 Chinchilla-70B 和 PaLM-540B,LLaMA 模型参数如下:
![](https://static001.geekbang.org/infoq/65/65871e3109d12882ea0c87f175044cea.png)
2. LLaMA 1 与 LLaMA 2 对比
LLaMA2 是 Meta 最新开源的大型语言模型,其训练数据集达到了 2 万亿 token,显著扩大了处理词汇的范围。此外,LLaMA2 对上下文的理解长度也从原来的 LLaMA 模型的 2048 个 token 扩大到了 4096 个 token,使得这个模型能够理解并生成更长的文本。LLaMA2 包含 7B、13B 和 70B 三种规模的模型,它们在各种语言模型基准测试集上都展示了优异的性能。值得一提的是,LLaMA2 模型不仅适用于语言研究,也可用于商业应用。总的来说,LLaMA2 是目前开源的大型语言模型(LLM)中表现最出色的一种。
![](https://static001.geekbang.org/infoq/e2/e2f1026922e075e2ed2e0f1087f2000a.png)
相比于 LLaMA 1 ,LLaMA 2 的训练数据多了 40%,上下文长度也翻倍,并采用了分组查询注意力机制。具体来说,Llama 2 预训练模型是在 2 万亿的 token 上训练的,精调 Chat 模型是在 100 万人类标记数据上训练的,具体对比分析如下:
![](https://static001.geekbang.org/infoq/f8/f8cc192cf45f8a473eed55c50e7f61c7.png)
1)总 token 数量增加了 40%:LLaMA 2 训练使用了 2 万亿个 token 的数据,这在性能和成本之间提供了良好的平衡,通过对最真实的来源进行过采样,以增加知识并减少幻觉。
2)加倍上下文长度:LLaMA 2 支持更长的上下文窗口,使模型能够处理更多信息,这对于支持聊天应用中的更长历史记录、各种摘要任务和理解更长文档特别有用。
3)Grouped-query attention (GQA):LLaMA 2 支持 GQA,允许在多头注意力(MHA)模型中共享键和值投影,从而减少与缓存相关的内存成本。通过使用 GQA,更大的模型可以在优化内存使用的同时保持性能。
三、LLaMA2 核心介绍
1. 与 Transformers 架构的区别
Transformer 模型是一种基于自注意力机制的神经网络模型,旨在处理序列数据,特别是在自然语言处理领域得到了广泛应用。Transformer 模型的核心是自注意力机制(Self-Attention Mechanism),它允许模型关注序列中每个元素之间的关系。这种机制通过计算注意力权重来为序列中的每个位置分配权重,然后将加权的位置向量作为输出。模型结构上,Transformer 由一个编码器堆栈和一个解码器堆栈组成,它们都由多个编码器和解码器组成。编码器主要由多头自注意力(Multi-Head Self-Attention)和前馈神经网络组成,而解码器在此基础上加入了编码器-解码器注意力模块。Transformer 与 LLaMA 的模型结构对比如下:
![](https://static001.geekbang.org/infoq/cc/cc06ad10435373bed2101b869f557cce.png)
从 Transformer 的结构图中我们可以看出,Transformer 主要分为编码器(encoder)和解码器(decoder)两部分。相较之下,LLaMA 仅使用了 Transformer 的解码器部分,采取了一个仅解码器(decoder-only)的结构。这种结构现在被大多数生成型的语言模型所采用。在结构上,与 Transformer 模型相比,LLaMA2 的主要变化是将其中的层标准化(LayerNorm)替换为了均方根标准化(RMSNorm),多头注意力(Multi-Head Attention)换成了分组查询注意力(GQA,在 LLaMA 中则是多查询注意力 MQA),并将位置编码(Positional Encoding)替换为了旋转嵌入(Rotary Position Embedding,RoPE)。下面我们分别介绍 RMS Normalization 均方根标准化 ,Group Multi Query Attention 分组查询注意力机制,SwiGLU Activation Function 激活函数。
2. RMS Normalization 均方根标准化
LLaMA 2 为了提高训练的稳定性,对每个 transformer 层的输入进行归一化,而不是输出进行归一化。同时,使用 RMS Norm 归一化函数。RMS Norm 的全称为 Root Mean Square layer normalization,RMS Norm 计算公式如下:
![](https://static001.geekbang.org/infoq/4e/4ed3e46ffde44275ba827f8661ce4cb5.png)
Layer Normalization(层归一化)和 RMSNormalization(均方根归一化)都是神经网络中用于稳定训练过程的归一化技术。它们都旨在对神经网络中的激活进行规范化处理,以减少训练过程中的内部协变量偏移(Internal Covariate Shift)问题。尽管它们的目标相似,但在实现和应用上存在一些差异。与 Layer Norm 相比,RMS Norm 的主要区别在于去掉了减去均值的部分,它可以使得网络的训练更加稳定,加快收敛速度,并在一定程度上改善网络的泛化能力。具体来说,每一层的标准化操作都会调整该层输入数据的均值和方差,使其保持在一个稳定的数值范围内。RMS Norm 的作者认为这种模式在简化了 Layer Norm 的计算,可以在减少约 7%∼64% 的计算时间。
3. Group Multi Query Attention 分组查询注意力
在各种多头注意力机制比较中,原始的多头注意力机制(MHA,Multi-Head Attention)使得 QKV 三部分具有相等数量的“头”,并且它们之间是一一对应的。每一次计算注意力时,各个头部的 QKV 独立执行自己的计算,最后将所有头部的结果加在一起作为输出。标准的 MHA 就是这样一个模型,其中 Q、K、V 分别对应了 h 个 Query、Key 和 Value 矩阵:
相对于 MHA,多查询注意力(MQA,Multi-Query Attention)则略有不同。MQA 保持了原来的 Query 头数,但是只为 K 和 V 各设置了一个头,即所有的 Query 头部都共享同一个 K 和 V 组合,因此得名为“多查询”。据实验发现,这种机制通常可以提高 30%-40%的吞吐量,对性能的影响相对较小。MQA 是一种多查询注意力的变体,被广泛用于自回归的解码。与 MHA 不同,MQA 让所有的头部在 K 和 V 之间实现共享,每个头部只保留一份 Query 参数,从而大大降低了 K 和 V 矩阵的参数量。
分组查询注意力(GQA,Grouped-Query Attention)综合了 MHA 和 MQA,既避免了过多的性能损失,又能够利用 MQA 的推理加速。在 GQA 中,Query 部分进行分组,每个组共享一组 KV。GQA 把查询头分成 G 组,每个组内部的头部共享一个相同的 K 和 V 组合。当 G 设为 1,即 GQA-1,则所有 Query 都共享同一组 K 和 V,这时的 GQA 等效于 MQA;而当 G 等于头的数量,即 GQA-H,那么这时的 GQA 等效于 MHA,具体差异及整体结构见下图:
![](https://static001.geekbang.org/infoq/85/85424c4eda5374a2c2d8c2be772304af.png)
4. SwiGLU Activation Function 激活函数
SwiGLU 激活函数是 Shazeer 在文献中提出,并在 PaLM 等模中进行了广泛应用,并且取得了不错的效果,相较于 ReLU 函数在大部分评测中都有不少提升。在 LLaMA 中全连接层使用带有 SwiGLU 激活函数的 FFN(Position-wise Feed-Forward Network)的计算公式如下:
![](https://static001.geekbang.org/infoq/23/23f9598ea86ae4508f30bc26a662f58b.png)
σ(x) 是 Sigmoid 函数,Swish 激活函数在参数β 不同取值下的形状,可以看到当β 趋近于 0 时,Swish 函数趋近于线性函数 y = x,当β 趋近于无穷大时,Swish 函数趋近于 ReLU 函数,β 取值为 1 时,Swish 函数是光滑且非单调。在 HuggingFace 的 Transformer 库中 Swish1 函数使用 silu 函数 代替,见下图 Swish 激活函数在参数β 不同取值下的形状:
![](https://static001.geekbang.org/infoq/c7/c77d49e5d6248245bfc898e477b7b58a.png)
关于激活函数的作用,种类,以及使用场景,由于篇幅限制,这里不做过多介绍,可自行百度。
四、与国内大模型对比
1. 模型参数
下面我们整理了 LLaMA 系列,ChatGLM 系列,BaiChuan 系列,Qwen 系列以及 Yi 系列等众多模型的数据,我们从训练数据,位置编码,激活函数,归一化方法以及注意力机制这几个维度分别对几个模型进行分析。
![](https://static001.geekbang.org/infoq/37/377317f04286de774dbdbfa444a442ea.png)
1)训练数据
LLaMA 7B 和 13B 使用了 1T 的训练数据,LLAMA2 对应使用了 2T 的数据,在训练数据上增加了一倍;ChatGLM 6B 使用了 1T 的数据,ChatGLM2 6B 使用了 1.4T 的数据,增加了 40%;BaiChuan-7B 使用了 1.2T 的数据,BaiChuan2-7B 使用了 2.6T 的数据,训练数据增加了 120%。看的出来,BaiChuan2 在 6B 这个参数量级使用的训练数据是最多的,当然模型的表现也是有目共睹的。
2)位置编码
LLaMA,LLaMA2,ChatGLM,Qwen,Yi 模型都是使用了 RoPE 位置编码,BaiChuan 13B 模型使用的是 ALiBi 编码,BaiChuan 7B 使用的是 RoPE 编码,百川大模型维护了俩套代码,,RoPE 是主流位置编码。
3)激活函数
LLAMA,LLAMA2,Qwen,Baichuan,Yi 模型都使用的是 SwiGLU 激活函数,ChatGLM1 使用的是 GELU 激活函数,ChatGLM2 使用了 SwiGLU 激活函数,SwiGLU 是目前使用最广泛的激活函数。
4)归一化方法
LLaMA,LLaMA2,Qwen,Baichuan,Yi 模型使用的归一化方位为 RMS Norm, ChatGLM1 使用的是 Layer Norm,ChatGLM2 使用了 RMS Norm,大家默认都是用 RMS Norm 归一化方法。
5)注意力机制
LLaMA,LLaMA2 7B,LLAMA2 13B,Qwen,ChatGLM-6B,BaiChuan,Yi 模型使用的事 MHA(多头注意力机制),LLaMA2 70B 和 ChatGLM2-6B 使用的是 GQA(分组查询注意力机制)。
2. 模型测评
在众多国内开源模型之中,百川智能发布的 Baichuan-7B、清华大学和智谱 AI 发布的 ChatGLM2-6B、上海人工智能实验室发布的 InternLM-7B 等优秀模型广受业界关注。下表列出了这几个 7B 量级模型在几个有代表性评测集上的表现:
![](https://static001.geekbang.org/infoq/a3/a3f0925f4a5d635d0e2921b17b23b303.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
LLaMA-2 在知识能力上有明显优势。但在学科、语言、推理和理解能力上,InternLM 和 ChatGLM2 都已经超越了 LLaMA-2,而且 InternLM 的领先优势十分明显。
五、问题解答
问题 1:模型的上下文的记忆处理技术有哪些?
解答 1:通常有两种方案,即:Fine-Tuning(模型微调)和 RAG(检索增强生成)。RAG(Retrieval Augmented Generation),检索增强生成:通过检索的方法来增强生成模型的能力。将文本转换为向量后,需要将文档和向量存储在数据库中,以便后续的检索和分析。向量数据库可以高效地存储大量的文本和向量,同时也有快速的的查询性能。Fine-Tuning(模型微调):使用准备好的知识库对 LLM 进行 fine-tuning,让 LLM 成为领域专家,经常使用 lora 等低成本 finetune,毕竟 LLM 的全参调参也是非常耗 GPU 的,从成本考虑不如 RAG 向量知识库的形式,效果上很多业务下会比向量数据库略优。
问题 2:模型的训练及推理,对显存的要求?
解答 2:下面以举例的方式进行说明:
如果只是进行推理的话,还是比较容易计算的。目前模型的参数绝大多数都是 float32 类型, 占用 4 个字节。所以一个粗略的计算方法就是,每 10 亿个参数,占用 4G 显存(实际应该是 10^9*4/1024/1024/1024=3.725G,为了方便可以记为 4G)。比如 LLaMA 的参数量为 7000559616,那么全精度加载这个模型参数需要的显存为:7000559616 * 4 /1024/1024/1024 = 26.08G 。这个数字就有点尴尬,专注游戏的 Geforce 系列最高只有 24G,运行不起来,至少得上 Tesla 系列了。
如果还需要训练的话,则需要同时考虑优化器,梯度,临时显存等额外信息,只看前 3 部分,需要的显存是至少推理的 3-4 倍。7B 的全精度模型加载需要 78G ~ 104G。
问题 3:模型精度的验证是怎么做的?
解答 3:模型的精度验证目前国内主要采用在标准测评数据集上进行模型测试,测评集包含 MMLU,CEval,GSM8K,MATH,TriviaQA,HumanEval,BBH 等,在学科,语言,知识,推理,理解等多个维度进行测评。
问题 4:大模型的未来发展方向有哪些?
解答 4:基于 Transformers 底层架构的大模型存在被业内所诟病的罔顾事实而产生的“幻觉”问题、深层次的逻辑理解能力、数学推理能力等问题,为了实现大模型的高效训练和推理,有的是从模型底层下手,比如直接改变底层模型架构,将原来的 Transformer 架构改成近期新出的基于状态空间模型(SSM)的 mamba 架构;有的是在预训练微调方法上下手,通过采用少量精心策划的风格示例和精心设计的系统提示,对基础 LLMs 进行有效对齐的 URIAL 方法;还有一种方法就是对模型大而化之的处理方法,也就是本文要介绍的基于门控网络的混合专家模型(Mixture of Experts:MoE),由于篇幅限制,这里不做展开。
六、小节
今天我们学习了了 LLaMA2 大模型,我们对比了 LLaMA1 和 LLaMA2 模型的技术细节以及整体同理,同时学习了 LLaMA2 模型的内部核心算法,包括与 Transformers 架构的差异, RMS Normalization,Group Multi Query Attention,SwiGLU Activation Function 等算法。最后我们对比学习了 LLaMA2 与国内大模型的异同,更进一步加深了我们对 LLaMA 的理解。
文章转载自:华为云开发者联盟
评论