Skip to content

MLNLP-World/minimind-notes

Repository files navigation

MiniMind Notes 📝

logo

GitHub Repo stars
GitHub pull request
License


🎯 项目动机

原项目与地址:MiniMind

本项目是对 GitHub 项目 《MiniMind》注释增强版。在原始代码的基础上,我们补充了逐文件、逐模块的详细中文注释,帮助读者更好地理解大模型的训练流程。

在整理过程中,我们尽可能保持原始实现的完整性和准确性,同时在注释上进行了适度优化,以更贴合中文学习者的阅读习惯。需要特别说明的是,原作者才是该项目的主要贡献者,本仓库仅作为学习辅助资料,不对原内容进行修改或扩展。

由于个人能力有限,注释中难免存在不完善之处,欢迎大家提出宝贵意见。希望通过这一项目,更多学习者能够快速从“能跑起来”过渡到“能理解、能修改”,也希望为国内社区的大模型学习与研究贡献一份力量。


📚 项目简介

大语言模型(LLMs)已经成为当前人工智能发展的核心驱动力,但对大多数学习者来说,从零开始理解并实现一个 LLM 的训练流程仍然充满挑战

原始的 MiniMind 项目提供了一个极轻量的全流程实现:

  • 仅需低成本 GPU,就能在 2 小时内训练一个 26M 参数的 GPT 模型;
  • 覆盖了从 Tokenizer → Pretrain → SFT → LoRA → DPO → 蒸馏 的完整链路。

在此基础上,MiniMind-Notes 的定位是:在原项目的实现基础上,补充逐文件、逐模块的详尽注释,帮助学习者降低理解门槛,从而更快掌握训练流程与实现原理。

✨ 本项目的特色

  • 每个源码文件包含用途说明、核心原理与特点总结;
  • 函数配备清晰的 docstring 与行内注释;
  • 注释均为中文编写,适合初学者快速上手;
  • 与原仓库保持同步更新,保证可复现性。

💡 通过本项目,你将能够

  • 理解从零实现一个 GPT 风格 LLM 的完整流程;
  • 掌握预训练 (Pretrain)、监督微调 (SFT)、LoRA、DPO 等核心环节;
  • 学会如何准备数据集、运行训练、评估模型;
  • 提升源码阅读与理解能力,为后续研究与改进打下基础。

📖 项目资源

快速体验:

git clone https://github.com/MLNLP-World/minimind-notes.git

📖 注释风格与示例

🖊️ 注释风格

代码采用 文件级三段式说明 + 函数 docstring + 关键行内注释,三者结合,保证既能宏观理解模块作用,又能在细节处快速上手。

📝 示例

以下为完整示例,分别展示三种注释形式:

# ===== 1) 文件级三段式说明 =====
文件用途使用 Direct Preference Optimization (DPO)  MiniMind 进行偏好对齐训练核心原理- 无需 RL 中的奖励模型RM PPO 复杂流程直接通过成对偏好数据chosen/rejected优化模型- 核心思想让模型对人类偏好的回答chosen)”输出概率高于不偏好的回答rejected)”,以参考模型ref_model为基准特点- 参考模型 ref_model 固定不训练被训练模型与其对比 log 概率比
  - 支持 AMP 混合精度DDP 分布式余弦退火学习率
  - 数据集为成对样本chosen / rejected), DPODataset 提供
  - 仅对 assistant 回复区域计入损失 mask 控制
# ===== 2) 函数 docstring 示例 =====
class MOEFeedForward(nn.Module):
    """
    MoE 版本的前馈网络 (FFN):
      - 训练:按 top-k 将 token 分配给专家并加权合并
      - 推理:按专家分组批量前向(moe_infer,无梯度)
      - 可选 shared_experts:对残差进行额外的共享专家修正
    """
# ===== 3) 关键行内注释示例 =====
    def forward(self, x):
        identity = x
        orig_shape = x.shape
        bsz, seq_len, _ = x.shape
        # 1) 门控选择专家
        topk_idx, topk_weight, aux_loss = self.gate(x)
        # 2) 训练/推理两条路径
        x = x.view(-1, x.shape[-1])          # [bs*seq, hidden]
        flat_topk_idx = topk_idx.view(-1)    # [bs*seq*topk]
        if self.training:
            # 训练:复制 token,按专家掩码分别前向,再按权重聚合
            x = x.repeat_interleave(self.config.num_experts_per_tok, dim=0)
            y = torch.empty_like(x, dtype=torch.float16)  # 缓存各专家输出(节省显存)
            for i, expert in enumerate(self.experts):
                y[flat_topk_idx == i] = expert(x[flat_topk_idx == i]).to(y.dtype)
            # 按 topk 权重加权融合
            y = (y.view(*topk_weight.shape, -1) * topk_weight.unsqueeze(-1)).sum(dim=1)
            y = y.view(*orig_shape)
        else:
            # 推理:无梯度 + 分组批量前向,减少小批次 kernel 启动开销
            y = self.moe_infer(x, flat_topk_idx, topk_weight.view(-1, 1)).view(*orig_shape)
        # 3) 共享专家(残差修正)
        if self.config.n_shared_experts > 0:
            for expert in self.shared_experts:
                y = y + expert(identity)
        # 暴露 aux_loss,供上层汇总
        self.aux_loss = aux_loss
        return y

📜 原书readme

以下为 MiniMind 官方项目 的核心内容:

此开源项目旨在完全从0开始,仅用 3块钱成本 + 2小时,即可训练出仅 25.8M 的超小语言模型 MiniMind。 MiniMind 系列极其轻量,最小版本体积是 GPT-3 的 1/7000,力求做到最普通的个人 GPU 也可快速训练。 项目同时开源了从 Tokenizer → Pretrain → SFT → LoRA → DPO → 蒸馏 的全过程代码。

🔧 快速开始

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

下载模型:

git clone https://huggingface.co/jingyaogong/MiniMind2

预训练:

python trainer/train_pretrain.py

监督微调:

python trainer/train_full_sft.py

评估:

python eval_model.py --model_mode 1

📂 数据集示例

推荐最小组合:

  • pretrain_hq.jsonl
  • sft_mini_512.jsonl

更多数据集详见:MiniMind Dataset


🤝 贡献指南

  • 欢迎提交 更详细的注释学习笔记改进建议
  • 我们的目标是让这个项目成为 LLM 学习入门的参考手册

📝 致谢

jingyaogong
jingyaogong
llm-chaser
llm-chaser
jiusheng58
jiusheng58
jiusheng58
lul0308
jiusheng58
qinzheng-li

📜 License

本项目采用 Apache-2.0 License

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages