当前位置: 首页 > news >正文

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介

1.1 Llama1

由 Meta AI 发布,包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型

数据集:模型训练数据集使用的都是开源的数据集,总共 1.4T token

模型结构:原始的 Transformer 由编码器(Encoder)和解码器(Decoder)两个部分构成,同时 Encoder 和 Decoder 这两部分也可以单独使用,Llama是基于 Transformer Decoder 的架构,在此基础上做了以下改进:

(1)将 Layer-Norm 改成 RMSNorm(Root Mean square Layer Normalization),并将其从 output 层,移到 input 层

(2)采用 SwiGLU 激活函数

(3)采用 RoPE 旋转位置编码

分词器:采用 BPE 算法,使用 SentencePiece 实现,将所有数字拆分为单独的数字,并使用字节来分解未知的 UTF-8 字符,词表大小为 32k

优化器:采用 AdamW,是Adam的改进,可以有效地处理权重衰减,提供训练稳定性

Learning Rate:使用余弦学习率调整 cosine learning rate schedule,使得最终学习率等于最大学习率的10%,设置0.1的权重衰减和1.0的梯度裁剪,warmup 的步数为 2000,并根据模型的大小改变学习率和批处理大小

模型效果:Llama-13B (GPT-3 1/10大小) 在多数 benchmark 上超越 GPT-3 (175B),在规模较大的端,65B 参数模型也与最好的大型模型也具有竞争力

1.2 Llama2

由 Meta AI 发布,包含 7B、13B、34B、70B 四种参数规模的基座语言模型,除了 34B 其他模型均以开源且免费可商用

数据集:模型训练数据集使用的都是开源的数据集,相比上一代的训练数据增加了 40%,达到了增至 2T token,训练数据中的文本来源也更加的多样化。Llama2 对应的微调模型是在超过 100 万条人工标注的数据下训练而成(但是Llama2 语料库仍以英文(89.7%)为主,而中文仅占据了其中的 0.13%,这导致 Llama2 很难完成流畅、有深度的中文对话)

模型结构:

(1)Llama2 与 Llama1 的主要结构基本一致

(2)Llama2 上下文长度由之前的 2048 升级到 4096,可以理解和生成更长的文本

(3)7B 和13B 使用与 Llama1 相同的架构,34B 和 70B 模型采用了分组查询注意力(GQA)

优化器、Learning Rate、分词器:与 Llama1 一致

模型效果:从模型评估上看,Llama2 在众多的基准测试中,如推理、编程、对话能力和知识测验上,都优于 Llama1 和现有的开源大模型。Llama2 70B在 MMLU 和 GSM8K 上接近 GPT-3.5(OpenAI,2023),但在编码基准方面存在显著差距

Llama2 相比Llama1 的升级:

(1)Llama2 训练数据相比 Llama1 多出40%,上下文长度是由之前的 2048 升级到 4096,模型理解能力得以提升可以生成更长的文本

(2)模型训练数据集使用的相比上一代的训练数据增加了 40%,并且更加注重安全&隐私问题

(3)发布了Llama2-Chat,是 Llama2 微调后的模型(在公开数据集上预训练以后引入SFT(有监督微调)、RLHF(人类反馈强化学习)+拒绝采样+近端策略优化 (PPO)两个优化算法)

Meta 试图证明小模型在足够多的的数据上训练后,效果也能达到甚至超过大模型

1.3 Llama3

Llama3 有基础版和 Instruct 两个版本,每个版本拥有 8B、70B 和 405B 三个参数规模的模型

数据集:Llama3 的预训练数据集增加至 15T,这些数据都是从公开来源收集的高质量数据集(依旧强调高质量的训练数据集至关重要),其中包括了 4 倍以上的代码 token 以及 30 种语言中 5% 的非英语 token(这意味着 Llama3 在代码能力以及逻辑推理能力的性能将大幅度提升)。微调数据包括公开可用的指令数据集,以及超过1000万个人工注释的示例。预训练和微调数据集均不包含元用户数据。(主要还是以英语为主,中文占比依旧很低)

通过开发一系列数据过滤流程:包括使用启发式筛选器、NSFW 筛选器、语义重复数据删除方法和文本分类器来预测数据质量,以及使用 Llama 2 为 Llama 3 提供支持的文本质量分类器生成训练数据。

模型结构:Llama 3 总体上与 Llama2 相比没有重大变化,在 Llama 2 中只有 34B、70B 使用了分组查询注意 (GQA),为了提高模型的推理效率,Llama3 所有模型都采用了 GQA

分词器:与 Llama2 不同的是,Llama3 将 tokenizer 由 sentencepiece 换成 tiktoken,词汇量从 32K 增加到 128K,增加了 4 倍。更大的词汇库能够更高效地编码文本,增加编码效率,可以实现更好的下游性能。不过这也会导致嵌入层的输入和输出矩阵尺寸增大,模型参数量也会增大。

序列长度:输入上下文长度从 4096(Llama 2)和 2048(Llama 1)增加到 8192,但相对于 GPT-4 的 128K 来说还是相当小

模型效果:在多项行业基准测试中展示了最先进的性能,从下表可以看出,Llama3 性能远远高于 Llama2,Llama3 8B 性能远高于 Llama2 70B,Llama3 70B模型在五项测评中有三项高于 GPT-4,Llama3 400B 模型更是全面碾压 GPT-4

BenchMark

Llama2 7B

Llama2 13B

Llama2 70B

Llama3 8B

Llama3 70B

Llama3 400B

GPT-3.5

GPT-4

MMLU

34.1

47.8

52.9

68.4

82

86.1

70

86.4

GPQA

21.7

22.3

21.0

34.2

39.5

48

28.1

35.7

HumanEval

7.9

14.0

25.6

62.2

81.7

84.1

48.1

67

GSM-8K

25.7

77.4

57.5

79.6

93

94.1

57.1

92

MATH

3.8

6.7

11.6

30.0

50.4

57.8

34.1

52.9

缩放定律:制定了一系列的缩放定律,通过小模型表现可以在大模型训练前预测大模型的表现。根据之前 Scaling Law 推算 8B 模型对应 200B Token(2000亿),但是 Meta 使用到了 15T Token(15万亿)训练,性能还可以提升。

从目前模型效果来看,Meta 使用的 Scaling Law 法则是非常有效的,Meta 得到了一个非常强大的模型,它非常小,易于使用和推理,而且 Meta 表示,即使这样,该模型似乎也没有在标准意义上“收敛”,性能还能改善。这就意味着,一直以来我们使用的 LLM 训练是不足的,远远没有达到使模型收敛的点。较大的模型在训练计算较少的情况下可以与较小模型的性能相匹配,考虑到推理过程中使效率更高,还是会选择小模型。

为了训练最大的 Llama3 模型,Meta 结合了三种类型的并行化:数据并行化、模型并行化和管道并行化。最高效的实现是在 16K GPU 上同时训练时,每个 GPU 的计算利用率超过 400 TFLOPS。在两个定制的 24000 个 GPU 集群上训练,有效训练时间超过95%,比 Llama2 训练效率提高了 3 倍

模型

训练(GPU小时)

GPU

训练 Token

Llama1 65B

1.0 M

A100 80G

1.4 万亿

Llama2 70B

1.7 M

A100 80G

2 万亿

Llama3 70B

7.7 M

H100 80G

15 万亿

Llama2 微调后的模型为 Llama2-Chat,Llama3 微调后的模型为Llama3-Instruct,不光用在聊天上,也用在指令跟随

指令微调:为了在聊天用例中充分释放预训练模型的潜力,Meta 对指令调整方法进行了创新。训练方法结合了监督微调 (SFT)、拒绝采样(RS)、近端策略优化 (PPO) 和直接策略优化 (DPO) 的组合。这种组合训练,提高了模型在复杂推理任务中的表现。

2. Llama3 预训练模型推理

2.1 下载项目与模型

下载项目

git clone https://github.com/meta-llama/llama3.git

下载模型

官网下载
https://llama.meta.com/llama-downloads/

在官网填写信息后,申请下载权限,会发送一个URL到填写的邮箱内,像这样:

进入到项目目录,执行./download.sh:

按照要求输入邮件中的URL,以及需要下载的模型,可选 8B、8B-instruct、70B 和 70B-instruct,按需下载即可,下载中:



下载完成:

huggingface 下载【推荐】
https://huggingface.co/meta-llama/Meta-Llama-3-8B

可以直接点击下载按钮在网页下载,也可以点 Clone 进行命令行下载~  

2.2 环境配置

# 1.安装虚拟环境
conda create -n llama python=3.11
conda activate llama
# 2.安装依赖包
cd llama3
pip3 install -e .

2.3 模型推理

1. 模型并行值

  • 8B模型的模型并行 (MP) 值为1
  • 70B模型的模型并行 (MP) 值为8

在 Llama3 模型中,MP 值指的是并行化模型时使用的硬件单元数。一个 MP 值为 1 的 8B 模型可能意味着整个模型可以在单个计算设备上运行,而一个 MP 值为 8 的 70B 模型可能意味着模型被分成 8 部分,每部分在不同的计算设备上运行。

2. 序列长度和批处理大小

  • 所有模型支持最多 8192 个 tokens 的序列长度

  • 缓存是根据 max_seg_len 和 max batch_size 值预分配的,应根据你的硬件配置这些值

3. 基于 transformers 进行预训练模型推理

import transformers
import torchpipeline transformers.pipeline(task="text-generation",model=""/root/models/Meta-Llama-3-8B-instruct"",model_kwargs={"torch_dtype": torch. bfloat16},device="cuda"
)print(pipeline("Hey how are you doing today ?"))

4. 基于 vLLM 进行预训练模型推理

安装依赖:

pip3 install vllm

服务部署:

python3 -m vllm.entrypoints.openai.api_server --model /root/models/Meta-Llama-3-8B --dtype auto --api-key 123456

另起一个终端,进行服务测试:

from openai import OpenAIclient = OpenAI(base_url="http://localhost:8000/v1",api_key="123456"
)
print("服务连接成功")
completion=client.completions.create(model="/root/models/Meta-Llama-3-8B",prompt="San Francisco is a",max_tokens=128
)
print("### San Francisco is : ")
print("Completion result: ", completion)

测试结果:

相关文章:

  • springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)
  • 【数据治理-设计数据标准】
  • py-mmcif包pdbx_struct_assembly对象介绍
  • 困扰我们的,不是如何过上更幸福的生活,而是如何过上比别人更幸福的生活
  • Linux之实战命令18:col应用实例(五十二)
  • 开启争对目标检测的100类数据集-信息收集
  • 深入理解 Nuxt.js 中的 app:data:refresh 钩子
  • 「实战应用」如何用DHTMLX Gantt集成工具栏部件更好完成项目管理?
  • js设计模式-工厂模式 单例模式 观察者模式 发布订阅模式 原型模式 代理模式 迭代器模式
  • GPU参数指标
  • swiper.js实现跑马灯效果,无缝衔接,鼠标悬停
  • <<迷雾>> 第 3 章 怎样才能让机器做加法 示例电路
  • python程序操作Windows系统中的软件如word等(是否可以成功操作待验证)
  • 基于IAR平台的freertos移植
  • Mac电脑快速回复的神器-快捷短语
  • ES6指北【2】—— 箭头函数
  • Android优雅地处理按钮重复点击
  • CentOS 7 防火墙操作
  • HTML5新特性总结
  • isset在php5.6-和php7.0+的一些差异
  • Java 最常见的 200+ 面试题:面试必备
  • java取消线程实例
  • Joomla 2.x, 3.x useful code cheatsheet
  • Spark RDD学习: aggregate函数
  • v-if和v-for连用出现的问题
  • Vue组件定义
  • 机器学习中为什么要做归一化normalization
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 类orAPI - 收藏集 - 掘金
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 探索 JS 中的模块化
  • Python 之网络式编程
  • #知识分享#笔记#学习方法
  • (07)Hive——窗口函数详解
  • (20)docke容器
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (7) cmake 编译C++程序(二)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第30天)二叉树阶段总结
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (黑马C++)L06 重载与继承
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (九十四)函数和二维数组
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)基于IDEA的JAVA基础1
  • (转) 深度模型优化性能 调参
  • (转)Scala的“=”符号简介
  • .Net Core和.Net Standard直观理解
  • .net 后台导出excel ,word
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NetCore 如何动态路由
  • .NET框架设计—常被忽视的C#设计技巧