字节笔记本
2026年8月29日
MiniMind:从零训练 64M 小模型,单卡两小时能跑通
想从零训练一个语言模型,又不想被几百亿参数和天价算力劝退,可以看 MiniMind。它把 Dense / MoE 结构、Tokenizer、预训练、SFT、LoRA、DPO,以及 PPO / GRPO / CISPO 这类后训练,都压进一套可读的原生 PyTorch 代码里。主线模型 minimind-3 大约 64M 参数;用官方给的 mini 数据,单卡 3090 跑完 Pretrain + SFT,大约两小时、租金也就几块钱量级。
下面按「能跑通对话模型」这条最短路径写。仓库地址:jingyaogong/minimind,项目页:jingyaogong.github.io/minimind。
MiniMind 适合谁
它更像一套可复现的 LLM 入门实验,而不是生产级大模型平台。
- 想看清楚 Decoder-Only Transformer、RoPE、SwiGLU、RMSNorm 这些零件怎么拼
- 想亲手走完 Pretrain → SFT →(可选)LoRA / DPO / RLAIF,而不是只会调 API
- 机器只有一张消费级显卡,甚至暂时只能 CPU / MPS 先把流程摸通
- 需要把小模型接到 ollama、vLLM、llama.cpp、Open-WebUI 这类常见工具链
反过来:如果你只要一个强问答助手,直接用现成开源大模型会省事得多。MiniMind 的价值在「自己造一遍」,不在「分数碾压」。
模型规格(当前主线)
| 模型 | 参数量 | 结构要点 | 显存粗估 |
|---|---|---|---|
| minimind-3 | 64M | Dense,d_model=768,8 层 | 约 0.5 GB |
| minimind-3-moe | 198M / 激活约 64M | 4 experts / top-1 | 约 1.0 GB |
结构对齐 Qwen3 / Qwen3-MoE 思路:Pre-Norm + RMSNorm、SwiGLU、RoPE(可配合 YaRN 做长度外推),词表约 6400。历史还有 MiniMind2 的 26M / 104M / 145M 等版本,新实验优先跟 minimind-3。
环境准备
git clone --depth 1 https://github.com/jingyaogong/minimind
cd minimind
pip install -r requirements.txt国内可以加镜像,例如:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple先确认 PyTorch 能看到加速设备:
import torch
print(torch.cuda.is_available())没有 CUDA 也能跑脚本,但训练会慢很多;官方计时和成本估算都是按单卡 3090 说的。
只想先推理:直接拉现成权重
不想训练的话,可以先把对话模型拉下来试手感。
# ModelScope
modelscope download --model gongjy/minimind-3 --local_dir ./minimind-3
# 或 Hugging Face
git clone https://huggingface.co/jingyaogong/minimind-3CLI 评测:
python eval_llm.py --load_from ./minimind-3也可以用 ollama:
ollama run jingyaogong/minimind-3需要网页对话时,把 Transformers 格式模型拷到 scripts/ 下,再跑 Streamlit demo:
cp -r minimind-3 ./scripts/minimind-3
cd scripts && streamlit run web_demo.py仓库还提供兼容 OpenAI API 的 serve_openai_api.py,方便接到 Open-WebUI、Dify 一类前端。
从零训练:最短可复现路径
目标:用 mini 数据集,从随机初始化走到一个能聊天的 Zero 模型。
1. 下载数据
数据集在 ModelScope / Hugging Face 的 minimind_dataset。快速复现至少准备这两份,放到 ./dataset/:
pretrain_t2t_mini.jsonl(约 1.2GB)sft_t2t_mini.jsonl(约 1.6GB)
完整主线还会用到更大的 pretrain_t2t.jsonl、sft_t2t.jsonl,以及 dpo.jsonl、rlaif.jsonl、agent_rl.jsonl 等;算力和磁盘够再补。
预训练样本大致是一行一段文本:
{"text": "Transformer 通过自注意力机制建模上下文关系。"}SFT 是多轮对话,并已混入一部分 Tool Call 样本:
{
"conversations": [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!有什么可以帮你的?"}
]
}2. 预训练
cd trainer
python train_pretrain.py
# 多卡示例:
# torchrun --nproc_per_node 2 train_pretrain.py权重会落到 out/pretrain_*.pth(默认维度 768)。中途挂了可以加 --from_resume 1,检查点在 ./checkpoints/。
3. 全参数指令微调
python train_full_sft.py得到 out/full_sft_*.pth。用 mini 组合时,官方粗算是 Pretrain + SFT 合计约 2.3 小时、成本约 3 元人民币(按 3090 租卡单价估算,实际以机房报价为准)。
4. 抽查效果
python eval_llm.py --weight full_sft这一步你会明显感觉到:小模型能聊,但事实知识有限,幻觉也不少。它适合验证「整条训练链路是否通」,不适合当百科全书。
训练过程想看曲线,可以用 --use_wandb;国内更常把接口切到 SwanLab(API 与 wandb 接近)。
可选进阶:LoRA、偏好对齐、强化学习
最短路径跑通后,再按需往下加。
LoRA 垂直域适配
仓库自实现了 LoRA,不依赖 peft。准备同格式的 lora_xxx.jsonl,例如医疗问答或自我认知:
cd trainer && python train_lora.py推理时指定基础权重和 LoRA 权重:
python eval_llm.py --weight full_sft --lora_weight lora_medical需要合并回完整权重时,用 scripts/convert_model.py。
DPO(RLHF 偏好)
cd trainer && python train_dpo.py数据是 chosen / rejected 成对样本。DPO 实现简单、显存压力相对 PPO 更小,适合先做「更像人偏好」的对齐。
RLAIF:PPO / GRPO / CISPO
cd trainer
python train_ppo.py
python train_grpo.py
# CISPO 可作为 GRPO 的 loss 变体配置默认演示会用奖励模型给连续分;小模型在很难的数学题上容易「全军覆没」导致奖励稀疏,所以官方更倾向稠密奖励,而不是一上来就用 0/1 判题。
Agentic RL(多轮 Tool Use)
train_agent.py 把多轮工具调用、延迟奖励和 rollout 引擎串起来,可用 GRPO / CISPO:
cd trainer
python train_agent.py --use_moe 0 --loss_type grpo --data_path ../dataset/agent_rl.jsonl训完后可用 eval_toolcall.py 看模型会不会先调工具再回答。注意:Agent 权重往往在工具任务上更强,开放问答的稳定性可能下降,这是后训练里很常见的「对齐税」。
接到常用推理栈
训练或下载得到 Transformers 权重后,常见去处:
- vLLM:
vllm serve /path/to/model --served-model-name minimind - llama.cpp:先转 GGUF,再
llama-cli/ 量化 - ollama:写 Modelfile,或直接
ollama run jingyaogong/minimind-3 - OpenAI 兼容服务:
scripts/serve_openai_api.py,可带open_thinking、tool_calls
做长上下文推理时,原生脚本可加 --inference_rope_scaling;Transformers 配置里也可写 YaRN 相关 rope_scaling。
实操时容易踩的点
- 数据没放对目录:训练脚本默认读
./dataset/,文件名也要和 README 一致。 - 旧权重和新代码混用:2025-04 之后结构与命名对齐 Transformers,更早的 v1 权重不能「直接」拿来推理。
- 把 Zero 模型当强助手:64M 模型能验证流程,事实题和长推理都会抖;要垂直场景,优先 LoRA / 领域 SFT,而不是死磕通用榜。
- MoE 并不总是更快:原生 PyTorch 下 expert 分桶和调度有开销;默认
4 experts / top-1大约比 Dense 慢一半左右,是可读性优先的折中。 - Tool Call 与显式思考同时开:若数据里缺少「reasoning + tool」联合样本,两者一起开时思考过程可能不稳定。
什么时候值得继续挖
- 把私有语料做成
pretrain/sftjsonl,训一个领域小模型 - 对照阅读
model/model_minimind.py和各train_*.py,把论文里的符号落到代码 - 走完 DPO → GRPO →
train_agent.py,体会离线偏好和在线 rollout 的差别 - 导出到手机 / 边缘设备(仓库也提到 MNN 等端侧路径)
同作者还有视觉向的 MiniMind-V、以及讨论区里的 dLM / Linear Attention 实验分支,主线跑顺后再扩展即可。
小结
MiniMind 把「从零训练小语言模型」这件事拆成了可复制的工程步骤:克隆仓库、装依赖、下载 mini 数据、先 train_pretrain.py 再 train_full_sft.py,两小时量级就能得到一个能对话的 64M 模型。后面的 LoRA、DPO、RLAIF 和 Agentic RL 都是同一套代码风格下的选修课。若目标是理解 LLM 训练全链路,而不是追最大模型,这条路径足够诚实,也足够便宜。