Open zlh-source opened 2 months ago
DPO很严重的破坏了原先模型能力。。奇怪
+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了
+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了
你用的哪个评估集?
+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了
你用的哪个评估集?
自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪
+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了
你用的哪个评估集?
自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪
dpo通常只能训练一个epoch,多了显著过拟合。另外lr可以调小一点 另外训练数据使用sft模型自己生产的可能效果会好一些(之前试过开源的数据不如自己跑多条然后让gpt打分构造的数据好)
+1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了
你用的哪个评估集?
自己的一个代码生成的评估集合。dpo之后,模型基本上就不能生成正常代码了。很奇怪
dpo通常只能训练一个epoch,多了显著过拟合。另外lr可以调小一点 另外训练数据使用sft模型自己生产的可能效果会好一些(之前试过开源的数据不如自己跑多条然后让gpt打分构造的数据好)
非常感谢 我试一下
+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5
+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5
没有用dpo了,放弃了。不知道怎么回事,尝试了学习率、epoch的修改,但是都没救回来。😫
+1,请问你现在进展怎么样了,我也自己设计了一个数据集,大概是4w条,只用chosen的去sft效果不错,但是加上rejected的,模型直接崩溃了,学习率是1e-5
没有用dpo了,放弃了。不知道怎么回事,尝试了学习率、epoch的修改,但是都没救回来。😫
可以看一下chosen和rejected的log_probs变化,dpo可能会让二者都变的很小。可以尝试加一点sft_loss, Llamafactory应该是在dpo里面直接支持加入sft loss的
Reminder
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训练的时候有什么注意事项吗?我训练出来效果很差。
例如:
rejected数据需要很高的质量么? 例如,我用SFT模型的response作为rejected,chatgpt的response作为chosen。这样是否合理?
2k数据,全量dpo微调3B模型的话,学习率,epoch一般怎么设置?
感谢!
Others
No response