前言
大语言模型(Large Language Model, LLM)的出现,引发了全球范围内对 AI 的空前关注。无论是 ChatGPT、DeepSeek 还是 Qwen,都以惊艳的效果让人真切感受到这场技术浪潮的冲击力。然而,动辄数百亿参数的模型规模,使得它们对个人设备而言不仅难以训练,甚至连部署都显得遥不可及。
打开大模型的"黑盒子",真正去理解其内部运作机制,本应是一件令人心潮澎湃的事。遗憾的是,绝大多数探索最终都止步于使用 LoRA 等技术对现有大模型做少量微调------这更像是在教牛顿如何使用 21 世纪的智能手机,虽然有趣,却偏离了理解物理本质的初衷。
与此同时,第三方的大模型框架与工具库(如 transformers / trl / peft 等),往往只暴露出高度抽象的接口。只需短短十几行代码,就可以完成"加载模型 + 加载数据集 + 推理 + 强化学习"的全流程训练。这种高效封装固然便利,却也在一定程度上把开发者与底层实现隔离开来。
"用乐高自己拼出一架飞机,远比坐在头等舱里飞行更让人兴奋"
MiniMind 项目应运而生------尽可能降低 LLM 的学习门槛,让每个人都能从理解每一行代码开始,从零开始亲手训练一个极小的语言模型。最低只需不到 3 块钱的服务器成本,就能亲身体验从 0 到 1 构建语言模型的全过程。
一、项目介绍
MiniMind 是一个完全从零开始的开源大语言模型训练项目,仅用 3 块钱成本 与 2 小时训练时间 ,即可训练出规模约为 64M 的超小语言模型。
项目核心特点:
- 极致轻量:主线最小版本体积约为 GPT-3 的 1/12700,力求让普通个人 GPU 也能快速完成训练与复现
- 全链路开源:覆盖 MoE、数据清洗、预训练(Pretrain)、监督微调(SFT)、LoRA、RLHF(DPO)、RLAIF(PPO / GRPO / CISPO)、Tool Use、Agentic RL、自适应思考与模型蒸馏等全过程代码
- 从零实现:所有核心算法代码均从零使用 PyTorch 原生实现,不依赖第三方库提供的高层抽象接口
- 教程级质量:不仅是一个大模型全阶段开源复现项目,也是一套面向 LLM 入门与实践的教程
模型变体一览:
| 变体 | 说明 |
|---|---|
| MiniMind | 主线文本语言模型 |
| MiniMind-V | 视觉模态模型 |
| MiniMind-O | 多模态 Omni 模型 |
| MiniMind-dLM | 扩散语言模型 |
| MiniMind-Linear | 线性模型 |
二、环境准备
2.1 克隆仓库与安装依赖
bash
# 克隆仓库
git clone --depth 1 https://github.com/jingyaogong/minimind
# 安装环境
cd minimind
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
2.2 验证 CUDA 环境
bash
python3 -c "import torch; print(torch.version.cuda, torch.cuda.is_available())"
预期输出:
12.6 True
⚠️ 请确保 CUDA 可用,后续所有训练步骤均依赖 GPU 加速。
三、数据集下载与准备
从 ModelScope 下载所需数据,放入 ./dataset/ 目录。
下载地址:https://www.modelscope.cn/datasets/gongjy/minimind_dataset/files
3.1 快速复现(最小数据组合)
仅需 3 个文件即可训练出 MiniMind Zero 对话模型(✨ 为推荐必须项):
./dataset/
├── pretrain_t2t_mini.jsonl # 1.2GB ✨ 轻量预训练数据
├── sft_t2t_mini.jsonl # 1.6GB ✨ 轻量SFT数据
└── rlaif.jsonl # 24MB ✨ RLAIF训练数据
3.2 完整复现(所有数据)
./dataset/
├── pretrain_t2t.jsonl # 10GB 完整预训练数据
├── pretrain_t2t_mini.jsonl # 1.2GB ✨
├── sft_t2t.jsonl # 14GB 完整SFT数据
├── sft_t2t_mini.jsonl # 1.6GB ✨
├── dpo.jsonl # 53MB DPO偏好数据
├── rlaif.jsonl # 24MB ✨
├── agent_rl.jsonl # 86MB Agentic RL数据
└── agent_rl_math.jsonl # 18MB 数学Agentic RL数据
💡 首次复现建议从最小数据组合开始,训练完成后再考虑使用完整数据集提升效果。
四、预训练(Pretrain)
预训练的目标是让模型学会**"高质量词语接龙"**------从海量文本中学习事实知识、语言模式和上下文统计关系。这是大模型的"通识教育"阶段。
4.1 训练命令
bash
cd /data1/minimind/trainer
# 单卡训练
python train_pretrain.py
# 多卡训练(使用 GPU 0~7)
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_pretrain.py
# 带断点续训
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_pretrain.py --from_resume 1
# 开启训练可视化(推荐用 SwanLab,国内友好)
CUDA_VISIBLE_DEVICES=1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_pretrain.py --use_wandb
4.2 输出与验证
- 输出权重 :
out/pretrain_768.pth(768 为默认 dimension)
bash
# 快速验证
python3 eval_llm.py --weight pretrain
- 预期效果:模型可以进行文本续写,如输入"为什么天空是蓝色的",能输出合理续写
4.3 训练开销参考(单卡 3090)
| 数据集 | 训练时间 | 费用 |
|---|---|---|
pretrain_t2t_mini |
约 1.21 小时 | 约 1.57 元 |
pretrain_t2t |
更长 | 适合完整复现 |
4.4 推荐 max_seq_len 设置
| 数据集 | 推荐 max_seq_len |
|---|---|
pretrain_t2t_mini |
≈ 768 |
pretrain_t2t |
≈ 380 |
五、有监督微调(SFT)
SFT(Supervised Fine-Tuning)让模型学会多轮对话、指令跟随和助手风格。当前主线 SFT 数据已混入 Tool Call 样本,默认 full_sft 即具备基础 Tool Call 能力。
5.1 训练命令
bash
cd /data1/minimind/trainer
# 单卡训练
python3 train_full_sft.py
# 多卡训练
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_full_sft.py
# 断点续训
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_full_sft.py --from_resume 1
5.2 输出与验证
- 输出权重 :
out/full_sft_768.pth
bash
# 快速验证
python3 eval_llm.py --weight full_sft
- 预期效果:模型可以进行多轮对话,回答问题
5.3 训练开销参考(单卡 3090)
| 数据集 | 训练时间 | 费用 |
|---|---|---|
sft_t2t_mini |
约 1.10 小时 | 约 1.43 元 |
六、知识蒸馏(Distillation)
在已 SFT 的权重基础上,用教师模型的分布信号继续训练学生模型(白盒蒸馏)。
bash
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_distillation.py
💡 知识蒸馏通过让小模型(学生)学习大模型(教师)的输出分布,而非仅学习硬标签,从而在保持较小参数量的同时逼近大模型的性能。
七、LoRA 微调
参数高效微调(Low-Rank Adaptation),适合垂直场景适配(如医疗、自我认知等)。
7.1 训练命令
bash
python3 train_lora.py
7.2 测试 LoRA 模型
bash
python3 eval_llm.py --weight full_sft --lora_weight lora_medical
7.3 LoRA 权重合并回基础模型
bash
cd scripts && python convert_model.py
八、RLHF --- DPO
基于人类偏好的强化学习对齐(Direct Preference Optimization),使用 dpo.jsonl 数据。
bash
cd /data1/minimind/trainer
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_dpo.py
九、RLAIF --- PPO / GRPO / CISPO
基于 AI 反馈的强化学习,使用 rlaif.jsonl 数据。支持三种算法:
9.1 训练命令
bash
cd /data1/minimind/trainer
# GRPO(Group Relative Policy Optimization)
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_rl.py --rl_algorithm grpo
# PPO(Proximal Policy Optimization)
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_rl.py --rl_algorithm ppo
# CISPO(Clipped Importance Sampling Policy Optimization)
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_rl.py --rl_algorithm cispo
9.2 三种 RL 算法对比
| 算法 | 全称 | 特点 |
|---|---|---|
| GRPO | Group Relative Policy Optimization | 基于组内相对排名的策略优化,无需单独的价值网络 |
| PPO | Proximal Policy Optimization | 经典策略梯度算法,稳定性强,应用广泛 |
| CISPO | Clipped Importance Sampling Policy Optimization | 截断重要性采样策略优化,样本效率更高 |
十、Agentic RL
多轮 Tool-Use 场景下的 GRPO / CISPO 训练。
bash
cd /data1/minimind/trainer
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node 8 train_agent_rl.py
十一、测试与推理
11.1 CLI 对话测试
bash
python eval_llm.py --weight full_sft
11.2 测试 Tool Call 能力
bash
python eval_toolcall.py --weight full_sft
11.3 开启自适应思考
bash
python eval_llm.py --weight full_sft --open_thinking 1
11.4 WebUI 演示
bash
# 需安装 streamlit
cp -r minimind-3 ./scripts/minimind-3 # 复制模型到 scripts 目录
cd scripts && streamlit run web_demo.py
11.5 OpenAI API 兼容服务
bash
python serve_openai_api.py
十二、训练全流程总结
┌─────────────┐ ┌─────────┐ ┌──────────┐ ┌─────────────┐
│ 预训练 │───▶│ SFT │───▶│ LoRA │───▶│ 知识蒸馏 │
│ Pretrain │ │ 微调 │ │ 垂直适配 │ │ Distillation│
└─────────────┘ └────┬────┘ └──────────┘ └─────────────┘
│
▼
┌──────────────┐
│ RLHF (DPO) │
│ 人类偏好对齐 │
└──────┬───────┘
│
▼
┌──────────────┐
│ RLAIF │
│ PPO/GRPO/ │
│ CISPO │
└──────┬───────┘
│
▼
┌──────────────┐
│ Agentic RL │
│ Tool-Use │
│ 场景训练 │
└──────────────┘