【大模型】LLaMA-1 模型介绍

文章目录

  • 一、背景介绍
  • 二、模型介绍
    • 2.1 模型结构
    • 2.2 模型超参数
    • 2.3 SwiGLU
  • 三、代码分析
    • 3.1 模型结构代码
    • 3.2 FairScale库介绍
  • 四、LLaMA家族模型
    • 4.1 Alpaca
    • 4.2 Vicuna
    • 4.3 Koala(考拉)
    • 4.4 Baize (白泽)
    • 4.5 Luotuo (骆驼,Chinese)
    • 4.6 其他
  • 参考资料

LLaMA(Large Language Model Meta AI)模型,是由 Meta AI 发布的一个开放且高效的大型基础语言模型, LLaMA-1 共有 7B13B33B65B(650 亿)四种版本。其数据集来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现,整个训练数据集在 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和Sennrich(2019)引入。
  • SwiGLU 激活函数 [PaLM]。将 ReLU 非线性替换为 SwiGLU 激活函数,且使用 2 / 3 ∗ 4 d 2/3 *4d 2/34d 而不是 PaLM 论文中的 4d,SwiGLU 由 Shazeer(2020)引入以提高性能。
  • Rotary Embeddings [GPTNeo]。模型的输入不再使用 positional embeddings,而是在网络的每一层添加了 positional embeddings (RoPE),RoPE 方法由Su等人(2021)引入。

2.2 模型超参数

不同模型的超参数详细信息在下表中给出:

在这里插入图片描述

2.3 SwiGLU

Feed Forward 层全称是 Position-wise Feed-Forward Networks(FPN),FFN 接收一个向量 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_ff(W 和 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, bias=False)self.down_proj = nn.Linear(hidden_dim, input_dim, bias=False)self.up_proj = nn.Linear(input_dim, hidden_dim, bias=False) 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_channels=3, out_channels=6, kernel_size=(5,5), stride=1, padding=0),nn.MaxPool2d(kernel_size=(2,2), stride=2, padding=0),nn.Conv2d(in_channels=6, out_channels=16, kernel_size=(5,5), stride=1, padding=0),nn.MaxPool2d(kernel_size=(2, 2), stride=2, padding=0),
)
model = fairscale.nn.Pipe(model, balance=[2, 2], devices=[0, 1], chunks=8)

在 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 Research
  • demo: FastChat
  • Github地址: https://github.com/young-geng/EasyLM

4.4 Baize (白泽)

  • 论文:https://arxiv.org/pdf/2304.01196.pdf
  • demo: Baize Lora 7B - a Hugging Face Space by project-baize
  • Github地址: 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 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署 ChatGLM(INT4 量化级别下最低只需 6GB 显存)。

整体使用下来,其基本任务没问题,但是涌现能力还是有限的,且会有事实性/数学逻辑错误,另外,Close QA 问题也很一般。GLM 模型架构与 BERT、T5 等预训练模型模型架构不同,它采用了一种自回归的空白填充方法,。

参考资料

  • LLaMA及其子孙模型概述

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

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

相关文章

Human β-NGF ELISA试剂盒

走近β-NGF 神经生长因子(nerve growth factor, NGF)最初从小鼠颌下腺中以7S复合体的形式分离而得,复合体由三个非共价连接的亚基α,β和γ组成。 NGF的α和β亚基均属于丝氨酸蛋白酶组织激肽释放酶家族成员,β亚基也称为β-NGF或2…

国产银河麒麟V10SP1系统下搭建TiDB数据库操作步骤图文

开发目的:在国产银河麒麟系统中搭建TiDB数据库运行环境。 开发工具:银河麒麟系统V10SP1TiDBMySql数据库8.0。 具体步骤: 1、在VmWare虚拟机中安装好国产银河麒麟V10Sp1操作系统。 2、打开终端命令,安装TiDB相关软件&#xff1…

ALV Color-颜色

目录 前言 实战 列颜色 行颜色 单元格颜色 前言 在ABAP ALV中,Color颜色设置是一种增强列表显示效果的重要手段,可以用来突出显示特定行、列或单元格,以吸引用户注意或传达数据的特定状态。 颜色设置中有优先级顺序,他们是单元格…

线上剧本杀小程序:为行业带来新的活力,未来可期

剧本杀是一项新型的社交游戏活动,从前几年开始就呈现了快速发展态势,为大众带来沉浸式的游戏体验,一度成为年轻人娱乐休闲消费的首选方式,吸引了大量的消费者和商家。 不过,在市场发展中,剧本杀行业仍需要…

掌握文件重命名技巧:一次性处理多路径文件并赋予独立编号

在日常工作和生活中,我们经常需要处理大量的文件,而文件重命名则是一项非常常见的任务。如何高效地一次性处理多路径文件并赋予独立编号,成为许多用户关注的焦点。本文将介绍云炫文件管理器一些实用的文件重命名技巧,帮助您轻松应…

基于FPGA的去雾算法

去雾算法的原理是基于图像去模糊的原理,通过对图像中的散射光进行估计和去除来消除图像中的雾霾效果。 去雾算法通常分为以下几个步骤: 1. 导引滤波:首先使用导引滤波器对图像进行滤波,目的是估计图像中散射光的强度。导引滤波器…

《这就是ChatGPT》读书笔记

书名:这就是ChatGPT 作者:[美] 斯蒂芬沃尔弗拉姆(Stephen Wolfram) ChatGPT在做什么? ChatGPT可以生成类似于人类书写的文本,它基本任务是弄清楚如何针对它得到的任何文本产生“合理的延续”。当ChatGPT写…

Spring框架学习笔记(一):Spring基本介绍(包含IOC容器底层结构)

1 官方资料 1.1 官网 https://spring.io/ 1.2 进入 Spring5 下拉 projects, 进入 Spring Framework 进入 Spring5 的 github 1.3 在maven项目中导入依赖 <dependencies><!--加入spring开发的基本包--><dependency><groupId>org.springframework<…

STC -PWM

一.STC8H1K16初始化,以下一步配置后就会有波形输出. // // 函数: PWMB_Output_init // 描述: 用户初始化程序. // 参数: None. // 返回: None. // 版本: V1.0, 2020-09-28 //u16 PWM8__setDuty25000;u16 PWM8__setPeriod50000; void PWMB_Output_init(void) {PWMx_InitDefi…

数据驱动实战二

目标 掌握数据驱动的开发流程掌握如何读取JSON数据文件巩固PO模式 1. 案例 对TPshop网站的登录模块进行单元测试 1.1 实现步骤 编写测试用例采用PO模式的分层思想对页面进行封装编写测试脚本定义数据文件&#xff0c;实现参数化 1.2 用例设计 1.3 数据文件 {"login…

CSS-背景属性

目录 背景属性 background-color (背景颜色 ) background-image (背景图片 ) background-repeat (背景图平铺方式 ) no-repeat 不平铺 repeat-x 水平方向平铺 repeat-y 垂直方向平铺 repeat 平铺 background-position (背景图位置) background-size (背景缩…

【深耕 Python】Quantum Computing 量子计算机(4)量子物理概念(一)

写在前面 往期量子计算机博客&#xff1a; 【深耕 Python】Quantum Computing 量子计算机&#xff08;1&#xff09;图像绘制基础 【深耕 Python】Quantum Computing 量子计算机&#xff08;2&#xff09;绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…

开源RAG框架汇总

前言 本文搜集了一些开源的基于LLM的RAG&#xff08;Retrieval-Augmented Generation&#xff09;框架&#xff0c;旨在吸纳业界最新的RAG应用方法与思路。如有错误或者意见可以提出&#xff0c;同时也欢迎大家把自己常用而这里未列出的框架贡献出来&#xff0c;感谢~ RAG应用…

Redis线程模型

文章目录 &#x1f496; Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程&#xff1f; &#x1f496; Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说&#xff0c;Redis 一直是单线程模型。不过&#xff0c;在 Redis 4…

后缀树与后缀数组简介及代码模板 ← AcWing 2715

【题目来源】https://www.acwing.com/problem/content/2717/【题目描述】 给定一个长度为 n 的字符串&#xff0c;只包含大小写英文字母和数字。 将字符串中的 n 个字符的位置编号按顺序设为 1∼n。 并将该字符串的 n 个非空后缀用其起始字符在字符串中的位置编号表示。 现在要…

保姆级零基础微调大模型(LLaMa-Factory,多卡版)

此处非常感谢https://github.com/hiyouga/LLaMA-Factory这个项目。 看到网上的教程很多都是教如何用webui来微调的,这里出一期命令行多卡微调教程~ 1. 模型准备 模型下载比较方便的方法: 1. modelscope社区(首选,速度很高,并且很多需要申请的模型都有)注意要选择代码…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

Web3 Tools - Base58

Base58编码 Base58编码是一种用于表示数字的非常见的编码方法。它通常用于加密货币领域&#xff0c;例如比特币和其他加密货币的地址表示。 什么是Base58编码&#xff1f; Base58编码是一种将数字转换为人类可读形式的编码方法。与常见的Base64编码不同&#xff0c;Base58编码…

JVM调参实践总结

JVM调优–理论篇从理论层面介绍了如何对JVM调优。这里再写一篇WIKI&#xff0c;尝试记录下JVM参数使用的最佳实践&#xff0c;注意&#xff0c;这里重点介绍HotSpot VM的调参&#xff0c;其他JVM的调参可以类比&#xff0c;但不可照搬。 Java版本选择 基于Java开发应用时&…

【问题分析】锁屏界面调起google语音助手后壁纸不可见【Android 14】

1 问题描述 为系统和锁屏分别设置两张不同的壁纸&#xff0c;然后在锁屏界面长按Power调起google语音助手后&#xff0c;有时候会出现壁纸不可见的情况&#xff0c;如以下截图所示&#xff1a; 有的时候又是正常的&#xff0c;但显示的也是系统壁纸&#xff0c;并非是锁屏壁纸…