GPT-MoE中文67亿诗歌生成模型
GPT模型能较好的处理NLP各个应用领域的任务,比如文本分类,推理,对话,问答,完形填空,阅读理解,摘要,生成等等。百亿/千亿参数量级的GPT大模型作用在这些应用领域虽然效果很好,但是训练成本非常高。以OpenAI推出的1750亿的GPT-3为例,在1024张A100GPU上预估需要34天,一万亿参
  • 模型资讯
  • 模型资料

GPT-MoE中文67亿诗歌生成模型

概述

GPT模型能较好的处理文本生成领域的各种任务,比如文本补全,自由问答,完形填空,写作文,写摘要,写小说,写诗歌等等。最近火爆全网的人工智能产品ChatGPT也是以GPT文本生成模型为底座。虽然GPT大模型作用在这些应用领域的效果很好,但是训练成本非常高。以OpenAI推出的1750亿的GPT-3为例,在1024张A100GPU上预估需要34天,一万亿参数的GPT-3在3072张A100显卡上也至少需要84天;微软/英伟达联合推出的5300亿的NLG模型,在2048张A100显卡上耗时了3个月的训练时间才能达到比较好的收敛效果。

针对GPT基础模型参数量大,训练&推理硬件资源消耗过高等问题,基于MoE的稀疏化训练是目前最具竞争力的降本增效途径。MoE的全称是Mixture of Experts,其中的Expert对应的是Transfomrer模型的MLP层,在训练的时候从多个MLP中选取一个MLP进行激活(如下图所示)。这意味着模型可以在不增加计算强度(FLOPS/Bytes)的情况下,通过增加MLP模块的数量来增加模型参数量级,进而提升模型在下游任务上的泛化性能。采用MoE后的稀疏Transformer模型和同等质量的稠密模型相比有将近1.2倍的训练吞吐性能提升,1.3倍的推理吞吐性能提升。我们在稀疏架构总体设计的时候,选择让MoE跟纯Transformer Decoder架构的GPT进行有机结合。原因是MoE跟Decoder结合效果通常会好于跟Encoder的结合效果。具体来讲,Encoder是通过随机masking的方式学习语言模型,而这种被随机masked的token会让expert的路由选择出现不均衡。另一方面,考虑到Decoder类的GPT模型比Encoder类的Bert模型有更广泛使用场景,因此我们采用GPT+MoE的技术架构路线,探索单机最高能效的绿色低碳GPT大模型训练&推理软硬一体化适配技术在中文文本生成场景的落地可行性。

基于当前比较成熟的分布式MoE专家路由选择技术,采用Switch Transformer[2]中的top-1路由机制。每个Expert根据如下的softmax函数被赋予一个概率值,取概率最高(top-1)的那个Expert当作网络的FFN层。其中W_r是做路由选择时需要学习的参数。

GPT-MoE训练&推理能效分析

任何一种稠密(Dense)的GPT模型,都有一种效果与之对应的训练&推理速度更快的稀疏(MoE)GPT模型。我们的目标是在受限硬件比如单机条件下找到这种GPT-MoE模型配置,然后通过对MoE算法进行改进来进一步提升它的训练能效。我们通过对比稠密&稀疏模型的训练&推理性能,来发现与稠密模型等价的高能效稀疏模型。

8种GPT模型的参数量,模型结构,训练超参数如下表所示:

GPT模型 参数量 Layers Heads hidden size LR Batch of Tokens
1.3B Dense 1.3B 24 32 2048 2e-4 1M
2.7B Dense 2.7B 32 32 2560 1.6e-4 1M
3.6B Dense 3.6B 30 32 3072 1.6e-4 1M
0.35B+MoE-64 6.7B 24 16 1024 3e-4 0.5M
1.3B+MoE-32 13B 24 32 2048 2e-4 1M
1.3B+MoE-64 27B 24 32 2048 1.6e-4 1M
2.7B+MoE-64 56B 32 32 2560 1.6e-4 1M
3.6B+MoE-64 75B 30 32 3072 1.6e-4 1M

如下图所示,1.3B+MoE32/64模型在相同的step下对比1.3B dense表现出更低的验证集loss,其中1.3B+MoE-64模型的loss甚至低于2.7B dense模型

5个模型中,0.35B+MoE-64的训练吞吐速度最快,是其他模型的2倍左右。其余四个模型中,吞吐速度较高的是1.3B dense和1.3B+MoE-32,1.3B+MoE-64和2.7B dense的速度相近。如下图所示:

推理吞吐速度方面,1.3B Dense的显存消耗最少,0.35B+MoE64的延迟最低。
input_len = 20
output_len = 128
batch_size = 1

模型 latency (ms) memory (MB) num of gpus
1.3B Dense 399.66 9476 1
2.7B Dense 753.37 17340 1
3.6B Dense 777.54 22558 1
0.35B+MoE64 356.22 15772 1
1.3B+MoE32 581.34 33294 1
1.3B+MoE64 586.18 57880 1
2.7B+MoE64 742.43 61054 2
3.6B+MoE64 662.57 42724 4

通过以上的图表分析,我们能大致判断出2.7B-Dense模型对应的高能效的稀疏模型是以1.3B的dense模型为底座,同时配置32或者64个专家的MoE模型。下面我们重点分析下1.3B+MoE-32/64和2.7B dense模型的性价比。在单机A100上预训练200个小时后,借助Tensorboard画出预训练验证集loss曲线。我们发现在验证集loss到达2.16时,1.3B+MoE-64模型的收敛速度是2.7B dense的1.17,1.3B+MoE-32的收敛速度落后于2.7B dense模型15%,如下图所示:

从下图中的基于Faster Transformer的单级单卡推理性能上看。1.3B+MoE-32和1.3B+MoE64的吞吐速度差不多且都高于2.6B dense模型,这是符合预期的,因为他们的底座大小都只有1.3B。

中文ZeroShot-NLU效果评测

GTP模型 ckpt chid bustm tnews ocnli csl eprstmt avg
达摩院 1.3B Dense 51200 0.8207 0.4712 0.5343 0.3583 0.5317 0.7656 0.5803
达摩院2.7B Dense 51200 0.8432 0.4938 0.5428 0.3575 0.5211 0.8246 0.5971
PAI 0.35B+MoE-64 70K 0.8121 0.4994 0.5059 0.3376 0.5042 0.7770 0.5727
PAI 1.3B+MoE-32 70k 0.8746 0.4819 0.5407 0.3579 0.5049 0.8344 0.5991
PAI 1.3B+MoE-64 70k 0.8861 0.4926 0.5159 0.3460 0.5369 0.7983 0.5960

中文文本生成效果评测

文本补全

输入prompt 据悉,自驾 “首金”花落谁家,无疑
达摩院 1.3B Dense (51200) 据悉,自驾游是近年来国内旅游市场的一大亮点,而自驾游的安全 “首金”花落谁家,无疑是对中国经济的重大利好。“首金”的背后,是
达摩院 2.7B Dense (51200) 据悉,自驾游是近年来旅游市场的新兴业态,也是旅游产业发展的新方向 “首金”花落谁家,无疑是对中国短道速滑队夺金牌的有力争夺。
PAI 0.35B+MoE-64 (70k) 据悉,自驾游的人数正在逐年增加,而且越来越多的人选择自驾 “首金”花落谁家,无疑是一场精彩的“战役”。 “首金”花落谁家
PAI 1.3B+MoE-32 (70k) 据悉,自驾游的游客可在景区内免费领取一张景区门票 “首金”花落谁家,无疑是对“首金”的最好诠释。 “首金”的成功
PAI 1.3B+MoE-64 (70k) 据悉,自驾游的游客可在景区内的停车场免费停车 “首金”花落谁家,无疑是最大的悬念。

诗歌生成

输入prompt 大漠孤烟直 江上归帆天际开
达摩院 1.3B Dense (51200) 大漠孤烟直,长城万里馀。天寒霜气早,地迥雁声疏。 江上归帆天际开,江南春色雨中来。江南江北多风景,不似江南好景催梅。
达摩院 2.7B Dense (51200) 大漠孤烟直,春风一路愁。江山连水阔,天际白云人。 江上归帆天际开,青山白翠照江台。一枝一树青春色,不道清风入画台。
PAI 0.35B+MoE-64 (70k) 大漠孤烟直,高亭万古空。一峰青水碧,双塔白云红。 江上归帆天际开,天山无数雁飞来。春风吹落花枝影,不待人间落絮来。
PAI 1.3B+MoE-32 (70k) 大漠孤烟直,飞尘万里飞。云飞千古树,云入万峰天。 江上归帆天际开,水光明水浪痕微。一枝飞去风生意,何处山头雨里心。
PAI 1.3B+MoE-64 (70k) 大漠孤烟直,高峰万壑高。云深云雾外,天阔月华中。 江上归帆天际开,山头无数一峰青。山川水落天涯路,不似山中一片云。

广告文案生成

输入prompt 类型#裙*颜色#白色*风格#清新*图案#刺绣*裙下摆#花边*裙长#连衣裙*裙领型#v领*裙款式#抽褶 类型#裤*材质#羊毛
达摩院 1.3B Dense (51200) 这款连衣裙采用了清新的白色调,给人一种清爽的感觉,同时,还带来了清爽的视觉感。裙身上的刺绣图案,精致美观,尽显浪漫的气息。而v领的设计,则为其增添了几分优雅的气息。再加上褶皱的裙摆,更是增添了灵动的感觉。 这款羊毛裤,采用了羊毛的材质,手感柔软,穿着舒适,且不易变形,且不易变形,耐穿性强。裤子的版型是有点微微的,可以很好的修饰腿型,拉长腿部比例,显得腿部更加修长。
达摩院 2.7B Dense (51200) 连衣裙是每个女们的必备,这款连衣裙采用了清新的绿色调,带来一种清新淡淡雅的气质,同时也带来清新的视觉效果。v领的设计,更能衬托出优美的天鹅颈,还可以很好的修饰脸型和脸型,更好的展现出女性的柔美。裙子上的花朵刺绣花边装饰,更具时尚气息,更是让人眼前一亮。 针织衫采用优质的纯棉,手感柔软,穿着舒适透气,穿上身不勒身形。裤身采用了弹力的针织面料,手感舒适,穿着舒适亲肤。裤腿处的侧边采用的开口设计,不仅可以起到修饰腿部的作用,又能够更加的显腿长,同时也能让你轻松拥有型。
PAI 0.35B+MoE-64 (70k) 这款连衣裙采用了清新的白色调,搭配精致的刺绣花边,尽显甜美气质。v领的设计,修饰脸型,衬托出精致的脸庞。褶皱花边的袖口,更显甜美气质。 这款裤子采用了羊毛的面料,具有较好的弹性和透气性,穿着起来舒适。裤子的版型设计,能够很好的修饰腿型,让你看起来更加的修长。裤子的版型设计,能够很好的修饰腿型,让你的腿部看起来更加的修长。
PAI 1.3B+MoE-32 (70k) 这一款碎花连衣裙采用了精致的刺绣花朵,清新的气息。清新的花边,更加的清新颖,让你在春季节的感觉。 经典百搭的一款针织衫,在视觉上的设计,让你的同时也很好的穿搭。这款牛仔裤子的裤子采用了经过的设计,更是很好的修饰身体的腿型,穿着舒适又不紧。
PAI 1.3B+MoE-64 (70k) 清新的粉红色连衣裙,穿上身后能够衬托出女性的柔美。领口处采用的是花边的设计,让整体的层次感更加的精致,更能凸显甜美。圆领的领口设计,更加的修饰脸型,更显精致,而且不挑人的脸蛋糕裙摆,更能凸显女性的精致魅力 这款裤子的版型设计,可以说是腿部的位置,可以很好的拉长了身材比例,而且不会有紧绷的效果,让人看起来更加的有型。而且有着很高的剪裁设计,能够很好的修饰腿型,还能很好的遮肉,让腿部的肉肉,还能很好的展现你的腿部的曲线。

作文生成

输入prompt 信任*老板*商店*还给*气喘吁吁 美丽*成为*现实*忘不了*逼真
达摩院 1.3B Dense (51200) 回到家,我和老妈气喘吁吁地赶到附近的小店去买了一张贺卡。我把写得一片“对联”的纸贴在“商店”的墙上,还给老板20元钱。老板还给我做了一个“会飞”的邮局董事长呢!我还在纸上写了一些祝福语。老板还夸我是一个诚实的好孩子呢!最后,我还当上了董事 谁不曾有过那种梦呢?谁不曾有过那种美丽,让人向往的美丽呢?当你忘不了那些令人向往的梦时,那是一种多么诱惑而又美丽的梦啊!在那里人们可以大肆的陶醉一番,而在那里人们也可以过目不忘,可为什么呢?梦总是那么深远大,而又有多远大的吸引力。
达摩院 2.7B Dense (51200) 回到家,我急不可待地把这件事说给了他们,他们听,我刚说完还感动万分,立刻向商店去买了盒方便面。谁知>商店里的老板娘火冒三丈,拿起了那盒快就准备好的方便面。“还给?”我急得心都快跳了出来。这时,走进商店,妈妈拿起一件外套心仪已是生了。 谁不曾有过那样的梦呢?谁不曾有过那样的理想呢?这毕竟是过去,而将来又会成为现实,忘不了的事,成为记忆中的一页记忆。这其中当然包含了许多道理,也有很多无法用言的东西,但它们都会成为我心中最美丽的梦境,我迷恋着美丽而令我向往的梦!
PAI 0.35B+MoE-64 (70k) 回到家,我把我做的手工事一五一十地告诉了他,老板气喘吁吁地说:“你怎么可以这样做!你这样做是不对的,我们应该把你的信任还给你,你看行不行?”听完后,我心情舒畅多了,心想:我以后做事一定要细心。于是,我便把信任还给店里,到了商店,把我买下的信 谁不曾有过美丽的梦?谁不曾有过梦的历险?谁不曾有过美丽的梦?谁不曾有过梦的迷茫?谁都不曾有过梦的逼真?我忘不了我的梦,我的梦是成为一名画家;我忘不了我伟大的梦:成为一名作家;我忘不了我的梦是成为一名画家;我更忘不了我的美丽中国
PAI 1.3B+MoE-32 (70k) 回到家,我便气喘吁吁地冲到商店,把钱还给老板说:“老板,你,你,我说话算数,还剩15元钱,够本就行了!”老板仍然不信任我,问道:“怎么回事?”“把钱拿去还给老板。”我只好硬着头皮罢了。 谁不曾有过这样的梦呢?似乎很逼真,让人忘不了,也很难想象;似乎很难想象,但它终究是现实,梦终究是美丽的, 即使梦不是想象,它终究是逼真,因为美丽的事物总有被我们忽略的一面而不被我们忽略存而已。梦永远在身边,却不在身边,只要随心走
PAI 1.3B+MoE-64 (70k) 回到家,老板气喘吁吁地说:“我还给你买了一件衣服,你快去商店给老板买一件衣服吧!我还给你买了一件衣服,你快去商店吧!”老板还不停地点着头。老板不信任他,他就把钱还给了老板。 谁不曾有过那种梦呢?我想,那一定是美丽的梦,可是现实却逼真的梦,成为了现实中真实的梦,让人难以忘却。我想,这就是我梦中的美丽梦。我的梦,成真而又真实的梦,让人忘不了。

诗歌生成训练

下面是基于GPT-MoE中文0.35B+MoE64模型在诗词生成数据集上二次开发训练

from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer

if __name__ == '__main__':
    dataset_dict = MsDataset.load('chinese-poetry-collection')
    train_dataset = dataset_dict['train'].to_hf_dataset().rename_columns(
        {'text1': 'src_txt'})
    eval_dataset = dataset_dict['test'].to_hf_dataset().rename_columns(
        {'text1': 'src_txt'})
    max_epochs = 10
    tmp_dir = './gpt_moe_poetry'
    num_warmup_steps = 100

    def noam_lambda(current_step: int):
        current_step += 1
        return min(current_step**(-0.5),
                   current_step * num_warmup_steps**(-1.5))

    def cfg_modify_fn(cfg):
        cfg.train.lr_scheduler = {
            'type': 'LambdaLR',
            'lr_lambda': noam_lambda,
            'options': {
                'by_epoch': False
            }
        }
        cfg.train.optimizer = {'type': 'AdamW', 'lr': 3e-4}
        cfg.train.dataloader = {'batch_size_per_gpu': 1, 'workers_per_gpu': 1}
        return cfg

    kwargs = dict(model='PAI/nlp_gpt3_text-generation_0.35B_MoE-64',
                  train_dataset=train_dataset,
                  eval_dataset=eval_dataset,
                  max_epochs=max_epochs,
                  work_dir=tmp_dir,
                  cfg_modify_fn=cfg_modify_fn)

    # Construct trainer and train
    trainer = build_trainer(name=Trainers.gpt_moe_trainer, default_args=kwargs)

    trainer.train()