Llama 2:开放基础和微调的聊天模型

发表
AKAK 提交
作者: Hugo Touvron, louis MartinLouis Martin, Kevin Lee StoneKevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay BNikolay Bashlykov, Soumya Batra, PrajjwalPrajjwal Bhargava, Shruti Bhosale, Dan Bikel, Lukas BlecherLukas Blecher, Cristian Canton Ferrer, Moya Chen, GuillemGuillem Cucurull, David Esiobu, Jude FernandesJude Fernandes, Jeremy FuJeremy Fu, Wenyin Fu, Brian Fuller, Cynthia Gao, Vedanuj GoswamiVedanuj Goswami, Naman GoyalNaman Goyal, Anthony Hartshorn, Saghar HosseiniSaghar Hosseini, Rui HouRui Hou, Hakan Inan, Marcin KardasMarcin Kardas, Viktor Kerkez, Madian Khabsa, Isabel Kloumann, Artem Korenev, Punit Singh Koura, Marie-Anne Lachaux, Thibaut Lavril, Jenya Lee, Diana Liskovich, Yinghai Lu, Yuning MaoYuning Mao, Xavier MartinetXavier Martinet, Todor MihaylovTodor Mihaylov, Pushkar Mishra, Igor MolybogIgor Molybog, Yixin NieYixin Nie, Andrew PoultonAndrew Poulton, Jeremy Reizenstein, Rashi Rungta, Kalyan Saladi, Alan Schelten, Ruan Silva, Eric Michael SmithEric Michael Smith, Ranjan Subramanian, Ellen TanXiaoqing Ellen Tan, Binh Tang, Ross TRoss Taylor, Adina WilliamsAdina Williams, Jian Xiang Kuan, Puxin Xu, Zheng Yan, Iliyan Zarov, Yuchen ZhangYuchen Zhang, Angela FanAngela Fan, Melanie Kambadur, Sharan Narang, Aurelien Rodriguez, Robert Stojnic, Sergey EdunovSergey Edunov, ScialomThomas Scialom

摘要

AI 生成总结
Llama 2,一系列预训练和微调的大型语言模型,在对话任务中取得了优于开源替代品的性能,并提供了安全增强功能。
在这项工作中,我们开发并发布了 Llama 2,这是一个预训练和微调的大型语言模型(LLM)集合,其规模从 70 亿到 700 亿参数不等。我们微调的 LLM,称为 Llama 2-Chat,针对对话用例进行了优化。我们在我们测试的大多数基准测试中,我们的模型都优于开源聊天模型,并且根据我们对有用性和安全性的人工评估,它可能是闭源模型的合适替代品。我们提供了 Llama 2-Chat 的微调和安全改进方法的详细描述,以便社区能够基于我们的工作进行构建,并为 LLM 的负责任开发做出贡献。
查看 arXiv 页面查看 PDF

评论

Moushmi BanerjeeMoushmi Banerjee
此评论已隐藏。
Avneesh MishraAvneesh Mishra

介绍了下一代 LLaMa (LLaMa 2) 自回归 Transformer:更好的数据清理、更长的上下文长度(更多 tokens)和分组查询注意力 (GQA - K 和 V 投影在多个头之间共享)。在预训练数据上进行自监督学习以获得 LLaMa 2,为初始 LLaMa-2-chat 进行监督微调,通过 RLHF(使用 PPO 的拒绝采样)迭代改进聊天模型 - 人工反馈用于安全和奖励模型。与 LLaMA-1 相同的分词器(BPE SentencePiece,32k tokens)。优于 Falcon 和 MPT 等开源模型,但与 GPT-4 和 PaLM-2-L 性能(闭源模型)不匹配。LLaMA-2-chat 的微调:监督微调 (SFT) 使用高质量微调数据(众包/标注)- 训练时将用户提示归零(仅在答案 tokens 上反向传播);以及 RLHF。具有人类反馈的强化学习 (RLHF) 具有:使用聊天模型(带有分类头,用于自回归下一个 token 预测,替换为用于标量奖励预测的回归头)制作的奖励模型、修改后的(用于响应区分的可变边距)二元排序损失、用于 70B 模型的拒绝采样微调(提炼为较小的模型),然后是 PPO(随着标注奖励批次的到来),奖励具有安全性和帮助性。为 RLHF 后的多轮一致性提出幽灵注意力 (GAtt)(上下文蒸馏以记住先前/初始指令)。测试,除了传统的安全性、帮助性、偏见和真实性分析外,还包括红队演练(模拟真实世界的攻击和专业演员利用安全威胁)数据 - 用于微调(反馈训练)。与 MPT、Vicuna、Falcon、PaLM 和 ChatGPT 相比,违规百分比更低,安全性和帮助性评级更高。在 MMLU(大规模多任务语言理解)、问答、Human-Eval 和 MBPP(代码生成)、自然问题、SQUAD(理解)、AGI Eval 和数学推理方面优于其他开源模型。附录中有进一步的分析和模型卡。来自 Meta。

> 链接: 网站, Meta AI 博客文章, arxiv, Meta 新闻, GitHub (旧版 LLaMA - v1)

Julien ChaumondJulien Chaumond

链接回 原始 LLaMA 论文(来自 2023 年 2 月) 以供参考

Mishig DavaadorjMishig Davaadorj

试用 70b 模型的演示空间:https://huggingface.co/spaces/ysharma/Explore_llamav2_with_TGI

image.png

Tornike OnoprishviliTornike Onoprishvili

这个模型来自一个更好的时代,那时 OpenAI 还是,嗯,开放的。 :')

image.png

wenweiwenwei

.

Jerome LOTJerome LOT

Meta 新发布的 LLM Llama 2 不是开源的
https://www.theregister.com/2023/07/21/llama_is_not_open_source/

Lewis TunstallLewis Tunstall

我对论文中的 RL 调优方法有一些疑问,其中一位作者 (@louismartin) 友好地提供了富有洞察力的答案,这些答案可能对其他进行 RLHF 的团队有用。以下内容经他允许转载。

问: 您能分享有关用于 RL 调优的数据集的任何细节吗?特别是,它是否由人类与您的中间 RLHF 检查点交互的多轮对话组成,还是其他内容?我也很想知道您是否使用了任何开放的偏好建模数据集作为 RL 调优的提示来源以及数量。
答: 我们确实使用了人类与我们的中间 RLHF 检查点交互的多轮对话。我们使用了一些开放的偏好建模数据集作为提示来源,但我们意识到大部分收益来自我们收集的数据。可能是因为它与我们的模型有关。
[Lewis 注] 我认为这部分解释了为什么我们至今没有看到大量开源 RLHF 模型 - 收集与分布相关的偏好标签本质上是昂贵的,尤其是在 Meta 所做的规模上。

问: 关于您用于 RL 调优的数据集的一个后续问题:它的大小与您的 SFT 数据集相似还是大得多?
答: 我们在拒绝采样中使用了所有奖励建模提示,并在 PPO 中使用了大部分,但我没有确切的比例。
[Lewis 注] 很高兴看到人们可以以这种方式重复使用偏好数据进行 RL 调优。相比之下,InstructGPT 论文煞费苦心地确保所有提示在 SFT/RM/RL 中都是唯一的,但这对于对话应用程序可能不是必需的。

问: 在您的拒绝采样方法中,您说您“使用选定的输出进行梯度更新”。我是否理解正确,您以“在线”方式执行此操作,即获取一批提示,生成/排名 K 个样本,然后进行反向传播?如果这是正确的,您能分享有关您的批量大小的任何细节吗?
答: 不,对于拒绝采样,我们在整个数据集上使用相同的检查点进行采样,为每个提示选择最佳输出,然后在整个数据集上使用最佳输出对检查点进行一次微调。
[Lewis 注] 这非常令人兴奋,因为拒绝采样调优比 PPO(及其所有不稳定性 🙃)的实现要简单得多!

ramkrishramkrish

大家好................我尝试使用 llama2 从给定的上下文中提取问答.............. 如果您对实现有任何想法,请与我分享.............................

Lewis TunstallLewis Tunstall

我正在分享与 Kevin Stone (@kevinleestone) 通信中的更多见解,这次是关于 PPO 的。与之前一样,以下内容经他允许转载。

问: Louis 提到您在 Meta Safety / Helpfulness 奖励建模语料库上进行了微调。您是否只是简单地使用每个对话的 N-1 轮作为提示,并在 Meta Safety / Helpfulness 的全部约 150 万个示例上进行训练?此外,我很好奇您在 Meta 和开源数据集之间使用了什么样的混合(如果有的话) - 这是否与您描述的奖励建模的比例相同?
答: 我们使用了与我们用于奖励建模的分布大致相同的 N-1 轮。
[Lewis 注] 这与 InstructGPT 和 Anthropic 的论文等现有文献大相径庭,后者通常在小得多的规模上运行 PPO,即约 10 万个提示与 Meta 语料库中的 150 万个提示相比!

问: 在生成过程中,您是否使用了无偏采样(即 T=1,无核采样)?我们发现偏离无偏采样可能会导致负 KL 散度等病理,我很好奇您是否也观察到了这一点。
答: 对于生成,我们使用了 temp=1,没有其他采样技巧。我运行了一些关于这些的小实验,并没有看到任何收益。我的直觉是,在线 RL 擅长以一流的方式“修复”采样,而不是更像启发式的 top-p 和重复惩罚。我这么说是因为我能够使用 PPO 训练一个 4b 模型,并修复所有重复问题,即使使用简单的 t=1 采样也是如此。
[Lewis 注] 有趣的故事:PPO 对(看似)无害的事物(如文本生成启发式方法)的敏感性是我失眠了很多晚的许多“bug”之一 🤪。我们真的需要 NLP 版本的 Andy Jones 关于调试 RL 系统的优秀博客文章:https://andyljones.com/posts/rl-debugging.html

问: 对于 KL 惩罚,您是否尝试过 Schulman 的博客文章 (http://joschu.net/blog/kl-approx.html) 中提出的替代估计?我们没有发现这些替代方案有太大的积极影响,但我们从其他团队那里听说它确实有。
答: 我在小规模实验中使用较低方差的 KL 估计时遇到了稳定性问题,所以我默认使用论文中描述的简单 KL 近似。

问: 在 PPO 期间,您注意到生成是一个瓶颈(我们的经验也是如此!),并且您“通过在生成之前将模型权重整合到每个节点一次,然后在生成后释放内存来缓解这种情况”。我是否理解正确,您基本上在每个 PPO 步骤后保存一个检查点,释放内存以运行推理,然后从检查点恢复训练?由于保存/加载大型模型本身也有开销,我很好奇这比您报告的朴素生成 20 倍的减速有多大的增益?
答: 关于我们的 PPO 训练的一些更多细节:
- 对于 70b 模型,我们使用 8 的张量并行性
- 我们使用 FSDP 进行梯度步骤,它依次收集每层的权重,然后释放内存
- 使用 NCCL 通过 4x100gbps EFA 互连将所有权重收集和释放到所有节点大约需要 5 秒
- 我们编写了一个小函数,该函数使用与训练步骤中使用的类似 NCCL 代码,将非 FSDP(整合)模型逐层直接初始化到 GPU 内存中
- 一旦所有权重都本地化到每个节点,生成速度就快了大约 20 倍 - 我们不必在生成过程中的每个前向传递中支付 5 秒的税,而只需预先支付一次。
- 除了使用 bf16(我们在训练期间也使用)之外,我们没有使用任何其他量化方案。
- 生成完成后,我们释放整合模型,并继续使用标准 FSDP 进行评分和初始策略对数概率(这些每个只需要一次前向传递)和 ppo 梯度更新(这只需要 8 次前向和后向传递)。
[Lewis 注] 据我所知,没有开源 RLHF 框架应用这种巧妙的优化类型 - 他们应该这样做!

Pramit ChoudharyPramit Choudhary

> Meta 新发布的 LLM Llama 2 不是开源的
> https://www.theregister.com/2023/07/21/llama_is_not_open_source/

关于许可限制,每月 7 亿用户仍然是一个非常高的目标。

JiffZhangJiffZhang

嗨,我想知道是否有任何共享的管道可以帮助重现 Llama2 的报告结果。

Huseyin ABANOZHuseyin ABANOZ

我对 Gatt 方法有一些疑问。我相信它没有得到清楚的解释。如果任何对 Gatt 方法有适当理解的人能够回答以下问题,我将不胜感激,社区也会感激:
- 实际上如何应用“使用最新的 RLHF 模型从此合成数据中采样”?我们有用户和助手消息的对话。RLHF 模型需要用户消息来采样答案,但没有用户消息。如果上下文对话用于采样用户问题,那么提示会是什么样的?采样的用户问题是否会包含指令?
- 所述过程如何类似于拒绝采样?
- 在给定数据集中将指令连接到用户消息,例如表现得像某人,不会改变给定的答案。这不是问题吗?

有足够的资源来理解上下文蒸馏和拒绝采样。因此,任何好心回答这些问题的人都不需要费心解释它们。

提前感谢!

Xavier MartinetXavier Martinet
论文作者

我可以回答这些问题。

> 实际上如何应用“使用最新的 RLHF 模型从此合成数据中采样”?

具体来说,您定义您的系统提示,例如“表现得像拿破仑,他喜欢打板球”。您进行对话,对于每个用户输入,您都以您的系统提示“表现得像拿破仑,他喜欢打板球”开始,因此助手的回复受到条件限制,以遵循用户指令。

用户:表现得像拿破仑,他喜欢打板球。<用户_消息_1>
助手:<回复_1>
用户:表现得像拿破仑,他喜欢打板球。<用户_消息_2>
助手:<回复_2>
...
用户:表现得像拿破仑,他喜欢打板球。<用户_消息_N>
助手:<回复_N>

在训练时,您将数据集定义为如下:

系统:表现得像拿破仑,他喜欢打板球。
用户:<用户_消息_1>
助手:<回复_1>
用户:<用户_消息_2>
助手:<回复_2>
...
用户:<用户_消息_N>
助手:<回复_N>

助手的每个回复都按设计以系统提示为条件;模型将学习在每个步骤关注系统提示

Xavier MartinetXavier Martinet
论文作者

拒绝采样包括在特定对话上进行微调;我们在这里也做同样的事情,对话格式化为“系统提示”人为地调节助手回复

Huseyin ABANOZHuseyin ABANOZ

@javier-m 感谢您的回答。您解释得很好。我可以问一些后续问题吗:

> 我们现在有了一个上下文对话和用于微调模型的样本...

考虑到您给出的示例对话,什么是上下文对话和样本?

您能否详细说明将先前轮次的损失归零的问题?

提前感谢!

Xavier MartinetXavier Martinet
论文作者

上下文对话指的是我认为的系统提示,在这种情况下,我们有 N 个样本:

[系统:](系统:表现得像拿破仑,他喜欢打板球。
用户:<用户_消息_1>
助手:<回复_1>

[系统:](系统:表现得像拿破仑,他喜欢打板球。
用户:<用户消息1>
助手:<回复1>
用户:<用户
消息2>
助手:<回复
2>
```

[系统:](系统:表现得像拿破仑,他喜欢打板球。
用户:<用户消息1>
助手:<回复1>
用户:<用户
消息2>
助手:<回复
2>
...
用户:<用户消息N>
助手:<回复_N>
```

对于每个样本 S,在训练时,我们传递上下文:

[系统:](系统:表现得像拿破仑,他喜欢打板球。
用户:&lt;用户_消息_1&gt;
助手:&lt;回复_1&gt;
用户:&lt;用户_消息_2&gt;
助手:&lt;回复_2&gt;
...
用户:&lt;用户_消息_S-1&gt;
助手:&lt;回复_S-1&gt;
用户:&lt;用户_消息_S&gt;

我们训练 助手:&lt;回复_S&gt; 上的概率:所有之前的 tokens 的损失都归零,然后您计算 ground-truth(实际的 &lt;回复_S&gt;)和预测的 tokens P(t&gt;k|t0, ..., tk) 之间的交叉熵,其中 k 是序列的长度

Julien BLANCHONJulien BLANCHON
Llama 2:使用安全和开放基础重新定义大型语言模型

https://cdn-uploads.huggingface.co/production/uploads/6186ddf6a7717cb375090c01/imSBFSDjHIbJBBG_VmlkH.mp4

链接 🔗:

👉 订阅: https://www.youtube.com/@Arxflix
👉 推特: https://x.com/arxflix
👉 LMNT (合作伙伴): https://lmnt.com/

作者:Arxflix
9t4iCUHx_400x400-1.jpg

Trust TumbaTrust Tumba

Trust Tumba 是谁?

Trust TumbaTrust Tumba

我不认识他,哈哈