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

模型,高效,开发,秘密武器,微调,套件,mindspore,pet · 浏览次数 : 63

小编点评

**摘要** 本文介绍了MindSpore PET,一个基于昇思MindSpore AI融合框架的大模型低参微调套件。 **主要内容** * MindSpore PET 是一个基于昇思MindSpore AI融合框架的大模型低参微调套件。 * 该套件提供了多种算法选择,可以根据不同的应用场景进行选择。 * 适配LoRA后,一般要设置更大的学习率。 * MindSpore PET 的其他算法,如Prefix-Tuning 和 RdropR-Drop,也能用于提升模型的精度。 **其他重要信息** * 文档: * TK_DeltaAlgorithm_README.md * 代码: * github.com/mindspore-lab/MindPet * 其他资源: *华为云新鲜技术

正文

摘要:本文介绍大模型低参微调套件——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算法,训练性能也得到大幅提升:

  1. 原本端到端全参微调需17小时,适配后仅需9小时,节约近50%时间;
  2. 计算内存节约40%,可继续增大一倍batch_size,速度更快;
  3. 最终保存的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公众号,我们将持续为大家带来人工智能领域技术干货和活动消息。

 

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

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

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

摘要:本文介绍大模型低参微调套件——MindSpore PET。 本文分享自华为云社区《大模型高效开发的秘密武器——大模型低参微调套件MindSpore PET篇》,作者:yd_280874276 。 人工智能进入“大模型时代”。大模型具备更强泛化能力,在各垂直领域落地时,只需要进行参数微调,就可以

智能工作流:Spring AI高效批量化提示访问方案

集用SpringAI搭建系统,依靠线程池\负载均衡等技术进行请求优化,用于解决科研&开发过程中对GPT接口进行批量化接口请求中出现的问题。大语言模型接口以OpenAI的GPT 3.5为例,JDK版本为17。

【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

前言 文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础。高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限。 这些开源的库或者方法缺点大致可以罗列如下: 只能处理文本,无法提取表格中的内容 缺乏有效的分割策略,要么是一整个文档全部提取,要么是词粒度的获取

门票赠送:2023百度世界大会-大模型驱动产业发展论坛

大模型作为核心的高级生产力正引领着崭新的经济和社会格局,推动着人工智能成为产业发展的新引擎。百度智能云致力于与客户、合作伙伴紧密协作,将大模型深度融入各领域,把握重构机遇,激发开发者和创企的创新能力,推动应用创新,实现智能化跃迁!在此行行AI诚邀您参加:[Baidu World 2023·大模型驱动...

从大数据到AI,华为云存储加速企业大模型快速应用

摘要:AI与大数据算法不断发展,在生产中的应用也越来越广,而应用的场景除了对算法,软件架构要求越来越高外,也对底层IaaS(基础设施即服务)提出了新的挑战。 AI与大数据算法不断发展,在生产中的应用也越来越广,而应用的场景除了对算法,软件架构要求越来越高外,也对底层IaaS(基础设施即服务)提出了新

第129篇:JS模块化开发

好家伙,本篇为《JS高级程序设计》第二十六章“模块”学习笔记 JS开发会遇到代码量大和广泛使用第三方库的问题。 解决这个问题的方案通 常需要把代码拆分成很多部分,然后再通过某种方式将它们连接起来。 若代码量较大,我们使用模块化开发的模式,也能够使代码容易维护 我们需要模块 1.模块模式 把逻辑分块,

【重磅】华为云盘古大模型5.0,正式发布!

2024年6月21日,在华为开发者大会2024(HDC 2024)上,华为常务董事、华为云CEO张平安正式发布盘古大模型5.0,在全系列、多模态、强思维三个方面全新升级;张平安还分享了盘古大模型在自动驾驶、工业设计、建筑设计、具身智能、媒体生产和应用、高铁、钢铁、气象等领域的丰富创新应用和落地实践,

我对《RAG/大模型/非结构化数据知识库类产品》技术架构的思考、杂谈

1、前言 在6.28/29的稀土掘金开发者大会RAG专场上,我们公司CEO员外代表TorchV分享了我们在《RAG在企业应用中落地的难点与创新》 其中最后分享了两个观点: AI在应用场景落地时有三个特点:功能小、质量高、价值大 如果说做产品是把一横做好的话,那么去做企业落地服务就是一竖,从需求和方案

PDCA循环——快速提升软件质量的必备工具

近年来,软件项目的规模及其复杂性正在以空前的速度增长,互联网用户市场庞大,互联网公司和相应的软件产品层出不穷。快速响应需求变化往往是互联网行业的常态,软件产品的快速开发迭代对于公司迅速占领市场、抢占商机有着举足轻重的意义。 伴随着行业的快速发展,原有的研发模式逐渐不能适应高速发展的市场大环境。因此,

分库表数据倾斜的处理让我联想到了AKF模型

1 背景 最近在做需求的时候需要在一张表中增加一个字段。 这张表情况如下: 1、拆分了多个库多张表 2、库表拆分按表中商户编码字段hash之后取模进行拆分 由于库表拆分按照商户编码,有些大商家的单子数量远远要高于其他普通商家,这样就造成了严重的数据倾斜。 在增加字段的时候尝试多种办法,执行多次都添加