StarRing2022 / ChatGPTX-Uni

实现一种多Lora权值集成切换+Zero-Finetune零微调增强的跨模型技术方案,LLM-Base+LLM-X+Alpaca,初期,LLM-Base为Chatglm6B底座模型,LLM-X是LLAMA增强模型。该方案简易高效,目标是使此类语言模型能够低能耗广泛部署,并最终在小模型的基座上发生“智能涌现”,力图最小计算代价达成ChatGPT、GPT4、ChatRWKV等人类友好亲和效果。当前可以满足总结、提问、问答、摘要、改写、评论、扮演等各种需求。
GNU General Public License v3.0
118 stars 9 forks source link

不同的模型(LLAMA-7B和chatGLM)是如何实现lora融合的 #4

Open franklyd opened 1 year ago

franklyd commented 1 year ago

我们工作的努力,便是将LLAMA-7B模型在Chinese-Alpaca数据集上利用Lora进行微调,得到Lora权值文件,将该权值文件镶嵌进ChatGLM预训练模型中。

不太理解不同的模型(LLAMA-7B和chatGLM)是如何实现lora融合的,能详细介绍一下吗? 我的理解:将LLAMA-7B模型在Chinese-Alpaca数据集上利用Lora进行微调,得到Lora权值文件,只是适用于LLAMA-7B模型的,不太理解这个lora权重,是如何融合到chatGLM里面的。 谢谢!

yhyu13 commented 1 year ago

same

StarRing2022 commented 1 year ago

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文件,所有配置参数不作修改。

franklyd commented 1 year ago

谢谢!操作的步骤大概明白了,但还是对其中的原理不太理解。 我还是认为“LLAMA训练得到的Lora只属于LLAMA”,因为这里得到的Lora参数是基于LLAMA模型的参数进行微调得到的,即Lora参数是相对于LLAMA模型原始参数的一个相对值。 例如,原始的一次前向传播为: $h=W_0x$ 加入Lora后为: $h = W_0x + \Delta Wx$ $\Delta Wx$这一部分即为lora的参数,为什么基于LLAMA模型原始参数训练得到的lora参数也可以用于其他模型呢?

StarRing2022 commented 1 year ago

是呢,感谢您,您可以认为是peft它的兼容性特别强,只要参数对了,权值文件体积又是一样的,向量值它会识别到

StarRing2022 commented 1 year ago

希望能得到朋友的小星星,感谢!!!

franklyd commented 1 year ago

我可以理解能够跑通(只要参数的shape是一致的),但能够跑通不意外。你们这么做的intuition是什么呢?这么做真的有效果吗?

StarRing2022 commented 1 year ago

经测验,我们得到了效果,意图就是跨模型互通,比如英文LM模型和中文LM模型,这是一种较为理想的模型间打通的手段