搞定千亿参数,训练时间只用1/3,微软全新工具催生超级NLP模型

GPU 显存一直是训练先进深度学习模型的最大瓶颈——大规模训练经常会碰到模型参数太多,显存无法容纳的情况。

最近,微软提出的全新方法 DeepSpeed 将每个节点的批处理大小增大了 4 倍,而训练时间减少到原来的 1/3,新的工具兼容深度学习框架 PyTorch。这一研究会成为深度学习发展的重要一步吗?

DeepSpeed 的强大性能也催生了全新的语言生成模型微软同时发布了一款参数量高达 170 亿的模型 T-NLG,它在多项任务中打破了以往由 GPT-2 等保持的业内最佳记录。

Turing-NLG:170 亿参数,史上最大的 NLG 模型

在现有的 NLP 模型中,Turing Natural Language Generation(T-NLG)的参数量远超其他。

诸如 BERT 和 GPT-2 这样的深度学习语言模型已经在大部分 NLP 下游任务中实现了 SOTA,包括问答、对话代理和文档理解等。表现良好的自然语言生成(NLG)模型可以部署到多种应用程序,比如帮助作者进行内容撰写,可节省用户时间的长文本总结功能,或者使用智能助手改善用户体验等等。

近日,微软在最新的博客文章中介绍了史上最大的 NLG 模型「T-NLG」,参数量达到 170 亿。在各项语言模型基准上,T-NLG 均实现了 SOTA 表现,同时在问答和总结这样的实际任务中也表现出色。

模型架构

T-NLG 是基于 Transformer 的语言生成模型,这意味着它能够生成单词来完成开放式文本任务。除了补全不完整的句子以外,它还可以针对问题生成直接答案以及针对输入文档生成摘要等。

模型越大,预训练数据也会更加多样及复杂,即使训练实例比较少,它也可以在下游任务的扩展中拥有良好表现。因此,训练一个大型集中式多任务模型并在多种任务中共享功能,会比针对每个任务单独训练新模型要更高效一些。

训练方法

超过 13 亿参数的模型无法部署在单个 GPU 上,因此该模型需要在多个 GPU 之间并行化或者被分解。训练 T-NLG 的过程有以下几项软件和硬件上的突破:

  1. 将 NVIDIA DGX-2 与 InfiniBand 连接起来,使得 GPU 之间的通信更快;

  2. 使用张量切片(tensor slicing)在 NVIDIA Megatron-LM 框架上的四个 NVIDIA V100 GPU 上进行模型分割;

  3. 带有 ZeRO 优化器的 DeepSpeed 使得模型并行度从 16 降至 4,并将每个节点的批处理大小增至 4 倍,同时训练时间减至三分之一。DeepSpeed 可以在更少 GPU 的前提下,做到让大型模型的训练效率更高,并且仅使用 256 个 NVIDIA GPU 就可以进行 512 的批量训练,相比之下,单独使用 Megatron-LM 需要 1024 个 NVIDIA GPU。DeepSpeed 与 PyTorch 兼容。

生成的 T-NLG 模型有 78 个 Transformer 层,包括 4256 个隐藏层参数以及 28 个注意力头。为使生成结果更接近于 Megatron-LM,团队使用了与 Megatron-LM 相同的超参数和 Learning schedule 对模型进行训练,使用了 1024 长度的 Token 序列,训练了 30 万步,批大小为 512,损失函数为自回归生成损失(autoregressive generation loss)。

Learning schedule 遵循 3200 个线性 warmup 步骤,最高学习速率为 1.5x10^-4,余弦衰减超过 50 万步,16 位浮点数,训练数据类型与 Megatron-LM 相同。

训练数据

同时,团队也在一系列标准语言任务中对比了 T-NLG 预训练模型,比如像 WikiText-103 的困惑度(越低越好),还有 LAMBADA 文本词汇预测准确性(越高越好)等任务。

如下表所示,T-NLG 在上述两项任务中实现了 SOTA,Megatron-LM 的数据来源于 NVIDIA Megatron 模型的公开结果。

此处 Open AI 使用了额外的停用词过滤处理程序,实现了比单独实现模型更高的数字。Megatron-LM 和 T-NLG 则没有使用。

下图 1 展示了 T-NLG 与 Megatron-LM 在困惑度验证方面的对比表现。

二者训练过程中的困惑度验证表现对比:橙色线代表 Megatron-8B 参数模型,蓝/绿色线代表 T-NLG。虚线代表的是现有 SOTA 模型能实现的最低验证损失。从蓝色到绿色的过渡意味着 T-NLG 在性能上超越了现有的其他训练模型。

实验结果

机器问答

在搜索引擎上提出一个问题的时候,很多用户习惯于在结果页面顶端看到答案卡片。多数卡片会展示一个含有答案的句子,连带给出这个句子的原始语境和出处,如下所示:

相比之下,T-NLG 会直接用一个完整的句子来回答问题(不带原始语境),这点对于 AI 助手非常重要,因为它可以帮助它们更加智能地回答用户有关自己个人数据、邮件、Word 文档等方面的问题。

此外,T-NLG 还能完成「zero shot」式的问答,即在没有语境段落的情况下给出答案。在下面这个例子中,研究者就只给出了问题,没有给出语境。在这些情况下,模型依赖于预训练得到的知识来生成答案。

此外,研究人员还请人类标注员来评估 T-NLG 模型与之前的基线模型,结果如下:

研究人员还注意到,虽然模型变大了,但它学习所需的下游任务实例反而更少。他们只有不超过 10 万组直接能够表示为「问题-段落--答案」的三元组。但即使只经过了几千个实例的训练,他们得到的模型也优于 LSTM 基线,后者是在相同数据的多个 epoch 上训练的。这一结果有很高的商业价值,因为收集带标注的监督数据成本非常高。

文本摘要

T-NLG 的目标是写出接近人类的文本摘要(email、博客、Word 文档、Excel 图表等),但监督训练数据的缺乏阻碍了这一目标的实现。T-NLG 的优势在于,它已经非常善于理解文本,因此不需要太多的监督数据就能超越之前使用的技术。

为了使 T-NLG 适用于更多的文本类型,研究人员在几乎所有公开可用的公共摘要数据集上微调了 T-NLG 模型,使其具备适应多任务的能力。训练所用的示例接近 400 万。

下图展示了 T-NLG 与之前的 SOTA 模型以及 PEGASUS(最近的一个基于 Transformer 的模型)的 Rouge 分数对比:

下图展示了 T-NLG 任务在一些文本摘要任务中的应用示例:

ZeRO&DeepSpeed 助力

根据微软博客的介绍,T-NLG 模型之所以能够实现快速的训练和收敛,需要归功于团队在模型加速方面的研究。在这一方面,微软已推出了一个名为 DeepSpeed 的代码库,这一代码库能够和 PyTorch 兼容。同时和 DeepSpeed 代码库一起推出的还有名为 ZeRO 的优化方法。

同时,该库中有一个很重要的组件:ZeRO。这是一个新的并行优化组件,能够很好地降低模型和数据并行需要的资源,并提升可训练的参数量。研究者将这个组件用在了 T-NLG 模型的训练上。

据悉,ZeRO 对于内存的优化可以让 1000 亿参数的模型在现有的 GPU 集群上提升 3 到 5 倍的吞吐量。

现有的加速方法的挑战

为什么要推出新的模型加速库呢?微软认为,现有的解决方法在计算、通信和开发效率方面牺牲了很多。首先,数据并行并不能降低每个设备的内存占用情况,一个超过 10 亿参数的模型占用的内存量甚至会超出 32G 内存的 GPU。

其次,由于高细粒度的计算和高昂的通信成本,模型并行并不能扩展超过一个单节点的效率。例如,英伟达的 Megatron-LM 实现了 83 亿参数的模型加速。在单节点多 GPU 上,这个模型可以很好地适应,但是要扩展到多个节点的时候,模型性能就下降了。

ZeRO 的解决方法

为了解决数据并行和模型并行存在的问题,ZeRO 提供了三阶段的优化方法,分别为优化器状态分割、梯度分割、参数分割,三个阶段按顺序实施。

  1. 优化器分割状态:ZeRO 降低了 3/4 的内存,通信量和数据并行相同;

  2. 加入梯度分割:降低了 7/8 的内存,通信量和数据并行相同;

  3. 加入参数分割:内存减少与数据并行度呈线性关系。例如,在 64 个 GPU 上进行分割的时候,可以将内存降至 1/64。在通信量上有 50% 的提升。

据悉,ZeRO 可以训练兆级别参数量的模型,使用 1024 个英伟达 GPU。对于一个拥有一兆参数、使用 Adam 优化器的模型来说,如果精度要求是 16 比特,那么它需要大约 16TB 的内存提供给优化器状态、梯度和参数。16T 除以 1024 为 16G,对于一个 GPU 而言就更为合理了。

图 1:与标准数据并行基准相比,ZeRO 在三个阶段中节省的内存和通信用量。

ZeRO 和 DeepSpeed 的结合

ZeRO 和 DeepSpeed 结合的优势:

  • 规模:OpenAI 的 GPT-2、英伟达的 Megatron-LM 和谷歌的 T5(当前 SOTA 模型)参数量分别为 15 亿、83 亿和 110 亿。ZeRO-OS 提供的系统支持可以运行 1000 亿参数的模型;

  • 速度:在不同硬件上,吞吐是当前 SOTA 的 5 倍;

  • 成本:吞吐量提升能够大幅度降低训练成本;

  • 易用性:只需更改几行代码就能让 PyTorch 模型使用 DeepSpeed 和 ZeRO 成为可能。与当前模型并行库相比,DeepSpeed 库不需要重新设计代码或重构模型。同时,DeepSpeed 库也不对模型尺寸(如注意力头的数量、隐藏层参数量等)、批大小或任何其他训练参数施加任何限制。

DeepSpeed 开源库:兼容 PyTorch,实现系统性能

研究者实现了第一阶段的 ZeRO,即优化器状态分区(optimizer states partitioning,ZeRO-OS),它能够支持 1000 亿参数的模型。相关代码将与 DeepSpeed 训练优化库一同发布。借助于兼容 PyTorch 的轻量级 API,DeepSpeed 库提供了当前 SOTA 的训练方法,如 ZeRO、分布式训练、混合精度和检查点技术等。

因此,只需更改 PyTorch 模型的几行代码,用户就可以利用 DeepSpeed 库来解决底层性能问题,还能够提升训练速度和规模。

DeepSpeed+ZeRO 在 T-NLG 上的应用

研究者在 DeepSpeed 开源库中联合使用 ZeRO-OS 和英伟达的 Megatron-LM 来训练 T-NLG 模型。与单独使用英伟达 Megatron-LM 相比,二者结合所节省的内存能够使得 Turning-NLG 模型的并行度降低 3/4,批大小增加到 4 倍,因而可以实现 3 倍的吞吐量增益。

此外,在批大小为 512 时,ZeRO-OS 和 Megatron-LM 的结合可以将所需的 GPU 数量减少到 256 个,而单独使用 Megatron-LM 则需要 1024 个 GPU。最后,Megatron-LM 不能单独运行标准的 T-NLG,因为它的注意力头(=28)不能被模型并行度(=16)整除,所以不支持该模型结构。

潜在应用

微软表示,T-NLG 现在已经实现了在自然语言生成领域的 SOTA,这对于微软的很多业务和客户都是有利的。例如,模型可以帮助用户对文档和邮件进行摘要化处理。同时,模型也能够应用在 Office 系列软件中,比如作为文档的写作助理或问答机器人,分别面向写作者和读者。另外,微软也十分看好这一模型在客服机器人等方面的潜力。

在未来,微软会继续探索深度学习方面的应用,并将研究成果和旗下的 Bing、Office、Xbox 等方面的软硬件服务结合起来。

参考链接:

https://www.microsoft.com/en-us/research/blog/turing-nlg-a-17-billion-parameter-language-model-by-microsoft/

https://www.microsoft.com/en-us/research/blog/zero-deepspeed-new-system-optimizations-enable-training-models-with-over-100-billion-parameters/?OCID=msr_blog_zerodeep_tw

入门NLP参数NLP模型微软
相关数据
Microsoft机构

微软是美国一家跨国计算机科技公司,以研发、制造、授权和提供广泛的计算机软件服务为主。总部位于美国华盛顿州的雷德蒙德,最为著名和畅销的产品为Microsoft Windows操作系统和Microsoft Office办公室软件,以及Xbox的游戏业务。微软是美国《财富》杂志2015年评选的世界500强企业排行榜中的第95名。

https://www.microsoft.com/en-us/about
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

自然语言生成技术

自然语言生成(NLG)是自然语言处理的一部分,从知识库或逻辑形式等等机器表述系统去生成自然语言。这种形式表述当作心理表述的模型时,心理语言学家会选用语言产出这个术语。自然语言生成系统可以说是一种将资料转换成自然语言表述的翻译器。不过产生最终语言的方法不同于编译程式,因为自然语言多样的表达。NLG出现已久,但是商业NLG技术直到最近才变得普及。自然语言生成可以视为自然语言理解的反向: 自然语言理解系统须要厘清输入句的意涵,从而产生机器表述语言;自然语言生成系统须要决定如何把概念转化成语言。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

GPT-2技术

GPT-2是OpenAI于2019年2月发布的基于 transformer 的大型语言模型,包含 15 亿参数、在一个 800 万网页数据集上训练而成。据介绍,该模型是对 GPT 模型的直接扩展,在超出 10 倍的数据量上进行训练,参数量也多出了 10 倍。在性能方面,该模型能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。而且该模型在没有任务特定训练的情况下,能够做到初步的阅读理解、机器翻译、问答和自动摘要。

推荐文章
暂无评论
暂无评论~