使用PEFT插入LoRA或DoRA模块方法以及解决’cuda out of memory’问题

使用PEFT插入LoRA或DoRA模块方法以及解决’cuda out of memory’问题

使用方法

在我们定义好自己的模型以及LoRA配置后,使用函数将LoRA模块加入到model里面去。
下面是我的使用的代码

from peft import LoraConfig,get_peft_model
lora_config=LoraConfig(r=16,target_modules=['qkv'],bias='all',use_dora=True)
model=get_peft_model(model,peft_config=lora_config)

我将我模型里面含有关键字’qkv’的线性层加入DoRA

但是由于模型改变后,key也改变了,导致以前的权重加不去,所以我打印出来对比以前保存的权重文件的key以及现在model的key

'backbone.0.layers.0.blocks.0.attn.qkv.weight'
'base_model.model.backbone.0.layers.0.blocks.0.attn.qkv.base_layer.weight'

发现修改后的模型key前面全部被加上了’base_model.model.‘,而且被添加DoRA的层原始的key被加上了’base_layer.’,所以我将权重的key变成对应的形式,重新保存为一个权重文件,下面是我的代码

import os, sys
import torch

model_checkpoint_path = "origin_checkpoint.pth"
checkpoint = torch.load(model_checkpoint_path, map_location='cpu')["model"]

l=['qkv']
backbone_dict={}
for k,v in checkpoint.items(): 
    if any(s in k for s in l):
        if '.weight' in k:
            k=k.replace('.weight','.base_layer.weight')
        elif '.bias' in k:
            k=k.replace('.bias','.base_layer.bias')
    k1='base_model.model.'+k
    backbone_dict[k1]=v

dict={"model":backbone_dict}
torch.save(dict, "new_checkpoint.pth")

解决爆显存的问题

我刚开始以为是我更新梯度的参数过多,减少之后还是爆显存,然后我看了PEFT的issue发现有人也是同样的问题,然后我觉得可能是版本的问题,于是我找到上一个版本,刚好也有DoRA,于是我重新安装PEFT包

  • 有问题的版本:v0.10.0
  • 重新安装的版本:v0.9.0
    # 解压包,进入包里面执行  
    python setup.py install
    
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在实战操作中,PEFT库可以用来微调BERT模型,以进行文本情感分类任务。首先,我们需要准备一个包含大量文本和标签的数据集,用于训练和验证BERT模型。然后,我们需要利用PEFT库中提供的工具和接口,将数据集转换成BERT模型可接受的格式,并进行数据预处理,如分词和填充等操作。 接着,我们可以利用PEFT库中提供的预训练模型,加载BERT模型的参数和网络结构,并在数据集上进行微调。微调的过程中,我们可以通过调整学习率、批大小和训练轮数等超参数,来优化模型的性能。在每个训练轮数结束后,我们可以利用PEFT库中的评估工具对模型进行评估,以了解模型在验证集上的性能表现。 最后,当模型在验证集上的性能达到满意的水平后,我们可以使用PEFT库提供的保存模型工具,将微调后的BERT模型保存下来,以备在实际应用中使用。通过PEFT库的实战操作,我们可以有效地利用BERT模型进行文本情感分类任务,提高模型的准确性和泛化能力,从而更好地满足实际应用的需求。 PEFT库的实战操作不仅帮助我们更好地理解和使用BERT模型,也为我们提供了一套完整的工具和流程,使得模型训练和应用变得更加简单和高效。 PEFT库实战(一): lora微调BERT(文本情感分类) 的操作流程清晰,易于上手,为我们在文本情感分类任务中的应用提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值