从零开始训练一个LLM

263 阅读1分钟

断断续续大约用了一个月的时间,完全重新训练了一下Cortex LLM,大部分还是在4张4090显卡上训练的。模型还是一个小型的MoE,总参数量大约0.6B,激活参数0.2B。比上一个版本更新了如下内容:

  1. 替换预训练数据集,使用序列猴子通用文本数据集进行预训练。

  2. 采用多阶段预训练和后训练方式。预训练采用两阶段方式,第一阶段上下文长度是512,第二阶段采用YaRN技术将上下文扩展至2048。后训练采用四阶段方式,先在cot数据集上进行SFT,让模型原生支持思考能力,然后使用GSPO增强其逻辑思维能力,再通过融合思考和非思考数据进行SFT,最后使用DPO进行对齐。

  3. 新增思考模式控制,可通过添加/think和/no think控制是否思考。在后训练的第三阶段通过融合cot和非cot数据进行SFT实现。

  4. 新增思考预算功能,可控制思考token长度。该功能通过两次调用生成实现。

最终模型效果

思考模式 思考模式

非思考模式 非思考模式

思考预算 思考预算

模型和训练代码完全开放在github上了。

github.com/qibin0506/C…

另外本项目依赖的模型代码和训练代码也已开源,模型支持LLM和VLM。训练代码支持Pretrain、SFT、GRPO、GSPO、DPO,支持ddp和deepspeed zero0-3训练。

github.com/qibin0506/l…

github.com/qibin0506/l…