智猩猩AI整理
编辑:金水
大模型很火,但真正从零跑通一整条训练链路的人并不多。
想真正搞懂大语言模型,普通人面对的是三道坎:模型太大跑不起、框架封装太厚看不清底层、网上付费教程噪音太多。
龚靖尧(GitHub 名 jingyaogong,南京大学)的 MiniMind 选了一条直接的路,从零训练一个最小的语言模型,让每个人从看懂每行代码开始亲手训一遍。
项目一度登顶 GitHub Trending 日榜,累计 5.8 万 star。做法是全部用 PyTorch 原生实现、不依赖第三方高层封装,打通预训练到强化学习全链路。
当前主线模型 minimind-3 大约 64M 参数,体积大概是 GPT-3 的 1/2700。官方实测,在单张 3090 上,用精简数据做完预训练 + SFT,大约 2 小时,对应租卡成本大概 3 块钱左右。
下面具体看它到底怎么做的。
![]()
01
训练链路:从生到熟全流程
MiniMind 最值得看的地方,是它不像很多教程只讲推理,而是把一个小模型从生训到熟的全过程都打通了。
![]()
训练的第一步是预训练。模型要先学会语言规律和基础知识,做的是 next-token prediction,读大量文本,预测下一个词。数据统一成简单的 text 格式。
cd trainer && python train_pretrain.py精简版 pretrain_t2t_mini.jsonl 大约 1.2GB,适合快速复现;完整版更大,更适合正式训练。
脚本在 trainer 目录下,单卡直接跑 train_pretrain.py 就行,权重默认保存为 pretrain 开头的 pth 文件。
预训练之后模型能接龙,但还不会按对话格式稳定回复。
接下来做指令微调,也就是 SFT。用多轮对话数据,让模型适应 user、assistant、system、tool 这些角色,同时强化指令跟随。
cd trainer && python train_full_sft.pyTool Call 样本也并进了主线 SFT 数据,不再单独训一轮。
精简版 sft_t2t_mini.jsonl 大约 1.6GB,就能较快出对话能力。训练后得到 full_sft 权重。
后面还有可选的后训练。LoRA 只训低秩增量,适合垂域适配,比如医学或自我认知,不改动主干权重。
知识蒸馏分黑盒和白盒,黑盒本质是对教师输出做监督,白盒额外拟合 token 分布,仓库里有完整参考实现。
强化学习这边,DPO 用偏好对直接优化,实现简单、显存占用低;PPO、GRPO、CISPO 走 on-policy,用奖励信号更新策略;
Agentic RL 则做多轮工具调用加延迟奖励,适合学“先决定要不要调工具,再根据结果继续”的流程。
![]()
有意思的是,项目里用一个统一视角把上面这些 PO 算法串了起来,不管 DPO、PPO、GRPO 还是 CISPO,本质都是"策略项、优势项、正则项"三个组件的不同组合。
![]()
整个链路从数据到脚本都开源,核心算法用 PyTorch 手写。好处是每一行都能看懂,坏处是工程成熟度不如成熟框架,需要自己处理分布式和断点续训等细节。
02
从零实现:
向 Qwen3 对齐的小个子
上面这些流程很多框架都能跑,MiniMind 不一样的地方在于全用 PyTorch 原生代码写出来,不调 transformers、trl、peft 的高层接口。
开源项目里这么干的并不多见,意味着读者能看见注意力怎么算、loss 怎么写、强化学习的奖励怎么打分,轮子到底是怎么造出来的,而不是调个 API 完事。
![]()
![]()
结构上,minimind-3 对齐了 Qwen3 的常见配置,minimind-3 用 Transformer Decoder-Only 结构,采用预标准化加 RMSNorm,SwiGLU 激活,RoPE 旋转位置编码并支持 YaRN 长文本外推,q_heads=8、kv_heads=4,最大位置 32768。
![]()
主线默认 8 层、d_model=768、词表控制在 6400,对小模型更合适,因为词表一大,embedding 和输出层占比会过高。还有 MoE 版本,激活参数仍约 64M,总参数约 198M。
作者解释这个取舍是更浅的网络训得更快,dim 又不会小到模式崩溃,在效率、稳定性和效果间取了平衡。
MoE 版在同结构上加了 4 experts / top-1 routing,不过他也坦白,原生 PyTorch 训 MoE 时 token 要按专家分桶再分别 forward,调度开销很重,所以 4 experts 配置实际比 dense 还慢约 50%,这是原生实现的现实折中,不是 bug。
03
训练数据与成本:
下载即跑,3 块钱怎么来的
数据方面倒是省心,主线训练集已经开源在 ModelScope 和 HuggingFace 上,按需下载即可,不必自己从零清洗。
最小组合用 pretrain_t2t_mini.jsonl(约 1.2GB)和 sft_t2t_mini.jsonl(约 1.6GB)就能较快复现对话能力。完整训练才需要动到 10GB 的预训练集和 14GB 的 SFT 集。
数据来源包括公开语料、模型蒸馏合成数据和协议友好的开源集,SFT 里还混了大约 10 万条由 qwen3-4b 合成的 tool call 数据,以及 qwen3 系列的推理数据。
成本这块最适合做开场钩子,但也得说清前提。
作者在单卡 3090(租卡约 1.3 元/小时)上实测,各阶段耗时和成本大致如下:
![]()
"2 小时"指的是 SFT 阶段在单卡 3090 上跑完 1 个 epoch 的耗时,"3 块钱"是对应时段的租卡成本,不是训完所有阶段的总价。
上多卡(比如 8×H100)还能压到分钟级,但对个人开发者,单卡把 minimind-zero 从零训完量级就在 2 小时左右。
04
效果:能力边界与取舍
64M 模型的边界很清晰。它能做基础多轮对话,语气相对自然;简单工具调用也能跑通,Agentic RL 之后成功率明显提升;支持显式思考开关和 OpenAI 风格 API。
但事实知识有限,容易幻觉;复杂推理和长逻辑链条不稳定;英文 benchmark 基本在随机附近,中文稍好一点但仍弱。后训练往往提升特定奖励目标,同时牺牲部分通用性和事实稳定性,这是常见的“对齐税”。
![]()
和同量级或稍大的小模型对比,minimind-3 更偏“能跑通全流程、结构干净”,而不是在开放问答准确率上压过别人。
如果目标是学习训练链路、改结构、做实验,它够用;如果目标是日常可靠问答,还是得上更大模型或继续堆数据与对齐。
![]()
YaRN 外推可以在不重新训练的情况下把上下文拉长,长文本困惑度会明显下降,这对小模型也有实际价值。
05
总结
MiniMind 把一件事做得比较彻底,用极小的参数量,把从预训练到工具调用、强化学习的完整链路都实现并开源出来,核心代码尽量自己写,数据也整理好了。
对想真正动手改模型、理解每一步在干什么的人,门槛相对低,一台 3090、几块钱、两小时,就能跑完精简版全流程。
它不是要替代大模型,也不是宣称小模型能做一切,更像是一个可复现、可拆解的练习场:结构向 Qwen3 对齐,方便后续迁移;成本压到个人可承受;效果边界写得很清楚。
适合当入门和实验起点,而不是当生产级助手。
关注+星标,获取AI前沿进展与开源一线动态
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.