paddlenlp

Форк
0

README.md

PLATO-XL: Exploring the Large-scale Pre-training of Dialogue Generation

模型简介

构建高质量的开放领域(Open-Domain)的对话机器人,使得它能用自然语言与人自由地交流,这一直是自然语言处理领域终极目标之一。

PLATO-XL 是业界首个开源的百亿超大规模开放域对话预训练模型,其使用了参数高效(encoder-decoder共享参数)的 UnifiedTransformer(prefix LM)模型架构,将模型参数量提升到了11B量级,经过了十亿级样本对话数据的预训练,并引入role embedding区分多方对话中的对话角色提升预训练效果,最终模型闲聊测试效果超过了众多代表性的对话模型。可以直接使用 PLATO-XL 构建高质量的开放领域对话机器人。

PaddleNLP 内置了 PLATO-XL 英文预训练模型以供使用。由于 PLATO-XL 模型规模较大,这使得其在预测时生成对话回复的时间较长,并且 11B 的参数量也可能超出部分型号 GPU 显存容量,这是大模型推理与落地存在的普遍和关键问题。PaddleNLP FastGeneration 为 PLATO-XL 提供了 GPU 上的高性能生成加速能力,并且支持模型并行(张量并行)推理允许通过多张小显存容量的 GPU 使用百亿大模型,相比单卡代码中也只增加了enable_ft_para()一行,此外模型并行能进一步提升预测速度。

本项目提供了 PLATO-XL 英文模型使用 PaddleNLP FastGeneration 进行高性能预测的使用示例。PLATO-XL 的训练及更多内容请参考 PaddlePaddle/Knover

开始运行

单卡高性能推理

infer.py 是 PLATO-XL 高性能预测使用示例脚本,可以使用如下命令运行:

python infer.py --topk 4 --max_out_len 64 --use_faster --use_fp16

该脚本各个参数含义如下:

  • topk 用于Top-K采样策略,采样时将只从概率最高K个token中采样,默认为1,即greedy search。
  • topp 用于Top-P采样策略,采样时将只从概率最高且累加概率不超过该值的token中采样,默认为1.0。
  • max_out_len 指定生成的最大长度,默认为64。
  • min_out_len 指定生成的最小长度,默认为1。
  • temperature 用于调整预测概率分布,默认为1.0,即保持模型原有的预测概率。
  • use_faster 使用 FastGeneration
  • use_fp16 使用FP16,只在使用FastGeneration时生效

脚本中使用了一条如下的多轮对话的样本数据, 由List[str]表示,其中每个str表示一句话,将根据历史对话内容生成回复。

history = [
"hi , Mary ! What do you usually like to do in your spare time ?",
"well , I spend a lot of time watching movies .",
"what a confidence ! I always watch a lot of movies , too ."
"oh really , Frank ? What kind of movies do you like ?"
]

注意 由于 PLATO-XL 模型较大,单卡预测至少需要22G显存(使用FP16时),且模型下载需要一定时间(FP32的权重文件约41G)。

多卡并行推理

多卡并行推理当前依赖 MPI(MPICHOpenMPI均可)和NCCL,如需使用还请先安装依赖。安装完成后仍然使用 infer.py 来进行预测,相比单卡时不同的只是通过mpi来启动运行,如下:

mpirun -n 4 python infer.py --topk 4 --max_out_len 64 --use_faster --use_fp16

其中-n 4指明使用的进程和GPU数,在n设置为1时仍将进行单卡推理。由于多卡并行推理使用和单卡使用不同的依赖库,第一次运行时将重新进行JIT编译。

性能测试

infer.py 中同时提供了性能测试的支持,在上面预测命令的基础上加上 --profile 即可,如下:

mpirun -n 4 python infer.py --batch_size 8 --min_out_len 20 --max_out_len 20 --topk 1 --use_faster --use_fp16 --profile

此外还指定了batch_sizemin_out_len来得到特定输入输出大小下的性能,性能测试将给出循环运行多次的平均时延。以下为单卡高性能推理和4卡张量并行推理性能数据(V100,CUDA 10.2,输入长度60、输出长度20),可以看出4卡并行速度为单卡的2倍左右。

PLATO-XL 高性能推理速度  (in ms/batch)
batch sizeKFastGeneration
1卡
FP16
FastGeneration
4卡
FP16
多卡并行
SpeedUp
11706.937348.6532.027
110707.514348.6992.029
41768.597384.7301.997
410770.008385.2441.998
81862.017418.3132.060
810866.490418.9652.068
1611016.362486.9742.087
16101060.472488.1562.172
3211325.700606.7702.184
32101326.222608.4792.179

Reference

  1. Bao S, He H, Wang F, et al. PLATO-XL: Exploring the Large-scale Pre-training of Dialogue Generation[J]. arXiv preprint arXiv:2109.09519, 2021.

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.