We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
当前版本的Jittor,在保存和加载LoRA时,无法正确处理LoRA中的to_out层。 具体而言,在peft库,/peft/tuners/lora/models.py中的_replace_module代码如下 而Jittor的LoRA中,qkv和out层的对应属性如下 可以发现,out层由sequential构建,包括一个linear层和一个dropout层。
setattr()函数会直接替换变量中对应key的value值,但在对to_out层进行处理时,child_name被错误地设置为"0"
因此,直接使用setattr对to_out层进行替换,实际上只是为parent增加了"0"这个属性,而并不会实际改变to_out层的值。
如果单纯想暂时解决问题以正常使用LoRA,最简单的方法是修改peft库,在_replace_module中修改部分逻辑 将原本的setattr()修改,增加对to_out层的逻辑判断,用不同的方式加载即可。
更佳的方案,大概需要进一步查看并修改其余相关的代码逻辑。
此外,对比torch的LoRA实现,torch的LoRA中,qkv层为带dropout属性的Linear,out为不带dropout属性的Linear,与Jittor中略有不同,或许可作为参考?
The text was updated successfully, but these errors were encountered:
No branches or pull requests
问题描述
当前版本的Jittor,在保存和加载LoRA时,无法正确处理LoRA中的to_out层。
具体而言,在peft库,/peft/tuners/lora/models.py中的_replace_module代码如下
而Jittor的LoRA中,qkv和out层的对应属性如下
可以发现,out层由sequential构建,包括一个linear层和一个dropout层。
setattr()函数会直接替换变量中对应key的value值,但在对to_out层进行处理时,child_name被错误地设置为"0"
因此,直接使用setattr对to_out层进行替换,实际上只是为parent增加了"0"这个属性,而并不会实际改变to_out层的值。
可能的解决方法
如果单纯想暂时解决问题以正常使用LoRA,最简单的方法是修改peft库,在_replace_module中修改部分逻辑
将原本的setattr()修改,增加对to_out层的逻辑判断,用不同的方式加载即可。
更佳的方案,大概需要进一步查看并修改其余相关的代码逻辑。
此外,对比torch的LoRA实现,torch的LoRA中,qkv层为带dropout属性的Linear,out为不带dropout属性的Linear,与Jittor中略有不同,或许可作为参考?
The text was updated successfully, but these errors were encountered: