GPT-2(Language Models are Unsupervised Multitask Learners) 以Transformer 解码器为网络基本组件,使用自回归的方式在大规模无标注文本语料上进行预训练得到的语言生成模型。
本项目是语言模型 GPT-2 的 PaddlePaddle 实现, 包含模型训练,预测等内容。下是本例的简要目录结构及说明:
.
├── data.py # 数据处理
├── decompress.sh # 数据集解压脚本
├── generate_sample.py # inference demo
├── lr.py # 学习率控制
├── process_data.py # 数据预处理脚本
├── README.md # 文档
├── run_pretrain.py # 预训练入口
└── scripts # 训练脚本
-
paddle安装
本项目依赖于 PaddlePaddle 2.0及以上版本或适当的develop版本,请参考 安装指南 进行安装
-
下载代码
克隆代码库到本地
-
环境依赖
该模型使用PaddlePaddle,关于环境依赖部分,请先参考PaddlePaddle安装说明关于环境依赖部分的内容。
OpenWebTextCorpus是一个开源的英文网页文本数据集,数据来源于Reddit,经过去重、清洗、提取,最终包含800多万个文档。
下载以后通过以下命令解压:
xz -d openwebtext.tar.xz
tar xf openwebtext.tar
mkdir raw_data
bash decompress.sh 解压以后得到的raw_data目录大小约为54GB。
为了提升训练速度,我们在训练前将文本数据转成相应的id,并保存为npz格式:
python process_data.py --input_path raw_data \
--model_name gpt2-medium-en \
--append_eod \
--workers 8运行命令后,产出raw_data_ids.npz文件。为了方便用户运行测试本模型,本项目提供了处理好的300M的训练样本:
wget https://paddlenlp.bj.bcebos.com/models/transformers/gpt2/train.data.json_ids.npz将所有预处理得到的npz文件统一放入一个文件夹中,以备训练使用:
mkdir data
mv train.data.json_ids.npz data
CUDA_VISIBLE_DEVICES=0 python run_pretrain.py --model_name_or_path gpt2-small-en \
--input_dir "./data"\
--output_dir "output"\
--weight_decay 0.01\
--grad_clip 1.0\
--max_steps 500000\
--save_steps 100000\
--warmup_rate 0.01\
--batch_size 8\
--device gpu其中参数释义如下:
model_name_or_path要训练的模型或者之前训练的checkpoint。input_dir指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件。output_dir指定输出文件。weight_decay权重衰减参数。grad_clip梯度裁剪范围。max_steps最大训练步数save_steps保存模型间隔batch_size训练的batch大小device训练设备
用户也可以使用提供的shell脚本直接训练sh scripts/run.sh.
同样,可以执行如下命令实现八卡训练:
unset CUDA_VISIBLE_DEVICES
python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_pretrain.py --model_name_or_path gpt2-small-en \
--input_dir "./data"\
--output_dir "output"\
--weight_decay 0.01\
--grad_clip 1.0\
--max_steps 500000\
--save_steps 100000\
--warmup_rate 0.01\
--batch_size 8\
--device gpu
用户也可以使用提供的shell脚本直接训练sh scripts/run_multi.sh.
本项目提供了简单的文本生成的demo,供用户测试文本生成效果。
python generate_sample.py生成效果展示:
问题:中国的首都是哪里?答案:北京。
默写古诗: 大漠孤烟直,长河落日圆。
举杯邀明月,
对影成三人。