专栏首页腾讯云TI平台技术干货 | 腾讯云NLP大模型预训练最佳实践
原创

技术干货 | 腾讯云NLP大模型预训练最佳实践

作者:jennygong

腾讯云自然语言处理(Natural Language Process,NLP)深度整合了腾讯内部顶级的 NLP 技术,依托千亿级中文语料累积,提供16项智能文本处理能力,包括智能分词、实体识别、文本纠错、情感分析、文本分类、词向量、关键词提取、自动摘要、智能闲聊、百科知识图谱查询等。

腾讯云TI平台团队旨在通过“一套框架”+“三套最佳实践”,更好的服务外部有NLP预训练需求的客户。

TI-Deepspeed介绍

根据当前人工智能的趋势,越大的自然语言模型可以提供越好的准确性,目前GPT-3的模型参数达到175B。但是由于成本、时间和代码集成的障碍,较大的模型难以训练。

模型参数量

微软开源了Deepspeed深度学习训练优化库,它通过优化transformer kernel性能、极致的显存优化及节省、提升模型scale能力等多个层面对大模型训练做了详细的分析以及极致的性能优化,已经成为了超大NLP模型预训练的“利器“。

通过公司内外团队及客户交流发现,越来越多的技术团队、深度学习工程师、高校科研工作者对NLP大模型预训练有需求,腾讯云作为国内主要云厂商之一,需要在NLP领域迅速补齐短板,为公司内外部客户赋能、提速。据此腾讯云TI平台团队在对Deepspeed调研和实践的基础上,从性能和易用性两方面对Deepspeed框架进行了相关优化,并根据NLP大模型不同的参数规模沉淀出了完整且高性能的分布式训练方案。

腾讯云TI平台团队旨在通过“一套框架”+“三套最佳实践”,提供一套完整的:GPU机器+需求带宽+分布式训练的完整解决方案,与IAAS团队合作,致力于更好的服务外部有NLP预训练需求的客户。

TI-Deepspeed框架简介

1、TI-Deepspeed显存节省技术

1)模型显存占用分析

模型的显存占用主要包括两个部分,一部分为Model States,主要包括优化器的状态和梯度以及参数等。另一部分为其他memory占用,如1)activation memory,用于保存中间结果,backward计算用到;2)临时buffer;3)临时buffer的频繁创建和释放导致的内存碎片,导致明明还有显存但是cudamalloc申请失败。

我们以nlp领域常用的优化器adamw结合混合精度训练为例,分析一下model states的显存占用。

针对FP16精度下进行权重更新的问题,apex是以FP32 维护和更新权重。训练过程中,将各层权重保存为FP32格式(FP32 Master Weights),每次迭代时,制作这些权重的FP16副本并使用它们用于前向计算和反向计算,更新时将梯度再转换为FP32并用于更新FP32的权重。使用这种方法可以解决权重相较于其更新值过大的问题。因此Adamw优化器保存了每个参数的 fp32 master weight, momentum, and variance ,同时保存了每个参数的fp16 的weights和gradients。

以一个83亿大小的模型为例,model states的显存占用需要133GB,远大于V00机型32GB的显存上限。

模型大小

显存占用

8.3B

8.3*16=133GB

2)ZeRO优化器显存节省技术

开源Deepspeed框架对显存占用做了优化,其核心亮点就是“ZeRO”零冗余优化器,TI-Deepspeed对ZeRO做了深入研究并进行吸收。

zero优化器主要分为stage1,stage2,stage3。stage1对optimizer states做partition,避免每个数据并行DP进程保存一份完整的optimizer states。stage2对optimizer states和gradients做partition,stage3对optimizer states、gradients、weights都做partition。

优化器显存优化

zero优化器相当于对实际负责参数更新的optimizer的上层封装,zero优化器负责对相关params做partition,负责维护相关通信,内部调用底层optimizer执行实际的参数更新。其中stage1和stage2的通信思路为:每个数据并行进程负责通过reduce-scatter规约部分梯度,然后更新这部分梯度对应的权重。反向传播完毕后,所有数据并行进程通过allgather获取全量权重信息。因此stage1与stage2并没有为了节省显存而增加通信量。stage3的通信思路为:每个数据并行进程负责通过reduce-scatter规约部分梯度,然后更新这部分梯度对应的权重。由于每个数据并行进程只保留部分权重,因此在实际forward中进行allgather操作获取当前submodule需要的权重信息,因此stage3的通信量为stage2/stage1的1.5倍。

值得注意的是,TI平台团队通过对zero优化器的详细分析,发现目前的zero优化显存节省方案并不支持lamb优化器,原因是它对所有梯度tensor做了flatten后,根据DP进程数做平均切分,不再维护每个weights 的shape信息,这一点在深度学习开发过程中要注意,目前zero优化支持NLP常用的adam、adamw优化器。

2、TI-Deepspeed多机可扩展性优化

TI-Deepspeed结合腾讯云iaas基础设施对开源deepspeed框架多机可扩展性做了深度优化,也从实践和调研中积累了如何在腾讯云机器上更好的发挥框架性能优势的经验。

1)TI-Deepspeed+Ti-Horovod结合通信优化

开源Deepspeed框架中,不使用zero优化器时,模型的反向计算和梯度通信是串行的,在带宽有限或者模型大通信量场景下,梯度通信的开销十分巨大,由于反向计算和梯度通信串行,导致梯度通信无法被反向计算隐藏,TI-Deepspeed针对这种情况进行了优化,使得反向计算和梯度通信可以并行进行。同时在梯度通信中,引入了Ti-Horovod。

Ti-Horovod是腾讯云TI平台团队结合腾讯云底层基础设施在开源Horovod基础上定制化优化过的分布式训练通信优化库,TI-Horovod包含以下优化特性:

  1. 在保留原生horovod的易用性上,增加了更好的性能通信方式,HorovodAllgather支持ncclAllgather通信
  2. 实现了2D-allreduce通信,相对于全局allreduce,能够更加充分的利用云上带宽
  3. 实现了top-k梯度压缩通信,进一步减小通信量,支持精度补偿,降低对精度影响
  4. 针对tf框架,增加了多种梯度融合方式,比horovod原生的梯度融合机制更加高效
  5. 支持fp16梯度通信和混合精度训练
  6. 支持梯度累积

2)TI-Deepspeed大模型参数通信优化

1、大模型参数多轮通信allgather

随着深度学习模型复杂度和数据集规模的增大,计算效率成为了不可忽视的问题,GPU 显存一直是训练先进深度学习模型的最大瓶颈——大规模训练经常会碰到模型参数太多,显存无法容纳的情况。针对各种情况TI-Deepspeed自动对大模型通信参数进行切分,通过for循环的多次调用完成多轮发送,通过allgather_bucket_size控制每轮通信的参数量。

2、AllGather优化,规避内存不对齐情况导致的通信性能差问题

Nvidia的nccl作为业内最成熟的GPU通信库并没有做到各种case场景下的极致的性能优化,实际使用中的一个问题是,NcclAllgather接口针对某些数据包的大小,通信效率十分低下,而gpu通信效率直接影响了训练速度,带来的是高额的成本支出。

TI-Deepspeed通过详细的问题定位和论证发现,某些数据包的大小,通信效率十分低下是由于内存不对齐导致,即通信size不是16的整数倍。TI-Deepspeed通过封装nccl的allgather接口,在封装接口中对发送size进行判断,若发送size不是16的整数倍,则对发送buffer进行padding补零,新建pad size大小的zero tensor,将该tensor与原发送tensor做concat。

3)cpu offload增大batchsize,隐藏通信开销

cpu offload可以和zero优化器的stage2和stage3使用。cpu offload 保存了zero优化器对相关model states的切分,只是把对应model states都offload到了cpu 内存中。在反向计算过程中,梯度经过reduce scatter规约push到cpu上,在cpu上执行weight的更新后再move到gpu中。cpu offload利用了单独的流来实现计算和cpu<->gpu之间通信的overlap,保证训练效率。

cpu offload技术

Deepspeed专门提供了经过优化的cpu adam optimizer,使用cpu offload时,可以使用该optimizer提高训练效率。

经过在腾讯云机器上实际测试,cpu offload在超过百亿级,接近千亿规模的模型上发挥的性能优势更大,通过把model states offload到cpu memory上,节省了GPU的显存以支持更大的batchsize,可以更好的隐藏通信开销,提升多机可扩展性。

4)3D并行结合optimizer states切分

Deepspeed 3D并行包括数据并行,模型并行和流水线并行。通过不同的Group维护数据并行组,模型并行组和流水线并行组。其中dp group做allreduce同步梯度,同一个pipe group通过broadcast 去send activation(前向)或者send grads(反向)。同一个pipe group只有pipeline的第一个stage需要读取train数据,pipeline的最后一个stage需要读取label数据,算出loss。

流水线并行技术

TI-Deepspeed通过梯度累积实现不同节点间无数据流依赖关系的并行,充分发挥3D并行的优势,充分权衡计算效率和内存效率。

由于模型并行和数据并行参数量比较大,对带宽的要求比较高,所以TI-Deepspeed尽可能在节点内做模型并行和数据并行,充分利用节点内高带宽。而流水线并行因为切分的stage比较多,而且也有梯度累计去做无数据流依赖的不同stage之间的并行,对数据传输效率要求没有那么高,所以可以做节点间的pipeline并行。假设是64卡,本着节点内模型并行,节点内数据并行,节点间pipeline并行的原则,假设mp=4 dp=2 pp=4,那么就形成了dp_groups=[[0, 4], [1, 5], [2, 6], [3, 7], [8, 12], [9, 13], [10, 14], [11, 15], [16, 20], [17, 21], [18, 22], [19, 23], [24, 28], [25, 29], [26, 30], [27, 31]]。

3D并行技术

TI-Deepspeed大模型训练最佳实践

腾讯云TI平台团队在对Deepspeed调研和实践的基础上,从性能和易用性两方面对Deepspeed框架进行了相关优化,并根据NLP大模型不同的参数规模沉淀出了完整且高性能的分布式训练方案。腾讯云TI平台团队旨在通过“一套框架”+“三套最佳实践”,更好的服务外部有NLP预训练需求的客户。

1、训练平台介绍

CPU

96 Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz两个物理cpu,每个24核,总核数48,逻辑cpu数96

GPU

V100显卡,32GB

带宽

100Gb RDMA

相关安装包、运行demo及最佳实践体验已上线腾讯云官网详见:

【概述】https://cloud.tencent.com/document/product/560/57697

【部署及实践】https://cloud.tencent.com/document/product/560/57698

2、3亿参数规模

目前腾讯云TI平台团队Bert Large预训练已对标业界SOTA,使用黑石2.0 8机64卡在13.65小时可以完成Bert Large训练,比NV dgx-2h同样卡数快12.5%。

24-layer, 1024-hidden, 16-heads, 340M parameters

sequence length

bsz

梯度累计step

global step

speed

128

64

16

7038

14480samples/sec

512

8

64

1563

2840samples/sec

3、百亿参数规模

腾讯云TI平台团队使用黑石2.0 64卡训练83亿和100亿参数规模 GPT-2, 通过使用zero-2纯数据并行,每卡可以达到近40TFLOPs的性能。

4、四百亿参数规模

腾讯云TI平台团队通过3D并行结合梯度累积,对3D并行进行改造以支持切分optimizer states,使用64卡训练400亿参数规模模型,可以达到40TFlops/GPU。

5、千亿参数规模

腾讯云TI平台团队使用zero-stage3结合cpu offload,在有限的64卡情况下训练千亿模型,通过增大batchsize,隐藏通信开销,提升训练效率。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云NLP大模型预训练最佳实践

    根据当前人工智能的趋势,越大的自然语言模型可以提供越好的准确性,目前GPT-3的模型参数达到175B。但是由于成本、时间和代码集成的障碍,较大的模型难以训练。

    TI MAKER
  • 中秋福利 | 15个系列100+篇超实用云原生原创干货合集(内含腾讯彩蛋)

    还有2天,就要迎来中秋小长假啦 这个中秋节你打算怎么过? 小云选择把这篇干货全部拿下! 云原生技术干货文章合集,来咯~ 2021 年,要说咱们技术圈子里什...

    腾讯云原生
  • 8月腾讯云容器产品技术月报|留言抢腾讯定制T恤

    2021年8月 VOL:16 腾小云告诉你最前线的产品新特性 总有一款让你心动~ 云说新品 容器产品新特性 8月上新 腾讯云边缘服务TKE@...

    腾讯云原生
  • 3月容器产品技术月报|留言抢定制款T恤

    2021年3月 VOL:11 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ 云说新品 容器产品新特性 3月上新 腾讯云边缘服务TKE...

    腾讯云原生
  • 11月腾讯云容器产品技术月报|转发集赞抢腾讯周边

    2021年11月 VOL:19 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ 云说新品 容器产品新特性11月上新 腾讯云边缘服务TK...

    腾讯云原生
  • 10月容器产品技术月报|2021 腾讯数字生态大会【云原生专场】重磅来袭

    2021年10月 VOL:18 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ 云说新品 容器产品新特性10月上新 腾讯云边缘服务TK...

    腾讯云原生
  • 每周二晚云原生正发声 l 多种模式下的深度学习弹性训练

    云原生在近几年的发展越来越火热,作为云上最佳实践而生的设计理念,也有了越来越多的实践案例,而一个个云原生案例的背后,是无声的巨大变革。 腾讯云主办首个云原生百科...

    腾讯云原生
  • 腾讯微信团队开源推理加速工具TurboTransformers

    近日,腾讯正式宣布开源 Transformer 推理加速工具 TurboTransformers。该工具是面向自然语言处理领域中 Transformers 相关...

    代码医生工作室
  • 报名中|面基啦~首站深圳线下云原生技术开放日来了

      往期精选推荐   新春采购节,腾讯云容器服务邀你免费体验 开工必备!50+篇超实用云原生技术干货合集 大数据云原生系列| 微信 Flink on Kub...

    腾讯云原生
  • 【云+社区年度征文】2020征文活动获奖名单公布

    由腾讯云+社区主办的云+社区 2020 年度征文活动在2020年12月31号圆满的落下帷幕。年度征文活动自2020年11月发布后,吸引了众多社区内的小伙伴。经过...

    云加社区
  • 活动预告 | 2020 Techo Park开发者大会,优图实验室与你共同聆听技术的回响

    12月19日至20日,由腾讯主办的2020 Techo Park开发者大会将在北京举办。作为一个专注于前沿技术研讨的非商业大会,本次大会致力于开发者的能力成长和...

    优图实验室
  • NLP,AI皇冠上的明珠 | AI应用正走向精细化时代

    在会上,腾讯云带来了在大数据与AI领域的最新研究成果,包括AutoNLP、AI换脸甄别技术AntiFakes、语言模型自学习工具、腾讯星图以及企业画像平台等系列...

    庞九公子
  • 告别散装教程,TDSQL分布式数据库技术原理干货合辑来了!

    当下是分布式数据库发展的最佳时机。 中国移动互联网的快速发展,为新一代分布式架构技术体系提供了方向指引与最佳场景训练场,推动云计算时代分布式基础技术的诞生、...

    腾讯云数据库 TencentDB
  • 腾讯第100个开源项目:微信开源推理加速工具TurboTransformers

    4月24日,腾讯正式宣布开源Transformer推理加速工具TurboTransformers。该工具面向自然语言处理领域中Transformers相关模型丰...

    AI科技大本营
  • 腾讯开源TurboTransformers:自然语言处理推理加速工具

    4月24日,腾讯正式宣布开源Transformer推理加速工具TurboTransformers。该工具面向自然语言处理领域中Transformers相关模型...

    腾讯大讲堂
  • 腾讯云在CLUE自然语言理解分类任务中勇夺第一

    近日,腾讯云AI与腾讯优图实验室的加速团队在CLUE语言分类任务上进行试验,一举在分类任务1.0和1.1中拿下业界第一的好成绩。

    腾讯云TI平台
  • 【云原生正发声】共11期视频+PPT技术实践干货集来了(内含腾讯彩蛋)

    【云原生正发声】 目前已开展了十一期分享会,腾讯各位大咖带领大家由浅入深全方位了解云原生!涵盖热点技术最佳实践和技术优化内容分享! 小云费九牛二虎之力,给大家整...

    腾讯云原生
  • 论坛报名 | DataFunCon:AI 平台/框架论坛

    导读 DataFunCon是由DataFun主办的线上技术大会,由20余位知名专家学者出品,设置了18场专题分享,有超过80位一线资深技术专家参与分享,汇集了2...

    腾讯大数据
  • 云+社区技术沙龙第30期回顾-腾讯开源技术(文末附PPT)

    2019年12月21日,云+社区技术沙龙第30期“腾讯开源技术”在深圳腾讯大厦成功举行。本次沙龙邀请了多位腾讯技术专家就“腾讯开源的技术有哪些?开源技术如何应用...

    云加社区技术沙龙

扫码关注云+社区

领取腾讯云代金券