Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问DPO训练的时候有什么注意事项吗?我训练出来效果很差。 #5484

Open
1 task done
zlh-source opened this issue Sep 19, 2024 · 9 comments
Open
1 task done
Labels
pending This problem is yet to be addressed

Comments

@zlh-source
Copy link

zlh-source commented Sep 19, 2024

Reminder

  • I have read the README and searched the existing issues.

System Info

训练命令:

llamafactory-cli train
--stage dpo
--do_train
--finetuning_type full
--deepspeed examples/deepspeed/ds_z0_config.json
--model_name_or_path "LLaMA3"
--dataset ""
--dataset_dir ./data/
--template empty
--output_dir ${save_model}
--overwrite_cache
--overwrite_output_dir
--cutoff_len 2048
--preprocessing_num_workers 16
--per_device_train_batch_size 4
--gradient_accumulation_steps 4
--lr_scheduler_type cosine
--logging_steps 10
--save_steps 200
--learning_rate 5e-6
--num_train_epochs 2
--plot_loss
--bf16
--save_total_limit 1
--pref_beta 0.1
--pref_loss sigmoid

推理命令:
llamafactory-cli train
--stage sft
--do_predict
--model_name_or_path ${save_model}
--eval_dataset ${eval_dataset}
--dataset_dir ./data
--template empty
--finetuning_type full
--output_dir ${pred_path}
--overwrite_cache
--overwrite_output_dir
--cutoff_len 2048
--preprocessing_num_workers 16
--per_device_eval_batch_size 16
--predict_with_generate

Reproduction

None

Expected behavior

请问DPO训练的时候有什么注意事项吗?我训练出来效果很差。

例如:

  1. rejected数据需要很高的质量么?
    例如,我用SFT模型的response作为rejected,chatgpt的response作为chosen。这样是否合理?

  2. 2k数据,全量dpo微调3B模型的话,学习率,epoch一般怎么设置?

感谢!

Others

No response

@github-actions github-actions bot added the pending This problem is yet to be addressed label Sep 19, 2024
@owenliang
Copy link

DPO很严重的破坏了原先模型能力。。奇怪

@zlh-source
Copy link
Author

+1。但是没确定出来是什么原因。
仅似乎用chosen数据做SFT,效果能到70.
但是用chosen+rejected数据做DPO,只能到31
差的也太多了

@divisionblur
Copy link

+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了

你用的哪个评估集?

@zlh-source
Copy link
Author

zlh-source commented Sep 24, 2024

+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了

你用的哪个评估集?

自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪

@muziyongshixin
Copy link

muziyongshixin commented Oct 9, 2024

+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了

你用的哪个评估集?

自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪

dpo通常只能训练一个epoch,多了显著过拟合。另外lr可以调小一点
另外训练数据使用sft模型自己生产的可能效果会好一些(之前试过开源的数据不如自己跑多条然后让gpt打分构造的数据好)

@zlh-source
Copy link
Author

+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了

你用的哪个评估集?

自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪

dpo通常只能训练一个epoch,多了显著过拟合。另外lr可以调小一点 另外训练数据使用sft模型自己生产的可能效果会好一些(之前试过开源的数据不如自己跑多条然后让gpt打分构造的数据好)

非常感谢 我试一下

@Uooga
Copy link

Uooga commented Oct 17, 2024

+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5

@zlh-source
Copy link
Author

+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5

没有用dpo了,放弃了。不知道怎么回事,尝试了学习率、epoch的修改,但是都没救回来。😫

@lzzzx666
Copy link

+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5

没有用dpo了,放弃了。不知道怎么回事,尝试了学习率、epoch的修改,但是都没救回来。😫

可以看一下chosen和rejected的log_probs变化,dpo可能会让二者都变的很小。可以尝试加一点sft_loss, Llamafactory应该是在dpo里面直接支持加入sft loss的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pending This problem is yet to be addressed
Projects
None yet
Development

No branches or pull requests

6 participants