一、什么是微调微调(Fine-tuning)是指在一个已经预训练好的大语言模型基础上,用特定领域或任务的数据继续训练,让模型更好地适应具体需求。 打个比方,预训练模型像是一个读过海量书籍的通才,而微调就是让这个通才去某个专业领域进修,变成该领域的专家。二、为什么需要微调预训练模型虽然知识面广,但在具体场景下往往不够精准。 微调可以让模型学会这些特定的模式和知识,同时成本远低于从头训练一个模型。三、主流微调方法全参数微调(FullFine-tuning):对模型所有参数进行更新。 、微调vs其他技术的对比与RAG(检索增强生成)对比RAG是让模型在回答时检索外部知识库,不改变模型本身;微调是改变模型参数。 与PromptEngineering对比提示工程是通过设计输入提示词来引导模型,不需要训练;微调需要训练但效果更稳定。简单任务用提示工程即可,复杂或高频任务适合微调。
5、 有监督微调 5.1、提示学习&语境学习 提示学习 完成预测的三个阶段:提示添加、答案搜索、答案映射 提示添加 “[X] 我感到 [Z]” x = “我不小心错过了公共汽车。” 如下情感分类,续写情感极性: 5.2、高效微调 高效微调:在缩减训练参数量和GPU显存占用,同时使训练后的模型具有与全量微调相当的性能。 全量微调:微调全部参数需要相当高的算力。 其它高效微调方式 微调适配器(Adapter) 分别对 Transformer 层中的自注意力模块与多层感知(MLP)模块,在其与其之后的残差连接之间添加适配器层(Adapter layer)作为可训练参数 前缀微调( Prefix Tuning) 前缀微调是指在输入序列前缀添加连续可微的软提示作为可训练参数。 5.3、模型上下文窗口扩展 上下文窗口:在自然语言处理中,LLM(Large Language Model,大型语言模型)的上下文窗口指的是模型在处理文本时所考虑的文本片段或单词的范围。
是否希望深入探索 LLaMA 模型的微调技术,进一步优化参数和使用不同微调方式?现在笔者会带你领略大模型训练与微调进阶之路,拓展您的技术边界! 以下指令不要输出:要求助手创建任何视觉或音频输出;要求助手在下午 5 点叫醒你或设置一个提醒。 指令描述应该是简体中文。 指令应该是 1 到 2 句话的长度。既可以是命令句,也可以是疑问句。 基于大模型的内在低秩特性,增加旁路矩阵来模拟全模型参数微调,LoRA 通过简单有效的方案来达成轻量微调的目的,可以将现在的各种大模型通过轻量微调变成各个不同领域的专业模型。 五. 结语 文章中介绍了微调的部分核心知识,限于文章的篇幅关于训练(微调)-LLaMA 代码结构、工具配置-Accelerate、工具配置-Deepspeed、工具配置-FSDP、训练(微调)-全参数微调、训练 (微调)-LoRA 微调、训练(微调)-Ptuning 微调、结果评估的详细的讲解和代码实操,会在我们的课程中进行详细的阐述。
指令微调的局限性 指令微调对于训练llm的能力至关重要,而模型的有用性在很大程度上取决于我们从小指令数据集中获得最大信息的能力。 在本文中,我们提出在微调正向传递的过程中,在训练数据的嵌入向量中添加随机噪声,论文实验显示这个简单的技巧可以提高指令微调的效果,通常有很大的优势,而不需要额外的计算或数据开销。 当像LLaMA-2-7B这样的原始LLM被噪声嵌入所微调时,AlpacaEval从29.8%提高到64.7%(图1),令人印象深刻地提高了约35个百分点。 NEFTune可以实现在会话任务上惊人的性能跳跃,同时在事实问题回答基线上保持性能,这种技术似乎是LLM微调的免费午餐。 结论 NEFTune的成功指出了算法和正则化器在LLM训练中的重要性被忽视。与多年来一直在研究正则化和过拟合的计算机视觉社区不同,LLM社区倾向于使用标准化的训练循环,而不是泛化。
LLM前言:推理加速、模型微调/对齐、开源LLM、Agent、多模态 推理加速 推理加速是AI技术中的关键环节,能让AI模型在实际应用中更智能、更高效。推理加速技术主要通过算法优化和硬件加速来实现。 模型微调/对齐 模型微调:在已有的预训练模型基础上,通过针对特定任务或行业需求做局部调整,以提升模型在特定领域或任务中的适用性和完成度。微调方法包括全参数微调(FFT)、参数高效微调(PeFT)等。 其中,LoRA微调是参数高效微调的一种流行方法,能提升参数调整效度,高效切换任务、减少推理延迟,并降低微调成本。 模型对齐:确保模型的行为、输出与人类的期望、目标和价值观保持一致的过程。 开源LLM 开源LLM(大型语言模型)是指公开源代码的大型语言模型,允许开发者自由使用、修改和分发。开源LLM的出现降低了AI技术的门槛,促进了AI技术的创新和发展。
因此,RAG 和微调是我们唯一的选择。 要了解差异,请考虑将 LLM 的训练视为学生备考。RAG 就像参加开卷考试。LLM 可以使用任何检索机制(例如网络浏览或数据库查询)访问相关信息。 微调就像参加闭卷考试。LLM 需要在微调过程中记忆新知识,并且它根据其记忆回答问题。 下表总结了这两种规范方法的优缺点。 如前所述,微调面临的挑战之一是创建训练数据集。但是,一旦我们为 RAG 准备了文档,我们就可以直接将它们用于微调。我们还通过利用 LLM 来改写现有文档来合成更多数据。 下图显示了合并 RAG 和微调模型的整体工作流程。对于给定的用户问题,微调后的 LLM 会推测性地生成一个初始答案。然后使用此响应来获取相关文档。 最后,LLM 创建一个结合检索到的文档和原始用户问题的答案。添加微调模型极大地提高了检索的准确性和最终答案的质量。
先说一些观点,假如我们在微调一个大模型,单次实验微调所用的指令微调数据集应该选取“质量高、多样性”,在训练资源充足的情况可以加入数量更多,长度更大的数据集。 可以基于多个质量比较高的数据,做一份格式统一的多样性数据用来做sft,一次性微调完比较好,多次微调效果可能会折扣。 或者有继续微调比较合适的方案也可以,不损失之前模型的效果(或者损失比较小),目前可以尝试Lora或者Qlora的方式微调底座模型,然后将训练好的Lora权重合并到原始模型,这样可以减轻多次微调对模型的影响 2 常见指令微调模板 通过观测一些排行榜靠前和主流指令微调数据集,笔者总结一些常见的指令微调的Prompt: 常见的是stanford_alpaca中模板 PROMPT_DICT = { "prompt_input 从指令微调数据集处理工作上,个人认为可以从以下方式进行: (1) 事先准备多种高质量的指令微调数据集,每个数据集尽量保持差异性。那高质量如何定义呢?
基于1B到16 B两组预训练的双语LLM,以及在双语机器翻译和多语种摘要基准测试上的实验,我们发现:1)LLM微调遵循基于幂的乘法联合缩放律,即微调数据大小与彼此缩放因子之间的比例关系; 2)LLM微调从 微调对模型泛化能力的影响:研究微调是否会影响LLM在相关任务上的零样本(zero-shot)泛化能力。 通过这些研究,论文旨在为理解、选择和发展LLM微调方法提供见解。 Q2: 有哪些相关研究? A:相关研究主要集中在以下几个领域: LLM微调(LLM Finetuning):研究者们探索了在大型预训练模型上进行微调的方法,以提高特定任务的性能。 分析和比较:研究者们分析了LLM模型缩放、预训练数据缩放和PET参数缩放对微调性能的影响。他们发现LLM模型缩放对微调的益处大于预训练数据缩放,而PET参数缩放通常效果不佳。 关键微调数据规模的估计:使用拟合的缩放定律来估计在不同任务和模型大小下,不同微调方法之间的性能差异达到显著水平所需的微调数据规模。 Q5: 有什么可以进一步探索的点?
指令微调的LLMs 这个小节将详细介绍通过指令微调训练的广泛使用的LLM模型。 Flan-T5 FLAN-T5(11B)是一个用T5(11B)初始化的LLM,然后在FLAN数据集上进行微调。 在微调期间,FLAN-T5适应基于jaxx的T5X框架,并选择每2k步评估一次持久化任务的最佳模型。与T5的预训练阶段相比,微调花费了0.2%的计算资源(大约128个TPU v4芯片37小时)。 GPT-4-LLM GPT-4-LLM(7B)是在GPT-4生成的指令数据集上通过微调LLaMA(7B)训练的语言模型。GPT-4-LLM使用LLaMA初始化,然后对构造的指令数据集进行监督微调。 但由于资源限制,Gupta等(2023)并未对T5-11B等LLM进行实验。因此,为了更全面地理解IT模型,有必要使用更大的语言模型和数据集进行进一步的研究。
在早期,LLM微调主要采用全参数微调方式,需要微调整个模型的所有参数。 5. 实际意义/风险/未来趋势 5.1 实际意义 降低微调门槛:参数高效微调技术降低了LLM微调的计算和存储门槛,使更多的开发者和机构能够参与LLM的微调。 促进生态发展:参数高效微调技术的发展促进了LLM生态的发展,推动了更多LLM应用的出现和普及。 支持边缘部署:参数高效微调技术支持在边缘设备上进行微调,拓展了LLM的应用场景。 这些技术的发展降低了LLM微调的门槛,提高了迭代效率,促进了LLM生态的发展。 同时,我们也需要关注微调技术面临的挑战,如性能损失、技术复杂度、兼容性问题等。 未来,随着更高效的微调技术、自动化微调流程、多模态微调支持、联邦微调技术和动态微调技术的出现,LLM微调技术将进一步发展,推动LLM技术在更多领域的广泛应用。
可这就是当前AI训练的常态——每遇到新任务就得或多或少的"回炉重造"——微调(Fine-Tuning)。 尽管ACE展现出巨大潜力,但断言"微调已死"显然过于激进。 就像电动汽车不会立即淘汰燃油车一样,ACE和传统微调各有其适用场景。 对于需要深度领域适配、数据量充足且对模型性能要求极高的场景,传统微调仍有其不可替代的价值。 ACE的真正突破在于开创了AI训练的新范式——它让"持续学习"从概念变成了现实。 传统微调好比一次性投资,投入大、周期长、风险高;ACE则像是建立了一个"经验银行",可以持续存入新的智慧,随时提取使用。这种范式转变对于需要快速响应市场变化的企业而言,其价值远超技术本身。 未来,ACE能否杀死微调并不重要,重要的是它一可能会促使更多领域开花结果。
2024年千道算法面试题综述 为什么需要LLM LLM 是一种基础模型,与传统模型不同,在早期模型中基础模型是在大量数据上进行预训练的,然后我们可以直接将它们用于某些任务用例,也可以对其进行微调以适应某些用例 大型语言模型 (LLM) 在客户服务、营销、法律、金融、医疗保健、教育等领域有着广泛的应用,而微调使我们能够使模型适应目标领域和目标任务,这就是 LLM 的微调之处。 一般来说,像卷积神经网络用于图像分类的神经网络并不完全微调,这样做很昂贵,可能导致灾难性遗忘。我们只微调最后一层或最后几层。 对于LLM,我们使用一种类似的方法,称为参数高效微调(PEFT)。 第 3 步 — 数据准备 — Tokenize, 分割数据集并准备批处理 第 4 步 — 配置 LoRA 并获取 PEFT 模型 第 5 步 — 训练模型并保存 第 6 步 - 使用微调模型进行预测 v=Us5ZFp16PaU
JAX生态这两年在LLM训练这块追赶得挺快。PyTorch虽然还是主流但JAX在并行计算、TPU加速和API组合性上确实有些独特的优势。 Google今天放出了Tunix这个库,专门做LLM的后训练——微调、强化学习、知识蒸馏这些都能搞。 Tunix是什么 这是个构建在JAX之上的后训练库,和Flax NNX集成得比较紧密。 核心功能 监督微调:既支持全参数微调,也支持LoRA和Q-LoRA这类参数高效的方法。内存和算力受限的时候,PEFT方案还是挺实用的。 [dev]" TPU上用QLoRA微调Gemma 拿个英译法的任务来演示。用的是Google的Gemma 2B模型,跑在TPU v5e-8上。 TPU优先的设计、模块化的API、LoRA/QLoRA支持、完整的分布式训练策略,这些对做LLM适配研究的人来说都挺有用。 后续应该会继续扩展支持的模型类型和训练算法,值得关注。
LM放大是更实用的技术,可以用于提高小型、微调的语言模型的性能,这是由于以下原因: 关于微调: down-scaling需要访问更大规模的实际微调模型,以模拟在较小规模上的微调结果。 ELI5 数据集:这是一个开放式的用户生成的问题数据集,涵盖了科学、历史和日常生活等领域的问题,来源于Reddit的ELI5论坛。 从测试分割中选择了一个随机的256个ELI5提示子集,这些提示的查询不超过30个词。与HH数据集中的提示相比,ELI5的提示往往会询问更为困难和针对性的事实问题,如科学或政治话题。 结果是基于小型和大型微调模型单独的性能进行归一化的;0对应于小型微调模型的性能,而1对应于大型微调模型的性能。 推测解码使用小代理模型为LLM加速自回归生成,该模型可以自回归地提出一个令牌块,大模型然后可以并行检查。
make_supervised_data_module:加载和处理训练数据及验证数据,为有监督微调做好准备。 加入适量的盐和少量的水,盖上锅盖焖煮5分钟直至鸡肉熟透。\n5. 最后翻炒几下,使汤汁变浓稠即可。\n温馨提示:\n1. 在腌制鸡肉时,如果想让肉质更嫩滑,可以加入少量的淀粉和蛋清。\n2. QLoRA 是什么 QLoRA 是一种高效的模型微调方法,特别适合在资源有限的情况下对大型语言模型(LLM)进行微调。 通过这一步,模型会引入一些额外的低秩矩阵,这些矩阵会在微调过程中被训练,而原始模型的参数保持不变。 参考资料 QwenLM/Qwen Qwen7b微调保姆级教程
Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning[6] LLM-Adapters[7] 是对 PEFT 库的扩展 ,是一个简单易用的框架,将各种适配器集成到 LLM 中,可针对不同的任务执行 LLM 的基于适配器的 PEFT 方法,除了 PEFT 支持的 LoRA、Prefix Tuning、P-Tuning、Prompt T5 的 Model Tuning 实现了强大的性能,但需要为每个任务存储单独的模型副本。 随着模型规模的增加,对 T5 的 Prompt Tuning 与 Model Tuning 的性能相当,同时允许所有任务复用同一固定模型。 Prompt Tuning 以 T5 为基础,将所有任务转化成文本生成任务,表示为 Pr_{\theta}(Y|X) 。
2024年是大型语言模型(llm)的快速发展的一年,对于大语言模型的训练一个重要的方法是对齐方法,它包括使用人类样本的监督微调(SFT)和依赖人类偏好的人类反馈强化学习(RLHF)。 这些方法在llm中发挥了至关重要的作用,但是对齐方法对人工注释数据有的大量需求。这一挑战使得微调成为一个充满活力的研究领域,研究人员积极致力于开发能够有效利用人类数据的方法。 但是这里就要求我们必须要有一个训练好的模型作为对手模型,所以SPIN算法只适合在训练结果上进行微调。 SPIN算法 SPIN从预训练的模型生成合成数据。然后使用这些合成数据对新任务上的模型进行微调。 他们用RMSProp优化器训练Zephyr-7B-SFT-Full,所有迭代都没有权重衰减,就像通常用于微调llm一样。全局批大小设置为64,使用bfloat16精度。 迭代0和1的峰值学习率设置为5e-7,迭代2和3的峰值学习率随着循环接近自播放微调的结束而衰减为1e-7。最后选择β = 0.1,最大序列长度设置为2048个标记。
在提示工程、微调和评估之间进行迭代,直到达到期望的结果。 「5、模型部署」:当模型表现符合预期时,进行部署。在这个阶段,优化计算效率和用户体验。 LLM微调 LLM微调是一个将预训练模型在较小、特定数据集上进一步训练的过程,目的是精炼模型的能力,提高其在特定任务或领域上的性能。 微调方法 LLM微调是一个有监督学习过程,主要使用标注数据集来更新LLM的权重,并使模型提高其特定任务的能力。接下来将为大家介绍一些值得注意的微调方法。 训练过程中,通过多个周期的损失计算来更新模型权重,最终得到一个擅长多种任务的微调模型。但多任务微调模型需要大量数据,可能需要5万到10万个示例。 「5、顺序微调」:顺序微调是将预训练模型按顺序适应多个相关任务。在初步迁移到一般领域后,LLM可能针对更具体的子集进行微调,例如从通用语言到医学语言,再到儿科心脏病学。
gradient_accumulation_steps 8 \ --lr_scheduler_type cosine \ --max_grad_norm 1.0 \ --logging_steps 5 02 本地大模型联网功能开发 2.1 整体架构 2.2 LLM 调用 流程图: def call_llm(prompt: str, with_context: bool = True, context : str | None = None): 功能:调用本地运行的Ollama LLM模型生成回答。 /web-search-llm-db)。 设置余弦相似度作为距离计算方式。 返回可重用的集合对象。 90%的效果,成本却只有5%。
在本文中,我将介绍如何计算这些模型用于推理和微调的最小内存。这种方法适用于任何的llm,并且精确的计算内存总消耗。 每层激活内存消耗= 34 sbh + 5as²b 如果我们使用16位数据类型,那么需要将这个数字乘以2,因为每个激活参数将需要2字节。 5、总计 这个等式大致近似于实际内存消耗。 微调所需的内存 对于微调llm,估计内存消耗稍微复杂一些。除了存储模型权重和激活之外,对于所有层,我们还需要存储优化器状态。 优化器状态的内存消耗 AdamW优化器是最流行的微调llm,它为模型的每个参数创建并存储2个新参数。如果我们有一个100B的模型,优化器将创建200B的新参数! 如果L是层数,那么计算梯度所消耗的内存为 L(34sbh + 5as²b) 估算Llama 3 70b、Mixtral-8x22B和Command R+微调的内存消耗 我们需要估计模型的大小,并添加所有层的激活大小和优化器状态的大小