查看原文
其他

如何高效微调大模型?技术原理与最佳实践揭秘!

InternLM 2024-04-23

【OpenMMLab 社区开放麦】开播啦!技术下饭番追起来,每周一个新芝士。欢迎广大社区同学加入直播间参与讨论的同时,也非常鼓励社区同学拿起话筒登上舞台,社区知识开放麦等你来玩~



本期精彩



随着,ChatGPT 迅速爆火,引发了大模型的时代变革。然而对于普通大众来说,进行大模型的预训练或者全量微调遥不可及。由此,催生了各种参数高效微调技术,让科研人员或者普通开发者有机会尝试微调大模型。


因此,该技术值得我们进行深入分析其背后的机理,本次分享主要讲述目前业界常见的一些大模型微调技术原理(如:LoRA、Prefix Tuning、Adapter Tuning 等)以及在进行大模型微调技术研究时的最佳实践分享;同时,将分享大模型微调实践过程中如何选择模型及 GPU 型号等。




分享内容


  • 背景

  • PEFT 原理与总结

  • BitFit、Prefix Tuning、Adapter Tuning、LoRA、MAM Adapter、UniPELT

  • PEFT 实践



分享时间


北京时间

2023 年 10 月 12 日(周四)

20: 00 - 20: 40(分享)

20: 40 - 21: 00(Q&A)



分享嘉宾


李国冬


现就职于马上消费金融股份有限公司,擅长大模型、MLOps、云原生等相关技术。热衷于技术分享,其技术博客累积阅读量约 400 万,累积粉丝数约 3 万。人工智能关键技术和应用测评工业和信息化部重点实验室特聘研发运营和管理工作组咨询专家。



内容详情


BitFit


BitFit 是一种稀疏的微调方法,它训练时只更新 bias 的参数或者部分 bias 参数。


对于 Transformer 模型而言,冻结大部分 transformer-encoder 参数,只更新 bias 参数跟特定任务的分类层参数。涉及到的 bias 参数有 attention 模块中计算 query,key,value 跟合并多个 attention 结果时涉及到的 bias,MLP 层中的 bias,Layernormalization 层的 bias 参数。



Prefix Tuning


Prefix Tuning 方法在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 PLM 中的其他部分参数固定。



针对不同的模型结构,需要构造不同的 Prefix。


针对自回归架构模型:在句子前面添加前缀,得到 z = [PREFIX; x; y],合适的上文能够在固定 LM 的情况下去引导生成下文(比如:GPT3 的上下文学习)。


针对编码器-解码器架构模型:Encoder 和 Decoder 都增加了前缀,得到 z = [PREFIX; x; PREFIX0; y]。Encoder 端增加前缀是为了引导输入部分的编码,Decoder 端增加前缀是为了引导后续 token 的生成。



Adapter Tuning


Adapter Tuning 方法设计了 Adapter 结构,并将其嵌入 Transformer 的结构里面,针对每一个 Transformer 层,增加了两个 Adapter 结构(分别是多头注意力的投影之后和第二个 feed-forward 层之后),在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构和 Layer Norm 层进行微调,从而保证了训练的高效性。


LoRA


LoRA 方法的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。


在涉及到矩阵相乘的模块,在原始的 PLM 旁边增加一个新的通路,通过前后两个矩阵 A,B 相乘,第一个矩阵 A 负责降维,第二个矩阵 B 负责升维,中间层维度为 r,从而来模拟所谓的本征秩。


在下游任务训练时,固定模型的其他参数,只优化新增的两个矩阵的权重参数,将 PLM 跟新增的通路两部分的结果加起来作为最终的结果(两边通路的输入跟输出维度是一致的),即 h=Wx+BAx。第一个矩阵的 A 的权重参数会通过高斯函数初始化,而第二个矩阵的 B 的权重参数则会初始化为零矩阵,这样能保证训练开始时新增的通路 BA=0 从而对模型结果没有影响。


在推理时,将左右两部分的结果加到一起即可,h=Wx+BAx=(W+BA)x,所以只要将训练完成的矩阵乘积 BA 跟原本的权重矩阵 W 加到一起作为新权重参数替换原本 PLM 的 W 即可,对于推理来说,不会增加额外的计算资源。



UniPELT


UniPELT 方法是 LoRA、Prefix Tuning 和 Adapter 的门控组合。


更具体地说,LoRA 重新参数化用于 WQ 和 WV 注意力矩阵,Prefix Tuning 应用于每一 Transformer 层的 key 和value,并在 Transformer 块的 feed-forward 子层之后添加 Adapter。对于每个模块,门控被实现为线性层,通过 GP 参数控制 Prefix-tuning 方法的开关,GL控制LoRA方法的开关,GA 控制 Adapter 方法的开关。可训练参数包括 LoRA 矩阵 WA(Down)和 WB(Up),提示调优参数 Pk 和 Pv、Adapter 参数和门函数权重。即图中蓝颜色的参数为可学习的参数。



相关工作


知乎&公众号【吃果冻不吐果冻皮】

  • 大模型参数高效微调技术原理综述系列(1-7 章)

  • 大模型参数高效微调技术实战系列(1-6 章)


code: 

llm-action:https://github.com/liguodongiot/llm-action/tree/main/train/peft



交流群


同时为了方便大家交流沟通,我们还建立了多模态相关的交流群,提供与大佬 1v1 的机会,扫码即可入群~






往期回顾


上期开放麦我们介绍了「Robo3D」和「RoboBEV」—— 为自动驾驶中的 3D 感知任务所专门设计的鲁棒性测试基线。该基线旨在探讨 3D 物体检测器、3D 语义分割器以及各类 BEV 感知模型在分布外 (Out-of-Distribution, OoD) 场景下针对现实环境中发生的自然损坏的鲁棒性。


分享内容包括:


  • 自动驾驶中的 3D 感知概述

  • RoboBEV:鲁棒 BEV 感知基线

  • Robo3D:鲁棒 3D 感知基线

  • 总结 & 答疑


感兴趣的同学,可以通过直播回放学习一下哦~



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存