项目概述

1.1 项目简介

MiniMind 是一个开源的超轻量级大语言模型(LLM)训练项目,旨在让所有人都能用极低成本从零开始训练一个功能完整的语言模型。项目完全开源,涵盖了从数据准备、Tokenizer 训练到预训练(Pretrain)、监督微调(SFT)、强化学习对齐(RLHF/RLAIF)、知识蒸馏、推理模型训练的全流程。

🔥 核心亮点

  • 最小模型仅 25.8M 参数,最大模型 145M 参数
  • 单卡 NVIDIA 3090 上约 2 小时完成训练
  • 训练成本约 3 元人民币(按电费计算)
  • 代码简洁,全部使用 PyTorch 从零实现,无黑盒封装
  • 兼容主流生态(HuggingFace Transformers、llama.cpp、vLLM、Ollama 等)

1.2 项目目标

1.3 模型变体

模型名称参数量隐藏维度层数注意力头数KV头数特点
MiniMind2-Small26M512882最小模型,极速训练
MiniMind2104M7681682主力模型,效果最佳
MiniMind2-MoE145M640882MoE架构,稀疏激活

模型架构

2.1 整体架构

MiniMind 基于 Transformer Decoder-Only 架构,参考 Llama3.1 的设计,是一个标准的自回归语言模型。

⚙️ 架构特性

  • RMSNorm 归一化(替代 LayerNorm,更高效)
  • SwiGLU 激活函数(替代 ReLU/GELU,效果更好)
  • RoPE 旋转位置编码(替代绝对位置编码,支持长度外推)
  • GQA(Grouped Query Attention)分组查询注意力
  • 可选 Flash Attention 加速
  • 可选 MoE(Mixture of Experts)混合专家架构

2.2 模型配置

hidden_size: 512 / 768          # 隐藏层维度
num_hidden_layers: 8 / 16       # Transformer 层数
num_attention_heads: 8          # 注意力头数
num_key_value_heads: 2          # KV头数(GQA)
vocab_size: 6400                # 词表大小
max_position_embeddings: 32768  # 最大位置长度
rope_theta: 1000000.0           # RoPE 基频

2.3 核心组件详解

训练流程

MiniMind 提供完整的训练 pipeline,从数据准备到最终模型部署:

Tokenizer 训练 预训练(Pretrain) 监督微调(SFT) LoRA微调 DPO对齐 RLAIF 知识蒸馏 推理模型训练

3.1 Tokenizer 训练

文件:trainer/train_tokenizer.py

使用 HuggingFace tokenizers 库训练 BPE(Byte-Pair Encoding)分词器:

3.2 预训练(Pretrain)

文件:trainer/train_pretrain.py

在大规模无标注文本上进行自回归语言建模:

参数默认值说明
batch_size32每GPU批量大小
learning_rate5e-4学习率
max_seq_len340最大序列长度
accumulation_steps8梯度累积步数
epochs1训练轮数

关键技术:支持 DDP 多卡训练、混合精度训练(AMP + bf16)、Cosine 学习率调度(含 warmup)、断点续训、梯度裁剪。

3.3 监督微调(SFT)

文件:trainer/train_full_sft.py

使用指令-回答对数据进行全参数微调:

参数默认值说明
batch_size16每GPU批量大小
learning_rate1e-6学习率(更小)
epochs2训练轮数

数据格式为多轮对话,包含 system / user / assistant 角色。

3.4 LoRA 微调

文件:trainer/train_lora.py + model/model_lora.py

使用低秩适配器进行参数高效微调,完全自定义实现(非 peft 库):

3.5 DPO(直接偏好优化)

文件:trainer/train_dpo.py

无需奖励模型的偏好对齐方法,使用 chosen/rejected 数据对,通过对比学习优化策略模型。默认参数:batch_size=4, lr=4e-8, beta=0.1

3.6 RLAIF(AI反馈强化学习)

项目从零实现了三种 RLAIF 算法:

3.7 知识蒸馏

文件:trainer/train_distillation.py

白盒知识蒸馏:Loss = α × CE_Loss + (1-α) × KL_Loss。温度参数 T=2.0,权重 α=0.3。

3.8 推理模型训练

文件:trainer/train_reason.py

训练具有思维链能力的推理模型,使用 <think><answer> 特殊标记,对特殊标记施加 10倍 loss 权重强化格式遵循。

数据集

4.1 数据类型

数据类型文件名用途
Tokenizer训练数据tokenizer_train.jsonlBPE词表训练
预训练数据pretrain_hq.jsonl自回归语言建模
SFT数据sft_mini_512.jsonl监督微调
DPO数据dpo_train.jsonl偏好对齐
RLAIF数据rlaif_train.jsonl强化学习对齐
推理数据sft_reason.jsonl思维链训练

4.2 数据格式

# 预训练数据
{"text": "这是一段无标注的训练文本..."}

# SFT数据
{"conversations": [
  {"role": "user", "content": "问题"},
  {"role": "assistant", "content": "回答"}
]}

# DPO数据
{"prompt": "问题", "chosen": "好的回答", "rejected": "差的回答"}

4.3 Dataset 类实现

文件:dataset/lm_dataset.py

提供四个数据集类:

推理与部署

5.1 命令行推理

文件:eval_llm.py

支持 PyTorch 原生格式(.pth)和 Transformers 格式两种推理方式,具备流式输出、多轮对话、LoRA 加载等功能。

5.2 OpenAI 兼容 API 服务

文件:scripts/serve_openai_api.py

基于 FastAPI 的 API 服务器,完全兼容 OpenAI Chat Completion API,支持流式(SSE)和非流式响应,端点 POST /v1/chat/completions,默认端口 8998。

5.3 Streamlit Web UI

文件:scripts/web_demo.py

基于 Streamlit 的聊天界面,支持本地模型直接加载和 API 模式连接,多轮对话,参数调节。

5.4 模型格式转换

文件:scripts/convert_model.py

支持 PyTorch 与 Transformers 格式互转,兼容 MiniMind 和 Llama 两种格式映射。

5.5 第三方生态兼容

工具用途支持情况
llama.cppCPU/GPU 量化推理支持 GGUF格式
vLLM高性能推理服务支持
Ollama本地模型管理支持
Llama-Factory训练框架支持
HuggingFace模型托管支持

工程细节

6.1 训练工具函数

文件:trainer/trainer_utils.py

提供共用工具:学习率调度器(Cosine Annealing with Warmup)、DDP 初始化、随机种子设置、Xavier 均匀初始化 + Embedding 正态初始化、Checkpoint 管理、SkipBatchSampler(断点续训跳过已训练批次)。

6.2 Chat Template

文件:MiniMind2/chat_template.jinja

支持 system / user / assistant / tool 四种角色、工具调用(Tool Calling)、思考模式。

6.3 核心依赖

torch==2.6.0
transformers==4.57.1
streamlit==1.50.0
swanlab==0.6.8          # 实验追踪
fastapi + uvicorn       # API服务

快速开始

环境准备

git clone https://github.com/jingyaogong/minimind.git
cd minimind
pip install -r requirements.txt

命令行对话

python eval_llm.py

启动 API 服务

python scripts/serve_openai_api.py

启动 Web UI

streamlit run scripts/web_demo.py

从零训练完整流程

# 1. 训练 Tokenizer
python trainer/train_tokenizer.py

# 2. 预训练
python trainer/train_pretrain.py

# 3. 监督微调
python trainer/train_full_sft.py

# 4. LoRA 微调(可选)
python trainer/train_lora.py

# 5. DPO 对齐(可选)
python trainer/train_dpo.py

# 6. RLAIF(可选)
python trainer/train_ppo.py    # 或 train_grpo.py / train_spo.py

# 7. 知识蒸馏(可选)
python trainer/train_distillation.py

# 8. 推理模型训练(可选)
python trainer/train_reason.py

项目结构

minimind/
├── model/
│   ├── model_minimind.py     # 核心模型定义
│   └── model_lora.py         # LoRA 实现
├── trainer/
│   ├── train_tokenizer.py    # Tokenizer 训练
│   ├── train_pretrain.py     # 预训练
│   ├── train_full_sft.py     # 全参数SFT
│   ├── train_lora.py         # LoRA微调
│   ├── train_dpo.py          # DPO对齐
│   ├── train_ppo.py          # PPO算法
│   ├── train_grpo.py         # GRPO算法
│   ├── train_spo.py          # SPO算法
│   ├── train_distillation.py # 知识蒸馏
│   ├── train_reason.py       # 推理模型训练
│   └── trainer_utils.py      # 训练工具函数
├── dataset/
│   └── lm_dataset.py         # 数据集类定义
├── scripts/
│   ├── serve_openai_api.py   # OpenAI API服务
│   ├── web_demo.py           # Streamlit WebUI
│   ├── convert_model.py      # 模型格式转换
│   └── chat_openai_api.py    # API客户端
├── eval_llm.py               # 推理/对话脚本
├── requirements.txt           # 依赖列表
└── README.md                  # 项目说明

总结

MiniMind 是目前最完整、最轻量的开源 LLM 教学项目之一。它用极简的代码和极低的成本,完整复现了大语言模型从数据到部署的全流程。无论你是 AI 初学者还是研究者,都能从中获得深刻的理解和实践经验。

项目地址:https://github.com/jingyaogong/minimind

本文档基于 MiniMind 项目源码深度分析生成,涵盖全部核心模块和训练流程。