309 lines
8.9 KiB
Markdown
309 lines
8.9 KiB
Markdown
# 🧪 MiniMind 实验管理系统
|
||
|
||
> **系统概述**: 标准化的实验管理框架,确保 MiniMind 预训练实验的可重现性、可追踪性和高质量协作。
|
||
|
||
---
|
||
|
||
## 📋 目录
|
||
|
||
- [快速开始](#快速开始)
|
||
- [协作流程](#协作流程)
|
||
- [模版使用](#模版使用)
|
||
- [实验规范](#实验规范)
|
||
- [文件结构](#文件结构)
|
||
- [故障排除](#故障排除)
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 实验创建流程
|
||
|
||
```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: 根据实验目标配置参数并执行
|
||
bash run_file/experiment_${EXPERIMENT_VERSION}.sh
|
||
|
||
# 5. 🤖 AI: 完成实验记录和结果分析
|
||
|
||
# 6. 🧑🔬 人类: 审核实验记录
|
||
|
||
# 7. 🤖 AI: 提交实验到git(经人类确认后)
|
||
```
|
||
|
||
### 2. 实验版本命名规范
|
||
|
||
| 版本格式 | 说明 | 示例 |
|
||
|---------|------|------|
|
||
| `X.Y.Z` | 主要.次要.修订 | `1.4.1` |
|
||
| 主要版本 (X) | 重大架构变更 | 从 model_original 到 model |
|
||
| 次要版本 (Y) | 功能增强或重要参数调整 | 新增知识库功能 |
|
||
| 修订版本 (Z) | 小幅调整和优化 | 学习率调整、批次大小优化 |
|
||
|
||
---
|
||
|
||
## 🤝 协作流程
|
||
|
||
### 人类研究者职责 🧑🔬
|
||
|
||
#### 实验前期 (必填项目)
|
||
在 `experiment_X.Y.Z.md` 中填写:
|
||
|
||
```markdown
|
||
## 📋 实验基本信息
|
||
|
||
### 🧑🔬 **[人类填写]** 实验目标
|
||
**实验目的**:
|
||
[具体描述要解决的问题,如:"验证增大知识库规模对生成质量的影响"]
|
||
|
||
**研究假设**:
|
||
[明确的可验证假设,如:"knowledge_num从1M增加到2M会提升文本连贯性"]
|
||
|
||
**预期结果**:
|
||
[量化的期望指标,如:"Loss降低至0.5以下,生成文本连贯性评分>7.0"]
|
||
|
||
**实验重点**:
|
||
[关键验证点,如:"重点观察内存使用情况和训练稳定性"]
|
||
```
|
||
|
||
#### 实验后期 (审核职责)
|
||
- ✅ **结果审核**: 验证AI分析的准确性和合理性
|
||
- ✅ **假设验证**: 确认实验是否回答了预设问题
|
||
- ✅ **质量把关**: 确保实验记录完整、结论可信
|
||
- ✅ **提交决策**: 决定是否将实验提交到git仓库
|
||
|
||
### AI助手职责 🤖
|
||
|
||
#### 实验构建期
|
||
1. **参数配置**: 根据实验目标自动填写所有 `[AI构建]` 标记的参数
|
||
2. **环境检查**: 验证GPU、数据文件、Python环境等
|
||
3. **脚本生成**: 创建可执行的实验脚本
|
||
4. **预检验证**: 确保配置的合理性和可执行性
|
||
|
||
#### 实验执行期
|
||
1. **实时监控**: 记录训练进度、资源使用情况
|
||
2. **异常处理**: 捕获和记录错误信息
|
||
3. **状态更新**: 实时更新实验记录中的执行状态
|
||
|
||
#### 实验完成期
|
||
1. **结果分析**: 自动分析训练曲线、性能指标
|
||
2. **质量评估**: 生成文本样例和质量评分
|
||
3. **问题诊断**: 识别异常情况并提供改进建议
|
||
4. **记录完善**: 填写所有 `[AI完成]` 标记的分析内容
|
||
|
||
---
|
||
|
||
## 📝 模版使用
|
||
|
||
### 实验记录模版 (`EXPERIMENT_TEMPLATE.md`)
|
||
|
||
#### 🧑🔬 人类填写区域
|
||
- **实验目标**: 明确、具体、可量化
|
||
- **研究假设**: 可验证的科学假设
|
||
- **预期结果**: 具体的成功标准
|
||
|
||
#### 🤖 AI构建区域
|
||
- **配置参数**: 所有模型和训练参数
|
||
- **执行记录**: 训练过程的实时状态
|
||
- **环境信息**: 硬件和软件环境快照
|
||
|
||
#### ✅ AI完成区域
|
||
- **结果分析**: 训练指标和性能评估
|
||
- **问题诊断**: 异常检测和原因分析
|
||
- **改进建议**: 基于结果的优化方案
|
||
|
||
### 实验脚本模版 (`experiment_template.sh`)
|
||
|
||
#### 关键占位符说明
|
||
|
||
| 占位符 | 类型 | 说明 | 示例值 |
|
||
|--------|------|------|--------|
|
||
| `[VERSION]` | 🧑🔬 人类 | 实验版本号 | `1.4.1` |
|
||
| `[DESCRIPTION]` | 🧑🔬 人类 | 实验简短描述 | `"验证2M知识库对生成质量的影响"` |
|
||
| `[CUDA_DEVICES]` | 🤖 AI | GPU设备配置 | `0` 或 `0,1,2,3` |
|
||
| `[BATCH_SIZE]` | 🤖 AI | 批次大小 | `128` |
|
||
| `[LEARNING_RATE]` | 🤖 AI | 学习率 | `8e-5` |
|
||
| `[MODEL_TYPE]` | 🤖 AI | 模型类型 | `model` |
|
||
| `[KNOWLEDGE_NUM]` | 🤖 AI | 知识库大小 | `2097152` |
|
||
|
||
---
|
||
|
||
## 📋 实验规范
|
||
|
||
### 实验分类标准
|
||
|
||
#### 🧪 **探索性实验**
|
||
- **目的**: 验证新想法、测试可行性
|
||
- **规模**: 小规模、快速验证
|
||
- **版本**: 通常为 X.Y.0(新功能首次测试)
|
||
- **时长**: 1-3小时内完成
|
||
|
||
#### 🔬 **验证性实验**
|
||
- **目的**: 确认假设、对比基线
|
||
- **规模**: 中等规模、完整训练
|
||
- **版本**: 通常为 X.Y.1-X.Y.9(功能优化迭代)
|
||
- **时长**: 3-12小时
|
||
|
||
#### 🏆 **生产性实验**
|
||
- **目的**: 最终模型训练、性能优化
|
||
- **规模**: 大规模、完整流程
|
||
- **版本**: 通常为 X.0.0(重要里程碑)
|
||
- **时长**: 12小时以上
|
||
|
||
### 质量标准
|
||
|
||
#### ✅ **合格实验标准**
|
||
- [ ] 实验目标明确具体
|
||
- [ ] 参数配置完整无误
|
||
- [ ] 训练过程稳定收敛
|
||
- [ ] 结果记录详细准确
|
||
- [ ] 问题分析深入合理
|
||
- [ ] 改进建议具体可行
|
||
|
||
#### 🚫 **不合格实验情况**
|
||
- ❌ 目标模糊或无法验证
|
||
- ❌ 训练中断或严重错误
|
||
- ❌ 数据异常或无法解释
|
||
- ❌ 记录不完整或有明显错误
|
||
- ❌ 缺乏有效的改进建议
|
||
|
||
### 审核流程
|
||
|
||
1. **AI自检**: 完成实验记录后进行自我检查
|
||
2. **人类初审**: 研究者检查实验的完整性和准确性
|
||
3. **问题反馈**: 如有问题,AI修正后重新提交审核
|
||
4. **最终确认**: 确认无误后标记"✅ 已审核"
|
||
5. **Git提交**: 审核通过后提交到版本控制系统
|
||
|
||
---
|
||
|
||
## 📁 文件结构
|
||
|
||
```
|
||
experiment/
|
||
├── README.md # 本文档
|
||
├── EXPERIMENT_TEMPLATE.md # 实验记录模版
|
||
├── experiment_1.4.0.md # 具体实验记录
|
||
├── experiment_1.4.1.md
|
||
└── ...
|
||
|
||
run_file/
|
||
├── experiment_template.sh # 实验脚本模版
|
||
├── experiment_1.4.0.sh # 具体实验脚本
|
||
├── experiment_1.4.1.sh
|
||
└── ...
|
||
|
||
out/
|
||
├── experiment_1.4.0/ # 实验输出目录
|
||
│ ├── checkpoint_*.pt # 模型检查点
|
||
│ ├── train.log # 训练日志
|
||
│ └── experiment_info.txt # 实验信息
|
||
└── ...
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ 故障排除
|
||
|
||
### 常见问题
|
||
|
||
#### 1. 模版占位符未替换
|
||
**现象**: 脚本执行时出现 `[PLACEHOLDER]` 相关错误
|
||
**解决**:
|
||
```bash
|
||
# 检查未替换的占位符
|
||
grep -n "\[.*\]" run_file/experiment_X.Y.Z.sh
|
||
```
|
||
|
||
#### 2. GPU内存不足
|
||
**现象**: CUDA out of memory
|
||
**解决**:
|
||
- 减小 `batch_size`
|
||
- 增加 `accumulation_steps`
|
||
- 调整 `max_seq_len`
|
||
|
||
#### 3. 数据文件路径错误
|
||
**现象**: FileNotFoundError
|
||
**解决**:
|
||
```bash
|
||
# 检查数据文件是否存在
|
||
ls -la /home/pci/ycz/Code/Minimind/dataset/stable/
|
||
```
|
||
|
||
#### 4. SwanLab连接失败
|
||
**现象**: SwanLab API错误
|
||
**解决**:
|
||
- 检查API密钥配置
|
||
- 确认网络连接正常
|
||
- 验证项目名称正确
|
||
|
||
### 调试技巧
|
||
|
||
#### 开启详细日志
|
||
```bash
|
||
# 在脚本中添加调试选项
|
||
export NCCL_DEBUG=INFO
|
||
export PYTHONFAULTHANDLER=1
|
||
export CUDA_LAUNCH_BLOCKING=1
|
||
```
|
||
|
||
#### 快速验证
|
||
```bash
|
||
# 测试环境配置
|
||
python -c "import torch; print(f'CUDA可用: {torch.cuda.is_available()}')"
|
||
|
||
# 验证数据加载
|
||
python -c "from model.dataset import *; print('数据集加载成功')"
|
||
|
||
# 检查模型初始化
|
||
python -c "from model.model import *; print('模型加载成功')"
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 最佳实践
|
||
|
||
### 实验设计原则
|
||
|
||
1. **单一变量**: 每次实验只改变一个关键参数
|
||
2. **对照基线**: 始终与 model_original 进行对比
|
||
3. **渐进优化**: 从小规模到大规模逐步验证
|
||
4. **记录详尽**: 记录所有可能影响结果的因素
|
||
|
||
### 协作效率提升
|
||
|
||
1. **明确目标**: 人类提供清晰的实验目标和假设
|
||
2. **及时反馈**: 对AI的分析及时给出反馈和指导
|
||
3. **知识积累**: 将有效的配置和发现整理成知识库
|
||
4. **版本管理**: 重要实验及时提交到git保存
|
||
|
||
### 实验优化策略
|
||
|
||
1. **资源利用**: 合理配置批次大小和GPU使用
|
||
2. **时间管理**: 根据实验重要性分配计算资源
|
||
3. **结果复用**: 保存有价值的模型检查点和配置
|
||
4. **持续改进**: 基于实验结果不断优化流程
|
||
|
||
---
|
||
|
||
## 🔗 相关链接
|
||
|
||
- [CLAUDE.md](../CLAUDE.md) - 项目总体指南
|
||
- [SwanLab平台](https://swanlab.cn/) - 实验监控和可视化
|
||
- [模型架构文档](../model/) - 模型实现细节
|
||
- [数据处理流程](../preprocessing/) - 数据预处理说明
|
||
|
||
---
|
||
|
||
> 💡 **提示**: 使用此实验管理系统前,请先仔细阅读 [CLAUDE.md](../CLAUDE.md) 了解项目整体架构和配置要求。
|
||
|
||
**最后更新**: 2024-XX-XX
|
||
**维护者**: MiniMind 项目组 |