使用 Lora 微调模型时无法设置 alpha 和 dropout,影响训练效果
benzenesulfonic-acid opened this issue · 1 comments
benzenesulfonic-acid commented
Reminder
- I have searched the Github Discussion and issues and have not found anything similar to this.
Environment
- OS:Ubuntu 22.04
- Python:3.9.10
- PyTorch:2.0.0+cu118
- CUDA:11.7
Current Behavior
训练脚本 Yi-main/finetune/sft/main.py 的参数只有 lora_dim 即LoRA论文中的 r 一个超参可以调节。
按照论文的说明和该项目中的实现(Yi-main/finetune/utils/module/lora.py),应该还有 alpha 和 droppout 等重要超参数需要设置,但是训练脚本中这两个参数的值是写死在代码里的。
相关代码在该文件中的位置
if args.lora_dim > 0:
model = convert_linear_layer_to_lora(
model, args.lora_module_name, args.lora_dim
)
if args.only_optimize_lora:
model = only_optimize_lora_parameters(model)
model = make_model_gradient_checkpointing_compatible(model)
而函数convert_linear_layer_to_lora的定义为
def convert_linear_layer_to_lora(
model, part_module_name, lora_dim=0, lora_scaling=1, lora_droppout=0
):
显然lora_scaling和lora_droppout被定死了。由于lora层的forward计算公式为
self.lora_scaling = lora_scaling / lora_dim
def forward(self, input):
if self.fuse_lora:
return F.linear(input, self.weight, self.bias)
else:
return (
F.linear(input, self.weight, self.bias)
+ (
self.lora_dropout(input)
@ self.lora_right_weight
@ self.lora_left_weight
)
* self.lora_scaling
)
无法设置alpha的问题在于当lora_dim设置得较大时,因为lora_scaling为1,self.lora_scaling会很小,导致梯度很小容易导致不收敛影响训练效果。
Expected Behavior
No response
Steps to Reproduce
No Need
Anything Else?
No response
Yimi81 commented
感谢你指出的问题,我们会考虑为微调脚本加上alpha和droppout超参。同时我们也建议你去使用现有的支持Yi模型微调的框架(llama-factory, firefly, swift),这些框架相较于我们的SFT代码有更多功能。