赞
踩
在我们定义好自己的模型以及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包
# 解压包,进入包里面执行
python setup.py install
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。