基于MindSpore的RoBERTa-Large模型IA3微调并部署gradio

基于MindNLP的RoBERTa-Large大模型的IA3微调并部署gradio

——兰大昇思学习小组3组


任务描述

使用MindNLP组件对Roberta-Large模型进行IA3微调训练

使用MindNLP组件加载Roberta-Large模型, 设置IA3算法配置并初始化微调模型,加载数据进行训练,最后通过部署gradio呈现。

数据集:GLUE-MRPC


以下是本篇文章正文内容

一、微调任务的摸索

最开始参考了优快云某帖——Roberta-Large的Prompt Turning微调方法:https://blog.youkuaiyun.com/LuoHangSF/article/details/143988389

在此基础上将prompt tuning配置改为IA3 tuning配置,完成了最初版:
https://github.com/Snape001/MindSpore-Learning-Records/blob/main/Roberta-Large%E6%A8%A1%E5%9E%8BIA3%E5%BE%AE%E8%B0%83/Previous_version_of_ia3.ipynb

但是定睛一看,所有训练轮次的accuracy都是0.68,像是根本没有训练,没有更新模型参数:

在这里插入图片描述

进一步推理发现不管输入哪两个sentence,输出的output都是1(等价)。

MRPC是一个经典的NLP数据集,广泛用于评估语言模型对句子语义相似性的识别能力,其包含大量经过人工标注的句子对,被分为“语义相同”和“语义不同”两个类别,而MRPC评估数据集的分布恰好68%的标签为“1”,其余为“0”,也就是说模型参数都是在初始化之后没有改变过。

后来尝试更新mindnlp0.4.1版本,模型参数更新正常,完成最终版:
https://github.com/Snape001/MindSpore-Learning-Records/blob/main/Roberta-Large%E6%A8%A1%E5%9E%8BIA3%E5%BE%AE%E8%B0%83/ia3.ipynb

二、微调代码演示

1.环境安装&&引入库

代码如下:

# 安装 mindnlp
!pip install git+https://github.com/mindspore-lab/mindnlp.git@master
!pip show mindnlp # 确保为0.4.1版本

from tqdm import tqdm
import mindspore
from mindnlp.core.optim import AdamW
from mindnlp.dataset import load_dataset
import mindnlp.peft as peft

import mindnlp.evaluate as evaluate
from mindnlp.dataset import load_dataset
from mindnlp.common.optimization import get_linear_schedule_with_warmup
from mindnlp.transformers import AutoModelForSequenceClassification, AutoTokenizer

2.参数配置

代码如下:

# 启用Ascend
from mindspore import context
context.set_context(device_target="Ascend")

#配置训练微调参数
batch_size = 8
model_name_or_path = "AI-ModelScope/roberta-large"
task = "mrpc"
peft_type = peft.PeftType.IA3
num_epochs = 6

peft_config = peft.IA3Config(task_type="SEQ_CLS", inference_mode=False)
lr = 1e-3

昇思大模型平台提供算力支持,启用Ascend进行模型训练。

为了便于调试,训练轮数设为了6。

3.加载tokenizer

代码如下:

if any(k in model_name_or_path for k in ("gpt", "opt", "bloom")):
    padding_side = "left"
else:
    padding_side = "right"

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, padding_side=padding_side, mirror='modelscope')
if getattr(tokenizer, "pad_token_id") is None:
    tokenizer.pad_token_id = tokenizer.eos_token_id

如模型为GPT、OPT或BLOOM类模型,从序列左侧添加paddingÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值