---
title: nlp_gpt3_text-generation_0.35B_MoE-64
canonical_url: "https://www.modelscope.cn/models/PAI/nlp_gpt3_text-generation_0.35B_MoE-64"
md_url: "https://www.modelscope.cn/models/PAI/nlp_gpt3_text-generation_0.35B_MoE-64.md"
repository: PAI/nlp_gpt3_text-generation_0.35B_MoE-64
chinese_name: "GPT-MoE中文67亿诗歌生成模型"
last_updated: 2023-02-20
license: "Apache License 2.0"
pipeline_tag: text-generation
tasks:
  - text-generation
model_type:
  - GPT-MoE-0.35B+MoE-64
library_name:
  - pytorch
frameworks:
  - pytorch
language:
  - ch
domain:
  - nlp
downloads: 3804
stars: 14
tags:
  - transformer
  - Alibaba
---

# nlp_gpt3_text-generation_0.35B_MoE-64

> nlp_gpt3_text-generation_0.35B_MoE-64 - PAI 在 ModelScope 开源的模型。GPT模型能较好的处理NLP各个应用领域的任务，比如文本分类，推理，对话，问答，完形填空，阅读理解，摘要，生成等等。百亿/千亿参数量级的GPT大模型作用在这些应用领域虽然效果很好，但是训练成本非常高。以OpenAI推出的1750亿的GPT-3为例，在1024张A100GPU上预估需要34天，一万亿参数的GPT-3在3072张A100显卡上也至少需要84天；微软/英伟达联合推出的5300亿的…

PAI/nlp_gpt3_text-generation_0.35B_MoE-64 是 ModelScope 魔搭社区上的text-generation模型，采用 Apache License 2.0 许可。

- **Repository**: PAI/nlp_gpt3_text-generation_0.35B_MoE-64
- **License**: Apache License 2.0
- **Tasks**: text-generation
- **Tags**: transformer, Alibaba
- **Downloads**: 3804
- **Stars**: 14
- **Last updated**: 2023-02-20

Source: https://www.modelscope.cn/models/PAI/nlp_gpt3_text-generation_0.35B_MoE-64

---

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

## 概述

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

![](./images/motivation.png)

针对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是做路由选择时需要学习的参数。

![](./images/top1.png)

## 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模型

![](./images/loss-step.png)

![](./images/loss-time.png)

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

![](./images/training-throughput.png)

推理吞吐速度方面，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%，如下图所示：

![](./images/train-cost.png)

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

![](./images/infer-cost.png)

## 中文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模型在诗词生成数据集上二次开发训练
```python
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()
```
