写点什么

大模型高效开发的秘密武器:大模型低参微调套件 MindSpore PET

  • 2023-04-10
    广东
  • 本文字数:2441 字

    阅读完需:约 8 分钟

大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET

本文分享自华为云社区《大模型高效开发的秘密武器——大模型低参微调套件MindSpore PET篇》,作者:yd_280874276 。


人工智能进入“大模型时代”。大模型具备更强泛化能力,在各垂直领域落地时,只需要进行参数微调,就可以适配多个场景。因此,发展大模型已成为产学研各界共识。


在大模型开发方面,昇腾推出了大模型开发使能平台,基于昇思 MindSpore 构建了支撑大模型开发的全流程的大模型使能套件,包括 TransFormers 大模型套件 MindSpore TransFormers、以文生图大模套件 MindSpore Diffusion、人类反馈强化学习套件 MindSpore RLHF、大模型低参微调套件 MindSpore PET,支撑大模型从预训练、微调、压缩、推理及服务化部署。


本期,我们将开启“大模型高效开发的秘密武器”系列之首篇,为大家介绍大模型低参微调套件——MindSpore PET。

一、MindSpore PET 介绍


MindSpore PET(MindSpore Parameter-Efficient Tuning)是基于昇思 MindSpore AI 融合框架开发的大模型低参微调套件。当前该套件提供 6 种算法,包含 5 种经典的低参微调算法 LoRA、Prefix-Tuning、Adapter、LowRankAdapter、BitFit,以及 1 种用于下游任务精度提升的微调算法 R_Drop。低参微调算法只需微调极少量的参数,即可在保持全参微调精度的情况下,大大节约计算和存储内存,减少微调训练的时间;精度提升的微调算法在几乎不增加计算内存及时间情况下,增加模型随机性,防止模型过拟合从而提高模型的正确率。


套件为所有算法提供了 API 调用接口及使用案例,实现开箱即用,并为低参微调算法提供了只保存极少的可学习参数的接口,使得生成的 ckpt 文件非常小。


开源仓地址:https://github.com/mindspore-lab/MindPet


二、MindSpore PET - LoRA

2.1 算法原理


LoRA: Low-Rank Adaptation of Large Language Models,是微软提出的一种针对大语言模型的低参微调算法。LoRA 假设在适配下游任务时,大模型的全连接层存在一个低内在秩(low intrinsic rank),即包含大量冗余信息。因此提出将可训练的秩分解矩阵注入 Transformer 架构的全连接层,并冻结原始预训练模型的权重,从而可大大减少参与训练的参数量。


2.2 应用效果——以悟空画画为例


悟空画画模型(MindDiffusion)是基于扩散模型的中文文生图大模型。虽然有强大的能力,但模型网络规模巨大,约 9 亿参数量,适配下游任务时训练时间长,计算和存储内存开销大。


经分析,悟空画画中使用 CLIP 模型将人类语言转换成机器能理解的数学向量,并通过 U-Net 模型预测噪声。这两种模型的 Attention 结构都包含全连接层,适配下游任务时可能含有大量冗余信息。



因此,我们分别在 U-Net 的交叉注意力层 q、k、v、output 四个模块上,注入了 LoRA 模块,发现效果异常好。


如下图所示,适配 LoRA 后即使仅训练 0.07%参数,也可以生成高质量的图像!



同时,相比全参微调,应用 LoRA 算法,训练性能也得到大幅提升:



原本端到端全参微调需 17 小时,适配后仅需 9 小时,节约近 50%时间;


  • 计算内存节约 40%,可继续增大一倍 batch_size,速度更快;

  • 最终保存的 ckpt 大小才 06MB,不再需要用 4 个 GB 保存所有参数。


这说明当有 n 个下游任务时,仅需保存 n x 3.06MB,避免了 n x 4GB 的“庞然大物”。而且,我们还做了令人振奋的实验。如果用户训练了多种风格的模型,只需 0.5s 就可以切换风格,真正的无缝切换“毕加索”和“新海诚”!


原因在于 MindSpore 框架的静态图特性,只需要在第一次正向训练时编图,后续即使加载其它 LoRA-ckpt 更新参数,也无需重新编图。

2.3 使用方式


为大模型减轻负担的 LoRA 算法本身用起来也很轻松,端到端仅需简单五步就可以完成适配。


第一步:


将模型 CrossAttention 结构中 qkvo 的 Dense 层替换成 LoRADense:



第二步:


在训练脚本中调用冻结方法,仅训练新增的 lora 模块:



第三步:


在训练脚本中将保存 ckpt 的 ModelCheckpoint 替换为 TrainableParamsCheckPoint,仅保存需要更新的参数:



第四步:


根据训练目标调整学习率、batch_size 等参数:



第五步:


训练完成后,在评估脚本中分别加载预训练 ckpt 和微调后生成的 ckpt:



我们已经开源所有代码,并给出了详细的接口和用例介绍:


https://github.com/mindspore-lab/MindPet/blob/master/doc/TK_DeltaAlgorithm_README.md


需要注意的是相比全参微调,适配 LoRA 后一般要设置更大的学习率。如适配悟空画画时,我们就将学习率从 1e-5 增大到 1e-4。

三、MindSpore PET - Prefix-Tuning


Prefix-Tuning: Optimizing Continuous Prompts for Generation,也是一种针对大语言模型的低参微调算法。研究人员提出,使用连续的向量而不是离散的词汇来构建前缀模板,即在输入前加入连续的 token embedding,可以增加 query 和 key 的相关性。因此,Prefix-Tuning 通过在每个 multi-head attention 的 key 矩阵和 value 矩阵前注入可训练的 prefix 向量 k,v,并冻结原始网络参数,来大幅提升生成类任务的性能。


Prefix-Tuning 在 GPT-2 和盘古 Alpha 大模型上都有很好的效果。与全参微调相比,在保持原有精度的前提下,使用 Prefix-Tuning 训练盘古 Alpha 仅需 5.5%的参数量,节约了 65%以上的计算内存,并将一个迭代的耗时缩短到一半。


四、MindSpore PET - Rdrop


R-Drop: Regularized Dropout for Neural Networks,是一种用于提升精度的微调算法,主要通过简单的“两次 Dropout”来构造正样本进行对比学习,增加模型随机性。具体是在模型加载完一个 batch 的数据集之后,复制一份该数据,并同时输入到模型中,然后分别计算损失函数,并将结果相加得到最终的 loss 值。尽管逻辑非常简单,却能很好的防止模型过拟合,进一步提高模型的正确率。经在 Bert 上多个下游任务上验证,几乎保持同样的内存和时间开销,就能提升 2.6 个点的精度。



大模型开发到部署是一个高门槛、复杂的过程,大模型使能套件将帮助开发者,让大模型更易开发、易适配、易部署。


想了解更多关于 TransFormers 大模型套件 MindSpore TransFormers、以文生图大模套件 MindSpore Diffusion、人类反馈强化学习套件 MindSpore RLHF 的相关信息,请关注昇思 MindSpore 公众号,我们将持续为大家带来人工智能领域技术干货和活动消息。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET_人工智能_华为云开发者联盟_InfoQ写作社区