本项目是一个基于 Hugging Face Transformers 库,实现 GPT 类语言模型的最小示例。旨在帮助理解 GPT 模型的底层结构与训练流程
- 自定义实现 GPT 解码器结构(Decoder-only):
- 多头自注意力机制(
MiniGPTAttention
) - 前馈网络(
MiniGPTMLP
) - 残差连接 + 层归一化(LayerNorm)
- 多头自注意力机制(
- 支持 Past Key-Value 缓存,加速推理
- 遵循 Hugging Face
PreTrainedModel
接口标准 - 结合
Trainer
模块实现预训练流程 - 支持 tokenizer 从零训练
minigpt/
├── configuration_minigpt.py # 模型配置文件(HF标准)
├── modeling_minigpt.py # 模型实现文件
tokenizer/
└── train_tokenizer.py # 训练自定义分词器(基于 tokenizers 库)
train.py # 使用 Trainer 的训练脚本
pip install transformers datasets accelerate tokenizers
确保已安装支持 GPU 的 PyTorch。
需要自行准备tokenizer的数据集,可从hf官方进行挑选和下载。
- 词表文件放在
tokenizer/
目录下 - 用
datasets
库保存好的训练数据放在dataset/
目录下
tokenizer/
└── tokenizer.json
dataset/
└── [Arrow 格式的数据集]
python train.py
放在 config/
目录,格式如下:
{
"model_type": "minigpt",
"vocab_size": 30256,
"hidden_size": 512,
"num_hidden_layers": 6,
"num_attention_heads": 8,
"max_position_embeddings": 512,
"activation_function": "gelu_new",
"attn_pdrop": 0.1,
"resid_pdrop": 0.1,
"embd_pdrop": 0.1,
"layer_norm_epsilon": 1e-5,
"use_cache": true
}
模型训练完成后可以进行文本生成:
from transformers import AutoTokenizer, AutoModelForCausalLM
import minigpt
tokenizer = AutoTokenizer.from_pretrained("tokenizer/")
model = AutoModelForCausalLM.from_pretrained("minigpt_warm_pretrain_1")
input_ids = tokenizer("你好,今天天气", return_tensors="pt").input_ids
outputs = model.generate(input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))