Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/THUDM/Chinese-Transformer-XL


https://github.com/THUDM/Chinese-Transformer-XL

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

        

# Chinese-Transformer-XL

Under construction

本项目提供了智源研究院"文汇"
预训练模型Chinese-Transformer-XL的预训练和文本生成代码。[[应用主页]](https://gpt-3.aminer.cn/) [[模型下载]](http://dorc-model-team.ks3-cn-beijing.ksyun.com/ren-zhi/my-model/mp_rank_00_model_states.pt)

## 数据

本模型使用了智源研究院发布的中文预训练语料[WuDaoCorpus](https://data.baai.ac.cn/data-set-details/0c8dc71dd06ae75a10ca422fb49b0751)
。具体地,我们使用了WuDaoCorpus中来自百度百科+搜狗百科(133G)、知乎(131G)、百度知道(38G)的语料,一共303GB数据。

## 模型

本模型使用了[GPT-3](https://arxiv.org/abs/2005.14165)
的训练目标,同时使用能够更好地处理长序列建模的[Transformer-XL](https://arxiv.org/abs/1901.02860) 替代了GPT中的Transformer。模型的结构与GPT-3
2.7B(32层,隐表示维度2560,每层32个注意力头)基本相同,因为Transformer-XL的结构改动,模型参数增加到了29亿。

## 结果

为了验证模型的生成能力,我们在中文的开放域长文问答上进行了评测。我们从[知乎](https://www.zhihu.com)
上随机选择了100个不同领域的、不在训练语料中的问题。对每个问题,由人类测试员对一个高赞同数回答、3个模型生成的回答和3个[CPM](https://github.com/TsinghuaAI/CPM-Generate)
生成的回答在流畅度、信息量、相关度、总体四个维度进行打分。测评结果如下:

|模型|流畅度(1-5)|信息量(1-5)|相关度(1-5)|总体(1-10)|
|---|---|---|---|---|
|CPM|2.66|2.47|2.36|4.32|
|文汇|3.44|3.25|3.21|5.97|
|人类答案|3.80|3.61|3.67|6.85|

可以看到相比起CPM,"文汇"更接近人类所写的高赞答案。

## 安装

根据`requirements.txt`安装pytorch等基础依赖

```shell
pip install -r requirements.txt
```

如果要finetune模型参数,还需要安装[DeepSpeed](https://github.com/microsoft/DeepSpeed)

```shell
DS_BUILD_OPS=1 pip install deepspeed
```
也可以使用我们提供的[Docker镜像](https://github.com/THUDM/GLM#docker-image)

## 推理

首先下载模型的[checkpoint](http://dorc-model-team.ks3-cn-beijing.ksyun.com/ren-zhi/my-model/mp_rank_00_model_states.pt) ,目录结构如下

```
.
└─ txl-2.9B
└─ mp_rank_00_model_states.pt
```

然后运行交互式生成脚本

```shell
bash scripts/generate_text.sh ./txl-2.9B
```

## Finetune

模型的finetune基于使用DeepSpeed。首先在`scripts/ds_finetune_gpt_2.9B.sh`中修改`NUM_WORKERS`和`NUM_GPUS_PER_WORKER`
为使用的节点数目和每个节点的GPU数量。如果使用多机训练的话,还要修改`HOST_FILE_PATH`
为hostfile的路径(DeepSpeed使用[OpenMPI风格的hostfile](https://www.deepspeed.ai/getting-started/#resource-configuration-multi-node)
)。

然后运行finetune脚本

```shell
bash scripts/ds_finetune_gpt_2.9B.sh ./txl-2.9B ./data.json
```

其中`./txl-2.9B`为checkpoint目录。`./data.json`为finetune数据,格式为[jsonl文件](https://jsonlines.org/)
,每条数据的格式为`{"prompt": .., "text": ...}`。其中prompt为生成的context,text为生成的内容。

如果你在finetune的遇到了OOM错误(一般是因为GPU数量或者显存不足导致的),可以尝试在[scripts/ds_config_2.9B_finetune.json](scripts/ds_config_2.9B_finetune.json)的`zero_optimization`部分添加`"cpu_offload": true`,来开启[ZeRO-Offload](https://www.deepspeed.ai/tutorials/zero-offload/) 以减少显存消耗。

## 模型并行
如果你的显存大小比较有限,可以尝试使用模型并行来减少显存消耗。我们提供的模型checkpoint是在单卡上运行的。首先使用[change_mp.py](change_mp.py)来对hceckpoint进行切分
```shell
python change_mp.py ./txl-2.9B 2
```
其中2表示2路模型并行。在推理和finetune的时候,将脚本中的MP_SIZE改为2,然后使用./txl-2.9B_MP2作为运行脚本时的checkpoint路径。
## 引用