大模型技术实践(二)|关于Llama 2你需要知道的那些事儿

news2024/9/25 11:18:08

在上期文章中,我们简要回顾了Llama模型的概况,本期文章我们将详细探讨【关于Llama 2】,你需要知道的那些事儿。
9b95d162a893f52a9951ef6be752d617.jpeg

01-Llama 2的性能有多好?


作为Meta新发布的SOTA开源大型语言模型,Llama 2是Llama模型的延续和升级。Llama 2家族模型包括了Llama 2预训练模型和Llama 2-chat微调模型,分别有7B、13B和70B参数量的版本,覆盖了不同的应用场景需求。

1.1 训练数据

Llama 2在预训练语料上比Llama增加了40%,增至2万亿个token,且训练数据中的文本来源更加的多样化。此外,Llama 2对应的微调模型是在超过100万条人工标注的数据下训练而成。
bda9c60786e8c8b21c34fc29c409addb.jpeg图1:Llama 2模型概览[1]


1.2 模型评估

从模型评估上看,Llama 2在众多的基准测试中,如推理、编程、对话能力和知识测验上,都优于一代Llama和现有的开源大模型。
f64679251ec1c7042efcb8097e52bb53.jpeg图2:Llama 2在不同基准测试上的得分

虽然Llama 2-70B在推理任务上表现接近GPT-3.5,但是在综合性能上还是无法与OpenAI的GPT-4和Google的PaLM-2-L等闭源大模型相媲美,尤其在编程基准上远落后于两者。
06bfcf0c42012d0bd1ea08c028d51d7a.jpeg图3:Llama 2、GPT和PaLM三者在不同基准测试上的得分


02-解锁Llama 2的模型结构


2.1 Llama 2模型架构

Llama 2在预训练设置和模型架构上和一代模型非常相似。
b8c7a6b9bc60159323f42f3d936d20f9.jpeg
如图所示,Llama系列模型都使用了自回归Transformer架构,即Transformer's decoder-only架构。两代模型的一致性体现在:

预归一化(Pre-normalization):对每一个transformer的子层输入都进行归一化,使用RMSNorm归一化函数

SwiGLU激活函数:在前馈神经网络(FFN)使用SwiGLU 激活函数替换了Transformer中的 ReLU 激活函数来提升性能

旋转嵌入编码(Rotary Positional Embeddings,RoPE):RoPE可以兼顾相对位置和绝对位置的信息以提高模型的泛化能力


2.2 Llama 2训练亮点

除了上文提到的训练数据的增加,Llama 2在训练过程方面也有两个亮点值得我们关注。第一,上下文长度的扩大提升了模型的理解能力;第二,分组查询注意力机制提高了模型的推理速度。



上下文窗口扩大

Llama 2的上下文长度比Llama扩大了一倍,从2048个token拓展至4096个token。更长的上下文窗口意味着更多的聊天用例可被采用,进而模型的理解能力得以提升。



Grouped-Query注意力

在Attention的实现上,Llama 2 30B以上的模型采用了分组查询注意力机制(Grouped-Query Attention,GQA),见图5和图6。
0d4c64d900be1ac84eb2c4bf867cc622.jpeg图6: Llama 2使用GQA[2]

自回归模型的解码通过缓存序列先前标记的键(K)值(V)对来加速注意力的计算。然而随着Batch Size和上下文窗口的增大,多头注意力模型(Multi-head Attenrion,MHA)的内存成本会随之显著增大。
c2cf23e34c46b9cb29503cedda9e8ae8.jpeg图7: "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints"[3]


GQA的优势在于其将Query进行分组,组内共享KV,这样使得K和V的预测可以跨多个头共享,从而显著降低计算和内存需求,提升推理速度 。


2.3 Llama 2-chat微调流程


Meta致力于在偏好数据上训练奖励模型,然后采用强化学习进行优化,从而提高生成的质量。

SFT + RLHF by RS and PPO

和InstructGPT类似,在Llama 2-chat对话模型微调流程分为:

自监督训练后获得Llama 2基座模型

监督微调(Supervised fine-tuning,SFT)

人类反馈强化学习(Reinforcement learning with human feedback,RLHF):拒绝采样 + 近端策略优化



RLHF使用了拒绝采样(Rejection Sampling fine-tuning,RS)和近端策略优化(Proximal Policy Optimization,PPO)两个优化算法。拒绝采样的原理为模型输出时采样K个结果,用当前时刻最好的奖励模型打分,选择奖励值最高的一个。在强化学习阶段进行梯度更新,并结合PPO进行RS加PPO的优化处理。
0ed487ba69f9a27e32ae2156a692c42b.jpeg图8: Llama 2-chat的微调过程[1]


Meta一共迭代了5个RLHF版本,分别从V1-V5,但仅公布了最新的V5版本。V5版本迭代的步骤下图所示。
d03e33a3df24813aaee860f1b99d2905.jpeg图9: RLHF-V5迭代流程

Quality Is All You Need

Meta使用用户偏好数据训练的两个独立的奖励模型Helpfulness RM和Safty RM,分别对有用性和安全性进行了优化。在SFT的过程中,Llama 2的官方论文[2]着重强调了只需少量高质量的SFT偏好数据就能显著提升结果质量(Quality Is All You Need)。此外,这篇论文也是第一篇指出“RLHF从根本上提高了大模型性能的上限”的论文。
1e4a4ef044de1ea6fd72a18ef45cc414.jpeg图10:Llama 2论文中强调的“Quality Is All You Need"[2]

综上,Llama 2训练流程给我们最重要的一个启示是:

奖励模型不仅是RLHF的关键,也是整个大模型效果的关键;数据质量又是奖励模型的关键。[4]

03-Llama 2在UCloud UK8S上的实践


3.1 下载模型

下载模型

从HuggingFace上克隆Llama 2的模型 [5]:https://huggingface.co/meta-llama。本文使用的是Llama 2-chat-7b模型。
0abf1e8f06f95894bc581c99301e9c68.jpeg 安装WebUI工具

oobabooga开源的text-generation-webui [6] 一个大模型的可视化工具包,安装方法如下:



a. 进入Text Generation的github

(https://github.com/oobabooga/text-generation-webui)

b. 选择一键安装包安装或者手动安装

c. 我们将Llama 2模型文件放入text-generation-webui/models目录下,文件结构如下图:
bc2ff7eab3b1fb2b7b5250c2fc30af54.jpeg3.2 构建镜像

根据Uhub容器镜像库的说明:

(https://docs.ucloud.cn/uhub/guide)



1. 首先,在Uhub上创建镜像库
91a81617c7c39b62e03e78f9602b0fa3.jpeg2. 其次,在云主机创建镜像,并打标

docker image build -t {tag name} .
docker tag {本地镜像名} uhub.service.ucloud.cn/{已创建镜像仓库}/{镜像}:tag

3. 最后,将云主机镜像推到Uhub中

docker push uhub.service.ucloud.cn/{已创建镜像仓库}/{镜像}:tag

3.3 配置UK8S集群



1. 创建UFS文件系统并挂载

(https://docs.ucloud.cn/ufs/ufs_guide/create)
4a5894d501a6f83d2f00d2857639ce08.jpeg2. 创建UK8S容器云

参考文档(https://docs.ucloud.cn/uk8s/),创建集群时,Node的配置可参照下图:
ef4d073492091356f322eeb8fc5717f7.jpeg集群创建之后,点击“详情”按钮,将“外网凭证”拷贝到~/.kube/config文件中。同时,需要安装和配置Kubectl命令行工具。

(https://docs.ucloud.cn/uk8s/manageviakubectl/connectviakubectl?id=安装及配置kubectl)

3. 在UK8S中使用UFS

用创建好的UFS作为UK8S集群的共享存储。

根据在UK8S中使用UFS文档,创建PV和PVC。

(https://docs.ucloud.cn/uk8s/volume/ufs?id=在uk8s中使用ufs)


a. 创建Pod:编写配置文件ufspod.yml

apiVersion: apps/v1
kind: Deployment
metadata:
name: Llama 2
spec:
selector:
matchLabels:
app: Llama 2
replicas: 1
template:
metadata:
labels:
app: Llama 2
spec:
containers:
- name: Llama 2
image: uhub.service.ucloud.cn/Llama 2/Llama 2-test:v1 # 换成你的仓库
volumeMounts:
- mountPath: "/app/models"
name: mypd
ports:
- containerPort: 7861
volumes:
- name: mypd
persistentVolumeClaim:
claimName: ufsclaim


执行配置文件:

kubectl apply -f ufspod.yml
# deployment.apps/Llama 2 created



b. 进入Pod

查询Pod Name:

kubectl get pods



在Pod内部启动一个Bash Shell:

kubectl exec -it {pod_name} -- /bin/bash



c. 在线推理

运行server.py文件

python server.py --model Llama-2-7b-chat-hf --listen


至此,我们就可以在Web端和Llama 2进行对话了。
d23fbc5e1608354d95ac929a767694c9.jpeg此外,UCloud已推出了Llama 2 GPU云主机镜像,即开即用,助力AI开发者们快速搭建Llama 2推理和微调环境,详情请见:“Llama 2 模型快速部署”文档。

(https://docs.ucloud.cn/gpu/practice/LLaMA2?id=llama2-模型快速部署)


本期我们介绍了【关于Llama 2】你需要知道的那些事儿。Llama系列模型由于其体积小且开源的特性,在AI社区的热度和口碑都居于高位,可以预见短期内将有更多基于Llama 2定制化的微调模型和相关服务涌现。


下期文章我们将聚焦“LangChain+大模型+向量数据库”在云端的部署和推理,敬请期待~


【参考文献】

[1] Llama 2 官方公告:https://ai.meta.com/llama/

[2] Llama 2 官方论文:https://huggingface.co/papers/2307.09288

[3] "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints" by Google Research:https://arxiv.org/pdf/2305.13245.pdf

[4] "Llama 2: an incredible open LLM" by Nathan Lambert: https://www.interconnects.ai/p/llama-2-from-meta

[5] Llama 2 models: https://huggingface.co/meta-llama

[6] Text generation web UI github: https://github.com/oobabooga/text-generation-webu

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

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

相关文章

免费的png打包plist工具CppTextu,一款把若干资源图片拼接为一张大图的免费工具

经常做游戏打包贴图的都知道,要把图片打包为一张或多张大图,要使用打包工具TexturePacker。 TexturePacker官方版可以直接导入PSD、SWF、PNG、BMP等常见的图片格式,主要用于网页、游戏和动画的制作,它可以将多个小图片汇聚成一个…

java八股文面试[java基础]——CGLIB动态代理与JDK动态代理

CGLIB CGLIB简介: 什么是CGLIB CGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端&#xff…

iPhone 15预计在A16仿生芯片上运行,性能将有何提升?

苹果最新的移动芯片A17仿生芯片无疑让人兴奋不已,该芯片将成为今年一些iPhone 15机型的驱动力。A17基于3nm处理器,这是第一款提出这一主张的移动硅,由于其更紧凑的尺寸,它有望在性能和能效方面都有所提高。今年秋天买一部A17供电的…

【Java架构-包管理工具】-Maven私服搭建-Nexus(三)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具,在此咱们由浅入深,分三篇文章(Maven基础、Maven进阶、私服搭建)来深入学习Maven,此篇为开篇主要介绍Maven私服搭建-Nexus 文章目录 本文摘要1. Nexus安装…

爬虫逆向实战(二十)--某99网站登录

一、数据接口分析 主页地址:某99网站 1、抓包 通过抓包可以发现登录接口是AC_userlogin 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”可以发现txtPassword和aws是加密参数 请求头是否加密? 无响应是否加密? 无…

Win11本地安装Ubuntu 22.04 双系统简易教程

1.制作启动U盘 首先找到一个硬盘容量不小于4G的空U盘,需要对其进行格式化。 然后下载Ubuntu 22.04的iso文件到本地。 Ubuntu 22.04.1 LTS 中国地区下载链接 下载 UltraISO并制作启动U盘 UltraISO的下载地址 下载免费试用版 选择安装地址,无脑下一步…

Error running ‘FileApp‘: Command line is too long. Shorten command line for

报错如下 Error running FileApp: Command line is too long. Shorten command line for 解决方案如下: 打开运行配置 点击上面,默认是收起来的,点击下,下面选择标注的红色的, 重新运行,可以正常启动了

首发!2025年超500万辆规模,揭榜「融合泊车」TOP10玩家

作为行泊一体赛道关键的一环,融合泊车(基于全景环视超声波雷达)及后续的高阶泊车方案再次成为行业关注的焦点。 除了部分头部车企自研之外,第三方供应商的市场机会也在扩大。一方面,泊车厂商也在拓展行泊一体方案&…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI(美国) 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码,点击登录。登录成功,如下 3、和ChatGPT对话 开始…

专题-【稀疏矩阵的三元组存储】

三元组存储表示: 列序递增转置法:

计算机竞赛 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 🔥 优质竞赛项目系列&#xf…

CSS中如何实现元素之间的间距(Margin)合并效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 外边距合并的示例:⭐ 如何控制外边距合并:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff…

sizeof和strlen的对比

文章目录 🚩前言🚩sizeof🚩strlen🚩sizeof和strlen对比 🚩前言 很多小白在学习中,经常将sizeof和strlen弄混了。本篇文章,小编讲解一下sizeof和strlen的区别。🤷‍♂️ &#x1f6a9…

windows查看/删除DNS缓存

一、查看DNS缓存 打开CMD,输入ipconfig/displaydns 二、删除DNS缓存 打开CMD,输入ipconfig/flushdns

基于ssm的水果蔬菜商城java jsp网上购物超市mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于ssm的水果蔬菜商城 系统有2权限:管理…

11-Manager 和 模型Model

准备工作: 一. Manager 库: Manager: 用于管理相关操作端命令和使用相关操作端命令 (1). 安装flask-script: pip install flask-script2.0.3 (2). 在app.py中 包装 app from apps import create_app# Manager类用于管理相关操作端命令和使用相关操作端命令 from flask_scrip…

记录Taro大坑2丢失api无法启动

现象 解决方案 看了很多。很多说要改成一致的版本号。其实没什么用。 正确方案 再新建一个模板跑起来对比config的配置,以及package.json发现关闭预编译即可。预编译导致api丢失

AR室内导航技术之技术说明与效果展示

随着科技的飞速发展,我们周围的环境正在经历着一场数字化的革命。其中,AR室内导航技术以其独特的魅力,为我们打开了一扇通往全新数字化世界的大门。本文将为您详细介绍这一技术的实现原理、工具应用以及成品展示,带您领略AR室内导…

【Liunx】操作系统

操作系统 1.概念2.如何理解管理 1.概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括: 内核(进程管理,内存管理,文件管理,驱动管理) 其他程…

vscode C++17便捷配置教程(懒人版)

环境链接 以上是已经配置好的c17环境链接,直接下载解压即可(注意文件路径上不要带有中文) 下载解压之后按照msys64-mingw64-bin路径打开 然后单击该路径右方空白区域可直接复制路径 然后点击开始菜单搜索“环境变量“并打开(如…