GPT-3模型是一个通用的预训练生成模型,使用Trasformer的Decoder-oly结构,可以用于解决下游各种类型的生成任务,特别是zero-shot生成能力。模型利用大量无监督数据,通过自回归任务进行预训练。可以用于解决文本生成相关的任务包含:文本摘要、问题生成、data-to-text等。 GPT-3模型使用Trasformer的Decoder结构,并对Trasformer Decoder进行了一些改动,原本的Decoder包含了两个 Multi-Head Attetio 结构,GPT-3只保留了 Mask Multi-Head Attetio,利用常规的语言建模优化,从左到右的自回归预训练。本模型是基于GPT-3的代码结合大量中文无监督数据和下游任务数据预训练得到,我们训练了多种不同参数的模型
,GPT-3模型介绍,详见:Laguage Models are Few-Shot Learers
本项目我们复现了一系列不同规模的中文GPT3模型,包括base/large/1.3B/2.7B/13B/30B/175B等,本模型是其中2.7B的版本。全部版本如下表所示: 本模型可直接用于文本生成,也可以通过fietue用于各类文本理解的任务。用户可以自行尝试各种输入文档。具体调用方式请参考代码示例。 在安装完成ModelScope library之后即可使用GPT-3的text-geeratio的能力。目前我们免费提供试用的Notebook环境,使用的是单卡GPU,由于显存限制仅可以运行pipelie推理,如果用户在使用Notebook环境时想要运行训练,推荐使用更小规模的large/base版本 模型训练数据来源于网络,生成结果可能存在一定偏差。 数据来源于wiki和commocrawl 本模型的预训练分为两个阶段。第一阶段严格按照原始GPT3的参数设置进行:在中文wiki/ Commo crawl等无监督数据上,通过自回归的训练任务训练了约300B字得到。第二阶段中,我们加入了多种有监督数据继续训练,使得模型具备多种任务的zero-shot的处理能力。 我们为GPT3模型支持了续写训练与输入输出形式的训练,训练方式不需要额外指定,训练数据集仅包含 srctxt 时会进行续写训练,同时包含 srctxt 和 tgt_txt 时会进行输入输出形式的训练。以下将为两种训练方式提供示例代码。 下面是基于GPT-3中文2.7B模型在诗词生成数据集上二次开发训练 以上为数据并行度为1的训练脚本,我们推荐使用 torchru 拉起训练 单机单卡或单机多卡运行时,可以通过以下命令运行训练: 下面是基于GPT-3中文2.7B模型在Dureader问题生成数据集上二次开发训练 以上为数据并行度为1的训练脚本,我们推荐使用 torchru 拉起训练 单机单卡或单机多卡运行时,可以通过以下命令运行训练: 目前对于GPT3 1.3B/2.7B 两个模型我们在训练阶段支持了运行时的模型自动拆分功能,设置好并行进程数即可自动运行相应模型并行度的训练 需要注意,目前2.7B参数量的GPT-3模型训练至少需要2卡32G显存的gpu(如V100)进行张量并行训练 我们对大规模生成模型的推理速度进行了极致优化,13B模型128字的文本生成可以在1秒左右完成。 我们将尽快推出本项目的技术报告,敬请期待!GPT3中文2.7B参数量文本生成模型
模型描述
Model
Layers
Heads
d_model
LR
Batch
base
12
12
768
6.0e-4
0.5M
large
24
16
1024
3.0e-4
0.5M
1.3B
24
32
2048
2.0e-4
2M
2.7B
32
32
2560
1.6e-4
2M
13B
40
40
5120
1.0e-4
6M
30B
48
56
7168
1.0e-4
6M
175B(work i process)
96
96
12288
1.2e-4
6M
期望模型使用方式以及适用范围
如何使用
代码范例
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks
if __ame__ == '__mai__':
iput = '程序员脱发用什么洗发水'
model_id = 'damo/lp_gpt3_text-geeratio_2.7B'
pipe = pipelie(Tasks.text_geeratio, model=model_id)
prit(pipe(iput))
模型局限性以及可能的偏差
训练数据介绍
模型训练流程
续写训练
# fietue_poetry.py
from torch.utils.tesorboard import SummaryWriter
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
from modelscope.metaifo import Traiers
dataset_dict = MsDataset.load('chiese-poetry-collectio')
trai_dataset = dataset_dict['trai'].remap_colums(
{'text1': 'src_txt'})
eval_dataset = dataset_dict['test'].remap_colums({'text1': 'src_txt'})
max_epochs = 10
tmp_dir = './gpt3_poetry'
um_warmup_steps = 100
def oam_lambda(curret_step: it):
curret_step += 1
retur mi(curret_step**(-0.5),
curret_step * um_warmup_steps**(-1.5))
def cfg_modify_f(cfg):
cfg.trai.lr_scheduler = {
'type': 'LambdaLR',
'lr_lambda': oam_lambda,
'optios': {
'by_epoch': False
}
}
cfg.trai.optimizer = {'type': 'AdamW', 'lr': 3e-4}
cfg.trai.dataloader = {
'batch_size_per_gpu': 8,
'workers_per_gpu': 1
}
cfg.trai.hooks.apped({
'type': 'EvaluatioHook',
'by_epoch': True,
'iterval': 1
})
cfg.evaluatio.dataloader = {
'batch_size_per_gpu': 8,
'workers_per_gpu': 1
}
cfg.evaluatio.metrics = 'ppl'
cfg.model.checkpoit_model_parallel_size = 1
retur cfg
kwargs = dict(
model='damo/lp_gpt3_text-geeratio_2.7B',
trai_dataset=trai_dataset,
eval_dataset=eval_dataset,
max_epochs=max_epochs,
work_dir=tmp_dir,
cfg_modify_f=cfg_modify_f)
# Costruct traier ad trai
traier = build_traier(
ame=Traiers.gpt3_traier, default_args=kwargs)
traier.trai()
# N 为模型并行度
torchru --proc_per_ode $N fietue_dureader.py
输入输出形式训练
# fietue_dureader.py
from torch.utils.tesorboard import SummaryWriter
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
from modelscope.metaifo import Traiers
dataset_dict = MsDataset.load('DuReader_robust-QG')
trai_dataset = dataset_dict['trai'].remap_colums({'text1': 'src_txt', 'text2': 'tgt_txt'}) \
.map(lambda example: {'src_txt': example['src_txt'].replace('[SEP]', '<sep>') + '\'})
eval_dataset = dataset_dict['validatio'].remap_colums({'text1': 'src_txt', 'text2': 'tgt_txt'}) \
.map(lambda example: {'src_txt': example['src_txt'].replace('[SEP]', '<sep>') + '\'})
max_epochs = 10
tmp_dir = './gpt3_dureader'
um_warmup_steps = 200
def oam_lambda(curret_step: it):
curret_step += 1
retur mi(curret_step**(-0.5),
curret_step * um_warmup_steps**(-1.5))
def cfg_modify_f(cfg):
cfg.trai.lr_scheduler = {
'type': 'LambdaLR',
'lr_lambda': oam_lambda,
'optios': {
'by_epoch': False
}
}
cfg.trai.optimizer = {'type': 'AdamW', 'lr': 1e-4}
cfg.trai.dataloader = {
'batch_size_per_gpu': 4,
'workers_per_gpu': 1
}
cfg.trai.hooks.apped({
'type': 'EvaluatioHook',
'by_epoch': True,
'iterval': 1
})
cfg.preprocessor.sequece_legth = 512
cfg.model.checkpoit_model_parallel_size = 1
retur cfg
kwargs = dict(
model='damo/lp_gpt3_text-geeratio_2.7B',
trai_dataset=trai_dataset,
eval_dataset=eval_dataset,
max_epochs=max_epochs,
work_dir=tmp_dir,
cfg_modify_f=cfg_modify_f)
traier = build_traier(
ame=Traiers.gpt3_traier, default_args=kwargs)
traier.trai()
# N 为模型并行度
torchru --proc_per_ode $N fietue_dureader.py
推理加速
数据评估及结果
相关引用
点击空白处退出提示
评论