关于SFT的细节
哇试了一下,主观上感觉好强的模型!有两个问题咨询一下
Q1. SFT阶段是全参数还是Lora?
Q2. 您的训练策略选择第一阶段先是Wizard和Orca跑1个epoch,虽然是单轮的,但任务本身的复杂程度还是比较高的。一般常见的策略要么就是Vicuna这种一把梭哈3个ep,要么就是课程学习。您的这个策略似乎处于中间,并且最早从BLOSSOM-v2-3b就坚定走这个路线。这么做是有什么考量吗?
1.是lora,准确说是qlora,由于成本考虑,只在单张卡上完成微调。
2.虽然Wizard和Orca任务复杂程度高,但是其任务的多样性并没有那么丰富(Wizard这种self instruct生成的指令同质化严重/Orca Flan的任务多样性也不强),所以只训练一个epoch,然后在第二轮训练时采样一小部分 帮助模型更好的迁移,不过这并不代表这就是最佳的方法,这只是几个实验中效果比较好的而已,同样由于成本限制,暂时还没有进行更多的混合实验。
另一个考量是多轮&真实人类交互的数据量比较少(几十K),如果与其他大规模指令集直接混合的话,数据比例会严重倾斜,所以采用这种分多阶段的训练方式
感谢您的答复!
我之前的经验是Lora SFT出来的和全参数相比,主观上质量偏差,会很容易出现重复的情况。这一点在tulu v2的文章里也有提到过,他们Qlora了5个epoch,但依然在open ended类型问答中表现较差,虽然MMLU这种标准的benchmark表现不俗。
我最近也在攒SFT的数据集,在多轮&真实有一个wildchat可供选择,在类Orca上有COIG-PC可供选择,但说实话还是比不过FLAN的多样性。
这些数据集在我的空间里也有,进行了Subsample。并且也在通过分析instruction的语义分布下的多样性,目的是希望能够攒一个类似tulu的多来源高质量的数据集,能够使更多人可以复现从Base到接近官方Chat的水平。欢迎指教。
可惜我虽然有几张A卡,但不足以支撑13B的全参数SFT,否则会尝试着用全参数复现一下了。
是的,全量sft的效果几乎明显优于lora sft,不管是主观观察还是使用MT Bench这类LLM judge的方式。
mmlu这类评测集,说的难听点,目前很多模型的"能力提升"都来源于数据泄露,并且这种单步推理的评测方式,也并不能反映sft后的真实性能(此外few shot也会干预模型的推理风格),所以只能当个参考,更有意义的还是要看开放性问题或者复杂推理问题。
后面如果有时间,我应该会着重考虑下怎么构造代码和复杂数学数据集,目前这两个还是短板。