高效底座模型LLaMA

论文标题:LLaMA: Open and Efficient Foundation Language Models
论文链接:https://arxiv.org/pdf/2302.13971.pdf
论文来源:Meta AI

1 概述

大型语言模型(Large Languages Models,LLMs)通过大规模文本数据的训练,展示了其根据文本指令或少量样本完成新任务的能力。这种少数示例的性质首次在规模足够大的模型中出现,导致了一系列聚焦于进一步扩大这些模型的工作。这些努力都是基于一个假设:模型参数越多,性能越好。然而,Hoffmann等人(2022)的近期研究显示,在给定的计算预算下,最佳的性能并非由最大的模型实现,而是由训练数据更多的较小模型实现。

Hoffmann等人(2022)的目标是确定如何最好地根据特定的训练计算预算来调整数据集和模型大小。然而,这个目标忽略了推理预算,这在大规模使用语言模型时变得至关重要。在这种背景下,目标性能水平下的首选模型并不是训练速度最快的,而是推理速度最快的,尽管训练大模型以达到一定的性能水平可能更加容易,但更长时间训练的小模型最终在推理时成本会更低。例如,尽管Hoffmann等人(2022)推荐在200B个token上训练一个10B的模型,我们发现7B模型的性能即使在1T个token之后仍在提高。

本文研究的主要目标是通过使用比通常更多的数据来训练一系列在各种推理预算下达到最佳可能性能的语言模型。这一系列模型称为LLaMA,参数范围从7B到65B,与现有最佳LLMs的性能相媲美。例如,LLaMA-13B在大多数基准测试中都优于GPT-3,尽管其大小只有GPT-3的十分之一。作者们认为这个模型将有助于民主化访问和研究LLMs,因为它可以在单个GPU上运行。对于最大规模的模型,LLaMA的65B参数模型也可以与最佳的LLMs(如Chinchilla或PaLM-540B)相媲美。

不同于Chinchilla、PaLM或GPT-3,LLaMA只使用公开可用的数据,使他们的工作与开源兼容,而大多数现有的模型依赖于非公开或未记录的数据(例如“Books – 2TB”或“Social media conversations”)。存在一些例外,如OPT、GPT-NeoX、BLOOM和GLM,但没有一个能与PaLM-62B或Chinchilla竞争。

2 方法

LLaMA使用完全开源的数据进行预训练,并且融合了已有LLMs的一些训练技巧,同时为了高效运算也对模型架构和运算过程做了一些改动。

2.1 预训练数据

LLaMA的预训练数据来自各个开源语料,数据组成如下:

这些数据中既包括网络语料也包括一些代码、书籍等开源数据,这既使得模型能够具备一些多领域的知识和代码理解能力,也可能使得模型会生成一些偏见、毒性和错误信息等有害内容。

LLaMA使用BPE(byte-pair encoding)算法来对数据进行token化,并且将所有的数字分割成单独的数字,并在无法识别的UTF-8字符时回退到byte级别进行分解。这样的处理方式能够帮助模型更好地理解和处理各种类型的字符和数字。最终从这些数据中得到了1.4T个token,对于大多数数据,每个token在训练时只使用一次,除了Wikipedia和Books这两部分执行大约2个epoch。

2.2 架构

LLaMA整合了一些已有的研究来对Transformer架构进行改进,主要包括:

「Pre-normalization[GPT3]」 :为了提高训练稳定性,LLaMA归一化了每个Transformer子层的输入,而不是归一化输出。他们使用RMSNorm归一化函数。

「SwiGLU激活函数 [PaLM]」 :他们将ReLU非线性函数替换为SwiGLU激活函数。他们使用的维度是\frac{2}{3}4d,而不是PaLM中的4d

「Rotary Embeddings[GPTNeo] :他们移除了绝对位置嵌入,而是在网络的每一层添加Rotary Embeddings(RoPE)。

以上的改进均有助于提升模型的性能和训练稳定性。所有模型的超参数细节如下:

2.3 优化器

LLaMA使用的是AdamW优化器,设置的超参数为:\beta _{1}=0.95,\beta _{2}=0.9。并且使用了余弦学习率调度,使得最终学习率等于最大学习率的10%。他们设置的权重衰减为0.1,梯度裁剪为1.0。同时使用2000步的warm-up,并根据模型的大小改变学习率和批处理大小(具体细节见上表)。

2.4 代码层面的高效实现

首先,LLaMA使用了一种高效的因果多头注意力运算符的实现(causal multi-head attention operator),这受到一些已有研究的启发。这种实现方式,可以在xformers库中找到,它降低了内存使用和计算量。这是通过不存储注意力权重和不计算因语言模型任务的因果性而被mask的key/query得分来实现的。

为了进一步提高训练效率,LLaMA通过检查点技术减少了在反向传播过程中需要重新计算的激活量。更具体地说,他们保存了那些计算成本较高的激活,例如线性层的输出。这是通过手动实现transformer层的反向函数来实现的,而不是依赖于PyTorch的自动梯度计算。为了充分利用这种优化,他们需要通过使用模型和序列并行化来减少模型的内存使用。此外,他们还尽可能地重叠了激活的计算和GPU之间网络的通信(使用all_reduce操作)。

在训练LLaMA的65B参数的模型时,本文的代码在拥有80GB RAM的2048个A100 GPU上,每秒每个GPU可以处理大约380个tokens。这意味着在他们包含1.4T tokens的数据集上训练需要大约21天。

3 实验

3.1 主要实验结果

本文在20个不同的benchmark数据集上进行了Zero-shot和Few-shot的实验来验证模型性能,主要结果如下:

  • Common Sense Reasoning

  • Closed-book Question Answering

  • Reading Comprehension

  • Mathematical reasoning

  • Code generation

  • Massive Multitask Language Understanding

  • Evolution of performance during training

3.2 指令微调

3.3 偏见、毒性和错误信息

  • RealToxicityPrompts

  • CrowS-Pairs

  • WinoGender

  • TruthfulQA

4 基于 LLaMA finetune 的模型

以下这些项目都可以算是 Meta 发布的 LLaMA(驼马)模型的子子孙孙。

4.1 Alpaca

Alpaca是斯坦福在 LLaMA 上对 52000 条指令跟随演示进行了精细调优的模型,是后续很多中文 LLM 的基础。对应的中文版是Chinese-LLaMA-Alpaca。该项目在原版 LLaMA 的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,在中文LLaMA 的基础上,本项目使用了中文指令数据进行指令精调,显著提升了模型对指令的理解和执行能力。

值得注意的是,该项目开源的不是完整模型而是 LoRA 权重,理解为原 LLaMA 模型上的一个“补丁”,两者进行合并即可获得完整版权重。

提醒:仓库中的中文 LLaMA/Alpaca LoRA 模型无法单独使用,需要搭配原版 LLaMA 模型。可以参考本项目给出的合并模型步骤重构模型。

  • repo: https://github.com/ymcui/Chinese-LLaMA-Alpaca/

4.2 Vicuna

Vicuna 是一款从 LLaMA 模型中对用户分享的对话进行了精细调优的聊天助手,根据的评估,这款聊天助手在 LLaMA 子孙模型中表现最佳,能达到 ChatGPT 90% 的效果。

 

4.3 Koala(考拉)

一款从 LLaMA 模型中对用户分享的对话和开源数据集进行了精细调优的聊天机器人,其表现与Vicuna 类似。

  • blog: Koala: A Dialogue Model for Academic Research
  • demo: FastChat
  • repo: 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
  • repo: https://github.com/project-baize/baize

4.5 Luotuo (骆驼,Chinese)

  • repo: https://github.com/LC1332/Luotuo-Chinese-LLM

另外,中文 LLM 的有影响力的模型还有 ChatGLM,通常指 ChatGLM-6B, 一个由清华团队开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署 ChatGLM(INT4 量化级别下最低只需 6GB 显存)。

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

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

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

相关文章

TMC2226步进电机驱动---学习记录

基于TMC2226数据手册的学习 主要内容介绍: Package Outline TMC2226 手册中引脚解释(按照手册表格顺序) 了解每个引脚是接什么的,之后看原理图 (借用立创广场kirito的原理图,后期换个) 以前的疑…

UIUC CS241 讲义:众包系统编程书

原文:angrave/SystemProgramming 译者:飞龙 协议:CC BY-NC-SA 4.0 欢迎来到 Angrave 的众包系统编程维基书!这个维基是由伊利诺伊大学的学生和教师共同建立的,是伊利诺伊大学 CS 的 Lawrence Angrave 的众包创作实验。…

SpringMVC的四种跳转方式

默认的跳转是请求转发,直接跳转到jsp页面展示,还可以使用框架提供的关键字redirect:,进行一个重定向操作,包括重定向页面和重定向action,使用框架提供的关键字forward:,进行服务器内部转发操作,…

如何解决NAND系统性能问题?--NAND分类

一、故事引言 想象一下,你正在管理一座神奇的数据仓库,这个仓库没有沉重的门、旋转的磁盘和机械手臂,而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片(NAND Flash,本文主人公&#xff0…

Bug:Goland左侧丢失项目结构(Goland常用快捷键)

Goland快捷键&小tips 1 常用快捷键 # 格式化代码 optioncommandL# 在项目中搜索文件中的内容 commandshiftF# 搜索.go文件 shiftshift(按两次shift)# 修改方法、变量(同时替换引用处的名称) fnshiftF6# 将选中代码抽取为方法…

设计模式—行为型模式之状态模式

设计模式—行为型模式之状态模式 状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色: 环境类&am…

结构体成员 分数比较大小

题目&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #include<cstring>using namespace std;struct Num{double fenzi;double fenmu;char fenhao;};bool cmp(Num r1,Num r2){return r1.fenzi/r1.fenmu<r2.fenzi/r2.fenmu;}int main(){int n;Num num[n…

Android-多线程

线程是进程中可独立执行的最小单位&#xff0c;也是 CPU 资源&#xff08;时间片&#xff09;分配的基本单位&#xff0c;同一个进程中的线程可以共享进程中的资源&#xff0c;如内存空间和文件句柄。线程有一些基本的属性&#xff0c;如id、name、以及priority。 id&#xff1…

管理沟通能力测试

管理沟通能力测试用于测试管理者的潜能在交流和沟通方面的能力&#xff0c;作为管理者的能力测评是一个综合面&#xff0c;而沟通能力则是尤为重要&#xff0c;团队的凝聚力、创造力都跟管理者的沟通能力有着直接的关系。了解和提高管理沟通能力需要在实践中不断学习和总结。 …

php 字符串常用函数

目录 1.一些常用函数 2.代码示例 1.一些常用函数 函数名描述trim()删除字符串两端空行或其它预定义符rtrim()删除字符串右边空行或其它预定义符ltrim()删除字符串左边空行或其它预定义符dirname()返回路径中的目录部分str_split()把字符串分割到数组里explode()使用一个字符串…

写在学习webkit过程的前面

webkit起源于KHTML&#xff0c;是KDE开源项目的KHTML和KJS引擎的一部分。在它的诞生和发展过程中&#xff0c;由两家著名的公司参与开发过程中&#xff0c;造成两次裂变。诞生两个内核webkit和blink&#xff0c;并发展和产生了两个主流的浏览器&#xff0c;分别为safari和chrom…

c++学习笔记-STL案例-机房预约系统2-创建身份类

前言 衔接上一篇“c学习笔记-STL案例-机房预约系统1-准备工作”&#xff0c;本文主要包括&#xff1a;创建身份类&#xff0c;建立了整个系统的框架&#xff0c;Identity基类&#xff0c;派生类&#xff1a;Sudent、Teacher、Manager&#xff0c;基类无实现源文件&#xff0c;…

鸿蒙HarmonyOS兼容JS的类Web开发-开发指导

鸿蒙HarmonyOS兼容JS的类Web开发-开发指导 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发-开发指导常用组件开发指导list开发指导创建list组件添加滚动条添加侧边索引栏实现列表折叠和展开场景示例 dialog开发指导创建dialog组件设置弹窗响应场景示例 form开发指导创建form组件实现…

Python笔记08-面向对象

文章目录 类和对象构造方法内置方法封装继承类型注解多态 类只是一种程序内的“设计图纸”&#xff0c;需要基于图纸生产实体&#xff08;对象&#xff09;&#xff0c;才能正常工作 这种套路&#xff0c;称之为&#xff1a;面向对象编程 类和对象 定义类的语法如下&#xff…

QT上位机开发(利用tcp/ip访问plc)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 plc是工控领域很重要的一个器件。简单的plc一般就是对io进行控制&#xff0c;但是复杂的plc&#xff0c;还可以控制电机、变频器&#xff0c;在工业…

Python3.5如何打包编译

python3.5怎么打包编译 问题&#xff1a;用Python开发的小工具有时需要编译打包为Windows(*.exe)、Mac等操作系统下的可执行性文件以供非程序员使用。 解决方案&#xff1a; 一、py2exe 目前只支持到Python3.4&#xff0c;暂不支持Python3.5 二、PyInstaller 安装&#x…

从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类

上一篇实现了数据库访问层的相关功能,还没有了解的小伙伴可以去看前面文章实现的内容,因为每一篇内容都是连贯的,不学习的话可能下面的内容学习起来会有点摸不着头脑 从vue小白到高手,从一个内容管理网站开始实战开发第六天,登录功能后台功能设计--API项目中的登录实现(二…

chat-plus部署指南

目录 1.下载代码 2.启动 3.测试 1.下载代码 cd /optwget https://github.com/yangjian102621/chatgpt-plus/archive/refs/tags/v3.2.4.1.tar.gz 2.启动 cd /opt/chatgpt-plus-3.2.4.1/deploydocker-compose up -d 3.测试 管理员地址xxx:8080/admin 账号密码admin/admin1…

真实可用,Xshell7 期待您的安装使用

xshell https://pan.baidu.com/s/1OKC1sQ1eYq6ZSC8Ez5s0Fg?pwd0531 1.鼠标右击【Xshell7.zip】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09; 2.双击Xshell-7.0.0065.exe 执行安装操作 3.选择【是】 4.点击【下一步】 5.选择【我接受...】 6.点击…

Open CASCADE学习|创建旋转体

旋转体是一个几何概念&#xff0c;指的是通过旋转一个平面图形得到的立体图形。具体来说&#xff0c;一个平面图形绕着它所在的平面内的一条定直线旋转一周所形成的曲面&#xff0c;这个曲面会围成一个几何体&#xff0c;这个几何体就叫做旋转体。这条定直线被称为旋转体的轴。…