VisualGLM-6B icon indicating copy to clipboard operation
VisualGLM-6B copied to clipboard

如果需要微调图像部分的LoRA,需要怎么改呢?

Open yazheng0307 opened this issue 2 years ago • 9 comments

如题,代码说明里面是对chatGLM的LoRA进行微调,可不可以对图像部分也进行微调呢

yazheng0307 avatar Jul 28 '23 07:07 yazheng0307

图像部分可以用同样的方法加lora,在想加lora的模型里self.add_mixin("lora", LoraMixin(xxx))即可

1049451037 avatar Jul 28 '23 07:07 1049451037

图像部分可以用同样的方法加lora,在想加lora的模型里self.add_mixin("lora", LoraMixin(xxx))即可

是在finetune_visualglm.py的这行代码里面添加吗: self.add_mixin("lora", LoraMixin(args.num_layers, args.lora_rank, layer_range=args.layer_range), reinit=True)

如果是的话,再请教一下这三个参数(args.num_layers, args.lora_rank, layer_range=args.layer_range)需要怎么设置可以同时进行图像部分的微调呢,可不可以写个示例,多谢~

yazheng0307 avatar Sep 07 '23 07:09 yazheng0307

如果想对ViT加lora,就在EVAViT里面写:

class EVAViT(ViTModel):
    def __init__(self, args, transformer=None, parallel_output=True, **kwargs):
        super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kwargs)
        self.del_mixin("cls")
        self.add_mixin("cls", LNFinalyMixin(args.hidden_size))
        self.add_mixin("lora", LoraMixin(args.num_layers, args.lora_rank, layer_range=args.layer_range), reinit=True)

其他什么也不用变。

1049451037 avatar Sep 07 '23 07:09 1049451037

如果想对ViT加lora,就在EVAViT里面写:

class EVAViT(ViTModel):
    def __init__(self, args, transformer=None, parallel_output=True, **kwargs):
        super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kwargs)
        self.del_mixin("cls")
        self.add_mixin("cls", LNFinalyMixin(args.hidden_size))
        self.add_mixin("lora", LoraMixin(args.num_layers, args.lora_rank, layer_range=args.layer_range), reinit=True)

其他什么也不用变。

你好,使用最新代码按照您的方法添加之后,运行微调脚本报错如下: AttributeError: 'Namespace' object has no attribute 'lora_rank' 7c85ac15fbeaaa77b5ef69323b7a4b9 可能是什么原因呢

yazheng0307 avatar Sep 07 '23 08:09 yazheng0307

如果想对ViT加lora,就在EVAViT里面写:

class EVAViT(ViTModel):
    def __init__(self, args, transformer=None, parallel_output=True, **kwargs):
        super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kwargs)
        self.del_mixin("cls")
        self.add_mixin("cls", LNFinalyMixin(args.hidden_size))
        self.add_mixin("lora", LoraMixin(args.num_layers, args.lora_rank, layer_range=args.layer_range), reinit=True)

其他什么也不用变。

你好,使用最新代码按照您的方法添加之后,运行微调脚本报错如下: AttributeError: 'Namespace' object has no attribute 'lora_rank' 7c85ac15fbeaaa77b5ef69323b7a4b9 可能是什么原因呢

补充:更新到最新的Visualglm-6b.zip还是一样的包括:AttributeError: 'Namespace' object has no attribute 'lora_rank'

yazheng0307 avatar Sep 07 '23 09:09 yazheng0307

哦,因为传进ViT的args是已经被改过的……所以可能你得想办法传进去其他参数用来指定lora rank。或者你直接把args.lora_rank改成一个固定的数字。

1049451037 avatar Sep 07 '23 09:09 1049451037

总之:

如果想直接跑起来,最简单的方法,把代码直接改成:

class EVAViT(ViTModel):
    def __init__(self, args, transformer=None, parallel_output=True, **kwargs):
        super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kwargs)
        self.del_mixin("cls")
        self.add_mixin("cls", LNFinalyMixin(args.hidden_size))
        self.add_mixin("lora", LoraMixin(args.num_layers, 10, layer_range=None), reinit=True)

至于args.lora_rank和args.layer_range怎么传给ViT,你有空可以自己研究一下。

1049451037 avatar Sep 07 '23 09:09 1049451037

好的,感谢大佬热心解答。我自己试试!

yazheng0307 avatar Sep 07 '23 09:09 yazheng0307

好的,感谢大佬热心解答。我自己试试!

请问你已经设置好了吗,可以分享一下吗

zeroysss avatar May 30 '24 06:05 zeroysss