LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

导读:2024年4月18日,Meta 重磅推出了Meta Llama 3,本文章主要介绍了Meta推出的新的开源大语言模型Meta Llama 3。模型架构 Llama 3 是一种自回归语言模型,采用了优化的 Transformer 架构。调优版本使用了监督微调(SFT)和强化学习结合人类反馈(RLHF)来与人类偏好对齐,以提高实用性和安全性。

背景:大语言模型技术在最近几年得到了很大发展,但是大部分模型并未公开领域,给广大开发者和研究人员带来很大限制。Meta的目标是推出性能优越,且完全开源的大语言模型,以推动AI领域的开放创新。

Meta Llama 3的主要亮点和核心要点:

>> 性能突出:8B和70B参数的Llama 3模型在许多基准测试上都取得了先进水平,超过了同规模模型
>>训练数据:Llama 3 在超过 15 万亿个标记的公开可用数据上进行了预训练。微调数据包括公开可用的指令数据集,以及超过 1000 万个人工标注示例。预训练数据和微调数据均不包括 Meta 用户数据。

>> 数据规模庞大:使用超过15T的token公开文本训练数据,规模比Llama 2大7倍

>> 架构优化:采用相对标准的解码 Transformer结构,但优化了细节如token化方式等。

>> 精细化训练:利用10K级别的GPU小时进行规模化训练,提高训练效率3倍以上。

>> 指令微调:采用强化学习的方法进行安全微调,防止模型产生有害响应。

>> 全面开源:模型将在多种平台和开源库中提供,包括AWS、GF、HU等,给开发者完全开放利用。

>> 负责任开发:推出如Llama Guard安全守门员等工具,提升模型在实际应用中的安全性。

>> 功能丰富:未来将支持多语言、多模态功能,更高效率的模型将继续推出。

总之,Meta Llama 3是目前功能最强大、开放度最高的开源语言模型,其广泛应用前景广阔。Meta也在负责任开发和推广应用上下足工夫。

博主评价: Meta最早于2023年2月25日里程碑性发布最强开源模型Llama 1,过了不到半年,2023年7月18日,Meta又重磅发布Llama 2,随着类似的开源大模型—ChatGLM3等以3为开头的系列版本发布,整个业界一直在期待Llama 3会以什么姿态落地时,Llama 3时隔10个月,于2024年4月18日,终于来了,依然是保持以往的“开源”态度,依然是在开源界历史性突破,面对一点都不Open的Open AI,Meta的开源态度,真的是令整个AIGC业界和开发者感动和尊重。在这个躁动和有点浮夸的AIGC领域,博主接触了太多的大模型领域的技术人和创业者,的确存在一大部分,熙熙攘攘皆为利来,熙熙攘攘皆为利往……Llama团队,值得每一个AI从业者Respect!

目录


目录

相关文章

LLMs之LLaMA:LLaMA的简介、安装和使用方法、案例应用之详细攻略

LLMs之LLaMA:LLaMA的简介、安装和使用方法、案例应用之详细攻略_chinese_calendar每年手动更新-CSDN博客

LLMs之LLaMA-2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略

LLMs之LLaMA-2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略_llama2-CSDN博客

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama 3:Llama 3的简介、安装和使用方法、案例应用之详细攻略-CSDN博客

Llama 3的简介

2024年4月18日,Meta 重磅推出了Meta Llama 3,Llama 3是Meta最先进开源大型语言模型的下一代,包括具有80亿700亿参数的预训练指令微调的语言模型,能够支持广泛的应用场景。这一代Llama在一系列行业标准基准测试中展示了最先进的性能,并提供了新的功能,包括改进的推理能力。我们相信这些是同类中最好的开源模型,绝对如此。
Llama 3模型将很快在AWS、Databricks、Google Cloud、Hugging Face、Kaggle、IBM WatsonX、Microsoft Azure、NVIDIA NIM和Snowflake上提供,并得到AMD、AWS、Dell、Intel、NVIDIA和Qualcomm提供的硬件平台的支持。 Meta 致力于以负责任的方式开发Llama 3,并提供各种资源来帮助其他人负责任地使用它。这包括推出新的信任和安全工具,如Llama Guard 2、Code Shield和CyberSec Eval 2。
为了支持我们长期以来的开放方法,我们将Llama 3交给了社区。我们希望启动AI堆栈下一波创新——从应用到开发者工具,再到评估和推理优化等等。我们迫不及待地想看看你的作品,并期待你的反馈。
在未来几个月,Meta 预计将推出新的功能、更长的上下文窗口、额外的模型尺寸和提升的性能,并将分享Llama 3的研究论文。 利用Llama 3技术构建的Meta AI,现在是世界上最领先的AI助手之一,可以提升你的智能并减轻你的负担——帮助你学习、完成任务、创作内容并建立联系,以充分利用每一刻。你可以在这里尝试Meta AI。

官网文章:Meet Your New Assistant: Meta AI, Built With Llama 3 | Meta

GitHub地址:https://github.com/meta-llama/llama3

文档地址:https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3

在线体验地址:https://llama.meta.com/llama3/

1、Llama 3的目标

Llama 3的目标是构建与当今可用的最佳专有模型相媲美的最佳开源模型。我们希望解决开发者的反馈,以提高Llama 3的整体帮助性,同时继续在负责任地使用和部署LLM方面发挥领导作用。我们采用开源精神,尽早且频繁地发布,以便在模型仍在开发时让社区能够获取这些模型。我们今天发布的基于文本的模型是Llama 3模型集的第一批。我们近期的目标是让Llama 3实现多语言和多模态,拥有更长的上下文,并继续提高核心LLM能力(如推理和编码)的整体性能。

Training Data Params Context length GQA Token count Knowledge cutoff
Llama 3 A new mix of publicly available online data. 8B 8k Yes 15T+ 2023 年 3 月
70B 8k Yes 15T+ 2023 年 12 月

2、最先进的性能

我们新的80亿和700亿参数的Llama 3模型在Llama 2的基础上取得了重大飞跃,为这些规模的LLM模型建立了新的最先进水平。得益于预训练和后训练的改进,我们预训练指令微调的模型是当今存在的8B和70B参数规模的最佳模型。我们后训练程序的改进显著降低了错误拒绝率改善了模型响应的对齐性,并增加了响应的多样性。我们还看到了在推理、代码生成和遵循指令等方面的大幅能力提升,使得Llama 3更加可操纵。

请参阅计算这些评估的设置和参数的评估详细信息:llama3/eval_details.md at main · meta-llama/llama3 · GitHub

3、开发了一个新的高质量人类评估集包含1800个提示+涵盖12个关键用例

在Llama 3的开发过程中,我们查看了模型在标准基准上的性能,并寻求优化现实世界的性能。为此,我们开发了一个新的高质量人类评估集。这个评估集包含1800个提示,涵盖12个关键用例:寻求建议、头脑风暴、分类、封闭式问答、编码、创意写作、提取、扮演一个角色/人物、开放式问答、推理、重写和总结。为了防止我们的模型无意中在这个评估集上过拟合,即使是我们的建模团队也没有权限访问它。下表显示了我们的评估结果与Claude Sonnet、Mistral Medium和GPT-3.5相比,在这些类别和提示上的汇总结果。
基于这个评估集的人类标注者的偏好排名突出了我们70B指令遵循模型与类似大小的竞争模型在现实世界场景中的强大性能。

4、四大要素:模型架构、预训练数据、扩大预训练规模、指令微调

为了开发一个伟大的语言模型,我们相信创新、扩展和优化简单性是重要的。我们在整个Llama 3项目中采用了这一设计理念,重点关注四个关键要素:模型架构、预训练数据、扩大预训练规模和指令微调。

4.1、模型架构

与我们的设计理念一致,我们在Llama 3中选择了相对标准的解码器-only的transformer架构。与Llama 2相比,我们做了一些关键的改进。Llama 3使用了一个拥有128K词汇量的tokenizer,更有效地编码语言,这导致模型性能大幅提升。为了提高Llama 3模型的推理效率,我们在8B和70B的模型中都采用了分组查询注意力(GQA)。我们使用8,192个token的序列训练模型,并使用mask来确保自注意力不会跨越文档边界。

4.2、训练数据

为了训练最佳的语言模型,收集一个大规模、高质量的训练数据集至关重要。与我们的设计原则一致,我们在预训练数据上投入了大量资金。Llama 3在超过15T的token上进行预训练,所有数据都来自公开可用的来源。我们的训练数据集比用于Llama 2的数据集大了七倍,并且包括了四倍的代码。为了准备即将到来的多语言用例,超过5%的Llama 3预训练数据集由高质量的非英语数据组成,覆盖了超过30种语言。然而,我们不期望在这些语言中达到与英语相同的性能水平。

为了确保Llama 3训练的数据质量最高,我们开发了一系列数据过滤管道。这些管道包括使用启发式过滤器、NSFW过滤器、语义去重方法和文本分类器来预测数据质量。我们发现,Llama的前几代在识别高质量数据方面出奇地好,因此我们使用Llama 2生成了为Llama 3提供动力的文本质量分类器的训练数据。

我们还进行了大量实验,以评估在我们的最终预训练数据集中混合不同来源数据的最佳方式。这些实验使我们能够选择一个数据混合方案,确保Llama 3在包括琐碎问题、STEM、编码、历史知识等各种用例中表现良好。

4.3、扩大预训练规模:15T个token、Llama 3的训练效率提高了约三倍、3D并并行化、16K个GPU

为了在Llama 3模型中有效利用我们的预训练数据,我们投入了大量精力来扩大预训练规模。具体来说,我们为下游基准评估开发了一系列详细的扩展法则。这些扩展法则使我们能够选择最佳数据混合方案,并就如何最佳利用我们的训练计算资源做出明智的决策。重要的是,扩展法则允许我们在实际训练模型之前预测我们最大模型在关键任务上的性能(例如,在HumanEval基准上评估的代码生成——见上文)。这帮助我们确保最终模型在各种使用场景和能力上的强劲性能。

在Llama 3的开发过程中,我们对扩展行为做出了几项新的观察。例如,虽然对于80亿参数模型来说,Chinchilla最优的训练计算量对应于约2000亿个token,但我们发现即使模型在数据量增加两个数量级后,模型性能仍然在持续提升。在我们的80亿和700亿参数模型经过高达15T个token的训练后,它们的性能继续以对数线性方式提升。大型模型可以在较少的训练计算量下匹配这些小型模型的性能,但通常更倾向于使用小型模型,因为它们在推理过程中效率更高。

为了训练我们最大的Llama 3模型,我们结合了三种类型的并行化:数据并行化、模型并行化和流水线并行化。我们最有效的实现方式在同时训练16K个GPU时,每个GPU的计算利用率超过400 TFLOPS。我们在两个定制构建的24K GPU集群上执行了训练运行。为了最大化GPU的运行时间,我们开发了一个新的高级训练堆栈,自动化了错误检测、处理和维护。我们还大大提高了硬件的可靠性和检测机制,用于静默数据损坏,并开发了新的可扩展存储系统,减少了检查点和回滚的开销。这些改进使得整体有效训练时间超过了95%。综合来看,这些改进将Llama 3的训练效率提高了约三倍,与Llama 2相比。

4.4、指令微调

为了充分释放我们预训练模型在聊天用例中的潜力,我们对指令调整方法也进行了创新。我们的后训练方法是监督式微调(SFT)、拒绝采样、近端策略优化(PPO)和直接策略优化(DPO)的组合。用于SFT的提示质量和用于PPO和DPO的偏好排名对对齐模型的性能有巨大影响。我们在模型质量上的一些最大改进来自于仔细筛选这些数据,并对人类标注者提供的多轮质量保证进行多次审查。

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

5、对责任感的系统级方法

我们设计Llama 3模型旨在最大化帮助性,同时确保在负责任地部署它们方面保持行业领先。为了实现这一点,我们采用了新的、系统级的方法来负责任地开发和部署Llama。我们设想Llama模型是一个更广泛系统的一部分,让开发者掌握主动权。Llama模型将作为开发者设计的系统的基础部分,以他们独特的最终目标为宗旨。

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

Llama Guard模型旨在成为提示和响应安全的基础,并可以轻松地进行微调以根据应用程序需求创建新的分类法。作为起点,新的Llama Guard 2使用了最近宣布的MLCommons分类法,以支持在这一重要领域中行业标准的出现。此外,CyberSecEval 2在其前身的基础上增加了衡量LLM允许其代码解释器被滥用、具有攻击性网络安全能力和易受提示注入攻击的倾向的度量(在我们的技术论文中了解更多信息)。最后,我们推出了Code Shield,它增加了对LLMs生成的非安全代码进行推理时过滤的支持。这为非安全代码建议、代码解释器滥用预防和安全命令执行的风险提供了缓解措施。

随着生成式AI空间的发展速度,我们认为开放方法是将生态系统团结在一起并缓解这些潜在危害的重要方式。作为其中的一部分,我们正在更新我们的《负责任使用指南》(RUG),该指南为使用LLMs进行负责任开发提供了全面指导。正如我们在RUG中所概述的,我们建议所有输入和输出都应根据应用程序适当的内容指南进行检查和过滤。此外,许多云服务提供商提供内容审查API和其他工具用于负责任部署,我们鼓励开发者也考虑使用这些选项。

6、大规模部署Llama 3:改进的tokenizer效率+GQA

Llama 3很快将在包括云提供商、模型API提供商等在内的所有主要平台上可用。Llama 3将无处不在。

我们的基准测试显示,tokenizer提供了改进的token效率,与Llama 2相比,减少了多达15%的token。此外,Group Query Attention (GQA)也已经加入了Llama 3 8B。因此,尽管模型比Llama 2 7B多10亿参数,但改进的tokenizer效率和GQA有助于保持与Llama 2 7B相当的推理效率。要了解如何充分利用这些能力的示例,请查看Llama Recipes,它包含了所有我们的开源代码,可用于从微调到部署到模型评估。

7、Llama 3的未来发展:多模态+多语言+更长窗口+更强整体能力

Llama 3 8B和70B模型标志着我们计划为Llama 3发布的开始。还有更多内容即将推出。
我们的最大模型超过4000亿参数,尽管这些模型仍在训练中,但我们的团队对它们的趋势感到兴奋。在未来几个月内,我们将发布多个具有新功能的新模型,包括多模态、能够用多种语言交谈更长的上下文窗口更强的整体能力。我们还将发布一篇详细的研究论文,一旦完成Llama 3的训练。
为了给您一个这些模型当前训练状态的预览,我们想分享一些关于我们最大的LLM模型趋势的快照。请注意,这些数据是基于Llama 3仍然在训练的早期检查点,并且这些功能不包括在今天发布的模型中。

我们致力于继续增长和发展一个开放的AI生态系统,以负责任地发布我们的模型。我们长期以来一直相信,开放性会导致更好的、更安全的产品的出现,加快创新的速度,并使整体市场更加健康。这对Meta来说是好事,对社会也是好事。我们以社区为先的态度对待Llama 3,从今天开始,这些模型将在领先的云、托管和硬件平台上提供,未来还会有更多。

8、试用Meta Llama 3

我们已经将我们最新的模型整合到Meta AI中,我们相信这是世界上领先的AI助手。它现在采用了Llama 3技术,并将在我们的应用程序中更多国家提供。

您可以在Facebook、Instagram、WhatsApp、Messenger和网站上使用Meta AI来完成任务、学习、创作和与您关心的事物建立联系。您可以在这里了解更多关于Meta AI体验的信息。

访问Llama 3网站下载模型并参考入门指南,了解所有可用平台的最新列表。

您很快将能够在我们的Ray-Ban Meta智能眼镜上测试多模态的Meta AI。

如往常一样,我们期待看到您将如何使用Meta Llama 3构建所有令人惊叹的产品和体验。

使用体验:Meet Your New Assistant: Meta AI, Built With Llama 3 | Meta

9、模型卡:模型细节、预期用途、软硬件、训练数据、Benchmarks、伦理考虑与限制

请参阅MODEL_CARD.md

地址:llama3/MODEL_CARD.md at main · meta-llama/llama3 · GitHub

Llama 3的安装和使用方法

Meta的愿景是让开发者能够自定义Llama 3以支持相关用例,并使其更容易采用最佳实践并改善开放生态系统。随着这个版本的发布,我们提供了新的信任和安全工具,包括更新了Llama Guard 2和Cybersec Eval 2的组件,以及推出了Code Shield——一个用于过滤LLMs生成的非安全代码的推理时护栏。

我们还与torchtune共同开发了Llama 3,torchtune是一个新的PyTorch原生库,用于轻松创作、微调和实验LLMs。torchtune提供了完全用PyTorch编写的内存高效且可修改的训练配方。该库与Hugging Face、Weights & Biases、EleutherAI等流行平台集成,甚至支持Executorch,以便在广泛的移动和边缘设备上运行高效的推理。从提示工程到使用Llama 3与LangChain,我们有一个全面的入门指南,从下载Llama 3到在你的生成式AI应用程序中大规模部署,全程指导。

推荐一个针对Llama3汉化非常好的资源:Llama3 中文仓库(聚合资料,各种网友及厂商微调、魔改版本有趣权重 & 训练、推理、评测、部署教程视频 & 文档)

GitHub – CrazyBoyM/llama3-Chinese-chat: Llama3 中文仓库(聚合资料,各种网友及厂商微调、魔改版本有趣权重 & 训练、推理、评测、部署教程视频 & 文档)

0、模型显存大小:模型推理(需24G显卡)、模型训练(至少10G显存)

  • 推理

    • fp16 模式 大概占用16G显存,推荐24G显卡使用
    • int4模式 大概占用8G显存,推荐至少10G显存使用,需要修改代码中load_in_4bit=True
  • 训练

Method Bits 7B 13B 30B 70B 8x7B
Full AMP 120GB 240GB 600GB 1200GB 900GB
Full 16位 60GB 120GB 300GB 600GB 400GB
LoRA/GaLore/BAdam 16位 16GB 32GB 64GB 160GB 120GB
QLoRA 8位 10GB 20GB 40GB 80GB 60GB
QLoRA 4位 6GB 12GB 24GB 48GB 30GB

1、下载、安装、注意事项

Meta Llama 3 我们正在解锁大型语言模型的力量。我们最新的Llama版本现在可供个人、创作者、研究人员和所有规模的企业使用,以便他们可以负责任地实验、创新和扩展他们的想法。这个版本包括预训练指令调整的Llama 3语言模型的模型权重和起始代码——包括80亿到700亿参数的尺寸。这个仓库旨在作为一个最小示例,用于加载Llama 3模型并运行推理。对于更详细的示例,请参阅llama-recipes。

获取协议

为了下载模型权重和tokenizer,请访问Meta Llama网站并接受我们的许可协议。

一旦您的请求得到批准,您将通过电子邮件收到一个已签名的URL。然后运行download.sh脚本,在提示时传递提供的URL以开始下载。

请注意,链接在24小时后过期,并且有一定数量的下载。如果您开始看到例如403: Forbidden的错误,您总是可以重新请求链接。

安装依赖

先决条件:确保您已安装wget和md5sum。然后运行脚本:./download.sh。

注意事项

>> 将Meta-Llama-3-8B-Instruct/替换为您检查点目录的路径,将Meta-Llama-3-8B-Instruct/tokenizer.model替换为您tokenizer模型的路径。
>> –nproc_per_node应设置为您使用的模型的MP值。
>> 根据需要调整max_seq_len和max_batch_size参数。
>> 这个示例运行此仓库中的example_chat_completion.py,但您可以将其更改为不同的.py文件。

llama-recipes地址:GitHub – meta-llama/llama-recipes: Scripts for fine-tuning Llama2 with composable FSDP & PEFT methods to cover single/multi-node GPUs. Supports default & custom datasets for applications such as summarization & question answering. Supporting a number of candid inference solutions such as HF TGI, VLLM for local or cloud deployment.Demo apps to showcase Llama2 for WhatsApp & Messenger

T1、利用Hugging Face平台下载

我们还在Hugging Face上提供下载,包括transformers和原生llama3格式。要从Hugging Face下载权重,请按照以下步骤操作:
>> 访问其中一个仓库,例如meta-llama/Meta-Llama-3-8B-Instruct。
>> 阅读并接受许可。一旦您的请求得到批准,您将获得访问所有Llama 3模型的权限。请注意,请求可能需要长达一个小时才能处理完毕。
>> 要下载原始原生权重以使用此仓库,请点击“文件和版本”标签,并下载原始文件夹的内容。如果您已pip安装huggingface-hub,也可以从命令行下载:

huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --include “original/*” --local-dir meta-llama/Meta-Llama-3-8B-Instruct

>> 要使用transformers,以下管道片段将下载并缓存权重:

import transformers
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
  "text-generation",
  model="meta-llama/Meta-Llama-3-8B-Instruct",
  model_kwargs={"torch_dtype": torch.bfloat16},
  device="cuda",
)

T2、利用ModelScope平台下载:模型大小为 15 GB,下载模型大概需要1~ 2分钟

import torchfrom modelscope import snapshot_download, AutoModel, AutoTokenizerimport osmodel_dir = snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct', cache_dir='/root/autodl-tmp', revision='master')

2、快速入门

您可以按照以下步骤快速上手Llama 3模型。这些步骤将让您在本地运行快速的推理。更多示例,请参阅Llama食谱仓库。在有PyTorch / CUDA可用的conda环境中克隆并下载此仓库。
在顶级目录中运行:

pip install -e .

访问Meta Llama网站并注册以下载模型/s。
一旦注册,您将收到一封带有下载模型URL的电子邮件。您需要这个URL来运行download.sh脚本。
一旦收到电子邮件,导航到您的下载llama仓库并运行download.sh脚本。确保授予download.sh脚本的执行权限 在这个过程中,您将需要输入电子邮件中的URL。 不要使用“复制链接”选项,而是确保手动从电子邮件中复制链接。
一旦您想要的模型/s被下载,您可以通过以下命令在本地运行模型:

torchrun --nproc_per_node 1 example_chat_completion.py \
    --ckpt_dir Meta-Llama-3-8B-Instruct/ \
    --tokenizer_path Meta-Llama-3-8B-Instruct/tokenizer.model \
--max_seq_len 512 --max_batch_size 6

3、模型微调

 LLMs之LLaMA3:基于中文指令格式数据集利用LoRA指令微调LLaMA-3实现对话生成推理——定义数据集(JSON文件,instruction-input-output)→数据预处理(分词、截断等操作,加载预分词模型并测试编码后的文本)→模型微调(创建模型并使用梯度检查点技术+配置LoRA参数并更新模型+配置训练参数+开始训练+保存模型)→模型推理(加载训练好的tokenizer、模型、lora权重+创建模板[instruct+user_input]+对输入文本进行分词+文本生成并解码ID列表)

https://yunyaniu.blog.csdn.net/article/details/138017988

4、推理

不同的模型需要不同的模型并行(MP)值,如下所示。所有模型都支持最多8192个token的序列长度,但我们根据max_seq_len和max_batch_size的值预先分配缓存。所以请根据您的硬件设置这些值。

Model MP
8B 1
70B 8

4.1、使用预训练模型:没有为聊天或问答进行微调,但应该被提示

这些模型没有为聊天或问答进行微调。它们应该被提示,以便预期的答案是提示的自然延续。请参阅example_text_completion.py的一些示例。为了说明,请查看以下命令,使用llama-3-8b模型运行它(nproc_per_node需要设置为MP值):

torchrun --nproc_per_node 1 example_text_completion.py
–ckpt_dir Meta-Llama-3-8B/
–tokenizer_path Meta-Llama-3-8B/tokenizer.model
–max_seq_len 128 --max_batch_size 4 

4.2、使用指令调整模型:可采用部署额外的分类器来过滤掉危险内容

微调的模型是为对话应用程序而训练的。为了获得预期的特性和性能,需要遵循ChatFormat中定义的特定格式:提示以<|begin_of_text|>特殊标记开始,随后是多条消息。每个消息以<|start_header_id|>标签开头,角色系统、用户或助手,以及<|end_header_id|>标签。在双换行符\n\n之后是消息的内容。每个消息的末尾用<|eot_id|>标记。
您还可以部署额外的分类器来过滤掉被认为是危险的内容。请参阅llama-recipes repo,了解如何将安全检查器添加到推理代码的输入和输出中。
使用llama-3-8b-chat的示例:

torchrun --nproc_per_node 1 example_chat_completion.py
–ckpt_dir Meta-Llama-3-8B-Instruct/
–tokenizer_path Meta-Llama-3-8B-Instruct/tokenizer.model
–max_seq_len 512 --max_batch_size 6 

4.3、负责任使用指南

Llama 3是一种新技术,使用时存在潜在风险。到目前为止进行的测试并未涵盖所有场景,也根本无法涵盖所有场景。为了帮助开发者应对这些风险,我们制定了负责任使用指南。

地址:https://ai.meta.com/static-resource/responsible-use-guide/

5、Llama-3-8B-Instruct的使用

地址:https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct

该存储库包含两个版本的 Meta-Llama-3-8B-Instruct,可用于Transformers 和原始 llama3 代码库。

T1、与Transformers一起使用

您可以使用 Transformers 流水线抽象运行会话推理,或者通过利用 Auto 类与 generate() 函数。让我们看看两者的示例。

T1.1、Transformers pipeline:推荐使用≥24G的Nvidia显卡,比如GeForce RTX 3090-24G、GeForce RTX 4090-24G、A100-40GB、A800-40G、A40-48G、V100-32G等

import transformers
import torch
torch.cuda.empty_cache()


model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device="auto",
)

instruction = "You are a pirate chatbot who always responds in pirate speak!"
user_input = "Who are you?"

messages = [
    {"role": "system", "content": instruction},
    {"role": "user", "content": user_input},
]

prompt = pipeline.tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

T1.2、Transformers AutoModelForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = model.generate(
    input_ids,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))

T2、与 llama3 一起使用

请按照存储库中的说明进行操作
要下载原始检查点,请参见下面的示例命令,利用 huggingface-cli:

huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --include "original/*" --local-dir Meta-Llama-3-8B-Instruct

对于 Hugging Face 支持,我们建议使用 transformers 或 TGI,但类似的命令也可以使用。

T3、基于LangChain 框架使用

LLMs之LLaMA3:基于LangChain框架(需要重写构造函数和 _call 函数)集成Llama-3-8B-Instruct模型实现对话生成之代码实现

https://yunyaniu.blog.csdn.net/article/details/138173988

6、部署

T1、采用FastApi实现部署调用

LLMs之LLaMA3:基于Llama-3-8B-Instruct模型采用FastApi实现部署调用——创建model_download.py文件下载模型→创建api.py文件实现FastAPI应用→API部署→启动API服务→测试服务响应(采用curl调用测试/采用python的requests库调用测试)

https://yunyaniu.blog.csdn.net/article/details/138017973

T2、LLaMA3-8B-Instruct WebDemo 部署

创建 chatBot.py 文件并,粘贴如下代码
# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st

# 在侧边栏创建标题和链接
with st.sidebar:
    st.markdown("## LLaMA3 LLM")
    "[开源大模型食用指南 self-llm](https://github.com/datawhalechina/self-llm.git)"

# 创建标题和副标题
st.title("💬 LLaMA3 Chatbot")
st.caption("🚀 由 Self-LLM 提供支持的 Streamlit 聊天机器人")

# 定义模型路径
mode_name_or_path = '/root/autodl-tmp/LLM-Research/Meta-Llama-3-8B-Instruct'

# 定义函数以获取模型和 tokenizer
@st.cache_resource
def get_model():
    # 从预训练模型获取 tokenizer
    tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True)
    tokenizer.pad_token = tokenizer.eos_token
    # 从预训练模型获取模型,并设置参数
    model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16).cuda()
  
    return tokenizer, model

# 构建用户输入函数
def build_input(prompt, history=[]):
    system_format = 'system\n\n{content}'
    user_format = 'user\n\n{content}'
    assistant_format = 'assistant\n\n{content}\n'
    history.append({'role': 'user', 'content': prompt})
    prompt_str = ''
    # 拼接历史对话
    for item in history:
        if item['role'] == 'user':
            prompt_str += user_format.format(content=item['content'])
        else:
            prompt_str += assistant_format.format(content=item['content'])
    return prompt_str + 'assistant\n\n'

# 加载 LLaMA3 模型和 tokenizer
tokenizer, model = get_model()

# 如果 session_state 中没有 "messages",则创建一个包含默认消息的列表
if "messages" not in st.session_state:
    st.session_state["messages"] = []

# 遍历 session_state 中的所有消息,并在聊天界面上显示
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

# 如果用户在聊天输入框中输入内容,则执行以下操作
if prompt := st.chat_input():
    
    # 在聊天界面上显示用户的输入
    st.chat_message("user").write(prompt)
    
    # 构建输入
    input_str = build_input(prompt=prompt, history=st.session_state["messages"])
    input_ids = tokenizer.encode(input_str, add_special_tokens=False, return_tensors='pt').cuda()
    outputs = model.generate(
        input_ids=input_ids, max_new_tokens=512, do_sample=True,
        top_p=0.9, temperature=0.5, repetition_penalty=1.1, eos_token_id=tokenizer.encode('')[0]
        )
    outputs = outputs.tolist()[0][len(input_ids[0]):]
    response = tokenizer.decode(outputs)
    response = response.strip().replace('', "").replace('assistant\n\n', '').strip()

    # 将模型的输出添加到 session_state 中的 messages 列表
    st.session_state.messages.append({"role": "assistant", "content": response})
    # 在聊天界面上显示模型的输出
    st.chat_message("assistant").write(response)
    print(st.session_state)
终端运行 demo

在终端中运行以下命令,启动streamlit服务

streamlit run /root/autodl-tmp/chatBot.py --server.address 127.0.0.1 --server.port 6006
界面显示

7、问题

请通过以下方式之一报告任何软件“bug”,或其他与模型相关的问题:

报告模型问题:https://github.com/meta-llama/llama3/issues 报告模型生成的危险内容:developers.facebook.com/llama_output_feedback 报告bug和安全问题:facebook.com/whitehat/info

Llama 3的案例应用

1、API接口调用

from openai import OpenAI

client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"
)

completion = client.chat.completions.create(
  model="meta/llama3-70b",
  messages=[{"role":"user","content":""}],
  temperature=0.5,
  top_p=1,
  max_tokens=1024,
  stream=True
)

for chunk in completion:
  if chunk.choices[0].delta.content is not None:
    print(chunk.choices[0].delta.content, end="")

2、多种在线体验方式

T1、Meta官网在线体验地址

体验地址:https://llama.meta.com/llama3/

T2、Huggingface平台在线体验地址

体验地址:https://huggingface.co/chat/conversation/6623131f499d70af9ab9f6cf

T3、NVIDIA平台在线体验地址

体验地址:NVIDIA NIM | llama3-70b

体验地址:NVIDIA NIM | llama3-8b

T4、replicate平台在线体验

体验地址::meta/meta-llama-3-70b-instruct – Run with an API on Replicate

版权声明:本文为博主作者:一个处女座的程序猿原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_41185868/article/details/137981416

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年5月6日
下一篇 2024年5月6日

相关推荐