gpt-2-simple:基于gpt_2的一款强大的文本训练生成模型
安装使用教程如下:
github地址:https://github.com/minimaxir/gpt-2-simple
操作系统:ubuntu16.04
tensorflow: gpu版本
第一步,使用anaconda创建虚拟环境,命名为gpt_2:
- 退出base环境:
conda deactivate
- 创建新环境,命名为gpt_2:
conda create -n gpt_test python=3.6
- 进入conda环境:
conda activate gpt_test
第二步,安装tensorflow-gpu版本
- 升级pip:
pip install --upgrade pip
- 利用anaconda源安装tensorflow-gpu(目前最好是1.14或1.15版本,建议先更换国内pip镜像源):
pip install tensorflow-gpu==1.15.0
- 升级setuptools和wheel,否则会报错:
pip install --upgrade setuptools wheel
- 安装gpt-2-simple:
pip install gpt-2-simple
- 测试:
gpt_2_simple --help
显示:
optional arguments:
-h, --help show this help message and exit
等等
(参数具体含义请往下看)
第三步,安装CUDA
百度吧
第四步,下载预训练模型
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os.path.isdir(os.path.join("models", model_name)):
print(f"Downloading {model_name} model...")
gpt2.download_gpt2(model_name=model_name)
model_name = "355M"
if not os.path.isdir(os.path.join("models", model_name)):
print(f"Downloading {model_name} model...")
gpt2.download_gpt2(model_name=model_name)
file_name = "shakespeare.txt"
if not os.path.isfile(file_name):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests.get(url)
with open(file_name, 'w') as f:
f.write(data.text)
下载完成后,当前目录下会有一个models文件夹和shakespeare.txt文件,models文件下为预训练模型,shakespeare.txt为训练测试文件。(可能下载的会比较慢,百度云盘链接:https://pan.baidu.com/s/1gIX46MAAIpZYq-OlzxZdkw 提取码:rkaw )。
第五步,训练模型
- 将models.zip解压至目录gpt2。
- 执行下面的训练命令。
训练命令
CUDA_VISIBLE_DEVICES=gpu_name gpt_2_simple finetune --dataset=shakespeare.txt --model_name=117M --sample_every=10000
说明:
-
gpu_name处设置你的第几块gpu,gpu信息可用nvidia-smi查看。
-
finetune表示微调。
-
dataset处设置你的训练语料库,一般为txt文件。
-
model_name为预训练模型,分为117M和345M。
-
其余参数可使用gpt_2_simple --help命令查看。
-
训练好的模型存放在checkpoint文件夹中,默认为run1。
第六步,生成数据
生成命令
CUDA_VISIBLE_DEVICES=gpu_name gpt_2_simple generate --run_name=model_path --folder=save_folder --nsamples=64000 --batch_size=16
说明:
- generate表示生成。
- run_name在生成时表示加载目录的地址,例如checkpoint目录下有run1模型,此处model_path为run1,不需要填写完整路径。
- folder处填写生成数据的保存路径。
- nsamples为生成多少个段落。
- prefix为前缀。如果训练数组(即shakespeare.txt)中设置了前缀,此处需要指定。
常用参数介绍:
--model
:选择微调或者生成,finetune表示微调(即训练,因为gpt2的模型是预训练模型),generate表示生成。--run_name
:在训练时表示保存模型的位置,在生成时表示加载模型的位置。--model_name
:在训练时指定的预训练模型,此处为117M
或345M。
--dataset
:训练时使用的数据集。--steps
:指定训练的步数,从-1到无穷,我一般用无穷,然后手动停止。--restore_from
:应该是选择一个模型继续训练吧。--sample_every
:指定多少步之后生成一个样例。--save_every
:隔多少步保存一个模型。--print_every
:隔多少步打印训练情况。--overwrite
:是否重新训练当前路径的模型。--nfiles
:生成文件的个数。--nsamples
:生成时每个文件中的段落数。--folder
:指定存放的文件夹。--length
:指定生成的长度,一般使用默认值。--temperature
:一般使用默认值。--top_k
:一般使用默认值。--top_p
:一般使用默认值。--batch_size
:一般不能太大,否则加载不起来;使用2080ti的GPU,选择16,32或64。--prefix
:指定生成的前缀,如果训练数据中有的话,这里需要添加。--truncate
: 一般使用默认值。--truncate
:指定生成的内容是否包含前缀。--sample_delim
:一般使用默认值,即20个=
号。--muti_gpu
:多GPU训练,目前实现还不完善。