Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions F2LLM/arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ class Args:
warmup_steps: int = 100
# embedding-related settings
num_hard_neg: int = 7
# model configuration
model_type: str = "auto"
embedding_strategy: str = "last_token"
pooling_strategy: str = "cls"
# train steps take precedence over epochs, set to -1 to disable
train_steps: int = -1
train_epochs: int = 5
Expand Down
22 changes: 22 additions & 0 deletions F2LLM/configs/config_bert_base.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"model_path": "models/bert-base-uncased",
"model_type": "bert",
"experiment_id": "bert-base-uncased-embedding",
"train_data_path": "data_tokenized_bert",
"output_dir": "output",
"tb_dir": "output/tb",
"cache_dir": "cache",
"train_batch_size": 32,
"checkpointing_steps": 5000,
"validation_steps": 5000,
"max_seq_length": 512,
"learning_rate": 2e-5,
"min_lr": 1e-7,
"weight_decay": 0.01,
"warmup_steps": 500,
"train_epochs": 3,
"log_interval": 100,
"num_hard_neg": 7,
"embedding_strategy": "cls",
"pooling_strategy": "cls"
}
22 changes: 22 additions & 0 deletions F2LLM/configs/config_llama3_8b.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"model_path": "models/llama-3-8b",
"model_type": "llama",
"experiment_id": "llama3-8b-embedding",
"train_data_path": "training_data/data_tokenized_llama",
"output_dir": "output",
"tb_dir": "output/tb",
"cache_dir": "cache",
"train_batch_size": 16,
"checkpointing_steps": 5000,
"validation_steps": 5000,
"max_seq_length": 2048,
"learning_rate": 1e-5,
"min_lr": 1e-7,
"weight_decay": 0.01,
"warmup_steps": 500,
"train_epochs": 2,
"log_interval": 100,
"num_hard_neg": 7,
"embedding_strategy": "last_token",
"pooling_strategy": "last_token"
}
22 changes: 22 additions & 0 deletions F2LLM/configs/config_qwen3_mean_pooling.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"model_path": "models/qwen3-0.6b",
"model_type": "qwen",
"experiment_id": "qwen3-0.6b-mean-pooling",
"train_data_path": "training_data/data_tokenized_qwen",
"output_dir": "output",
"tb_dir": "output/tb",
"cache_dir": "cache",
"train_batch_size": 16,
"checkpointing_steps": 5000,
"validation_steps": 5000,
"max_seq_length": 1024,
"learning_rate": 8e-6,
"min_lr": 1e-7,
"weight_decay": 0.01,
"warmup_steps": 500,
"train_epochs": 2,
"log_interval": 100,
"num_hard_neg": 7,
"embedding_strategy": "mean_pooling",
"pooling_strategy": "mean"
}
181 changes: 181 additions & 0 deletions F2LLM/docs/不同模型使用文档.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
# F2LLM 不同模型使用文档

## 概述

本文档详细说明了F2LLM项目中支持的不同模型的使用方法,包括BERT、LLaMA、Qwen等模型的训练和推理流程。

## 支持的模型列表

1. **BERT类模型**
- bert-base-uncased
- bert-large-uncased

2. **LLaMA类模型**
- llama-3-8b

3. **Qwen类模型**
- qwen3-0.6b
- qwen3-4b

## 模型使用指南

### 1. BERT模型使用

#### 训练流程

1. 数据预处理:
```bash
# 使用通用数据预处理脚本
python tokenize_data_generic.py --config configs/config_generic.json --model_path models/bert-base-uncased --model_type bert
```

2. 模型训练:
```bash
python run.py --config configs/config_bert_base.json
```

#### 模型特点

- 适用于句子相似度、文本分类等任务
- 使用[CLS]标记的隐藏状态作为句子表示
- 最大序列长度通常为512

### 2. LLaMA模型使用

#### 训练流程

1. 数据预处理:
```bash
# 使用通用数据预处理脚本
python tokenize_data_generic.py --config configs/config_generic.json --model_path models/llama-3-8b --model_type llama
```

2. 模型训练:
```bash
python run.py --config configs/config_llama3_8b.json
```

#### 模型特点

- 解码器架构模型
- 使用最后一个token的隐藏状态作为句子表示
- 支持更长的序列长度(可达2048)
- 需要更多的计算资源

### 3. Qwen模型使用

#### 训练流程

1. 数据预处理:
```bash
# 使用通用数据预处理脚本
python tokenize_data_generic.py --config configs/config_generic.json --model_path models/qwen3-0.6b --model_type qwen
```

2. 模型训练(使用平均池化):
```bash
python run.py --config configs/config_qwen3_mean_pooling.json
```

#### 模型特点

- 阿里巴巴集团开发的大语言模型
- 支持多种池化策略(CLS、平均池化、最后token等)
- 针对中文和多语言任务进行了优化
- Qwen3系列支持更长的上下文长度

## 配置参数说明

### 模型相关参数

| 参数名 | BERT | LLaMA | Qwen |
|--------|------|-------|------|
| `model_path` | models/bert-base-uncased | models/llama-3-8b | models/qwen3-0.6b |
| `model_type` | bert | llama | qwen |
| `max_seq_length` | 512 | 2048 | 1024 |
| `train_batch_size` | 32 | 16 | 16 |
| `learning_rate` | 2e-5 | 1e-5 | 8e-6 |
| `train_epochs` | 3 | 2 | 2 |
| `embedding_strategy` | cls | last_token | mean_pooling |
| `pooling_strategy` | cls | last_token | mean |

### 处理模式参数

对于数据预处理脚本,支持多种处理模式:

1. **自动模式(auto)**:
根据`num_processes`参数自动选择处理方式
```bash
python tokenize_data_generic.py --config configs/config_generic.json --mode auto
```

2. **串行模式(serial)**:
使用单进程处理,适用于调试和小数据集
```bash
python tokenize_data_generic.py --config configs/config_generic.json --mode serial
```

3. **并行模式(parallel)**:
使用多进程处理,提高处理速度
```bash
python tokenize_data_generic.py --config configs/config_generic.json --mode parallel --num_processes 4
```

4. **GPU加速模式(gpu)**:
使用GPU进行处理,需要支持CUDA或MPS的设备
```bash
python tokenize_data_generic.py --config configs/config_generic.json --mode gpu --device cuda
```

## 设备支持

### CPU处理

默认使用CPU进行处理,适用于所有环境:
```bash
python tokenize_data_generic.py --config configs/config_generic.json --device cpu
```

### CUDA GPU处理

使用NVIDIA GPU进行加速处理:
```bash
python tokenize_data_generic.py --config configs/config_generic.json --device cuda
```

### MPS GPU处理

使用Apple Silicon GPU进行加速处理(仅适用于Mac M系列芯片):
```bash
python tokenize_data_generic.py --config configs/config_generic.json --device mps
```

## 注意事项

1. **模型路径**:确保模型路径正确,且包含模型的配置文件和分词器文件
2. **序列长度**:不同模型支持的最大序列长度不同,设置时需注意
3. **批次大小**:根据GPU显存大小调整批次大小,避免显存溢出
4. **学习率**:不同模型的最优学习率不同,需要根据实际情况调整
5. **嵌入策略**:根据模型架构选择合适的嵌入策略(CLS、平均池化、最后token等)
6. **设备兼容性**:确保指定的设备在当前环境中可用

## 常见问题

### 1. 如何选择合适的模型?

- **BERT**:适用于传统的NLP任务,如句子相似度、文本分类等
- **LLaMA**:适用于需要更长上下文理解和生成能力的任务
- **Qwen**:适用于中文和多语言任务,具有良好的对话能力

### 2. 如何调整超参数?

- **学习率**:从推荐值开始,根据验证集表现进行调整
- **批次大小**:根据GPU显存调整,通常为2的幂次
- **训练轮数**:根据验证集表现决定,避免过拟合

### 3. 如何处理长文本?

- 选择支持长序列的模型(如LLaMA、Qwen)
- 调整`max_seq_length`参数
- 考虑使用滑动窗口等策略处理超长文本
-
99 changes: 99 additions & 0 deletions F2LLM/docs/配置文件说明文档.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# F2LLM 配置文件说明文档

## 概述

本文档详细说明了 `F2LLM/configs` 目录下各个配置文件的用途和参数含义。这些配置文件用于控制模型训练和数据处理的不同方面。

## 配置文件列表

### 1. config_bert_base.json

用于BERT基础模型的训练配置。

**主要参数:**
- `model_path`: "models/bert-base-uncased" - 模型路径
- `model_type`: "bert" - 模型类型
- `experiment_id`: "bert-base-uncased-embedding" - 实验标识
- `max_seq_length`: 512 - 最大序列长度
- `train_batch_size`: 32 - 训练批次大小
- `learning_rate`: 2e-5 - 学习率
- `train_epochs`: 3 - 训练轮数
- `embedding_strategy`: "cls" - 嵌入策略
- `pooling_strategy`: "cls" - 池化策略

### 2. config_llama3_8b.json

用于LLaMA3 8B模型的训练配置。

**主要参数:**
- `model_path`: "models/llama-3-8b" - 模型路径
- `model_type`: "llama" - 模型类型
- `experiment_id`: "llama3-8b-embedding" - 实验标识
- `max_seq_length`: 2048 - 最大序列长度
- `train_batch_size`: 16 - 训练批次大小
- `learning_rate`: 1e-5 - 学习率
- `train_epochs`: 2 - 训练轮数
- `embedding_strategy`: "last_token" - 嵌入策略
- `pooling_strategy`: "last_token" - 池化策略

### 3. config_qwen3_mean_pooling.json

用于Qwen3模型使用平均池化策略的训练配置。

**主要参数:**
- `model_path`: "models/qwen3-0.6b" - 模型路径
- `model_type`: "qwen" - 模型类型
- `experiment_id`: "qwen3-0.6b-mean-pooling" - 实验标识
- `max_seq_length`: 1024 - 最大序列长度
- `train_batch_size`: 16 - 训练批次大小
- `learning_rate`: 8e-6 - 学习率
- `train_epochs`: 2 - 训练轮数
- `embedding_strategy`: "mean_pooling" - 嵌入策略
- `pooling_strategy`: "mean" - 池化策略

### 4. config.json

通用训练配置文件,用于Qwen3 4B模型。

**主要参数:**
- `model_path`: "models/qwen3-4b" - 模型路径
- `experiment_id`: "4b+lr.8e-6+bs.16x32+context.1024+2epochs" - 实验标识
- `max_seq_length`: 1024 - 最大序列长度
- `train_batch_size`: 16 - 训练批次大小
- `learning_rate`: 8e-6 - 学习率
- `train_epochs`: 2 - 训练轮数

### 5. accelerate_config.yaml

Accelerate库的配置文件,用于分布式训练设置。

**主要参数:**
- `distributed_type`: "DEEPSPEED" - 分布式训练类型
- `deepspeed_config`: DeepSpeed配置
- `zero_stage`: 2 - ZeRO优化阶段
- `gradient_clipping`: 1.0 - 梯度裁剪
- `num_processes`: 8 - 进程数
- `mixed_precision`: "bf16" - 混合精度训练

## 使用方法

### 训练时指定配置文件

```bash
python run.py --config configs/config_bert_base.json
```

### 数据预处理时指定配置文件

对于新实现的 `tokenize_data_generic.py` 脚本,可以使用类似的配置方式:

```bash
python tokenize_data_generic.py --config configs/config_generic.json
```

## 注意事项

1. 不同模型的配置文件中,`max_seq_length`、`train_batch_size` 和 `learning_rate` 等参数会根据模型特性进行调整
2. `embedding_strategy` 和 `pooling_strategy` 参数根据模型架构和任务需求进行设置
3. Accelerate配置文件用于控制分布式训练的行为
4. 实验标识 `experiment_id` 用于区分不同的实验配置,影响输出目录的命名
Loading