大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET
摘要:本文介绍大模型低参微调套件——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 应用效果——以悟空画画为例
悟空画画模型是基于扩散模型的中文文生图大模型。虽然有强大的能力,但模型网络规模巨大,约9亿参数量,适配下游任务时训练时间长,计算和存储内存开销大。
经分析,悟空画画中使用CLIP模型将人类语言转换成机器能理解的数学向量,并通过 U-Net 模型预测噪声。这两种模型的Attention结构都包含全连接层,适配下游任务时可能含有大量冗余信息。
因此,我们分别在 U-Net的交叉注意力层q、k、v、output四个模块上,注入了LoRA模块,发现效果异常好。
如下图所示,适配LoRA后即使仅训练0.07%参数,也可以生成高质量的图像!
同时,相比全参微调,应用LoRA算法,训练性能也得到大幅提升:
- 原本端到端全参微调需17小时,适配后仅需9小时,节约近50%时间;
- 计算内存节约40%,可继续增大一倍batch_size,速度更快;
- 最终保存的ckpt大小才3.06MB,不再需要用4个GB保存所有参数。
这说明当有n个下游任务时,仅需保存n x 3.06MB,避免了n x 4GB的“庞然大物”。而且,我们还做了令人振奋的实验。如果用户训练了多种风格的模型,只需0.5s就可以切换风格,真正的无缝切换“毕加索”和“新海诚”!
原因在于MindSpore框架的静态图特性,只需要在第一次正向训练时编图,后续即使加载其它LoRA-ckpt更新参数,也无需重新编图。
2.3 使用方式
为大模型减轻负担的LoRA算法本身用起来也很轻松,端到端仅需简单五步就可以完成适配。
第一步:
将模型CrossAttention结构中qkvo的Dense层替换成LoRADense:
from tk.delta import LoRADense # original Dense Layer # self.to_q = nn.Dense(query_dim, inner_dim, has_bias=False).to_float(dtype) # replace Dense Layer with LoRADense self.to_q = LoRADense(query_dim, inner_dim, has_bias=False, lora_rank=4, lora_alpha=4).to_float(dtype)
第二步:
在训练脚本中调用冻结方法,仅训练新增的lora模块:
from tk.graph import freeze_delta # freeze all cells except LoRA and head freeze_delta(LatentDiffusionWithLoss, 'lora’)
第三步:
在训练脚本中将保存ckpt的ModelCheckpoint替换为TrainableParamsCheckPoint,仅保存需要更新的参数:
from tk.graph import TrainableParamsCheckPoint # original callback # ckpt_callback = ModelCheckpoint(...) # replace ModelCheckpoint with TrainableParamsCheckPoint ckpt_callback = TrainableParamsCheckPoint(...)
第四步:
根据训练目标调整学习率、batch_size等参数:
epochs: 15 start_learning_rate: 1e-4 end_learning_rate: 1e-6 train_batch_size: 3 warmup_steps: 0 lora_rank: 4 lora_alpha: 4
第五步:
训练完成后,在评估脚本中分别加载预训练ckpt和微调后生成的ckpt:
# 加载预训练ckpt pre_trained_pramas = load_checkpoint(pre_trained_ckpt_path) load_param_into_net(net, pre_trained_pramas) # 加载微调后生成的ckpt trainable_pramas = load_checkpoint(trainable_ckpt_path) load_param_into_net(net, trainable_pramas) # 开始评估 model.eval()
我们已经开源所有代码,并给出了详细的接口和用例介绍: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公众号,我们将持续为大家带来人工智能领域技术干货和活动消息。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
浅析云原生时代的服务架构演进
摘要:相比于传统的微服务架构,云原生和 serverless 技术更加灵活、高效,能够更好地满足用户的需求。 本文分享自华为云社区《《凤凰架构》学习和思考——云原生时代的服务架构演进史》,作者:breakDawn。 随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题。大名鼎鼎的《深入理解java虚拟机》一书作者于21年推出了新作《凤凰架构》,从这本书中可以看到当前时下很多最新的技术或者理念。 一、服务架构演进史 1.1原始分布式时代 DCE(Distributed Computing Enviroment) 分布式运算环境。 DCE的设计主旨:“开发人员不必关心服务是远程还是本地,都能够透明地调用服务或者访问资源” 是很早由OSF指定的分布式技术体系理论,解答了很多问题,例如: 远程服务在哪?——对应服务发现 要部署多少个?——对应负载均衡 请求超时怎么办?——对应熔断、隔离、降级 方法参数和结果如何表示?——对应序列化方式 信息如何传入?——对应传输协议选型 服务权限?——对应认证、授权方案 怎么保证不同机器间的状态最终一致?——对应分布式数据一致性 但...
- 下一篇
测试1号位的自我修养
作者:京东零售吴聪 引言 目前京东实行BigBoss机制以及积木型组织,同时现阶段再次强调了“经营”理念,以上均是比较大的组织层面的纲领和引导,核心是为了激发大家owner意识可以更好更快为公司产出价值和贡献。落到具体执行层面,与测试岗位息息相关的那便是“测试1号位”职责。 什么是测试1号位以及由来 借用Paul总在开年战略会上的话:“职责有边界、思考无边界、担当无边界” 测试1号位一般由大型项目中拆分出来的角色(产品1号位、研发1号位、测试1号位等),也叫主测试,是该项目的质量架构师,负责把控整体的资源协调、测试计划、用例评审,风险预判以及问题解决等,保障项目高质量交付。 1. 自身想象成一个枢纽,可以连接多个测试个体、模块、业务线甚至团队机构,是一个化零为整、力出一孔的角色定位,凝聚大家的力量协作并完成目标,需要在测试内横向拉通,有较强的协调组织能力。 2. 是该角色的代言人,本身携带了半个项目经理的属性。需要与其他角色(业产研设项)有横向沟通,协商,甚至谈判等能力,能主动去前置思考,遇到事情有担当,能发言,逻辑思维能力强。 3. 职能上具有向上汇报和向下管理的能力。可以快速总结抽...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启