本项目实现了一个完整的大语言模型训练流程,从自定义分词器训练开始,基于GPT-2架构进行1亿参数规模的预训练,并采用先进的微调技术(QLoRA + RLHF)来提升模型性能。
- 从零开始: 完整的模型训练流程,包括分词器训练、预训练、有监督微调和强化学习微调
- 1亿参数规模: 适中的模型规模,平衡了性能与计算资源需求
- 先进技术栈:
- DeepSpeed分布式训练加速
- QLoRA量化微调技术
- RLHF人类偏好对齐
- 自定义BPE分词器
- 完整工程化: 支持断点续训、分布式训练、显存优化等生产级特性
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 分词器训练 │───▶│ 模型预训练 │───▶│ 有监督微调 │───▶│ 强化学习微调 │
│ (Tokenizer) │ │ (PreTrain) │ │ (SFT) │ │ (RLHF) │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
llm_train/
├── tokenizer/ # 分词器相关
│ └── byte_level_bpe_tokenizer_v1.json
├── PreTrain/ # 预训练阶段
│ ├── train_byte_level_bpe_tokenizer.py # 分词器训练
│ ├── preprocess_dataset_for_pretrain_map.py # 数据预处理
│ ├── model.py # GPT-2模型定义
│ ├── ds_config.json # DeepSpeed配置
│ └── inference.py # 预训练模型推理
├── SFT/ # 有监督微调
│ ├── qlora_fine_tune_trl.py # QLoRA微调脚本
│ ├── inference.py # 微调模型推理
│ └── sft_output/ # SFT输出模型
├── RLHF/ # 强化学习微调
│ ├── reward_model.py # 奖励模型训练
│ ├── grpo_trl.py # GRPO算法实现
│ └── grpo_training.py # GRPO训练脚本
├── output/ # 预训练模型输出
└── pretrain_data_chunks/ # 预处理数据块
- Python 3.10+
- CUDA 11.8+
- 16GB+ GPU显存(推荐多卡)
- 100GB+ 磁盘空间
# 核心依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers datasets accelerate
pip install deepspeed peft trl bitsandbytes
pip install tokenizers psutil
# 可选依赖
pip install wandb tensorboard # 训练监控
pip install gradio streamlit # 模型部署cd PreTrain/
python train_byte_level_bpe_tokenizer.py- 基于大规模语料训练BPE分词器
- 词汇表大小:50k
- 支持中英文及代码文本
python preprocess_dataset_for_pretrain_map.py- 数据源:C4、Wikipedia、Tiny Codes、Gutenberg、StackExchange
- 自动分块、分词,生成parquet文件
- 支持多进程加速处理
# 单卡训练
python -m torch.distributed.launch --nproc_per_node=1 \
--use_env model.py
# 多卡训练(推荐)
deepspeed --num_gpus=4 model.py --deepspeed ds_config.json- 模型架构:GPT-2 (12层, 768维, 12头)
- 参数量:~1亿
- 训练数据:数十GB文本数据
- 优化器:AdamW + 学习率调度
cd ../SFT/
accelerate launch --num_processes=4 qlora_fine_tune_trl.py- 技术栈:QLoRA + 4bit量化
- 数据集:高质量指令-回答对
- 显存优化:支持单卡训练大模型
cd ../RLHF/
# 1. 训练奖励模型
python reward_model.py
# 2. GRPO强化学习训练
accelerate launch --num_processes=4 grpo_trl.py- 奖励模型:基于人类偏好数据训练
- GRPO算法:改进的PPO算法,更稳定
- 人类偏好对齐:提升模型输出质量
- 参数量: ~1亿
- 词汇表: 50k tokens
- 上下文长度: 1024 tokens
- 训练数据: 数十GB多语言文本
- SFT后: 指令跟随能力显著提升
- RLHF后: 输出质量和安全性进一步改善
- 推理速度: 单卡T4可实时推理
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("./tokenizer")
# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained("./output")
# 加载微调适配器
model = PeftModel.from_pretrained(base_model, "./SFT/sft_output")
# 推理示例
prompt = "请介绍一下人工智能的发展历程"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_length=200, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)# 预训练模型推理
cd PreTrain/
python inference.py
# SFT模型推理
cd ../SFT/
python inference.py
# RLHF模型推理
cd ../RLHF/
python grpo_trl.py --mode inference- Loss曲线: 训练/验证损失变化
- 学习率: 自适应学习率调度
- 显存使用: 实时显存监控
- 吞吐量: tokens/秒处理速度
train.log: 预训练日志SFT/nohup.out: 微调训练日志RLHF/train.log: 强化学习日志
{
"train_batch_size": 32,
"gradient_accumulation_steps": 4,
"optimizer": {
"type": "AdamW",
"params": {"lr": 5e-5}
},
"zero_optimization": {
"stage": 2,
"allgather_partitions": true
}
}- 量化: 4bit NF4
- LoRA秩: r=64
- 学习率: 1e-4
- 批次大小: 4
- 算法: GRPO (Group Relative Policy Optimization)
- β参数: 0.05
- 奖励缩放: 关闭
- 训练轮数: 3-5 epochs
A:
- 减小batch_size
- 启用gradient_checkpointing
- 使用更高的量化精度
- 尝试DeepSpeed ZeRO-3
A: 所有训练脚本都支持断点续训,会自动从最新checkpoint恢复
A: 使用对应的inference脚本进行模型验证和对比测试
A: 检查分词器一致性,确保GRPO训练时add_special_tokens=True
- 混合精度: BF16训练加速
- 激活检查点: 减少显存占用
- 梯度累积: 模拟大批次训练
- 参数卸载: CPU offload节省显存
- 4bit量化: NF4量化减少显存
- LoRA适配器: 低秩适配高效微调
- 梯度检查点: 进一步节省显存
- 数据并行: 多卡加速训练
- 奖励模型: 人类偏好建模
- GRPO算法: 稳定的策略优化
- KL正则化: 防止偏离基础模型
- 经验回放: 提高样本利用率
欢迎提交Issue和Pull Request!
- 代码风格:遵循PEP8
- 提交格式:使用conventional commits
- 测试:确保推理脚本正常运行
- 添加模型评估指标
- 支持更多数据集
- 优化训练效率
- 添加Web界面
本项目采用MIT许可证 - 详见 LICENSE 文件
- Hugging Face Transformers
- Microsoft DeepSpeed
- TRL (Transformer Reinforcement Learning)
- OpenAI GPT-2
⭐ 如果这个项目对你有帮助,请给个Star支持一下!