从0到1训练MiniMind:2小时实现26M参数大模型全流程(Pretrain/SFT/LoRA/DPO)

【免费下载链接】minimind 🚀🚀 「大模型」2小时完全从0训练26M的小参数GPT!🌏 Train a 26M-parameter GPT from scratch in just 2h! 【免费下载链接】minimind 项目地址: https://gitcode.com/gh_mirrors/min/minimind

你是否曾因大模型动辄数十亿参数的训练成本望而却步?是否想亲手构建一个完整的语言模型却被复杂框架拒之门外?MiniMind项目让这一切变得触手可及——仅需2小时和3元GPU成本,即可从零训练出26M参数的可对话模型。本文将带你深入MiniMind的全阶段训练代码,掌握预训练(Pretrain)、监督微调(SFT)、LoRA高效微调及DPO偏好优化的核心实现。

项目架构概览

MiniMind采用极简设计理念,所有核心算法均基于PyTorch原生实现,不依赖第三方抽象接口。项目结构清晰,涵盖从数据处理到模型部署的完整链路:

minimind/
├── dataset/           # 数据集处理模块
├── model/             # 模型结构定义(含MoE和LoRA)
├── trainer/           # 全阶段训练脚本
├── scripts/           # 推理部署工具
└── images/            # 模型结构与训练可视化

核心训练流程如图所示,从原始文本到可对话模型需经历四个关键阶段:

LLM训练流程图

预训练:知识积累的基石

预训练是模型获取世界知识的第一步,MiniMind采用自定义分词器和高质量中文语料,通过"词语接龙"式学习构建基础语言能力。

数据准备

预训练数据使用经过清洗的高质量中文语料pretrain_hq.jsonl,每条数据格式如下:

{"text": "如何才能摆脱拖延症? 治愈拖延症并不容易,但以下建议可能有所帮助..."}

数据集处理代码位于dataset/lm_dataset.py,核心功能包括文本截断、批量处理和动态padding。

训练执行

单卡训练命令:

python trainer/train_pretrain.py

多卡加速训练:

torchrun --nproc_per_node 4 trainer/train_pretrain.py

预训练过程中,模型每100步自动保存权重至out/pretrain_*.pth。训练损失变化趋势可通过可视化工具观察:

预训练损失曲线

关键实现位于trainer/train_pretrain.py,采用RMSNorm归一化和SwiGLU激活函数,与Llama3结构保持一致。

监督微调:对话能力塑造

经过预训练的模型仅具备文本续写能力,需要通过监督微调(SFT)学习对话交互模式。MiniMind提供全参数微调与高效微调两种方案。

全参数微调

全参数微调使用高质量对话数据sft_mini_512.jsonl,数据格式为:

{
  "conversations": [
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "你好!很高兴为你服务。"}
  ]
}

执行全参数微调:

python trainer/train_full_sft.py

微调后的模型权重保存为out/full_sft_*.pth,损失曲线如下:

SFT训练损失曲线

LoRA高效微调

对于显存有限的场景,MiniMind提供从0实现的LoRA微调方案,仅更新低秩矩阵参数。核心代码位于model/model_lora.py,实现了权重分解与增量更新。

医疗领域微调示例:

python trainer/train_lora.py --data_path dataset/lora_medical.jsonl

训练完成后生成out/lora_medical_*.pth,可通过以下命令加载使用:

python eval_model.py --lora_name 'lora_medical' --model_mode 2

偏好优化:DPO算法实现

为使模型输出更符合人类偏好,MiniMind实现了直接偏好优化(DPO)算法,无需单独训练奖励模型。

DPO数据格式

DPO训练数据dpo.jsonl包含正负样本对:

{
  "chosen": [
    {"role": "user", "content": "推荐一部科幻电影"},
    {"role": "assistant", "content": "《星际穿越》是不错的选择..."}
  ],
  "rejected": [
    {"role": "user", "content": "推荐一部科幻电影"},
    {"role": "assistant", "content": "不知道"}
  ]
}

训练执行

python trainer/train_dpo.py --model_path out/full_sft_512.pth

DPO实现位于trainer/train_dpo.py,通过对比优选回答与拒绝回答的对数概率差异来优化模型。

模型评估与部署

性能评估

评估脚本eval_model.py支持多种模式测试:

# 测试SFT模型
python eval_model.py --load 1 --model_mode 2

# 测试LoRA增强模型
python eval_model.py --lora_name medical --model_mode 2

部署选项

WebUI交互:

streamlit run scripts/web_demo.py

OpenAI兼容API服务:

python scripts/serve_openai_api.py

第三方推理框架支持:

# Ollama部署
ollama run jingyaogong/minimind2

# vLLM加速推理
vllm serve ./MiniMind2/ --served-model-name "minimind"

训练成本与效率

MiniMind在NVIDIA 3090单卡上的训练成本与时间如下表:

模型 参数 预训练 SFT 总成本
Small 26M 1.1h (¥1.43) 1h (¥1.3) ¥2.73
Standard 104M 3.9h (¥5.07) 3.3h (¥4.29) ¥9.36

采用8卡4090集群可将总训练时间压缩至10分钟内,成本保持在¥3左右。

进阶探索

混合专家模型(MoE)

MiniMind提供MoE结构实现,通过多个专家网络提升模型容量而不显著增加计算量。结构定义位于model/model_minimind.py,训练脚本为trainer/train_pretrain.py(需指定--moe参数)。

MoE模型结构

领域知识迁移

通过LoRA微调实现模型的领域适配,例如医疗问答微调:

python trainer/train_lora.py --data_path dataset/lora_medical.jsonl

自我认知微调数据dataset/lora_identity.jsonl可帮助模型建立正确的身份认知。

总结与展望

MiniMind项目以极简代码实现了大模型全流程训练,从26M参数的基础模型到具备对话能力的AI助手,仅需2小时和3元成本。通过本文介绍的trainer/train_pretrain.pytrainer/train_full_sft.pytrainer/train_lora.pytrainer/train_dpo.py四个核心脚本,你可以完全掌控模型从知识积累到对话优化的全过程。

项目仍在持续进化,下一步将重点提升推理能力和多模态扩展。欢迎通过README.md了解更多细节,加入MiniMind社区共同探索大模型的无限可能!

点赞+收藏+关注,获取最新训练技巧与模型更新。下期预告:《MiniMind视觉多模态模型训练指南》

【免费下载链接】minimind 🚀🚀 「大模型」2小时完全从0训练26M的小参数GPT!🌏 Train a 26M-parameter GPT from scratch in just 2h! 【免费下载链接】minimind 项目地址: https://gitcode.com/gh_mirrors/min/minimind

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐