从零训练自己的大模型:MiniMind完整实践指南

从零训练自己的大模型:MiniMind 完整实践指南

基于 MiniMind 项目实战,从环境搭建到模型输出的完整训练流程


一、项目准备

1.1 克隆仓库

nohup git clone https://github.com/jingyaogong/minimind.git &
nohup git clone https://www.modelscope.cn/datasets/gongjy/minimind_dataset.git &

1.2 环境配置

conda create -n mind python=3.10.16 -y
conda activate mind
cd minimind
pip install -r requirements.txt

二、训练流程总览

2.1 预训练(Pretrain)

目标:让模型学会词语接龙,积累基础知识

原理:无监督学习,模型从大量文本中总结规律

# 单卡/多卡训练
torchrun --nproc_per_node 2 train_pretrain.py --use_wandb
# 或
python train_pretrain.py

保存机制:每 100 步保存一次 pretrain_*.pth


2.2 有监督微调(SFT)

目标:让模型学会对话格式,从"词语接龙"变成"会聊天"

原理:施加聊天模板,让模型理解对话结构

torchrun --nproc_per_node 2 train_full_sft.py --use_wandb
# 或
python train_full_sft.py

关键参数

  • 指令和回答长度截断在 512(节省显存)
  • 通过 RoPE 线性插值实现长度外推到 2048+

保存full_sft_*.pth


2.3 人类反馈强化学习(RLHF/DPO)

目标:提升模型的"礼貌"和"偏好对齐"

原理:Direct Preference Optimization(DPO)

注意:RLHF 非必须步骤,主要用于提升对话礼貌度,可能轻微损失信息准确性

torchrun --nproc_per_node 2 train_dpo.py --use_wandb
# 或
python train_dpo.py

保存rlhf_*.pth


2.4 知识蒸馏(Knowledge Distillation)

目标:让小模型学习大模型的行为模式

原理:学生模型向教师模型学习软标签(soft labels)

torchrun --nproc_per_node 2 train_full_sft.py --use_wandb
# 或
python train_full_sft.py

关键:基于 SFT 后的模型做蒸馏

保存full_sft_*.pth


2.5 LoRA 微调(Low-Rank Adaptation)

目标:高效微调,仅更新少量参数即可适配垂域

原理:低秩分解权重矩阵,保持原始预训练权重不变

torchrun --nproc_per_node 2 train_lora.py --use_wandb
# 或
python train_lora.py

保存lora_xxx_*.pth

数据集格式

{"conversations": [
  {"role": "user", "content": "请问颈椎病的人枕头多高才最好?"},
  {"role": "assistant", "content": "颈椎病患者选择枕头的高度应该根据..."}
]}

验证

python eval_model.py --lora_name 'lora_medical' --model_mode 2

2.6 推理模型蒸馏

目标:获得具备数学推理能力的模型

原理:基于 Qwen 系列蒸馏,使用思考-回答模板

数据格式

{
  "conversations": [{
    "role": "user",
    "content": "你好,我是小芳,很高兴认识你。"
  }, {
    "role": "assistant",
    "content": "<think>\n思考过程\n</think>\n<answer>\n最终回答\n</answer>"
  }]
}

训练脚本

torchrun --nproc_per_node 2 train_distill_reason.py --use_wandb
# 或
python train_distill_reason.py

技巧:增加标记位置 token 的损失惩罚(loss_mask[sp_ids] = 10


三、模型架构与参数

3.1 模型参数设定

模型 d_model n_layers 参数量
MiniMind2-Small 512 8 ~0.02B
MiniMind2 768 16 ~0.1B

设计原则:「瘦高个」优于「矮胖子」

  • d_model↓ + n_layers↑ → 瘦高个 → 抽象能力更强
  • d_model < 512 时,词嵌入维度坍塌
  • d_model > 1536 时,增加 layers 性价比更高

四、训练结果与评估

4.1 模型对比

模型 参数量 特点
MiniMind2-Small 0.02B 极小体积,基础能力
MiniMind2 0.1B 平衡之选,推荐使用
MiniMind2-MoE 0.15B 混合专家,更高性能

4.2 实测效果

RLHF vs SFT 对比总结

  • SFT 模型:简洁性 + 信息准确性更好
  • RLHF 模型:提供更多背景信息,但可能牺牲准确性
  • 结论:DPO 适合提升礼貌度,但需要平衡信息质量

五、关键经验总结

5.1 训练流程选择

步骤 是否必须 主要收益
预训练 ✅ 必须 基础语言能力
SFT ✅ 必须 对话能力
RLHF/DPO ⬜ 可选 礼貌度、偏好对齐
知识蒸馏 ⬜ 可选 推理能力
LoRA ⬜ 可选 垂域适配

5.2 显存优化技巧

  • SFT 阶段截断长度为 512 节省显存
  • 通过 RoPE 外推避免重新训练长序列
  • LoRA 仅更新低秩矩阵,大幅降低显存需求

5.3 数据集准备

  • 通用领域 + 垂域数据混合配比(避免过拟合)
  • 蒸馏数据需包含多轮对话和英文数据
  • 推理数据筛选 <1024 长度

六、模型下载


七、总结

MiniMind 项目展示了从零训练大模型的完整流程:

  1. 预训练打基础 → SFT学对话 → RLHF对齐偏好
  2. LoRA轻量微调垂域 → 蒸馏获得推理能力
  3. 小模型也能通过「瘦高」架构 + 蒸馏获得不错的效果

适合想要深入理解 LLM 训练全流程的开发者实践参考。


标签:#大模型 #模型训练 #MiniMind #PyTorch #LoRA #RLHF #知识蒸馏

posted @ 2026-07-29 17:25  钱栈up  阅读(1)  评论(0)    收藏  举报