4.19日凌晨正准备睡觉时,突然审稿项目组的文弱同学说:Meta发布Llama 3系列大语言模型了
此次发布的Llama 3有两个版本:8B 和 70B。由于预训练和指令微调的加强,模型在推理、代码生成和指令跟踪等方面的能力得到比较大的提高,最终在多个榜单上超越Google的gemma 7B、Mistral 7B(当然了,我还是得说一句,榜单肯定能够说明一些东西,但不代表全部)
为了更好的评估llama3的性能,Meta开发了一套新的高质量人类评估集。该评估集包含 1,800 个prompt,涵盖 12 个关键用例:寻求建议、头脑风暴、分类、封闭式问答、编码、创意写作、提取、塑造角色/角色、开放式问答、推理、重写和总结
且为了防止模型在此评估集上过度拟合,即使Meta的建模团队也无法访问它(说白了,保证评估数据集中的数据不被模型事先学到)
且llama3的预训练模型这些榜单上PK同等规模的其他模型时,亦有着相对突出的表现
1.2.1 模型架构:继续transformer解码器架构、分组查询注意力、8K上下文
为了提高推理效率,Llama 3在 8B 和 70B 都采用了分组查询注意力(GQA)
在 8,192 个token的序列上训练模型,且通过掩码操作以确保自注意力不会跨越文档边界这点相比llama 2是一个进步,毕竟llama 2的上下文长度还只有4K,所以我司审稿项目组在用平均长度8.5K的paper-review数据集去微调llama2时,不得已必须用上longlora/longqlora这类扩展长度的技术(详见:七月论文审稿GPT第2版:用一万多条paper-review数据微调LLaMA2 7B最终反超GPT4)
Llama 3 经过超过 15T token的预训练(比 Llama 2 使用的数据集大七倍,并且包含四倍多的代码,要知道,llama 2的训练数据才2T个token,即2万亿个token),这一些数据全部从公开来源收集
Llama 3 预训练数据集的中,其中有超过5%的部分由涵盖 30 多种语言的高质量非英语数据组成。当然,大概率上,这些语言的性能水平不会与英语相同(原因主要在于其只占5%罗)
为了确保 Llama 3 接受最高质量数据的训练,他们还开发了一系列数据过滤管道。这些管道包括使用启发式过滤器、NSFW 过滤器、语义重复数据删除方法和文本分类器来预测数据质量 且使用 Llama 2 作为文本质量分类器 为 Llama 3 生成训练数据
还进行了广泛的实验,以评估在最终预训练数据集中混合不同来源的数据的最佳方法。这些实验使可选择一个数据组合,确保 Llama 3 在各种用例(包括琐事问题、STEM、编码、历史知识等)中表现良好
为了有效利用 Llama 3 模型中的预训练数据,他们投入了大量精力来扩大预训练规模。具体来说
为下游基准评估制定了一系列详细的缩放法则。这些缩放法则使我们也可以选择最佳的数据组合,且使我们也可以在实际训练模型之前预测最大模型在关键任务上的性能(例如,在 HumanEval 基准上评估的代码生成 - 见上文) 编辑 比如在 Llama 3 的开发过程中,对缩放行为进行了一些新的观察。例如,虽然 8B 参数模型的 Chinchilla 最佳训练计算量对应于约 200B 个token,但发现即使在模型建立之后,模型性能仍在继续提高接受了两个数量级以上的数据训练 编辑 在对多达 15T token进行训练后,8B 和 70B 参数模型都继续以对数线性方式改进。较大的模型可以用较少的训练计算来匹配这些较小模型的性能,但较小的模型通常是首选,因为它们在推理过程中效率更高
为了训练Llama 3的400B的版本,Meta结合了三种类型的并行化:数据并行化、模型并行化和管道并行化(关于这三种并行训练方法的介绍,可以参见此文:《大模型并行训练指南:通俗理解Megatron-DeepSpeed之模型并行与数据并行》) 当同时在 16K GPU 上进行训练时,可实现每个 GPU 超过 400 TFLOPS 的计算利用率,当然,最终在两个定制的24K GPU 集群上进行了训练 且为了最大限度地延长 GPU 的正常运行时间,开发了一种先进的新训练堆栈,可以自动执行错误检测、处理和维护。还极大地改进了硬件可靠性和静默数据损坏检测机制,并且开发了新的可扩展存储系统,以减少检查点和回滚的开销。这些改进使总体有效培训时间超过 95% 综合起来,这些改进使 Llama 3 的训练效率比 Llama 2 提高了约三倍
为了充分释放预训练模型在聊天用例中的潜力,我们还对指令调整办法来进行了创新。我们的后训练方法是监督微调SFT、拒绝采样、近端策略优化PPO(关于PPO详见此文《强化学习极简入门:通俗理解MDP、DP MC TC和Q学习、策略梯度、PPO》的第4部分),和直接策略优化DPO的组合(关于DOP则见此文:《RLHF的替代之DPO原理解析:从RLHF、Claude的RAILF到DPO、Zephyr》)
SFT 中使用的prompt质量以及 PPO 和 DPO 中使用的偏好排名对对齐模型的性能有着非常大的影响。最终,在模型质量方面的一些最大改进来自于仔细整理这一些数据并对人类标注者提供的标注或注释进行多轮质量保证
通过 PPO 和 DPO 从偏好排名中学习也极大地提高了 Llama 3 在推理和编码任务上的性能。即如果你向模型提出一个它难以回答的推理问题,该模型有时会产生正确的推理轨迹:模型知道怎么产生正确的答案,但不知道怎么选择它。但对偏好排名的训练使模型能够学习如何明智的选择它
提供了新的信任和安全工具,包括 Llama Guard 2 和 Cybersec Eval 2 的更新组件,并引入了 Code Shield——一种用于过滤 LLM 生成的不安全代码的推理时间防护栏
红队方法利用人类专家和自动化方法来生成对抗性提示,试图引发有问题的响应。例如,我们应用全面的测试来评估与化学、生物、网络安全和其他风险领域相关的滥用风险
所有这些努力都是迭代的,并用于为正在发布的模型进行安全微调提供信息。可以在模型卡中仔细地了解我们的努力
Llama Guard 模型旨在成为快速响应安全的基础,并能根据应用需求轻松进行微调以创建新的分类法。作为起点,新的 Llama Guard 2 使用最近宣布的MLCommons 分类法,努力支持这一重要领域行业标准的出现
此外,CyberSecEval 2 在其前身的基础上进行了扩展,添加了对 LLM 允许滥用其代码解释器的倾向、攻击性网络安全功能和对提示注入攻击的敏感性的测量(在我们的技术论文中知道更多信息)
最后,我们引入了 Code Shield,它增加了对 LLM 生成的不安全代码的推理时过滤的支持。这可以缓解不安全代码建议、代码解释器滥用预防和安全命令执行方面的风险
更多参见负责任使用指南(RUG),且正如在 RUG 中概述的那样,Meta建议根据适合应用程序的内容指南检查和过滤所有输入和输出
Llama 3 很快将在所有主要平台上提供,包括云提供商、模型 API 提供商等等。Llama 3 将无处不在
基准测试显示,标记生成器提高了标记效率,与 Llama 2 相比,生成的标记最多减少了 15%。此外,Llama 3 8B 现在也添加了组查询注意 (GQA)。结果观察到,尽管与 Llama 2 7B 相比,模型的参数多了 1B,但改进的分词器效率和 GQA 有助于保持与 Llama 2 7B 相同的推理效率。
有关如何利用所有这些功能的示例,请查看Llama Recipes,其中包含所有的开源代码,这些代码可用于从微调到部署再到模型评估的所有内容
llama 3中最大的模型有超过 400B 个参数,不过这个模型仍在训练中(后续,Meta将发布多个具有新功能的模型,包括多模态、以多种语言交谈的能力、更长的上下文窗口和更强的整体功能。且后续还将发布一份详细的研究论文)
我一开始还挺好奇,他到底用的啥技术,深入一了解,原来所用的技术来自国外的一家AI初创公司Gradient AI,且他们也在不断把LLama的长度拉长
首先,微调得到一个加长版的模型 如本部分开头提到的,“mattshumer/Llama-3-8B-16K”的huggingface页面上有介绍到把rope_theta参数扩大到2倍(因为对这个模型而言,长度从8K到16K扩展2倍,则对应参数扩大2倍,而Llama 3的rope_theta设置的50 0000,故rope_theta从50 0000扩大到100 0000)而这个rope_theta参数其实指的是位置编码概念里的“base”,也就是以前大多模型设置为10000的那个参数,并不是旋转角度 编辑
“还记得RoPE的构造基础是Sinusoidal位置编码?可以改写为下面的公式「以下内容引用自此文的2.1.2节(注,dear friends,莫慌,如果不太理解是个啥意思,或者你想理解下述公式的来龙去脉,请详看此篇详解位置编码的文章 )
有了扩展好上下文的微调模型之后,使用开源工具Mergekit比较微调模型和基础模型,提取参数的差异成为LoRA
同样使用Mergekit,即通过下述代码可以把提取好的LoRA合并到其他同架构模型中了(代码地址为:,作者为Eric Hartford,这段代码是一个Python脚本,用于将多个适配器模型合并到一个基础模型中,并能选择将合并后的模型推送到模型仓库或仅保存到本地目录。代码使用了`transformers`和`peft`库来处理模型和适配器,`torch`用于模型的加载和操作,`os`用于文件路径处理,`argparse`用于解析命令行参数)
误把这个参数曲解为RoPE概念中的“旋转角度theta”,而如果是按照位置插值的思路,要扩展长度理当是缩小旋转角度而不是放大才对,所以就去看这个参数具体在代码中是负责什么部分发现是参数赋值进去以后,是RoPE概念中的“base”(而非RoPE概念中的旋转角度theta),从而也就顺理成章的得把base扩大到2倍,对应到具体的方法中,就是ntk-aware插值(对base做放大)
再后来,Gradient AI再通过类似的方式把rope_theta继续放大,使得其长度能够达到100万,具体实现方法是:
1. 调整位置编码:用NTK-aware插值初始化RoPE theta的最佳调度,来优化,防止扩展长度后丢失高频信息
那要把长度扩展到100万的话,则应该是把rope_theta这个参数扩大: 从50万扩大“100万/8000 = 125倍 ”,毕竟长度扩展多少倍则对应的这个rope_theta扩大多少倍
2. 渐进式训练:使用UC伯克利Pieter Abbeel团队提出的Blockwise RingAttention方法扩展模型的上下文长度 且团队通过自定义网络拓扑在Ring Attention之上分层并行化,更好地利用大型GPU集群来应对设备之间传递许多KV blocks带来的网络瓶颈,最终使模型的训练速度提高了33倍
课程咨询可找苏苏老师VX:julyedukefu008或七月在线其他老师
- 2024-05-22【48812】不怕雾霾!美国新式“隐形”空气过滤器 能阻挠90%污染颗粒、细菌
- 2024-05-22【48812】大鹏职康展开“扇来清凉”夏天奶油胶电扇DIY活动
- 2024-05-22杭州科百特公司研发建设过滤分离产业链
- 2024-05-22上海水展访谈录:百年品牌汉斯希尔(SYR)
- 2024-05-22【48812】科技赋能!新式泊车防溜设备保证列车安全
- 2024-05-22假期结束别忘了对油烟净化器全方面检查、清洗维护保养!