01-ai/Yi

使用 Lora 微调模型时无法设置 alpha 和 dropout,影响训练效果

benzenesulfonic-acid opened this issue · 1 comments

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代码有更多功能。