文本训练生成模型之gpt-2-simple

高飞翮
2023-12-01

gpt-2-simple:基于gpt_2的一款强大的文本训练生成模型

安装使用教程如下:

github地址:https://github.com/minimaxir/gpt-2-simple
操作系统:ubuntu16.04
tensorflow: gpu版本

第一步,使用anaconda创建虚拟环境,命名为gpt_2:

  1. 退出base环境:
conda deactivate
  1. 创建新环境,命名为gpt_2:
conda create -n gpt_test python=3.6
  1. 进入conda环境:
conda activate gpt_test

第二步,安装tensorflow-gpu版本

  1. 升级pip:
 pip install --upgrade pip
  1. 利用anaconda源安装tensorflow-gpu(目前最好是1.14或1.15版本,建议先更换国内pip镜像源):
pip install tensorflow-gpu==1.15.0
  1. 升级setuptools和wheel,否则会报错:
pip install --upgrade setuptools wheel
  1. 安装gpt-2-simple:
pip install gpt-2-simple
  1. 测试:
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

说明:

  1. gpu_name处设置你的第几块gpu,gpu信息可用nvidia-smi查看。

  2. finetune表示微调。

  3. dataset处设置你的训练语料库,一般为txt文件。

  4. model_name为预训练模型,分为117M和345M。

  5. 其余参数可使用gpt_2_simple --help命令查看。

  6. 训练好的模型存放在checkpoint文件夹中,默认为run1。

第六步,生成数据

生成命令
CUDA_VISIBLE_DEVICES=gpu_name gpt_2_simple generate --run_name=model_path  --folder=save_folder --nsamples=64000  --batch_size=16

说明:

  1. generate表示生成。
  2. run_name在生成时表示加载目录的地址,例如checkpoint目录下有run1模型,此处model_path为run1,不需要填写完整路径。
  3. folder处填写生成数据的保存路径。
  4. nsamples为生成多少个段落。
  5. prefix为前缀。如果训练数组(即shakespeare.txt)中设置了前缀,此处需要指定。

常用参数介绍:

  • --model:选择微调或者生成,finetune表示微调(即训练,因为gpt2的模型是预训练模型),generate表示生成。
  • --run_name:在训练时表示保存模型的位置,在生成时表示加载模型的位置。
  • --model_name:在训练时指定的预训练模型,此处为117M345M。
  • --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训练,目前实现还不完善。
 类似资料: