Git Product home page Git Product logo

Comments (13)

samaritan1998 avatar samaritan1998 commented on June 6, 2024

same question

from monkey.

echo840 avatar echo840 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数微调,对于lora可以参考这里的解决方式。#64

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

我也是lora微调的,只训了0.15%参数,我debug看下来是VisualAttentionBlock模块每执行一次增加一点现存,导致显存过大,我在看如何优化一下

from monkey.

echo840 avatar echo840 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数微调,对于lora可以参考这里的解决方式。#64

@zws-2019 您看看这样能解决吗?

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方式。#64

@zws-2019 您看看这样能解决吗?

感谢,这个地方的修改是有必要的,另外需要再改一个地方才能跑通textmonkey的训练,我正在看收敛能力来确定修改正确性

from monkey.

echo840 avatar echo840 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方式。#64

@zws-2019 您看看这样能解决吗?

感谢,这个地方的修改是有必要的,另外需要再改一个地方才能跑通textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,要是有啥经验也欢迎分享一下。

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方法。#64

@zws-2019您看看这样能解决吗?

谢谢,这个位置的修改是有必要的,另外需要再修改一个位置才能运行textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,希望有啥经验也欢迎分享一下。

除了以上修改,我还改了modeling_qwen.py中

hidden_states[i][a + 1 : b] = images[idx]
修改为
hidden_states[i][a + 1 : b].data = images[idx]

修改后可以在40G A100上训练,但是发现没有收敛,并且推理时是乱码,推理时改回modeling_qwen.py发现和原始模型推理结果相同

from monkey.

echo840 avatar echo840 commented on June 6, 2024

您训练的是Monkey还是TextMonkey?

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

您训练的是Monkey还是TextMonkey?

textmonkey,目前用lora只训练了LLM的参数,可以跑通,但是loss从3收敛到1.8左右后就不再收敛了,明天我再测试一下训练的效果

from monkey.

chenxuetian avatar chenxuetian commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方法。#64

@zws-2019您看看这样能解决吗?

谢谢,这个位置的修改是有必要的,另外需要再修改一个位置才能运行textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,希望有啥经验也欢迎分享一下。

除了以上修改,我还改了modeling_qwen.py中

hidden_states[i][a + 1 : b] = images[idx]
修改为
hidden_states[i][a + 1 : b].data = images[idx]

修改后可以在40G A100上训练,但是发现没有收敛,并且推理时是乱码,推理时改回modeling_qwen.py发现和原始模型推理结果相同

@echo840 请教一下这可能是什么原因?修改hidden_states[i][a + 1 : b].data导致梯度继续回传到嵌入式层?另外请教一下代码中能否做一些小改动优化计算时间和显存占用呢

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方法。#64

@zws-2019您看看这样能解决吗?

谢谢,这个位置的修改是有必要的,另外需要再修改一个才能运行textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,希望有啥经验也欢迎分享一下。

除了以上修改,我还修改了modeling_qwen.py中

hidden_states[i][a + 1 : b] = images[idx]
修改为
hidden_states[i][a + 1 : b].data = images[idx]

修改后可以在40G A100上训练,但是发现没有收敛,并且推理时是乱码,推理时改回modeling_qwen.py发现和原始模型推理结果相同

@echo840请教一下这可能是什么原因?hidden_​​​​​​states[i][a + 1 : b].data 导致突然继续传回嵌入式层?另外请教一下代码中能否做一些小问题优化计算时间和显着的占用呢?

当我们禁用模型参数,使用lora微调时,会使用

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

这会使能输入梯度,这时执行下面命令会报错,因为hidden_states有梯度,而images没有梯度,所以需要给hidden_states.data赋值(但是我不清楚这样做会不会有风险)

hidden_states[i][a + 1 : b] = images[idx]

另外我还改了其他地方降低显存使用

                # images = self.visual.encode(images)
                images = cp.checkpoint(self.visual.encode, images)
    if training_args.use_lora:
        for name, param in model.named_parameters():
            param.requires_grad = False
        lora_config = LoraConfig(
            r=lora_args.lora_r,
            lora_alpha=lora_args.lora_alpha,
            target_modules=lora_args.lora_target_modules,
            lora_dropout=lora_args.lora_dropout,
            bias=lora_args.lora_bias,
            task_type='CAUSAL_LM',
        )

        model = get_peft_model(model, lora_config)
        model.print_trainable_parameters()

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

现在的问题是收敛到1.7左右就很难再收敛,测试infer效果比较差,我的finetune里样本用了很多换行,就没有学到

from monkey.

chenxuetian avatar chenxuetian commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方法。#64

@zws-2019您看看这样能解决吗?

谢谢,这个位置的修改是有必要的,另外需要再修改一个才能运行textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,希望有啥经验也欢迎分享一下。

除了以上修改,我还修改了modeling_qwen.py中

hidden_states[i][a + 1 : b] = images[idx]
修改为
hidden_states[i][a + 1 : b].data = images[idx]

修改后可以在40G A100上训练,但是发现没有收敛,并且推理时是乱码,推理时改回modeling_qwen.py发现和原始模型推理结果相同

@echo840请教一下这可能是什么原因?hidden_​​​​​​states[i][a + 1 : b].data 导致突然继续传回嵌入式层?另外请教一下代码中能否做一些小问题优化计算时间和显着的占用呢?

当我们禁用模型参数,使用lora微调时,会使用

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

这会使能输入梯度,这时执行下面命令会报错,因为hidden_states有梯度,而images没有梯度,所以需要给hidden_states.data赋值(但是我不清楚这样做会不会有风险)

hidden_states[i][a + 1 : b] = images[idx]

另外我还改了其他地方降低显存使用

                # images = self.visual.encode(images)
                images = cp.checkpoint(self.visual.encode, images)
    if training_args.use_lora:
        for name, param in model.named_parameters():
            param.requires_grad = False
        lora_config = LoraConfig(
            r=lora_args.lora_r,
            lora_alpha=lora_args.lora_alpha,
            target_modules=lora_args.lora_target_modules,
            lora_dropout=lora_args.lora_dropout,
            bias=lora_args.lora_bias,
            task_type='CAUSAL_LM',
        )

        model = get_peft_model(model, lora_config)
        model.print_trainable_parameters()

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

现在的问题是收敛到1.7左右就很难再收敛,测试infer效果比较差,我的finetune里样本用了很多换行,就没有学到

感谢你的回复,我刚刚使用lora训练也遇到相同报错,由于hidden_states需要梯度,不能做原地赋值操作。但是我不清楚开启输入梯度的原因是什么。hidden_states需要梯度,但是从input_ids计算hidden_states的嵌入层却不需要梯度。也许hidden_states的梯度会传递到其他模块的参数中去,因此你直接为hidden_states.data赋值扰乱了梯度传递,导致后面的参数错误变化。另外你为什么设置模型的所有参数都不需要梯度呢?我理解应该保留四个lora参数和resampler模块需要参数。

from monkey.

zws-2019 avatar zws-2019 commented on June 6, 2024

您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方法。#64

@zws-2019您看看这样能解决吗?

谢谢,这个位置的修改是有必要的,另外需要再修改一个才能运行textmonkey的训练,我正在看收敛能力来确定修改正确性

非常感谢您的尝试,希望有啥经验也欢迎分享一下。

除了以上修改,我还修改了modeling_qwen.py中

hidden_states[i][a + 1 : b] = images[idx]
修改为
hidden_states[i][a + 1 : b].data = images[idx]

修改后可以在40G A100上训练,但是发现没有收敛,并且推理时是乱码,推理时改回modeling_qwen.py发现和原始模型推理结果相同

@echo840请教一下这可能是什么原因?hidden_​​​​​​states[i][a + 1 : b].data 导致突然继续传回嵌入式层?另外请教一下代码中能否做一些小问题优化计算时间和显着的占用呢?

当我们禁用模型参数,使用lora微调时,会使用

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

这会使能输入梯度,这时执行下面命令会报错,因为hidden_states有梯度,而images没有梯度,所以需要给hidden_states.data赋值(但是我不清楚这样做会不会有风险)

hidden_states[i][a + 1 : b] = images[idx]

另外我还改了其他地方降低显存使用

                # images = self.visual.encode(images)
                images = cp.checkpoint(self.visual.encode, images)
    if training_args.use_lora:
        for name, param in model.named_parameters():
            param.requires_grad = False
        lora_config = LoraConfig(
            r=lora_args.lora_r,
            lora_alpha=lora_args.lora_alpha,
            target_modules=lora_args.lora_target_modules,
            lora_dropout=lora_args.lora_dropout,
            bias=lora_args.lora_bias,
            task_type='CAUSAL_LM',
        )

        model = get_peft_model(model, lora_config)
        model.print_trainable_parameters()

        if training_args.gradient_checkpointing:
            model.enable_input_require_grads()

现在的问题是收敛到1.7左右就很难再收敛,测试infer效果比较差,我的finetune里样本用了很多换行,就没有学到

感谢你的回复,我刚刚使用lora训练也遇到相同报错,由于hidden_states需要梯度,不能做原地赋值操作。但是我不清楚开启输入梯度的原因是什么。hidden_states需要梯度,但是从input_ids计算hidden_states的嵌入层却不需要梯度。也许hidden_states的梯度会传递到其他模块的参数中去,因此你直接为hidden_states.data赋值扰乱了梯度传递,导致后面的参数错误变化。另外你为什么设置模型的所有参数都不需要梯度呢?我理解应该保留四个lora参数和resampler模块需要参数。

我试过按照当前finetune_multitask_dialouge_doc.py的代码训练lora也是同样的问题,现在看下来是hidden_states的梯度问题,你那边有解决方案吗?

from monkey.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.