感谢您使用 Llama 模型进行开发。作为 Llama 3.1 版本的一部分,我们整合了 GitHub 存储库,并添加了一些额外的存储库,因为我们将 Llama 的功能扩展为 e2e Llama 堆栈。请今后使用以下存储库:
llama-models - 基础模型的中央存储库,包括基本实用程序、模型卡、许可证和使用策略
PurpleLlama - Llama Stack 的关键组件,专注于安全风险和推理时间缓解
llama-toolchain - 模型开发(推理/微调/安全防护罩/合成数据生成)接口和规范实现
llama-agentic-system - E2E 独立的 Llama 堆栈系统,以及固执己见的底层接口,支持创建代理应用程序
llama-cookbook - 社区驱动的脚本和集成
二、LLaMA系列模型
LLaMA系列模型作为开源界的主流,从发布以来进行了多轮的迭代,且对训练过程给到了比较完整的介绍[参考资料:3-6 ],本文在对LLaMA系列模型进行简要的介绍后,重点会对LLaMA3.1模型进行详细的学习。
2.1 先回顾一下时间线
先前文章《大语言模型(LLM)的发展路径简介》中的时间线
• 2023年2月,发布LLaMA。 • 2023年7月,发布了LLaMA2模型。 • 2024年4月,发布了LLaMA3模型。 • 2024年7月,发布了LLaMA3.1模型,发布了8B、70B和405B三个规模的模型,分别提供基础版(Base)和指令微调版(Instruct)。 • 2024年9月,发布了LLaMA3.2模型,核心主打1B、3B端侧小模型,以及11B、90B多模态输入模型(支持文本+图像输入)。 • 2024年12月,发布了LLaMA3.3模型(只开源了70B的指令模型)。 • 2025年4月,发布基于MoE架构的LLaMA4模型,包括109B、400B两个版本,以及参数量高达2T(2万亿)的未开源版本。
GPT-2模型和LLaMA2/3系列模型的差异对比:
结合之前《从头构建大模型》中关于GPT-2和Llama模型的结构对比、以及[参考资料: 9]关于Llama4模型结构的介绍,整理如下。
GPT2-->Llama2 |
|
Llama2-->Llama3 |
|
Llama3-->Llama3.1 |
|
Llama3.1-->Llama3.2 |
|
LLaMA4模型 |
|
2.2 LLaMA 3.1模型
论文《The Llama 3 Herd of Models》
LLaMA 3.1 主打多语言能力、代码、推理、tool use(论文中提到支持多模态,包括图像、语音、视频,但未发布和开源),能力上可以达到GPT-4相当的水平。模型架构还是dense,最大模型参数量为405B,支持的上下文最长到128k。
2.2.1 预训练
预训练主要解决4个事情:大规模训练语料的策展(数据精选和组合方案设计)和过滤;设计模型架构和根据scaling law选确定模型参数大小;开发高效的大规模预训练技术(主要是偏工程的infra);设计预训练方案。
1. 数据 1. 数据截止2023.12,过滤包含个人信息的数据,全是成人内容也过滤。 2. 解析。在解析html页面信息时,会对数学和代码的内容单独处理,尽量保留格式和内容。另外,还去除了md的格式标记,认为其不利于模型训练。 3. 去重和过滤。 1. url粒度去重,只保留最新的内容;使用MinHash进行文档粒度的去重;去除3000万个文档里的重复行,只要这行数据出现超过6次; 2. 除此之外,还有一些启发式的过滤策略。 3. 通过训练模型分类器,对低质量的数据进行过滤(GPT系列模型也有类似的操作)。 4. 代码和推理数据。强调代码和数学相关的数据很重要,因为添加code & reasoning数据可以提升模型能力,针对这部分数据会单独处理。 5. 多语音数据。使用fasttext-based模型进行语言分类,共有176种语言;再针对不同的语言进行基于模型的过滤和启发式的过滤。 6. 数据混合。主要通过知识分类和scaling law来确定(使用小模型)。 1. 首先,通过一个分类器,对数据包含的知识类型进行分类(knowledge classification); 2. 然后,为了确定合适的混合比例,训练了多个小模型,根据scaling law判断哪一种方案更好; 3. 最后使用的数据中,50%是通用数据,25%是数学和推理数据,17%是代码数据,8%是多语言数据。 7. 数据退火 1. 在少量的高质量的代码和数学数据进行退火训练,能提升预训练模型的能力 1. 退火训练,会在预训练的最终阶段进行(可选:先将学习率调高一些)。 2. Tutu 3里,提到类似的技术,称为mid-training。 3. 8B模型经过退火训练后提升明显,但405B模型则无明显变化。 2. 退火训练也可以用于评估数据质量,在模型训练到50%后,添加30%的退火数据+原数据分布,观测模型效果,可以由于判断退火数据的质量。
• Scaling law的使用 1. 两个使用场景:一个是通过scaling law,在计算资源固定的情况下,确定模型参数规模;另一个是,通过scaling law预测模型在下游基准任务上的性能表现。 2. 场景一,确定模型参数规模,如图2.2所示: 1. 如图2.2左所示,在不同的计算量约束下,使用“不同的模型参数+不同的tokens”训练小模型,得到计量量约束下的最优模型参数量。 2. 如图2.2右所示,将上述的最优结果进行拟合,拟合公式,其中表示计算量,表示最优token数量。通过外推得到计算预算FLOPs时,最优的模型参量为402B,最优token数量为16.55T。 3. 场景二,预测下游任务的性能: 1. 如图2.3所示,在通过scaling law拟合“下一个词的预测损失”的基础上,增加“模型损失和任务性能”的拟合,结合两者实现预测模型在下游任务的性能。
1. 模型架构没有太多调整,效果提升主要来自数据质量和多样性的提升,以及模型规模的增大。 2. 具体的模型改动: 1. 使用GQA(grouped-query attention)代替MHA。 1. 由于query的参数量没有减少,每个头有单独的Q,所有Q*K^T计算后的V权重,在每个头上还是不同的。 2. 减少计算量,同时降低内存使用。特别是推理的时候,降低kv cache内存占用,提升推理速度。 2. 跨文档掩码。当模型的上下文很长的时候,训练的时候可能会遇到在一个上下文中填充两个不同文档的情况,此时,通过增加mask,可以避免跨文档的attention。特别是对上下文特别长的“继续预训练(continued pre-training)”有帮助(这里应该是指为提升模型上下文长度的继续预训练)。 3. 词表达到128k,其中100k来自tiktoken(GPT系列使用),额外增加28k非语言的token用于提升多语言的能力。平均一个token表示3.94个字符。 4. 使用RoPE进行位置编码,将base frequency的超参数提升到500000,用于支持32k的上下文。 3. 模型参数设置可参考图2.1,其中405B的模型是在计算预算FLOPs的约束下,得到的最优模型大小。
• 训练基建(Infra) 1. 这部分偏工程一些,感兴趣的读者可以查看原论文,这里只作极简单的记录。 2. 模型的并行方案 1. 联合使用4种并行方案:TP(tensor并行)、PP(pipeline并行)、DP(数据并行)、CP(上下文并行) 1. TP,将单个权重拆分到不同设备上; 2. PP,将不同层拆分到不同设备上; 3. DP,将数据拆分到不同设备上; 4. CP,将输入上下文分为多个段,减少极长序列的而在瓶颈问题。 2. GPU性能的利用率在40%左右(Model FLOPs Utilization, MFU)。 3. 容灾 1. 最大的模型训练了54天,一共被打断了466次,有效训练时间在90%左右。 • 训练 1. 第一阶段:模型预训练 1. 学习率方案,线性预热+余弦衰减 2. 训练参数的变化:batch_size = 4M & seq_len = 4096 -> batch_size = 8M & seq_len = 8192 -> batch_size = 16M & seq_len = 8192 (大部分使用该参数进行训练) 3. 调整数据的混合比例:逐步提升非英语数据的占比 + 提升新数据的占比 + 减少低质数据的占比 2. 第二阶段:长上下文训练 1. 训练时,上下文为8k,直接外推至32k问题不大,但外推到128k就不太行了。 2. 因此,在训练的最后阶段逐步将训练的上下文提升至128k(分6次),训练时同时关注模型的短上下文任务的表现和“大海捞针”型的长上下文任务上的表现。(一般模型的上下文长度增加后,短文本的处理能力会有一定的下降)。训练了800B tokens。 3. 第三阶段:退火 1. 学习率线性衰减,使用128k上下文,数据量为40M tokens。 2. 调整数据混合比例,提升非常高质量数据的占比。 4. 最后的模型,是退火阶段多个模型的“平均”(这里应该是指权重取平均,有模型ensemble的思想)。 • 总结 1. 预训练部分的核心是“基建”,如何调度千卡/万卡GPU集群进行有效训练是关键。 2. 除基建外,预训练数据的清洗和策展也很重要,对模型效果影响较大,需要花费大量的人力和时间进行精细地处理。 3. 另外,scaling law的应用能有效对模型效果进行预测,能大大提高模型的迭代效率。
2.2.2 后训练
1. 整体介绍 1. 定义聊天数据格式。定义了一个新的聊天协议,便于模型理解人类指令,并提升新能力,如tool use等。 2. 奖励模型。使用偏好数据训练奖励模型。偏好数据有两个不同点: 1. 增加“编辑”响应。在原本偏好对(选择、拒绝)的基础上增加了“编辑”数据,因此prompt可能有两个或三个响应,(选择、拒绝)或(编辑、选择、拒绝)。 2. 拼接响应。拼接多个响应成单行,并随机打乱响应,训练精度没有损失,同时,训练效率提升。 1. 思考:在计算DPO损失的时候,也需要进行相应的调整以适配数据,通过mask单独计算各个响应的预测概率。 3. SFT 1. 数据:拒绝采样+其它数据源(包括合成数据) 2. 训练:对提示部分进行mask,其它设置同预训练。 4. 直接偏好优化DPO 1. 相比PPO,发现DPO的计算量更少,并表现更好。 2. 在DPO损失计算时,mask聊天协议中的特殊的格式化标记,可以使DPO训练更稳定。 3. 增加预训练时的NLL损失,可以进一步稳定训练(GPT系列模型中也有类似的描述)。 5. 在RM、SFT、DPO阶段使用不同的数据和超参数进行训练。最终模型,由多个版本的模型取平均得到。 6. 上述阶段重复了6轮。在每一轮中,从最新的模型中采样合成数据,并收集新数据的偏好标注和SFT标注。
数据 1. 偏好数据 1. 偏好数据生成和标注。在每一个轮次之后,通过多个不同的模型(采用不同的数据混合方案和不同的对齐方案),生成多样的响应。由标注人员进行分级标注,并鼓励标注人员对首选响应进行编辑,因此部分偏好数据会有三个响应(编辑>选择>拒绝)。 2. 随着轮次的迭代,会逐步提升提示的复杂性,并针对模型表现薄弱的领域进行针对性补强。 3. 在每个轮次,RM模型会使用所有偏好数据进行训练,而DPO只会使用最新的数据。 2. SFT数据,其中代码和推理数据占比达到36%,来源: 1. 来自标注集合中的提示词+通过拒绝采样生成的响应。 1. 拒绝采样:从最新的对齐后模型中采样K个(通常在10到30间)响应,并使用RM选出最佳响应。 1. 可以通过PagedAttention提升拒绝采样的效率。 2. 后训练的后期轮次中,会引入系统提示词,进一步引导模型生成符合偏好的响应。 2. 针对特定能力的合成数据(用于功能增强部分)。 3. 上述两份数据都来自模型生成,会存在数据质量的问题。因此采用了基于RM和LLM的数据质量打分、难度打分进行过滤,以及基于RoBERTa的语义去重。 • 功能增强 1. 提升代码能力 1. 代码专家模型。单独训练了一个代码领域的专家模型,方法类似CodeLlama(猜测与之前GPT系列的Codex类似)。 2. 合成数据。代码专家模型+Llama3生成了2.7M的数据,用于SFT。 1. 基于执行反馈的代码数据合成。生成了大约1 M的数据。 2. 编程语言翻译。通过将主流编程语言翻译成较少见的编程语言(如python --> php),提升模型在后者的代码能力。 3. 逆向翻译。为了提升模型写代码注释和代码文档的能力,通过“原始代码 --> 代码解释 --> 新生成代码”,通过参考原始代码,评估新生成代码质量,并保留高质量代码对应的代码解释。生成了约1.2 M的数据。 2. 提升多语言能力 1. 多语言专家模型。在原模型训练到一定程度后,使用含90%多语言语料的数据进行继续预训练,并单独进行后训练。该模型用于收集非英语的标记数据。(没有讲具体用法,猜测可能是通过提示词的方式,让模型对数据质量进行打分) 2. 多语言的SFT数据收集。 1. 人工标注:请多语言的专家和使用者标注数据,占2.4%。 2. 来自其它NLP任务的数据。通过将其它多语言的NLP任务改写为对话形式,并进行低质过滤。占44.2%。 3. 拒绝采样数据。与之前的区别是,会对提示和响应的语言匹配(同一种语言)进行检验。占18.8%。 4. 翻译数据。避免使用机翻数据;使用了一些合成的多语言的推理数据。占34.6%。 3. 提升数学与推理能力 1. 数学与推理数据的生成: 1. 推理相关的提示数据不足,通过将数学问题转换为问答格式,用于SFT。 2. 生成逐步推理数据:使用Llama3为一组选定的提示生成逐步的解决方案,每个提示都会生成多个结果。再通过最终答案的正确与否进行数据过滤;以及使用Llama3进行自我验证,对生成中间步骤的有效性进行校验,剔除无效数据。 3. 过滤错误的推理步骤:训练了一个“推理结果+推理步骤”的奖励模型,来过滤中间步骤出错的数据。对于更困难的问题,会结合“蒙特卡罗搜索树”+奖励模型,生成有效的推理数据。 4. 同时包含代码和推理过程的数据:通过提示模型使用推理+代码的方式解决问题,来生成数据。并根据代码的执行结果,过滤无效的推理链。 5. 从反馈和错误中学习:为了模拟真实对话场景中,人类会对模型的错误响应进行纠正的场景,使用了生成的错误数据,并让提示模型进行纠正,反复迭代,生成纠错数据。 4. 提升长上下文能力 1. 在预训练的最终阶段,上下文长度从8K提升到了128K,需要仔细地调整训练方案,才能平衡“短上下文”和“长上下文”的能力。若只使用短上下文会显著地降低长上下文的能力,为了增加长上下文的SFT数据,使用以下方案生成数据: 1. (可能多轮的)问答数据:将长文档作为上下文,选取随机的文档块,使用Llama3的早期版本生成问答数据。 2. 文档总结:使用最强的8K上下文的Llama3模型对文档进行分层总结(先分段总结,再结合分段进行二次总结),作为参考答案。训练的时候,提供完整的文档,让模型进行总结,并要求其保留细节。另外,还根据分层总结的信息,让模型生成需要全局理解长文档的问答对。 3. 长上下文的代码推理:识别python代码仓库中被其它文件至少引用5次以上的文档,剔除它,并要求模型识别出剔除的文档,并生成缺失的代码。 2. 长上下文的SFT数据,分为16K、32K、64K、128K。作者提到使用0.1%的长上下文数据+短上下文数据,可以比较好的平衡长上下文和短上下文的能力。 3. DPO,还是使用短上下文的偏好数据即可。 5. 提升工具使用能力 1. 工具使用,主要是教会模型使用(核心工具)搜索引擎、python解释器、数学计算引擎(Wolfram Alpha API)。同时,提升模型的zero-shot的工具使用能力,根据用户给定的工具定义+当前的上下文+用户的提示词,进行正确的工具调用。 2. 通过python对象实现核心工具能力。模型只需要有对应函数的签名和docstring,就能实现正确的调用。 3. 工具调用的合成数据集: 1. 单步工具使用数据:合成包含few-shot的用户提示,且这些提示需要调用核心工具才能回答。在此基础上,让模型根据调用结果,输出最终答案。最终的轨迹:系统提示、用户提示、工具调用、工具输出、最终答案。 2. 多步工具使用数据:生成至少需要两次及以上工具调用回复的提示,并通过few-shot的方式引导Llama3生成类似ReAct的解决方法,包括交替进行的推理和工具调用。 3. 文件上传:生成提示需要基于上传文件,实现文件内容总结、内容查找、问题修复、优化代码、数据分析、数据可视化等。 1. 文件内容会通过工具调用(python函数)进行读取,并添加到上下文中。 4. 经过合成数据集的微调后,收集了具有多样性和挑战性的人类标注的任务,包括多轮交互、超过三步的工具使用、工具调用未产生预期结果的实例。 5. 另外,还需要避免模型“过度使用工具”,避免简单提示也调用工具。 6. zero-shot工具调用:在三元组(函数定义、用户查询、对应调用)上进行微调,提升模型的zero-shot工具使用能力,并使用需要未见过的工具的提示,评估模型。 6. 提升事实性 1. 开发了知识探测技术(knowledge probing technique),用于生成低事实性数据: 1. 数据提取。从预训练数据中提取一个片段。 2. 生成事实性问题。让Llama3基于对应片段,生成问题。 3. 采样模型响应。从Llama3生成该问题的多个响应(不提供上下文)。 4. 正确性打分。提供上下文,让Llama3对生成的响应,进行正确性打分。 5. 信息丰富度打分。使用Llama3对生成结果,是否包含丰富的信息,进行打分。 6. 生成拒绝回答的响应。对于“正确性打分低”且“信息丰富度高”的响应,使用Llama3生成拒绝回答的响应。 2. 通过上述的数据,来鼓励模型仅回答它有知识的问题,并拒绝回答那些它不确定的问题。 1. 具体的训练方法没有提,猜测可能是dpo进行偏好对齐。 7. 提升可控性 1. 主是增强模型在响应长度、输出格式、语气、角色/个性方面的可控性。 2. 做法,通过系统提示对模型提出强可控性的要求,并让标注员对响应进行标注(或编辑),进行数据收集;之后,将收集的偏好数据,用于RM、拒绝采样、SFT、DPO,用于提升可控性。 8. 提升安全性 1. 对于提升模型的安全性来讲,需要从预训练、后训练的各个阶段都进行处理,包括预训练、SFT、DPO等。 2. 安全性评估,主要关注两个指标,最终违规率(回答了不该回答的)和错误拒绝率(不回答该回答的),两者都是越小越好。 9. 提升多模态能力 1. 多模态能力的引入,图片和视频通过单独的视觉编码器进行处理,再通过交叉注意力整合进行LLM;语音输入则通过语音转文字进行输入模型。 2. 图像和语音能力的构建,都需要单独经过完整的预训练、SFT、对齐的过程,工作量相当大,此处省略,感兴趣可以阅读原论文。
详细介绍:这是Meta(脸书母公司)开源的大语言模型家族,从70亿参数到700亿参数应有尽有,主打一个“轻量能跑、开源免费”。普通人下载后,在消费级显卡上就能微调,不用再眼巴巴看着大厂模型流口水~
核心特点:
尺寸灵活:从7B到70B参数,电脑配置不够也能玩小规格; 微调友好:社区有超多现成工具(比如Alpaca-LoRA),新手也能快速调教; 多语言支持:对中文、英文等主流语言适配都不错。
应用场景:做聊天机器人、个性化问答系统、内容生成工具,甚至训练垂直领域小模型(比如法律、医疗)都合适。
项目对比:和闭源的GPT-4比,LLaMA胜在“免费开源”,普通人也能下载微调;但论综合能力,GPT-4还是老大哥。和其他开源大模型(比如Mistral)比,LLaMA的生态更成熟,社区工具多到用不完~
GitHub地址:https://github.com/facebookresearch/llama
- 本文固定链接: https://xmsdn.com/31.html
- 转载请注明: GITHUB 于 github开源项目 - 免费开源系统 发表