Closed zws-2019 closed 1 week ago
same question
您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数微调,对于lora可以参考这里的解决方式。https://github.com/Yuliang-Liu/Monkey/issues/64
我也是lora微调的,只训了0.15%参数,我debug看下来是VisualAttentionBlock模块每执行一次增加一点现存,导致显存过大,我在看如何优化一下
您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数微调,对于lora可以参考这里的解决方式。#64
@zws-2019 您看看这样能解决吗?
您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方式。#64
@zws-2019 您看看这样能解决吗?
感谢,这个地方的修改是有必要的,另外需要再改一个地方才能跑通textmonkey的训练,我正在看收敛能力来确定修改正确性
您好,我们是在80g a800上进行全参数训练的。40g a800可能不支持全参数参数,对于lora可以参考这里的解决方式。#64
@zws-2019 您看看这样能解决吗?
感谢,这个地方的修改是有必要的,另外需要再改一个地方才能跑通textmonkey的训练,我正在看收敛能力来确定修改正确性
非常感谢您的尝试,要是有啥经验也欢迎分享一下。
您好,我们是在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发现和原始模型推理结果相同
您训练的是Monkey还是TextMonkey?
您训练的是Monkey还是TextMonkey?
textmonkey,目前用lora只训练了LLM的参数,可以跑通,但是loss从3收敛到1.8左右后就不再收敛了,明天我再测试一下训练的效果
您好,我们是在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导致梯度继续回传到嵌入式层?另外请教一下代码中能否做一些小改动优化计算时间和显存占用呢
您好,我们是在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里样本用了很多换行,就没有学到
您好,我们是在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模块需要参数。
您好,我们是在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的梯度问题,你那边有解决方案吗?
有问题 这种方法 我说过了 训练可以跑通 但是损失到了后面不减反增
text_monkey微调代码有问题麻烦有空更新一下,显示内存占用过高
Hello, you can try our latest model MiniMonkey, which can be trained on eight 3090 GPUs.