Open franklyd opened 1 year ago
same
Lora权值交叉融合的原因是缘于Lora并非基础模型的特征向量组件,而是一个相对独立的微调增强组件,加之均基于peft库,因而才可以互换,所以认为“LLAMA训练得到的Lora只属于LLAMA是片面的理解,Lora是属于Lora的”。我们会马上正式补充到ReadME中,关键是两个步骤: 1.运行finetune.py,即基于LLAMA-7B模型在英文或中文 alpaca数据集上,利用peft库进行微调训练,将得到的lora配置文件.json和权值文件.bin存入lora-alpaca文件夹; 2.运行generate.py,要注意的是,配置文件json不能使用LLAMA的配置,而是ChatGLM的配置文件,仓库里的lora-alpaca文件夹是可以直接使用的,这样就融入了ChatGLM-6B. 实际上,如果对finetune.py的一些配置参数,如lora_alpaca、lora_rank等调整为ChatGLM的配置文件数值,也是能够无需修改即使用由LLAMA微调后的配置参数和权值文件。不过配置文件中,对于target_modules这个模块依然要采用ChatGLM的(底座模型),这是因为,LLAMA为 "q_proj"、 "v_proj";ChatGLM为"query_key_value"。总之,对于底座模型、配置参数和权值文件是需要一定匹配的,简单的话,就置替后交给peft,不报错就可以换。建议动手操作一遍,多关注微调参数和配置参数的对应。 我们试验了很多权值都是可以的,如文件大小约在16MB的Lora、25MB的Lora等等,建议新尝试的朋友,使用16.49MB的标准Lora的bin文件,所有配置参数不作修改。
谢谢!操作的步骤大概明白了,但还是对其中的原理不太理解。 我还是认为“LLAMA训练得到的Lora只属于LLAMA”,因为这里得到的Lora参数是基于LLAMA模型的参数进行微调得到的,即Lora参数是相对于LLAMA模型原始参数的一个相对值。 例如,原始的一次前向传播为: $h=W_0x$ 加入Lora后为: $h = W_0x + \Delta Wx$ $\Delta Wx$这一部分即为lora的参数,为什么基于LLAMA模型原始参数训练得到的lora参数也可以用于其他模型呢?
是呢,感谢您,您可以认为是peft它的兼容性特别强,只要参数对了,权值文件体积又是一样的,向量值它会识别到
希望能得到朋友的小星星,感谢!!!
我可以理解能够跑通(只要参数的shape是一致的),但能够跑通不意外。你们这么做的intuition是什么呢?这么做真的有效果吗?
经测验,我们得到了效果,意图就是跨模型互通,比如英文LM模型和中文LM模型,这是一种较为理想的模型间打通的手段
不太理解不同的模型(LLAMA-7B和chatGLM)是如何实现lora融合的,能详细介绍一下吗? 我的理解:将LLAMA-7B模型在Chinese-Alpaca数据集上利用Lora进行微调,得到Lora权值文件,只是适用于LLAMA-7B模型的,不太理解这个lora权重,是如何融合到chatGLM里面的。 谢谢!