refactor: 重构数据管道模块
This commit is contained in:
@@ -1,59 +1,174 @@
|
||||
## KHAOSZ-dataset
|
||||
# DataPipeline
|
||||
|
||||
用于训练的KHAOSZ数据集
|
||||
### 项目结构
|
||||
用于训练KHAOSZ模型的数据集处理工具
|
||||
|
||||
``` bash
|
||||
.
|
||||
│ .gitignore
|
||||
│ dump_pt_file.py
|
||||
│ dump_sft_file.py
|
||||
│ README.md
|
||||
│ run.py
|
||||
│ tokenizer.json
|
||||
│
|
||||
├───modules
|
||||
│ │ tokenizer.py
|
||||
│ └───utils.py
|
||||
│
|
||||
├───pre_train
|
||||
│ chinese-c4.py
|
||||
│ chinese-cosmopedia.py
|
||||
│ english-fineweb.py
|
||||
│ english-wiki.py
|
||||
│
|
||||
├───reforce_learning
|
||||
│ dpp_chinese_dpo_pairs.py
|
||||
│
|
||||
└───supervised_finetuning
|
||||
sft_belle.py
|
||||
sft_chinese_instruct.py
|
||||
sft_coder.py
|
||||
sft_magpie-pro-300k.py
|
||||
sft_small_talk.py
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
khaosz_dataset/
|
||||
├── modules/ # 核心模块
|
||||
│ ├── tokenizer.py # BPE Tokenizer
|
||||
│ └── datapipeline/ # 数据管道模块
|
||||
│ ├── pipeline.py # 主数据管道
|
||||
│ ├── processors.py # 数据处理器(策略模式)
|
||||
│ ├── io.py # 文件IO操作
|
||||
│ ├── packing.py # 序列打包
|
||||
│ └── text.py # 文本规范化
|
||||
├── tokenizer.json # Tokenizer配置
|
||||
└── pyproject.toml # 项目依赖
|
||||
```
|
||||
|
||||
## 架构设计
|
||||
|
||||
### 数据集特性
|
||||
- 支持多语言混合训练(中/英文)
|
||||
- 包含以下预训练数据源:
|
||||
- Chinese-C4
|
||||
- Chinese-Cosmopedia
|
||||
- English-Fineweb
|
||||
- English-Wiki
|
||||
- 支持监督微调数据集:
|
||||
- Ling-Coder-SFT
|
||||
- Chinese-Instruct
|
||||
- BelleGroup
|
||||
- Magpie-Pro-300K
|
||||
本项目采用模块化设计,应用了多种设计模式:
|
||||
|
||||
### 设计模式
|
||||
1. **策略模式** - 不同类型的数据处理器(PT/SFT/DPO)
|
||||
2. **工厂模式** - 处理器工厂统一创建实例
|
||||
3. **模板方法模式** - 数据管道流程标准化
|
||||
|
||||
### 核心组件
|
||||
|
||||
#### DataPipeline(数据管道)
|
||||
主数据管道,负责数据集的分块处理、格式转换和存储。
|
||||
|
||||
```python
|
||||
from modules.datapipeline import DataPipeline
|
||||
|
||||
pipeline = DataPipeline(output_dir="./dataset")
|
||||
pipeline.process_dataset(
|
||||
dataset_dict=dataset,
|
||||
output_subdir="my-data"
|
||||
)
|
||||
```
|
||||
|
||||
#### ProcessorFactory(处理器工厂)
|
||||
创建不同类型的数据处理器。
|
||||
|
||||
```python
|
||||
from modules.datapipeline import ProcessorFactory
|
||||
from modules.tokenizer import BpeTokenizer
|
||||
|
||||
tokenizer = BpeTokenizer("tokenizer.json")
|
||||
|
||||
# 创建预训练处理器
|
||||
processor = ProcessorFactory.create("pt", tokenizer)
|
||||
|
||||
# 创建SFT处理器
|
||||
processor = ProcessorFactory.create("sft", tokenizer)
|
||||
```
|
||||
|
||||
#### TextNormalizer(文本规范化)
|
||||
文本预处理和规范化。
|
||||
|
||||
```python
|
||||
from modules.datapipeline import TextNormalizer
|
||||
|
||||
normalizer = TextNormalizer()
|
||||
normalized_text = normalizer.normalize(text)
|
||||
```
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 安装依赖
|
||||
|
||||
### 使用说明
|
||||
1. 安装依赖:
|
||||
```bash
|
||||
pip install datasets tokenizers tqdm torch
|
||||
pip install datasets tokenizers tqdm torch h5py
|
||||
```
|
||||
运行数据处理:
|
||||
|
||||
### 运行数据处理
|
||||
|
||||
运行所有数据处理脚本:
|
||||
|
||||
```bash
|
||||
python run.py
|
||||
```
|
||||
|
||||
运行特定脚本:
|
||||
|
||||
```bash
|
||||
# 预训练数据处理
|
||||
python pre_train/english-wiki.py
|
||||
|
||||
# SFT数据处理
|
||||
python supervised_finetuning/sft_belle.py
|
||||
|
||||
# DPO数据处理
|
||||
python reforce_learning/dpp_chinese_dpo_pairs.py
|
||||
```
|
||||
|
||||
### 自定义数据处理
|
||||
|
||||
#### 1. 基础数据处理
|
||||
|
||||
```python
|
||||
from datasets import load_dataset
|
||||
from modules.datapipeline import DataPipeline
|
||||
|
||||
# 加载数据集
|
||||
dataset = load_dataset("your-dataset")
|
||||
|
||||
# 创建管道
|
||||
pipeline = DataPipeline()
|
||||
|
||||
# 处理数据
|
||||
pipeline.process_dataset(
|
||||
dataset_dict=dataset,
|
||||
output_subdir="output-dir",
|
||||
process_func=lambda x: {"text": x["content"]}
|
||||
)
|
||||
```
|
||||
|
||||
#### 2. 自定义处理器
|
||||
|
||||
```python
|
||||
from modules.datapipeline.processors import BaseProcessor
|
||||
from modules.datapipeline import ProcessorFactory
|
||||
|
||||
class MyProcessor(BaseProcessor):
|
||||
def __init__(self, tokenizer):
|
||||
self.tokenizer = tokenizer
|
||||
|
||||
def process(self, input_dict: dict) -> dict:
|
||||
# 自定义处理逻辑
|
||||
return {"processed": data}
|
||||
|
||||
@property
|
||||
def output_keys(self) -> list:
|
||||
return ["processed"]
|
||||
|
||||
# 注册处理器
|
||||
ProcessorFactory.register("my_type", MyProcessor)
|
||||
```
|
||||
|
||||
#### 3. 文本规范化
|
||||
|
||||
```python
|
||||
from modules.datapipeline import TextNormalizer
|
||||
|
||||
# 使用默认规则
|
||||
normalizer = TextNormalizer()
|
||||
text = normalizer.normalize(text)
|
||||
|
||||
# 自定义规则
|
||||
custom_rules = {"旧词": "新词"}
|
||||
normalizer = TextNormalizer(custom_rules)
|
||||
```
|
||||
|
||||
## 数据输出格式
|
||||
|
||||
### JSONL格式
|
||||
每个数据块保存为JSONL文件:
|
||||
```
|
||||
{"text": "训练文本内容..."}
|
||||
{"query": "问题", "response": "答案"}
|
||||
```
|
||||
|
||||
### H5格式
|
||||
打包后的张量数据保存为HDF5格式,支持高效加载:
|
||||
```python
|
||||
from modules.datapipeline import IOHandler
|
||||
|
||||
# 加载H5数据
|
||||
data = IOHandler.load_h5("./cached_data")
|
||||
```
|
||||
Reference in New Issue
Block a user