rtt全民互助平台网站开发,自己怎样做免费网站,上海集团网站建设公司,一周新闻热点事件文章目录 一、背景介绍二、模型介绍2.1 模型结构2.2 模型超参数2.3 SwiGLU 三、代码分析3.1 模型结构代码3.2 FairScale库介绍 四、LLaMA家族模型4.1 Alpaca4.2 Vicuna4.3 Koala(考拉)4.4 Baize (白泽)4.5 Luotuo (骆驼#xff0c;Chinese)4.6 其他 参考资料 LLaMA#xff08… 文章目录 一、背景介绍二、模型介绍2.1 模型结构2.2 模型超参数2.3 SwiGLU 三、代码分析3.1 模型结构代码3.2 FairScale库介绍 四、LLaMA家族模型4.1 Alpaca4.2 Vicuna4.3 Koala(考拉)4.4 Baize (白泽)4.5 Luotuo (骆驼Chinese)4.6 其他 参考资料 LLaMALarge Language Model Meta AI模型是由 Meta AI 发布的一个开放且高效的大型基础语言模型
LLaMA-1 共有
7B、
13B、
33B、
65B650 亿四种版本。其数据集来源都是公开数据集无任何定制数据集保证了其工作与开源兼容和可复现整个训练数据集在 token 化之后大约包含 1.4T 的 token。 关于模型性能LLaMA 的性能非常优异具有 130 亿参数的 LLaMA 模型「在大多数基准上」可以胜过 GPT-3 参数量达 1750 亿而且可以在单块 V100 GPU 上运行而最大的 650 亿参数的 LLaMA 模型可以媲美谷歌的 Chinchilla-70B 和 PaLM-540B。
关于训练集其来源都是公开数据集无任何定制数据集保证了其工作与开源兼容和可复现。整个训练数据集在 token 化之后大约包含 1.4T 的 token。其中LLaMA-65B 和 LLaMA-33B 是在 1.4万亿个 token 上训练的而最小的模型 LLaMA-7B 是在 1万亿个 token 上训练的。
一、背景介绍
Hoffmann 等人2022最近的工作表明了在给定的计算预算下最佳性能不是由最大的模型实现的而是基于更多数据上的训练较小模型实现的。
和之前的工作相比本论文的重点是 基于更多 tokens 的训练集在各种推理预算下训练出性能最佳的一系列语言模型称为 LLaMA 参数范围从 7B 到 65B 不等与现有最佳 LLM 相比其性能是有竞争力的。比如LLaMA-13B 在大多数基准测试中优于 GPT-3尽管其尺寸只有 GPT-3 的十分之一。作者相信LLaMA 将有助于使 LLM 的使用和研究平民化因为它可以在单个 GPU 上运行在规模较大的情况下LLaMA-65B 也具有与最佳大型语言模型如 Chinchilla 或 PaLM-540B相竞争的能力。 LLaMA 优势在于其只使用公开可用的数据这可以保证论文的工作与开源兼容和可复现。 之前的大模型要么使用了不公开的数据集去训练从而达到了 state-of-the-art如 Chinchilla、PaLM 或 GPT-3要么使用了公开数据集但模型效果不是最佳无法和 PaLM-62B 或 Chinchilla 相竞争如 OPT、GPT-NeoX、BLOOM 和 GLM。
二、模型介绍
2.1 模型结构
主流的大语言模型都采用了Transformer架构它是一个基于多层Self-attention的神经网络模型。
原始的Transformer由编码器Encoder和解码器Decoder两个部分构成同时这两个部分也可以独立使用。 和 GPT 系列一样LLaMA 模型也是 Decoder-only 架构但结合前人的工作做了一些改进比如
Pre-normalization [GPT3]。为了提高训练稳定性LLaMA 对每个 transformer 子层的输入进行归一化使用 RMSNorm 归一化函数Pre-normalization 由Zhang和Sennrich2019引入。SwiGLU 激活函数 [PaLM]。将 ReLU 非线性替换为 SwiGLU 激活函数且使用 2 / 3 ∗ 4 d 2/3 *4d 2/3∗4d 而不是 PaLM 论文中的 4dSwiGLU 由 Shazeer2020引入以提高性能。Rotary Embeddings [GPTNeo]。模型的输入不再使用 positional embeddings而是在网络的每一层添加了 positional embeddings (RoPE)RoPE 方法由Su等人2021引入。
2.2 模型超参数
不同模型的超参数详细信息在下表中给出 2.3 SwiGLU
Feed Forward 层全称是 Position-wise Feed-Forward NetworksFPNFFN 接收一个向量 x序列中特定位置的隐藏表示并将其通过两个可学习的线性变换由矩阵 W1 和 W2 以及偏置向量 b1 和 b2 表示进行处理在两个线性变换之间应用修正线性ReLU激活函数。计算过程用数学公式可表达为
在 T5 模型的实现中使用是没有偏置 bias 的版本数学公式表达如下: 后续的研究提出了用其他非线性激活函数替换ReLU如高斯误差线性单元 Gaussian Error Linear Units:
[Dauphin et al., 2016] 提出了门控线性单元GLU定义为输入的两个线性变换的逐元素乘积其中一个经过了 sigmoid 激活。另外他们还建议省略激活函数称之为“双线性”bilinear层。 我们还可以使用其他激活函数定义 GLU 变体如下所示: 在本论文中作者提出了 Transformer FFN 层的其他变体这些变体使用 GLU 或其变体代替第一个线性变换和激活函数。同样也省略了偏差项。
SwiGLU 激活函数是 Gated Linear Units (GLU) 变体之一来源于论文 GLU Variants Improve Transformer。SwiGLU 数学表达式如下: 其中激活函数 Swish 的定义如下:
原始的的 FPN 层只有两个权重矩阵但 F P N S w i G L U FPN_{SwiGLU} FPNSwiGLU 的线性变换层有三个权重矩阵。为了保持参数数量和计算量的恒定需要将隐藏单元的数量 d_ffW 和 V 的第二个维度以及 W2 的第一个维度缩小 2/3。实现代码如下所示:
# -*- coding : utf-8 -*-import torch
import torch.nn as nn
import torch.nn.functional as Fclass FFNSwiGLU(nn.Module):def __init__(self, input_dim: int, hidden_dim: int):super().__init__()hidden_dim int(2 * hidden_dim / 3)self.gate_proj nn.Linear(input_dim, hidden_dim, biasFalse)self.down_proj nn.Linear(hidden_dim, input_dim, biasFalse)self.up_proj nn.Linear(input_dim, hidden_dim, biasFalse) def forward(self, x):# LLaMA 官方提供的代码和模型默认是使用 F.silu() 激活函数transformers 可通过配置指定return self.down_proj(F.silu(self.gate_proj(x)) * self.up_proj(x))layer FFNSwiGLU(128, 256)
x torch.randn(1, 128)
out layer(x)
print(out.shape) # torch.Size([1, 128])三、代码分析
Github地址https://github.com/meta-llama/llama
LLaMA 官方代码 只提供了模型结构和推理代码没有提供模型训练代码。另外看了官方提供的下载脚本是没有直接提供下载链接是需要自己申请的
3.1 模型结构代码
LLaMA 模型结构也只使用 Decoder 结构。
[等待更新]
3.2 FairScale库介绍
LLaMA 模型的线性计算层都是使用了 FairScale 库的 ColumnParallelLinear 层它是一个并行的线性层可以在多个 GPU 上并行计算这个计算速度比 Linear 的 nn.Linear 层速度更快。
FairScale: 用于在一台或多台机器/节点上进行高性能和大规模训练的 PyTorch库由 Meta 发布。示例代码
from torch import nn
import fairscalemodel nn.Sequential(nn.Conv2d(in_channels3, out_channels6, kernel_size(5,5), stride1, padding0),nn.MaxPool2d(kernel_size(2,2), stride2, padding0),nn.Conv2d(in_channels6, out_channels16, kernel_size(5,5), stride1, padding0),nn.MaxPool2d(kernel_size(2, 2), stride2, padding0),
)
model fairscale.nn.Pipe(model, balance[2, 2], devices[0, 1], chunks8)在 2 个 GPU 上运行 4 层模型。前两层在 cuda:0 上运行后两层在 cuda:1 上运行。
四、LLaMA家族模型
以下这些项目都是基于 LLaMA finetune 的模型可以算是 Meta 发布的 LLaMA羊驼模型的子子孙孙。
4.1 Alpaca
Github地址https://github.com/ymcui/Chinese-LLaMA-Alpaca/
Alpaca 是斯坦福在 LLaMA 上对 52000 条指令跟随演示进行了精细调优的模型是后续很多中文 LLM 的基础。
对应的中文版是 Chinese-LLaMA-Alpaca。该项目在原版 LLaMA 的基础上扩充了中文词表并使用了中文数据进行二次预训练进一步提升了中文基础语义理解能力。同时在中文LLaMA 的基础上本项目使用了中文指令数据进行指令精调显著提升了模型对指令的理解和执行能力。
值得注意的是该项目开源的不是完整模型而是 LoRA 权重理解为原 LLaMA 模型上的一个“补丁”两者进行合并即可获得完整版权重。提醒仓库中的中文 LLaMA/Alpaca LoRA 模型无法单独使用需要搭配原版 LLaMA 模型[1]。可以参考本项目给出的合并模型步骤重构模型。
4.2 Vicuna
Vicuna 是一款从 LLaMA 模型中对用户分享的对话进行了精细调优的聊天助手根据的评估这款聊天助手在 LLaMA 子孙模型中表现最佳能达到 ChatGPT 90% 的效果。
4.3 Koala(考拉)
一款从 LLaMA 模型中对用户分享的对话和开源数据集进行了精细调优的聊天机器人其表现与Vicuna 类似。
blog: Koala: A Dialogue Model for Academic Researchdemo: FastChatGithub地址: https://github.com/young-geng/EasyLM
4.4 Baize (白泽)
论文https://arxiv.org/pdf/2304.01196.pdfdemo: Baize Lora 7B - a Hugging Face Space by project-baizeGithub地址: https://github.com/project-baiz
4.5 Luotuo (骆驼Chinese)
Github地址: https://github.com/LC1332/Luotuo-Chinese-LLM
4.6 其他
另外中文 LLM 的有影响力的模型还有 ChatGLM通常指 ChatGLM-6B 一个由清华团队开源的、支持中英双语的对话语言模型基于 General Language Model (GLM) 架构具有 62 亿参数。结合模型量化技术用户可以在消费级的显卡上进行本地部署 ChatGLMINT4 量化级别下最低只需 6GB 显存。
整体使用下来其基本任务没问题但是涌现能力还是有限的且会有事实性/数学逻辑错误另外Close QA 问题也很一般。GLM 模型架构与 BERT、T5 等预训练模型模型架构不同它采用了一种自回归的空白填充方法,。
参考资料
LLaMA及其子孙模型概述