Chapter 05
📌 模型
📌 模型
结构
minimind-3 Dense 使用 Transformer Decoder-Only 结构,整体配置已经向 Qwen3 生态对齐,方便后续转换到 transformers / llama.cpp / ollama / vllm:
- 采用预标准化(Pre-Norm)+ RMSNorm。
- 使用 SwiGLU 激活函数。
- 使用 RoPE 旋转位置编码,并支持 YaRN 外推。
q_heads=8、kv_heads=4,max_position_embeddings=32768,rope_theta=1e6。
minimind-3-moe 在相同结构上扩展 MoE 前馈层,实现上兼容 Qwen3-MoE 风格配置(去除 shared expert)。
- 当前默认配置为
4 experts / top-1 routing,用于以更低激活参数获得更高容量。 - Experts 继续增加后,实际耗时往往比同尺寸规模的 dense 模型高非常多,这和 “MoE 推理更快” 放在一起看会有点反直觉,但训练时 token 先按专家分桶、再分别做 forward,原生训练时带来的
kernel启停和调度开销会急剧变重,这本身是很自然的事情。得靠支持 MoE kernel-fused 的算子库来优化,比如基于Triton的自定义 kernel、DeepSpeed-MoE、Megatron-LM等等。当然,这个项目还是希望保留原生 PyTorch 的普适性,所以这里做的是现实的折中,在当前实现下,4 experts / top-1这个甜点配置大约只比 dense 模型慢50%左右。
minimind-3 系列结构如下图:

修改模型配置见./model/model_minimind.py,参考模型参数版本见下表:
| Model Name | params | len_vocab | max_pos | rope_theta | n_layers | d_model | kv_heads | q_heads | note |
|---|---|---|---|---|---|---|---|---|---|
| minimind-3 | 64M | 6400 | 32768 | 1e6 | 8 | 768 | 4 | 8 | Dense |
| minimind-3-moe | 198M-A64M | 6400 | 32768 | 1e6 | 8 | 768 | 4 | 8 | 4 experts / top-1 |
| minimind2-small | 26M | 6400 | 32768 | 1e6 | 8 | 512 | 2 | 8 | 历史版本 |
| minimind2-moe | 145M | 6400 | 32768 | 1e6 | 8 | 640 | 2 | 8 | 历史版本 |
| minimind2 | 104M | 6400 | 32768 | 1e6 | 16 | 768 | 2 | 8 | 历史版本 |
模型配置
关于 LLM 的参数配置,MobileLLM 对小模型做过一组很有代表性的系统研究。对 MiniMind 这类百M级模型而言,d_model 与 n_layers 的取舍不只是参数分配问题,也会直接影响训练稳定性与最终效果。
当前 minimind-3 主线选择 dim=768, n_layers=8,本质上是一种工程取舍:更浅的网络训练更快,同时 dim 也不至于过小而导致模式崩溃,因此能在训练效率、稳定性与最终效果之间取得相对均衡。
Scaling Law 在小模型上往往会呈现出一些不同于大模型的现象。决定 Transformer 参数规模变化的核心参数,通常主要就是 d_model 和 n_layers:
d_model↑ +n_layers↓ -> 矮胖子d_model↓ +n_layers↑ -> 瘦高个
经典 Scaling Law 更强调训练数据量、参数量和训练步数的决定性作用,通常会弱化架构差异本身的影响;但在小模型区间,这个结论并不总是完全成立。
MobileLLM 的一个核心观察是:在参数量固定时,深度往往比宽度更重要。也就是说,相比“宽而浅”的结构,“深而窄”的模型更容易学到抽象概念。
例如当模型参数量固定在 125M 或 350M 时,30~42 层的狭长结构通常会优于 12 层左右的矮胖结构,在常识推理、问答、阅读理解等多个基准上都呈现出相近趋势。
这和 MiniMind 在训练过程中围绕 d_model 与 n_layers 做参数分配实验时观察到的现象是一致的。不过“深而窄”里的“窄”也有下限:当 d_model < 512 时,词嵌入维度过窄带来的劣势会明显放大,额外增加 layers 往往不足以完全弥补固定 q_head 下 d_head 偏小的问题。
相对地,当 d_model > 1536 时,继续增加层数往往比单纯继续加宽更划算,更容易带来更高的参数-效果收益。
作为参考,GPT-3 的参数设定如下:

