Minimind/CLAUDE.md
2025-08-01 15:54:21 +08:00

10 KiB
Raw Blame History

CLAUDE.md - MiniMind 预训练项目指南

项目概述: MiniMind 大语言模型预训练项目,研究使用人类可理解的 KnowledgeDataset 替代传统 Transformer Feed-Forward 层作为记忆层。

📋 目录

🏗️ 项目架构

核心模型

文件 用途 说明
model/model.py 主要模型 Transformer + KnowledgeDataset 记忆层
model/model_no_feed.py 无FFN变体 不使用 Feed-Forward 层的实验版本
model/model_original.py 基线模型 传统 Transformer 架构(实验对照)
model/LMConfig.py 配置管理 支持 MOE、数据库、知识图谱功能
model/dataset.py 数据处理 预训练数据集加载和处理

关键特性

  • 人类可理解记忆层: 使用 KnowledgeDataset 替代传统 FFN
  • 🚀 分布式训练: Accelerate + DeepSpeed 支持
  • 📊 实时监控: SwanLab 训练可视化
  • 🔧 灵活配置: 支持多种模型架构实验

目录结构

pretrains-worktree/
├── model/                    # 模型定义
│   ├── model.py             # 主要模型含KnowledgeDataset
│   ├── model_original.py    # 基线模型
│   ├── model_no_feed.py     # 无FFN变体
│   ├── LMConfig.py          # 配置类
│   └── dataset.py           # 数据集处理
├── preprocessing/           # 数据预处理
├── run_file/               # 实验脚本
├── out/                    # 输出目录
├── accelerate_config.yaml  # 分布式配置
├── ds_config.json         # DeepSpeed配置
├── train_pretrain_accelerate.py  # 主训练脚本
└── eval_model.py           # 模型推理评估脚本

🔬 研究现状

研究重点

  • KnowledgeDataset: 探索人类可理解的神经网络记忆机制

当前问题

  1. 文本生成质量:

    • Loss 收敛良好 (model: 0.6 vs baseline: 1.9)
    • 但输出文本为词组碎片,缺乏句法连贯性
  2. SFT 效果差异:

    • model 的 SFT 效果远低于 model_original 基线

⚙️ 环境配置

1. 环境管理

# 使用 uv 包管理器的 .venv 环境

# 添加新包
uv add <package_name>

# 同步环境
uv sync

2. 数据预处理

# 预处理预训练数据
python preprocessing/preprocess_pretrain.py

# 预处理三元组数据
python preprocessing/preprocess_trex.py

# 预处理组合数据
python preprocessing/preprocess_combined_json.py

🚀 训练流程

快速开始

# 执行实验脚本
bash run_file/experiment_1.4.XX.sh

🧪 实验管理

核心文件

  • 实验记录模版: experiment/EXPERIMENT_TEMPLATE.md - 标准化的实验记录格式
  • 实验脚本模版: run_file/experiment_template.sh - 自动化的实验执行脚本
  • 管理指南: experiment/README.md - 详细的实验管理流程说明

🤝 人类-AI 协作模式

🧑‍🔬 人类职责(最简化)

  1. 填写实验目标 - 在实验记录中填写:
    • 基于实验(上一版实验编号)
    • 实验目的、研究假设、预期结果
  2. 审核确认 - 审核AI生成的完整记录
  3. 提交决策 - 决定是否git commit

🤖 AI职责全流程管理

  1. 实验设计 - 记录详细的思考过程和决策逻辑
  2. 脚本管理 - 完全负责生成和管理实验脚本
  3. 执行监控 - 实时记录训练过程和资源使用
  4. 结果分析 - 自动分析性能指标和问题诊断
  5. Git记录 - 生成代码变更记录和版本对比

实验流程

# 1. 人类确定实验版本和目标
EXPERIMENT_VERSION="1.4.1"

# 2. AI创建实验文件
cp experiment/EXPERIMENT_TEMPLATE.md experiment/experiment_${EXPERIMENT_VERSION}.md
cp run_file/experiment_template.sh run_file/experiment_${EXPERIMENT_VERSION}.sh

# 3. 人类填写基本信息(仅需填写[人类填写]部分)

# 4. AI完成所有技术工作
#    - 思考过程记录
#    - 参数配置
#    - 脚本生成
#    - 实验执行使用nohup后台运行
#    - 结果分析

# 5. 人类审核 -> AI提交git

🔧 后台训练执行

使用nohup确保训练持续进行

所有实验脚本现已集成nohup后台运行功能

# 执行实验自动使用nohup后台运行
bash run_file/experiment_X.X.X.sh

# 实时监控训练进度
tail -f out/experiment_X_X_X/experiment.log

# 检查训练进程状态
ps aux | grep train_pretrain_accelerate

# 手动停止训练(如需要)
kill [PID]

重要特性

  • 后台运行: 使用nohup确保训练在SSH断开后继续
  • 📝 日志记录: 所有输出自动记录到实验日志文件
  • 🔍 进程监控: 提供PID和状态检查命令
  • 🛑 优雅停止: 支持安全的训练中断机制
  • 时间估算: 自动显示预计训练完成时间

实验记录结构

experiment_X.Y.Z.md
├── 🧠 AI思考过程        # AI的设计思路和决策推理
├── 📝 Git变更记录       # 代码修改详情和原因
├── 📋 实验基本信息      # 人类填写目标AI填写配置
├── ⚙️ 配置参数         # AI根据目标自动配置
├── 🚀 执行记录         # 训练过程实时更新
├── 📊 训练结果         # 自动化的结果分析
├── 🔍 推理评估         # 使用eval_model.py的实际推理效果
├── 📈 深度分析         # 问题诊断和改进建议
└── 🎯 实验结论         # 假设验证和后续计划

🔍 实验评估要求

重要: 每个实验在训练完成后,必须运行 eval_model.py 进行实际推理效果评估:

# 基本评估命令(使用默认参数)
.venv/bin/python eval_model.py \
    --model_path out/experiment_X_Y_Z/pretrain_512.pth \
    --model_type model

# 完整评估命令(指定所有参数)
.venv/bin/python eval_model.py \
    --model_path out/experiment_X_Y_Z/pretrain_512.pth \
    --model_type model \
    --dim 512 \
    --n_layers 8 \
    --n_heads 32 \
    --knowledge_num 1048576 \
    --knowledge_length 32 \
    --knowledge_dim 128

评估指标说明

  • 输入/输出对比: 展示模型对前30个token的续写能力
  • Loss值: 量化预测准确度,越低越好
  • 文本连贯性: 观察生成文本是否符合语法和语义
  • 模型对比: 比较model、model_original、model_no_feed的差异

版本命名规范

版本格式 说明 示例
X.Y.Z 主要.次要.修订 1.4.1
主要版本 (X) 重大架构变更 从 model_original 到 model
次要版本 (Y) 功能增强或重要参数调整 新增知识库功能
修订版本 (Z) 小幅调整和优化 学习率调整、批次大小优化

质量标准

合格实验必须满足:

  • 明确的实验目标和可验证假设
  • 完整的AI思考过程记录
  • 详细的Git变更记录
  • 训练过程稳定且结果可解释
  • 运行eval_model.py进行推理评估
  • 具体可行的改进建议

不合格情况:

  • 目标模糊或无法验证
  • 缺少思考过程或Git记录
  • 训练异常中断或数据错误
  • 未进行推理评估或缺少评估结果
  • 结论不明确或缺乏下一步计划

⚙️ 配置参数

配置文件

文件 用途
accelerate_config.yaml Accelerate 分布式训练配置
ds_config.json DeepSpeed ZeRO Stage 2 优化配置
pyproject.toml 项目依赖和环境配置

硬件配置 (单张 RTX 4090)

核心参数

参数类别 参数名 说明
训练设置 epochs 3 训练轮次
batch_size 128 批次大小
accumulation_steps 8 梯度累积步数
mixed_precision bf16 混合精度训练
模型架构 dim 512 模型维度
n_layers 8 Transformer 层数
n_heads ≤32 注意力头数
max_seq_len 512 最大序列长度
知识库 knowledge_num 1048576 知识条目数量
knowledge_length 32 单条知识长度
其他 use_moe false 不使用专家混合

数据路径

# 预训练数据
data_path="/home/pci/ycz/Code/Minimind/dataset/stable/merged_pretrain.jsonl"

# 知识库初始化
database_init_path="/home/pci/ycz/Code/Minimind/dataset/stable/sentence_trex_data.json"

# 聚类缓存(可选)
cluster_cache_path=None  # 默认关闭

📊 训练监控

SwanLab 可视化

  • 训练指标: 实时监控 loss、学习率变化
  • 📈 资源监控: GPU 内存、计算利用率追踪
  • 🌐 多模式: 支持在线/离线监控模式

🛠️ 故障排除

常见问题

1. 文本生成质量问题

  • 现象: 输出为词组碎片,缺乏连贯性
  • 可能原因: KnowledgeDataset 记忆机制与语言建模目标不匹配
  • 排查方向: 检查知识库索引机制、记忆层输出分布

2. SFT 效果差异

  • 现象: model 的 SFT 效果显著低于 baseline
  • 可能原因: 预训练阶段的表示学习偏差
  • 排查方向: 对比两种模型的隐层表示、梯度流动

3. 训练资源

  • GPU 内存: 如遇显存不足,调整 batch_size / accumulation_steps
  • 训练速度: 确认 DeepSpeed ZeRO Stage 2 正确启用

调试工具

# 检查模型加载
.venv/bin/python -c "from model.model import *; print('模型加载成功')"

# 验证数据预处理
.venv/bin/python -c "from model.dataset import *; print('数据集加载成功')"

# 测试训练脚本
.venv/bin/python train_pretrain_accelerate.py --help

# 测试评估脚本
.venv/bin/python eval_model.py --help

# 快速评估测试仅5个样本
.venv/bin/python eval_model.py \
    --model_path out/experiment_1_4_0/pretrain_512.pth \
    --model_type model \
    --num_samples 5

💡 提示: 使用本文档前,请确保已正确配置 uv 虚拟环境和相关依赖。如有问题,请检查 pyproject.toml 配置。