# 大模型技术实践（二）｜关于Llama 2你需要知道的那些事儿

> 作者/来源: UCloud官方/历史归档
> 发布时间: 2023-08-24T03:15:33.000Z
> 分类: AI专区
> 标签: 大模型, Llama 2, Transformer
> 原文链接: http://117.50.162.249:3000/yun/articles/2610

---

在上期文章中，我们简要回顾了[Llama模型的概况](http://mp.weixin.qq.com/s?__biz=MjM5NDE0MjI4MA==&mid=2656317442&idx=1&sn=ca949f86bfcb8780ad57e1994afe26c5&chksm=bd2cd1258a5b5833ebd04f459d3d9927cb4dfdafb405aecd0dbb24dc3a5a613db5f1e660d7b0&scene=21#wechat_redirect)，本期文章我们将详细探讨【关于Llama 2】，你需要知道的那些事儿。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/19f6fc41813d7960.png)

**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万条人工标注的数据下训练而成。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/56fcaf598981d1b4.png)

图1：Llama 2模型概览[1]

 

**1.2 模型评估**

从模型评估上看，Llama 2在众多的基准测试中，如推理、编程、对话能力和知识测验上，都优于一代Llama和现有的开源大模型。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/a115303f7a712b95.png)

图2：Llama 2在不同基准测试上的得分

虽然Llama 2-70B在推理任务上表现接近GPT-3.5，但是在综合性能上还是无法与OpenAI的GPT-4和Google的PaLM-2-L等闭源大模型相媲美，尤其在编程基准上远落后于两者。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/f82eb3cb08a3db95.png)

图3：Llama 2、GPT和PaLM三者在不同基准测试上的得分

**02**

**解锁Llama 2的模型结构**

**2.1 Llama 2模型架构**

Llama 2在预训练设置和模型架构上和一代模型非常相似。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/22d6c2656e1bdcf5.png)

如图所示，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。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/93466cf7d475668f.png)

图6: Llama 2使用GQA[2]

自回归模型的解码通过缓存序列先前标记的键（K）值（V）对来加速注意力的计算。然而随着Batch Size和上下文窗口的增大，多头注意力模型（Multi-head Attenrion，MHA）的内存成本会随之显著增大。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/dbe58b9e61e776e8.png)

图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的优化处理。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/5ca46c865bd26d75.png)

图8: Llama 2-chat的微调过程[1]

Meta一共迭代了5个RLHF版本，分别从V1-V5，但仅公布了最新的V5版本。V5版本迭代的步骤下图所示。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/284e2bbe68d1168f.png)

图9: RLHF-V5迭代流程



** ****Quality Is All You Need**

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/c778629f9be4105a.png)

图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模型。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/7e378a45ec8d4e60.png)



** ****安装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目录下，文件结构如下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/41fc4dda7ea3e42a.png)

**3.2 构建镜像**

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

（https://docs.ucloud.cn/uhub/guide）

**1. 首先，在Uhub上创建镜像库**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/105147e88e7cb0f2.png)

**2. 其次，在云主机创建镜像，并打标**

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）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/dbfaf9182649cf0d.png)

**2. 创建UK8S容器云**

参考文档（https://docs.ucloud.cn/uk8s/），创建集群时，Node的配置可参照下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/f274fb55c75c7292.png)

 

集群创建之后，点击**“详情”**按钮，将**“外网凭证”**拷贝到～/.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进行对话了。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/wechat/images/48826576cffbb78d.png)

此外，**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-webui