从头训练小模型- 2 监督微调SFT
从头训练小模型: 2 监督微调SFT
简介
从头训练小模型是我个人对大语言模型(LLM)学习中的重要部分。
通过对一个小规模模型的最小化复现实践,我不仅能够深入理解模型训练的基本流程,还可以系统地学习其中的核心原理和实际运行机制。这种实践性的学习方法让我能够直观地感受模型训练的每个环节,同时掌握相关的技术细节和实现方式。
目前的工作中,确实存在某些任务是有这种小模型的需求, 也在学习过程中理解运作逻辑, 力求用最小的资源消耗情况下,实现某些子任务的最小模型实现.
ALL in AI
代码已经上传 https://github.com/godzeo/miniGPT
SFT 有监督微调(Supervised Fine-Tuning):
为什么要这一步?
因为经过预训练之后,LLM已掌握了大量知识,但此时它只是一个无情的词语接龙机,还不能与人对话。
我们要它就不再盲目接龙,而是能够理解这是一段完整的对话。
那么我们就要这个指令微调的过程,让有了基础知识的学生, 会做题, 而不是一直背课文,成语结论, 需要他会根据学会根据提问, 回答问题做题. 理解什么是一问一答题.
训练命令:
1 | torchrun --nproc_per_node=4 scripts/train_sft.py \ |
数据集
https://www.modelscope.cn/datasets/deepctrl/deepctrl-sft-data
主要是对 匠数大模型SFT数据集 数据清洗, 只保留了长度短一点的内容,超级精简之后的121w 的精简数据训练的
1 | {"conversations": |
但是效果一般, 后考虑使用 https://www.modelscope.cn/datasets/AI-ModelScope/R1-Distill-SFT 这个黑盒蒸馏的数据再试试
测试效果:
python test_model.py –model_path ../outputs/sft/final –tokenizer_path ../tokenizer
测试对话效果
其实效果不行, 由于我的 预训练轮次1 + SFT轮次11 ,都太少了,现在的模型像是一个小孩一样
这一篇比较枯燥,感觉只是在找数据集, 下一篇是比较重要的微调