Loading...

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

智源社区2年前 (2023)发布 智源社区
857 0 0

简介

Meta AI 开源 OPT系列模型,其中最大模型1750 亿参数(需申请访问权限)媲美 GPT-3。OPT系列模型包括了多组不同参数规模的模型权重,如图:

FlagAI对OPT不同版本的模型进行了兼容,后面也会持续完善,本篇文章主要简要科普OPT模型的结构,列举复现OPT模型的过程中遇到的困难,并给出使用FlagAI快速加载OPT模型示例代码。关于FlagAI更详细的介绍可以查阅大模型一键调用方案来了!北京智源人工智能研究院推出NLP大模型训练框架FlagAI

FlagAI仓库地址:https://github.com/BAAI-Open/FlagAI

OPT模型论文地址:https://arxiv.org/pdf/2205.01068.pdf

Github仓库地址:https://github.com/facebookresearch/metaseq

175B模型申请访问权限地址:https://forms.gle/dag8g7nKiR4o4VZq5

背景

OPT全称Open Pre-trained Transformer Language Models,即“开放的预训练Transformer语言模型”。我们都知道GPT-3有着非常惊艳的效果,网上也有很多有意思的demo展示,但是其模型权重并没有开源,我们无法查看到其内部具体的原理;而这次Meta AI 直接开源千亿参数的OPT模型,对标GPT3,模型性能方面,在多个任务,不管是zero-shot还是multi-shot中都取得了与GPT-3可比的成绩(左图为zero-shot,右图为multi-shot):

值得注意的是,在模型结构方面,OPT与GPT系列模型均采用了Transformer-Decoder结构,使用了下三角的Mask,因此在解码时自左向右进行自回归的预测。

使用FlagAI快速下载并使用OPT系列模型

目前FlagAI已经集成opt125m、opt350m、opt1.3b、opt2.7b、opt6.7b、opt13b、opt30b模型,更大参数量的模型正在陆续支持,只需要两行代码便可以直接进行加载:
如果已经安装了FlagAI (pip install -U flagai),便可以通过上述代码直接进行下载、使用。
opt-13b模型下载过程如图所示:

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

生成结果为:

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

100亿以上模型的加载和推理

模型参数在10b以上的时候,单卡可能就会遇到OOM的问题。为此,可以采用cpu加载/多GPU加载的方式。

CPU加载方式

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

CPU测试结果&资源占用

30b的模型有63G,使用了36个cpu 和120G内存的情况下,运行了18min(不包括模型下载的时间),得到下面的输出。

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

多GPU加载方式

63G的模型,在不开fp16的情况下,需要至少3张32GV100 才能加载。通过模型并行的方式,将模型权重加载到不同的显卡上。FlagAI采用Megatron-LM的算子切分方式,通过设置参数model_parallel_size就能将模型自动切分成到多个显卡上。这里为了展示效果,我们设置model_parallel_size=4,详情参考下方文件链接:

FlagAI/opt_30b_en_mutigpu.py at master · BAAI-Open/FlagAI (github.com)

多GPU测试结果&资源占用

主要的耗时在模型的切分(18分钟),之后模型的加载和推理耗时22分钟

OPT与GPT-2模型差异细节

OPT模型与GPT2模型同样都使用了Transformer-Decoder结构, 为了尽量多的复用代码,有以下几个方面需要统一:

1. config配置文件需要统一:OPT模型与GPT-2模型配置文件字段各不相同,为了共用代码,需要将配置文件字段进行统一;

2. 模型结构需要统一:虽然两者都是Transformer-Decoder结构,但还是有一些细节上的不同,例如OPT模型的位置编码比较特殊(利用attention mask计算得到);GPT-2模型为可学习的绝对位置编码;OPT模型可以通过配置文件字段修改layernorm层的位置(放在Attention与MLP层之前或者是之后);OPT模型的字嵌入层维度与隐藏维度有时候是不同的,而GPT-2模型相同。

3. 自定义预训练权重转换函数,由于两个模型的预训练权重结构相差很大,因此需要自定义权重的转换函数,用于同时加载OPT与GPT系列模型的预训练权重。

只需要对以上几点进行统一,便可以实现OPT与GPT模型的统一调用。如果对这块更详细的技术细节感兴趣,可以留言,我们将会分享更多的细节介绍。

OPT125m可能存在乱码问题

经过实验发现,不管是使用huggingface还是使用FlagAI加载OPT125m模型,在解码的时候总会出现一些乱码的情况,如图:

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用!

目前相关的问题已经提交issue到transformers的仓库中:

github.com/huggingface/transformers/issues/17735

其他参数量大小的模型目前没有发现问题。

后记:这块确实是有问题的,原因是漏掉了一个final_layer_norm层,目前huggingface已经修正。

github.com/huggingface/transformers/pull/17785

总结

Meta AI 开源最大175B参数量、媲美GPT-3的OPT系列模型,是业界首次开源如此大参数规模的预训练模型,可以让我们更好了解大模型内部运作原理、验证模型并行等加速技术。

FlagAI将持续更新对NLP/CV领域大模型的支持,简化下载和使用的流程。欢迎大家下载使用,在使用的过程中如有任何问题也欢迎交流。

项目地址:https://github.com/BAAI-Open/FlagAI
FlagAI技术交流群
© 版权声明

相关文章

暂无评论

暂无评论...