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

321 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 环境管理
```bash
# 使用 uv 包管理器的 .venv 环境
# 添加新包
uv add <package_name>
# 同步环境
uv sync
```
### 2. 数据预处理
```bash
# 预处理预训练数据
python preprocessing/preprocess_pretrain.py
# 预处理三元组数据
python preprocessing/preprocess_trex.py
# 预处理组合数据
python preprocessing/preprocess_combined_json.py
```
## 🚀 训练流程
### 快速开始
```bash
# 执行实验脚本
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记录** - 生成代码变更记录和版本对比
### 实验流程
```bash
# 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后台运行功能
```bash
# 执行实验自动使用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` 进行实际推理效果评估:
```bash
# 基本评估命令(使用默认参数)
.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 | 不使用专家混合 |
#### 数据路径
```bash
# 预训练数据
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 正确启用
### 调试工具
```bash
# 检查模型加载
.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` 配置。