shuxueslpi / chatGLM-6B-QLoRA

使用peft库,对chatGLM-6B/chatGLM2-6B实现4bit的QLoRA高效微调,并做lora model和base model的merge及4bit的量化(quantize)。
350 stars 46 forks source link

lora和qlora对比 #26

Closed huangqingyi-code closed 1 year ago

huangqingyi-code commented 1 year ago

你好, 1.有对比过lora和qlora的效果吗? 2.还有个问题,有多个qlora,我是否能加载一个base model(只加载一次),和多个qlora model,根据不同的情况自由组合(不多次的merge)。

shuxueslpi commented 1 year ago

@huangqingyi-code 1、效果的比对直接看原始论文吧,那个更客观一些 2、可能要试下,先加载的base model,再用peft加载adapter model:

……
base_model = AutoModel.from_pretrained(config.base_model_name_or_path,
                                                                     quantization_config=q_config,
                                                                     trust_remote_code=True,
                                                                     device_map='auto')

model1 = PeftModel.from_pretrained(base_model, peft_model_path1)
model2 = PeftModel.from_pretrained(base_model, peft_model_path2)
huangqingyi-code commented 1 year ago

1.qlora原始论文一顿吹比lora好,实际很多人反馈不是这样 2.这样内存中就有model1,model2两个model比较占资源,如果lora比较多10来个就会有问题了。我的想法是不先合并加载好模型,推理计算用到哪个lora再进行简单的weight相加。

shuxueslpi commented 1 year ago

@huangqingyi-code 1、个人观点,还是针对具体问题吧,没有最好的方法,只有针对某个数据集最好的方法。直观来说,从fp32->fp16->int8->int4确实是有损失的,甚至全参数调参->lora等一众高效微调,直观上看,也是有损失的,所以这个效果得看具体问题和资源的匹配了。 2、你说的应该是这种:https://huggingface.co/docs/peft/package_reference/peft_model#peft.PeftModel.set_adapter

huangqingyi-code commented 1 year ago

是的,谢谢

valkryhx commented 1 year ago

model1 = PeftModel.from_pretrained(base_model, peft_model_path1)

model1 = PeftModel.from_pretrained(base_model, peft_model_path1) 这行代码运行之后 base_model 参数也会更改的 ,也会变成 peft model1 的参数 ,可以打印model 各个layer 对比,这个问题之前还坑了我几次。