欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Llama 3 开放源代码!Magic Hitch 社区动手推理、部署、微调和评估

最编程 2024-04-30 10:03:25
...

导读

今天,Meta发布了 Meta Llama 3系列,是LLama系列开源大型语言模型的下一代。在接下来的几个月,Meta预计将推出新功能、更长的上下文窗口、额外的模型大小和增强的性能,并会分享 Llama 3 研究论文。

网络异常,图片无法展示
|

来源:Llama 3 github repo

本次Meta Llama 3系列开源了两个尺寸参数量的模型权重,分别为8B 和 70B 参数,包含预训练和指令微调,Llama 3在各种行业基准上展示了很先进的性能,并提供了一些新功能,包括改进的推理能力。Meta希望Llama 3推动人工智能的下一波创新浪潮——从应用程序到开发人员工具,从评估到推理优化等等,热切的期待社区的反馈。

Meta的近期的目标是使 Llama 3 成为多语言和多模态、同时具有更长的上下文,并继续提高推理和编码等核心 LLM 能力的整体性能。同时Llama 3 最大的模型(400B)在训练中,整体趋势令人兴奋,研究团队也发布一些快照让用户先睹为快。

网络异常,图片无法展示
|

来源:https://ai.meta.com/blog/meta-llama-3/

主要特点和改进

性能

新的 8B 和 70B 参数 Llama 3 模型性能上是 Llama 2 的重大飞跃,由于预训练和训练后的改进,Llama 3 预训练和指令微调模型在同参数规模上,表现非常优秀。post-training的改进大大降低了错误拒绝率,改善了一致性,并增加了模型响应的多样性。同时还看到了推理、代码生成和指令跟踪等功能的极大改进,使 Llama 3 更加易于操控。

网络异常,图片无法展示
|

来源:https://ai.meta.com/blog/meta-llama-3/

在 Llama 3 的开发过程中,研究团队研究了标准基准上的模型性能,并寻求优化现实场景的性能。为此,研究团队开发了一套新的高质量人类评估集。该评估集包含 1,800 个提示,涵盖 12 个关键用例:寻求建议、头脑风暴、分类、封闭式问答、编码、创意写作、提取、塑造角色/角色、开放式问答、推理、重写和总结。为了防止Llama 3在此评估集上意外过度拟合,即使Llama 3自己的建模团队也无法访问它。下图显示了针对 Claude Sonnet、Mistral Medium 和 GPT-3.5 对这些类别和提示进行人工评估的汇总结果。

网络异常,图片无法展示
|

来源:https://ai.meta.com/blog/meta-llama-3/

人类注释者根据此评估集进行的偏好排名突显了Llama 3 70B 指令跟踪模型与现实场景中同等大小的竞争模型相比的强大性能。

网络异常,图片无法展示
|

为了开发出色的语言模型,研究团队认为创新、扩展和优化以实现简单性非常重要。在 Llama 3 项目中采用了这一设计理念,重点关注四个关键要素:模型架构、预训练数据、扩大预训练和指令微调。

模型架构

在 Llama 3 中选择了相对标准的decoder-only  Transformer 架构。与 Llama 2 相比,做了几个关键的改进。Llama 3 使用具有 128K token词汇表的tokenizer,可以更有效地对语言进行编码,从而显着提高模型性能。为了提高 Llama 3 模型的推理效率,我们在 8B 和 70B 大小上采用了Group Query Attention (GQA)。在 8,192 个token序列上训练模型,使用mask确保self-attention不会跨越文档边界。

训练数据

为了训练优质的语言模型,管理大型、高质量的训练数据集至关重要。研究团队在预训练数据上投入了大量资金。Llama 3 使用超过 15T  tokens进行了预训练,这些tokens都是从公开来源收集的。Llama 3训练数据集比 Llama 2 使用的数据集大七倍,并且包含四倍多的代码。为了为即将到来的多语言用例做好准备,超过 5% 的 Llama 3 预训练数据集由涵盖 30 多种语言的高质量非英语数据组成。但是,研究团队预计这些语言的性能水平不会与英语相同。

为了确保 Llama 3 接受高质量数据的训练,研究团队开发了一系列数据过滤pipeline。这些pipeline包括使用启发式过滤器、NSFW 过滤器、语义重复数据删除方法和文本分类器来预测数据质量。研究团队发现前几代 Llama 非常擅长识别高质量数据,因此使用 Llama 2 为 Llama 3 提供支持的文本质量分类器生成训练数据。

研究团队还进行了广泛的实验,以评估在最终预训练数据集中混合不同来源的数据的最佳比例。这些实验使得研究团队能够选择一个数据配方,确保 Llama 3 在各种用例(包括常识问题、STEM、编码、历史知识等)中表现良好。

扩大预训练规模

为了有效利用 Llama 3 模型中的预训练数据,研究团队投入了大量精力来扩大预训练规模。具体来说,我们为下游基准评估制定了一系列详细的缩放法则。这些缩放法则使研究团队能够选择最佳的数据组合。重要的是,缩放法则使我们能够在实际训练模型之前预测最大模型在关键任务上的性能(例如,在 HumanEval 基准上评估的代码生成)。这有助于研究团队确保最终模型在各种用例和功能上都具有强大的性能。

在 Llama 3 的开发过程中,研究对缩放行为进行了一些新的观察。例如,虽然 8B 参数模型的 Chinchilla 最佳训练计算量对应于约 200B 个token,但发现即使在模型建立之后,模型性能仍在继续提高接受了两个数量级以上的数据训练。在对多达 15T tokens进行训练后,Llama3的 8B 和 70B 参数模型都继续以对数线性方式改进。较大的模型可以用较少的训练计算来匹配这些较小模型的性能,但较小的模型通常是首选,因为它们在推理过程中效率更高。

为了训练最大的 Llama 3 模型,研究团队结合了三种类型的并行化:数据并行化、模型并行化和管道并行化。当同时在 16K GPU 上进行训练时,最高效的实现可实现每个 GPU 超过 400 TFLOPS 的计算利用率。在两个定制的24K GPU 集群上进行了训练。为了最大限度地延长 GPU 的正常运行时间,研究开发了一种先进的新训练堆栈,可以自动执行错误检测、处理和维护。同时还极大地改进了硬件可靠性和静默数据损坏检测机制,并且开发了新的可扩展存储系统,以减少检查点和回滚的开销。这些改进使总体有效培训时间超过 95%。综合起来,这些改进使 Llama 3 的训练效率比 Llama 2 提高了约三倍。

指令微调

为了充分释放Llama 3的预训练模型在聊天用例中的潜力,研究团队还对指令调整方法进行了创新。我们的post-training方法是监督微调(SFT)、rejection sampling、近端策略优化(PPO)和直接策略优化(DPO)的组合。SFT 中使用的提示质量以及 PPO 和 DPO 中使用的偏好排名对align模型的性能有着巨大的影响。研究团队在模型质量方面的一些最大改进来自于仔细整理这些数据并对人类注释者提供的注释进行多轮质量保证。

通过 PPO 和 DPO 从偏好排名中学习也极大地提高了 Llama 3 在推理和编码任务上的性能。研究团队发现,如果你向模型提出一个它难以回答的推理问题,该模型有时会产生正确的推理轨迹:模型知道如何产生正确的答案,但不知道如何选择它。对偏好排名的训练使模型能够学习如何选择它。

共同建设Llama 3开发者生态

研究团队的的愿景是让开发人员能够定制 Llama 3 以支持相关用例,并更轻松地采用最佳实践并改善开放生态系统。在此版本中,我们提供了新的信任和安全工具,包括 Llama Guard 2 和 Cybersec Eval 2 的更新组件,并引入了 Code Shield——一种用于过滤 LLM 生成的不安全代码的推理时间防护栏。

研究团队还与torchtune共同开发了 Llama 3 ,torchtune 是新的 PyTorch 原生库,可以轻松地使用 LLM 进行创作、微调和实验。torchtune 提供完全用 PyTorch 编写的内存高效且可破解的训练方法。该库与 Hugging Face、Weights & Biases 和 EleutherAI 等流行平台集成,甚至支持 Executorch,以便在各种移动和边缘设备上运行高效推理。从快速工程到将 Llama 3 与 LangChain 结合使用,提供了全面的入门指南,指导开发者从下载 Llama 3 一直到在生成式 AI 应用程序中进行大规模部署。

系统级安全可靠

Llama 3 模型能够最大限度地提供帮助,同时确保采用行业领先的方法来负责任地部署它们。为了实现这一目标,研究团队采用了一种新的系统级方法来负责任地开发和部署 Llama。研究团队将 Llama 模型视为更广泛系统的一部分,让开发人员掌握主导权。Llama 模型将作为开发人员在设计时考虑到其独特的最终目标的系统的基础部分。

网络异常,图片无法展示
|

指令微调在确保模型的安全性方面也发挥着重要作用。Llama 3的指令微调模型已经通过内部和外部的努力进行了安全红队(测试)。红队方法利用人类专家和自动化方法来生成对抗性提示,试图引发有问题的响应。例如,应用全面的测试来评估与化学、生物、网络安全和其他风险领域相关的滥用风险。所有这些努力都是迭代的,并用于为正在发布的模型进行安全微调提供信息。

Llama Guard 模型旨在成为快速响应安全的基础,并且可以根据应用需求轻松进行微调以创建新的分类法。作为起点,新的 Llama Guard 2 使用最近宣布的MLCommons 分类法,努力支持这一重要领域行业标准的出现。此外,CyberSecEval 2 在其前身的基础上进行了扩展,添加了对 LLM 允许滥用其代码解释器的倾向、攻击性网络安全功能以及对提示注入攻击的敏感性的测量。最后,研究团队引入了 Code Shield,它增加了对 LLM 生成的不安全代码的推理时过滤的支持。这可以缓解不安全代码建议、代码解释器滥用预防和安全命令执行方面的风险。

随着生成人工智能领域的发展速度,研究团队相信开放的方法是将生态系统整合在一起并减轻这些潜在危害的重要方式。

有关如何利用所有这些功能的示例,请查看Llama Recipes,其中包含所有的开源代码,这些代码可用于从微调到部署再到模型评估的所有内容。

Llama3模型体验

体验链接:

https://modelscope.cn/studios/LLM-Research/Chat_Llama-3-8B/(感谢社区开发者:家熙panda的贡献)

英文常识&推理问答能力:

网络异常,图片无法展示
|

模型的中文指令问答似乎还没有做的很完善:

网络异常,图片无法展示
|

可以通过prompt,让他中文回答:

网络异常,图片无法展示
|

问题理解和回答的不错。

数学:8B四则运算表现不错,70B应用题解题上解答不错

网络异常,图片无法展示
|

7B四则运算

99b08a22-1c9c-4126-939d-a355dd17f82b[1].png

70B解答应用题

代码能力:

075d478e-ba9e-430c-afd7-87790b715b09[1].png

多轮对话能力:

fdd7eb47-ef99-4978-ab88-2fbbf70b9c3e[1].png

环境配置与安装

  1. python 3.10及以上版本
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 建议使用CUDA 11.4及以上
  4. transformers >= 4.40.0

86cbfbdf-7801-4383-b721-dcdb0ac478fa[1].png

Llama3模型链接和下载

Llama 3 模型系列现已在ModelScope社区开源,包括:

Meta-Llama-3-8B-Instruct:

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct

Meta-Llama-3-70B-Instruct:

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-70B-Instruct

Meta-Llama-3-8B:

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B

Meta-Llama-3-70B:

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-70B

Meta-Llama-3-8B-Instruct-GGUF:

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct-GGUF

社区支持直接下载模型的repo:

from modelscope import snapshot_download
model_dir = snapshot_download("LLM-Research/Meta-Llama-3-8B-Instruct")

Llama3模型推理和部署

Meta-Llama-3-8B-Instruct推理代码:

需要使用tokenizer.apply_chat_template获取指令微调模型的prompt template:

from modelscope import AutoModelForCausalLM, AutoTokenizer
import torch
device = "cuda" # the device to load the model onto
model = AutoModelForCausalLM.from_pretrained(
    "LLM-Research/Meta-Llama-3-8B-Instruct",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("LLM-Research/Meta-Llama-3-8B-Instruct")
prompt = "Give me a short introduction to large language model."

						

上一篇: 改变世界的 50 把椅子(二)

下一篇: 虚拟法官用户指南