Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
franklyd opened this issue Apr 16, 2023 · 7 comments
Open

Comments

@franklyd
Copy link

franklyd commented Apr 16, 2023

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

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

@yhyu13
Copy link

yhyu13 commented Apr 16, 2023

same

@StarRing2022
Copy link
Owner

StarRing2022 commented Apr 17, 2023

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
Copy link
Author

franklyd commented Apr 17, 2023

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

@StarRing2022
Copy link
Owner

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

@StarRing2022
Copy link
Owner

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

@franklyd
Copy link
Author

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

@StarRing2022
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants