YAML Metadata
Warning:
empty or missing yaml metadata in repo card
(https://huggingface.co/docs/hub/model-cards#model-card-metadata)
OwnGPT - 本地训练的中文GPT模型项目
项目概述
这是一个完整的本地训练中文GPT模型项目,包含从数据预处理、分词器训练、模型训练到性能评估的全流程实现。项目特别针对中文文本生成进行了优化,并实现了与DeepSeek等商业大模型的对比评估。
训练阶段详解
本项目训练过程分为三个关键阶段,每个阶段使用不同的数据集和训练策略:
第一阶段:基础语言模型训练(按Token划分)
- 训练目标:建立基础的语言建模能力
- 数据集:
Text/DSdata.txt- 包含大量中文文本语料 - 训练方式:按Token序列进行训练,学习语言的基本结构和模式
- 训练脚本:
train_final_optimized.py - 模型输出:基础GPT模型,具备基本的文本生成能力
第二阶段:停止标识符训练(按数据条划分)
- 训练目标:让模型学会识别和使用停止标识符
<END> - 数据集:
data.txt- 包含结构化数据,每组数据以<END>结尾 - 训练方式:按完整数据条进行训练,强化停止标识符的学习
- 训练脚本:
sft_train.py - 模型输出:增强停止功能的GPT模型,能够合理终止生成
第三阶段:再预训练(四大名著文本)
- 训练目标:进一步提升模型的中文文学素养和表达能力
- 数据集:四大名著文本文件
Text/hongloumeng.txt- 红楼梦Text/sanguoyanyi.txt- 三国演义Text/shuihuzhuan.txt- 水浒传Text/xiyouji.txt- 西游记
- 训练方式:在已有模型基础上进行继续预训练
- 训练脚本:
train_final_optimized.py(加载预训练权重) - 模型输出:具备古典文学素养的增强GPT模型
项目特色
- 完全本地训练:不依赖外部API,完全自主训练的中文GPT模型
- 三阶段训练:分阶段训练策略,逐步提升模型能力
- 中文优化:专门针对中文文本生成进行优化
- 内存优化:采用内存优化的Transformer架构
- 全面评估:包含与DeepSeek等商业模型的对比评估
- 模块化设计:清晰的代码结构和模块化设计
项目结构
own_gpt/
├── model_optimized.py # 内存优化的GPT模型实现
├── train_final_optimized.py # 优化的训练脚本(第一阶段、第三阶段)
├── sft_train.py # 停止标识符训练脚本(第二阶段)
├── test_final_optimized.py # 模型测试脚本
├── deepseek_local_comparison.py # DeepSeek对比评估
├── Tokenizer.py # 分词器训练和测试
├── model_comparison_evaluation.py # 模型比较评估
├── data.txt # 第二阶段训练数据(停止标识符)
├── tokenizer.model # 训练好的分词器模型
├── tokenizer.vocab # 分词器词汇表
├── saved_models/ # 保存的模型权重
│ ├── gpt_model_final_*.pth # 第一阶段训练模型
│ ├── gpt_model_enhanced_*.pth # 第二阶段增强停止模型
│ ├── training_curves_*.png # 训练曲线图
│ └── training_info_*.json # 训练信息
└── Text/ # 原始文本数据
├── DSdata.txt # 第一阶段训练数据(基础语料)
├── hongloumeng.txt # 第三阶段训练数据(红楼梦)
├── sanguoyanyi.txt # 第三阶段训练数据(三国演义)
├── shuihuzhuan.txt # 第三阶段训练数据(水浒传)
└── xiyouji.txt # 第三阶段训练数据(西游记)
环境配置
系统要求
- Python 3.8+
- CUDA 12.0+(推荐使用GPU训练)
- 至少8GB GPU显存(推荐16GB以上)
安装torch(CUDA 12.8版本)
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu128
安装依赖
pip install sentencepiece matplotlib numpy pandas seaborn rouge-score bert-score nltk openai
环境验证
python -c "import torch; print(f'PyTorch版本: {torch.__version__}, CUDA可用: {torch.cuda.is_available()}')"
使用说明
1. 第一阶段训练(基础语言模型)
# 使用DSdata.txt进行基础训练
python train_final_optimized.py
2. 第二阶段训练(停止标识符)
# 使用data.txt进行停止标识符训练
python sft_train.py
3. 第三阶段训练(四大名著再预训练)
# 加载预训练模型,使用四大名著数据进行继续训练
python train_final_optimized.py --resume saved_models/gpt_model_enhanced_stop_20251003_200243.pth
4. 模型测试
# 测试模型生成效果
python test_final_optimized.py
5. 与DeepSeek对比
# 进行模型对比评估
python deepseek_local_comparison.py
训练曲线展示
第一阶段训练曲线
第二阶段训练曲线
第三阶段训练曲线
模型对比结果
与同等大小的模型对比图
与DeepSeek对比雷达图
核心功能模块
1. 模型架构 (model_optimized.py)
- MemoryEfficientSelfAttention: 内存优化的单头自注意力机制
- MemoryEfficientMultiHeadAttention: 内存优化的多头注意力
- MemoryEfficientBlock: 内存优化的Transformer块
- MemoryOptimizedBigramLM: 内存优化的GPT模型
主要特性:
- 动态mask生成
- 中间变量清理
- 重复惩罚机制
- 温度控制和top-k采样
2. 训练系统
第一阶段训练 (train_final_optimized.py)
- 混合精度训练
- 梯度累积
- 内存监控
- 自动保存和恢复
第二阶段训练 (sft_train.py)
- 停止标识符增强训练
- 加权损失函数
- 样本分组处理
- 停止率测试
超参数配置:
d_model = 512 # 模型维度
h = 8 # 注意力头数
Nx = 6 # Transformer层数
batch_size = 16 # 批次大小
max_seq_len = 2048 # 最大序列长度
3. 分词器系统 (Tokenizer.py)
- 基于SentencePiece的BPE分词
- 支持自定义符号:
<END>,关键词:,诗词: - 词汇表大小:8000
4. 评估系统
模型测试 (test_final_optimized.py)
- 输出质量评估
- 重复率计算
- 参数优化测试
DeepSeek对比 (deepseek_local_comparison.py)
- 多维度指标对比
- 可视化分析
- 性能雷达图
模型性能
训练指标
- 最终训练损失: ~2.5
- 最终验证损失: ~2.8
- 困惑度(PPL): ~16.5
- 训练迭代: 10,000步
生成质量
- 平均重复率: < 0.05
- 输出多样性: 良好
- 中文流畅度: 优秀
- 停止准确率: > 85%
与DeepSeek对比结果
在多个评估指标上与DeepSeek表现相当,部分指标甚至更优:
- BLEU、ROUGE-L、BERTScore等指标表现良好
- 输出连贯性和多样性达到商业模型水平
使用示例
基本文本生成
from model_optimized import MemoryOptimizedBigramLM
import torch
import sentencepiece as spm
# 加载模型和分词器
model = MemoryOptimizedBigramLM(vocab_size=8000)
model.load_state_dict(torch.load("saved_models/gpt_model_enhanced_stop_20251003_200243.pth"))
sp = spm.SentencePieceProcessor()
sp.load("tokenizer.model")
# 生成文本
prompt = "关键词: 风 雾 寂寞"
context = torch.tensor([sp.encode(prompt)], dtype=torch.long)
generated = model.generate(context, max_new_tokens=200)
output = sp.decode(generated[0].tolist())
print(output)
参数调优
# 优化生成参数
generated = model.generate(
context,
max_new_tokens=200,
temperature=0.8, # 控制随机性
top_k=50, # 限制候选词
repetition_penalty=1.3 # 减少重复
)
技术亮点
1. 三阶段训练策略
- 阶段化训练:分阶段解决不同训练目标
- 数据集针对性:每个阶段使用最适合的数据集
- 能力递进:从基础语言能力到高级文学素养
2. 内存优化策略
- 动态mask缓存
- 中间变量及时清理
- 混合精度训练
- 梯度累积
3. 文本生成优化
- 重复惩罚机制
- 温度控制采样
- Top-k过滤
- 提前停止机制
4. 评估体系
- 多维度质量评估
- 自动化对比测试
- 可视化分析
- 性能监控
项目成果
- 成功训练:完成了三个阶段的完整训练流程
- 性能达标:模型在中文文本生成任务上表现良好
- 对比验证:与商业模型DeepSeek进行了全面对比评估
- 代码质量:模块化设计,易于扩展和维护
未来改进方向
- 增加更大规模的数据集
- 实现多轮对话功能
- 添加更多评估指标
- 优化推理速度
- 支持更多生成控制参数
贡献指南
欢迎提交Issue和Pull Request来改进这个项目!
许可证
本项目采用MIT许可证。
最后更新:2025年11月10日
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
🙋
Ask for provider support




