腾讯混元AI大模型训练技术揭秘——太极AngelPTM

news2024/11/29 3:43:30

编者按:秉承“技术提效”理念,腾讯广告不断探索技术能力边界,全面升级广告系统,基于“一大平台、两大模型”持续精进创新研发,提升投放效率与投放效果,助力广告主实现高效的全域经营与生意增长。本篇文章是技术团队在大模型训练技术方向的新探索。


一、导言

最近,腾讯发布的混元AI万亿大模型登顶权威中文测评基准CLUE榜[1]并超越人类水平。混元AI大模型采用腾讯太极机器学习平台自研的训练框架AngelPTM,相比业届主流的解决方案,太极AngelPTM单机可容纳的模型可达55B,20个节点(A100-40Gx8)可容纳万亿规模模型,节省45%训练资源,并在此基础上训练速度提升1倍!

二、背景

Transformer模型凭借其出色的表达能力在多个人工智能领域均取得了巨大成功,如自然语言处理、计算机视觉和语音处理等。与此同时,随着训练数据量和模型容量的增加可以持续提高模型的泛化能力和通用能力,研究大模型成为了近两年的趋势。如下图所示,近几年NLP预训练模型规模的发展,模型已经从亿级发展到了万亿级参数规模。具体来说,2018年BERT[2]模型最大参数量为340M,2019年GPT-2[3]为十亿级参数的模型。2020年发布的百亿级规模有T5[4]和T-NLG[5],以及千亿参数规模的GPT-3[6]。在2021年末,Google发布了Switch Transformer[7],首次将模型规模提升至万亿。

然而GPU硬件发展的速度难以满足Transformer模型规模发展的需求。近四年中,模型参数量增长了十万倍,但GPU的显存仅增长了4倍。举例来说,万亿模型的模型训练仅参数和优化器状态便需要1.7TB以上的存储空间,至少需要425张A100(40G),这还不包括训练过程中产生的激活值所需的存储。在这样的背景下,大模型训练不仅受限于海量的算力, 更受限于巨大的存储需求。

为了以最小的成本训练大模型,太极AngelPTM基于ZERO策略,将模型的参数、梯度、优化器状态以模型并行的方式切分到所有GPU,并自研ZeRO-Cache框架把内存作为二级存储offload参数、梯度、优化器状态到CPU内存,同时也支持把SSD作为第三级存储。ZeRO-Cache为了最大化最优化的利用内存和显存进行模型状态的缓存,引入了显存内存统一存储视角,将存储容量的上界由内存扩容到内存+显存总和。同时将多流异步化做到了极致,在GPU计算的同时进行数据IO和NCCL通信,使用异构流水线均衡设备间的负载,最大化提升整个系统的吞吐。ZeRO-Cache将GPU显存、CPU内存统一视角管理,减少了冗余存储和内存碎片,增加了内存的利用率,将机器的存储空间压榨到了极致。

三、大模型训练优化遇到的挑战

3.1 多级存储访存带宽不一致

在大模型训练中,激活值、梯度位于GPU中,模型的FP16/FP32参数、优化器状态位于CPU中甚至位于SSD中,模型的前向和反向在GPU上进行运算,而参数更新在CPU做运算,这就需要频繁的进行内存显存以及SSD之间的访问,而GPU访问显存的带宽为1555GB/s,显存与内存数据互传的带宽为32GB/s,CPU访问内存、显存和SSD的带宽分别为200GB/s、32GB/s、3.5GB/s,多级存储访问带宽的不一致很容易导致硬件资源闲置,如何减少硬件资源的闲置时间是大模型训练优化的一大挑战。ZeRO-Cache通过多流异步以及PipelineOptimizer来提高硬件利用率。

3.2 模型状态冗余存储

大模型训练时的模型状态存储于CPU中,在模型训练过程中会不断拷贝到GPU,这就导致模型状态同时存储于CPU和GPU中,这种冗余存储是对本就捉肘见襟的单机存储空间一种严重浪费,如何彻底的去处这种冗余,对低成本训练大模型至关重要。ZeRO-Cache秉承彻底去冗余的思想引入统一视角存储管理从根本上解决模型状态的冗余存储。

3.3 内存碎片过多

大模型拥有巨量的模型状态,单张GPU卡不能完全放置所有模型状态,在训练过程中模型状态被顺序在CPU和GPU之间交换,这种交换导致GPU显存的频繁分配和释放,此外大模型训练过程中海量的Activation也需要频繁分配和释放显存,显存频繁分配和释会产生大量的显存碎片,过多的显存碎片会导致Memory Allocator分配效率低下以及显存浪费,ZeRO-Cache设计开发了Contiguous Memory显存管理器来更细致的管理显存来减少显存碎片率。

3.4 带宽利用率低

在大模型分布式训练中多机之间会进行参数all_gather、梯度reduce_scatter以及MOE层AlltoAll三类通信,单机内部存在模型状态H2D、D2H以及SSD和Host之间的数据传输。通信以及数据传输带宽利用率低是训练框架在分布式训练中最常见的问题,合并通信以及合并数据传输作为解决带宽问题的首选手段在大模型训练中同样适用,合并通信和合并数据传输预示着需要更多的内存和显存缓存,这更加剧了大模型训练的存储压力。为了平衡高带宽利用率以及低缓存,ZeRO-Cache在多流异步的基础上,引入chunk机制管理模型状态通信以及数据传输,在梯度后处理时引入多buffer机制重复利用以分配缓存。

四、太极AngelPTM概览

太极AngelPTM的设计目标是依托太极机器学习平台,为NLP、CV和多模态、AICG等多类预训练任务提供一站式服务。其主要由高性能训练框架、通用加速组件和基础模型仓库组成:

高性能训练框架:包含大模型训练框架ZeRO-Cache,高性能MOE组件,以及3D并行和自动流水并行策略,方便用户结合多种并行策略进行大模型训练。

通用加速组件:包含可减少显存并提高精度的异构Adafactor优化器,可稳定MOE半精度训练loss的Z_loss组件,选择性重计算组件和降低通信代价的PowerSGD组件。

基础模型仓库:包含T5、BERT、GPT以及Transformer等基础模型,供用户直接使用。

五、ZeRO-Cache优化策略

ZeRO-Cache是一款超大规模模型训练的利器,其通过统一视角去管理内存和显存,在去除模型状态冗余的同时扩大单个机器的可用存储空间上限,通过Contiguous Memory显存管理器管理模型参数的显存分配/释放进而减少显存碎片,通过多流均衡各个硬件资源的负载,通过引入SSD进一步扩展单机模型容量。

5.1 统一视角存储管理

大模型训练时模型状态都位于CPU内存中,在训练时会拷贝到GPU显存,这就导致模型状态的冗余存储(CPU和GPU同时存在一份),此外大模型的训练中会用到大量的pin memory,pin memory的使用会提升性能同时会导致物理内存的大量浪费,如何科学合理的使用pin memory是ZeRO-Cache着重要解决的问题。

ZeRO-Cache本着极致化去冗余的理念引入了chunk对内存和显存进行管理,保证所有模型状态只存储一份通常模型会存储在内存or显存上,ZeRO-Cache提出异构统一存储,采用内存和显存共同作为存储空间,击破了异构存储的壁垒,极大扩充了模型存储可用空间。

在CPU时原生Tensor的底层存储机制对于实际占用的内存空间利用率极不稳定,对此问题ZeRO-Cache实现了Tensor底层分片存储的机制,在极大的扩展了单机可用的存储空间的同时,避免了不必要的pin memory存储浪费,使得单机可负载的模型上限获得了极大提升。

5.2 ZeRO-Cache显存管理器

PyTorch自带的显存管理器可以Cache几乎所有显存进行二次快速分配,在显存压力不大的情况下这种显存分配方式可以达到性能最优,但是对于超大规模参数的模型显存压力剧增且由于参数梯度频繁的显存分配导致显存碎片明显增多,PyTorch Allocator尝试分配显存失败的次数增加,导致训练性能急剧下降。

ZeRO-Cache引入了一个Contiguous Memory显存管理器,其在PyTorch Allocator之上进行二次显存分配管理,模型训练过程中参数需要的显存的分配和释放都由Contiguous Memory统一管理,在实际的大模型的训练中其相比不使用Contiguous Memory显存分配效率以及碎片有显著的提升,模型训练速度有质的飞越。

5.3 PipelineOptimizer

ZeRO-Infinity利用GPU或者CPU更新模型的参数,特别是针对大模型,只可以通过CPU来更新参数,由于CPU更新参数的速度相比GPU更新参数有数十倍的差距且参数更新几乎可以占到整个模型训练时间的一半,在CPU更新参数的时候GPU空闲且显存闲置,造成资源的极大浪费。

ZeRO-Cache会在模型参数算出梯度之后开始Cache模型的优化器状态到GPU显存,并在参数更新的时候异步Host和Device之间的模型状态数据传输,同时支持CPU和GPU同时更新参数。ZeRO-Cache pipeline了模型状态H2D、参数更新、模型状态D2H,最大化的利用硬件资源,避免硬件资源闲置。

此外,ZeRO-Cache自研了异构Adafactor优化器,支持CPU和GPU同时进行参数的更新,其可以减少33%的模型状态存储空间,同时可提高模型训练精度。

5.4 多流异步化

大模型训练过程中有大量的计算和通信,包括GPU计算、H2D和D2H单机通信、NCCL多机通信等,涉及的硬件有GPU、CPU、PCIE等。ZeRO-Cache为了最大化的利用硬件,多流异步化GPU计算、H2D和D2H单机通信、NCCL多机通信,参数预取采用用时同步机制,梯度后处理采用多buffer机制,优化器状态拷贝采用多流机制。

5.5 ZeRO-Cache SSD框架

为了更加低成本的扩展模型参数,ZeRO-Cache进一步引入了SSD作为三级存储,针对GPU高计算吞吐、高通信带宽和SSD低PCIE带宽之间的GAP,ZeRO-Cache放置所有fp16参数和梯度到内存中,让foward和backward的计算不受SSD低带宽影响,同时通过对优化器状态做半精度压缩来缓解SSD读写对性能的影响。

六、实验效果

本小节基于A100 GPU(40G)集群和1.6T ETH RDMA网络环境对比评测目前业界比较主流的几个大模型框架在不同规模模型上的性能表现,包括首次提出ZeRO理念的框架A、可高效扩展并训练Transformer模型的框架B以及集成高效并行化技术的框架C。秉承降低成本、提高训练效率的理念,我们以最少的资源去呈现ZeRO-Cache的高性能和大模型能力,环境配置为4台1T内存,96核CPU机器,每台机器有8张A100 GPU(40G),模型具体配置如下表,测试均采用真实训练数据,序列长度为512,主要对比测试TFLOPs/s。

七、实验数据

图表说明:图中数值0表示该规模模型不能在当前资源下运行,而C框架因官方缺乏多机训练文档,多次测试失败,暂且以0表示其性能数据。各个框架的测试性能数据均以Batch Size打满GPU为准。

实验数据表明虽然在1.7B小模型上ZeRO-Cache单机略差于B框架(ZeRO-Cache前向和反向计算中需要进行参数的预取,而B框架无需此操作),但是在其他规模模型上无论单机多机性能均优于其他框架,我们以13B模型为例来说明各个框架对比A框架的性能提升,以Tflops/s进行计算,具体见下表。此外,在GPT3-175B大模型上,ZeRO-Cache仅仅只需要32张卡便可进行模型的训练,而其他三个框架均无法在这么少资源下进行训练。

八、业务应用

混元AI大模型先后支持了包括微信、QQ、游戏、腾讯广告、腾讯云等众多产品和业务,通过NLP、CV、跨模态等AI大模型,不仅为业务创造了增量价值而且降低了使用成本。特别是广告场景的落地应用带来了大幅的GMV提升,验证了大模型的商业化能力。

九、展望未来

ZeRO-Cache将继续秉承降低成本、提高训练效率的理念,用更少的资源以更快的速度训练更大的模型。我们后续会在ZeRO-Cache引入模型并行、流水并行等并行策略进一步提高框架的训练速度,同时通过模型状态无损压缩存储对SSD框架做进一步性能优化。

十、致谢:北京大学-腾讯协同创新实验室

北京大学-腾讯协同创新实验室成立于2017年,主要在人工智能、大数据等领域展开前沿探索和人才培养,打造国际领先的校企合作科研平台和产学研用基地。实验室通过合作研究,在理论和技术创新、系统研发和产业应用方面取得重要成果和进展,如分布式机器学习平台Angel,已在国际顶级学术会议和期刊发表学术论文20余篇。

**AngelPTM由腾讯和北京大学河图团队共同设计开发完成。**北大河图团队来自北京大学-腾讯协同创新实验室主任崔斌教授课题组, 自主研发了分布式深度学习系统河图(Hetu[8],https://github.com/PKU-DAIR/Hetu),面向拥有海量训练数据、超大模型参数的深度学习训练场景,并具备通用、高效、敏捷、灵活和可扩展等特性。AngelPTM集成了多项北大河图团队在大规模预训练模型的系统优化方面的工作,兼顾学术界的创新性和工业界的可用性。

此前,河图团队还参与了腾讯稀疏大模型训练框架HEAP及新一代大模型参数服务器 AngelPS的前瞻研究[9]和系统建设工作,推动河图创新成果在腾讯实际业务中的应用落地,促进产学研合作和成果转化。

附录:参考文献

[1] 腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型

https://mp.weixin.qq.com/s/TG2vlT0UrlXSdGgNOlLn5w

[2] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805

[3] Language Models are Unsupervised Multitask Learners https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

[4] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer [1910.10683] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

[5] T-NLG Turing-NLG: A 17-billion-parameter language model by Microsoft - Microsoft Research

[6] Language Models are Few-Shot Learners [2005.14165] Language Models are Few-Shot Learners

[7] Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity https://arxiv.org/abs/2101.03961

[8] 北大腾讯联合共建Angel4.0,自研深度学习框架“河图”融入生态

https://mp.weixin.qq.com/s/03GabpMzwCi7MLvDbCGloQ

[9] 腾讯北大合作的稀疏大模型训练加速方案HET入选国际顶会VLDB

https://mp.weixin.qq.com/s/t6y05tv4CHo5dQaQ0A4tbA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

请介绍类加载过程,什么是双亲委派模型?

第23讲 | 请介绍类加载过程,什么是双亲委派模型? Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是&#xff0…

ESP32驱动-红外寻迹传感器驱动

红外寻迹传感器驱动 1、红外寻迹传感器介绍 红外寻迹传感器具有一对红外线发射管与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,输出接口会输出一个数字信号(低电平或高电平,取决于电路…

JVM篇之内存及GC

目录一、JVM内存区域1.1程序计数器1.2虚拟机栈1.3本地方法栈1.4堆1.5方法区二、JVM运行时内存2.1新生代(轻量级GC)2.2老年代(重量级GC)一、JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法栈】、线程共享区域【JAVA 堆、…

蓝桥杯嵌入式PWM_IN(打开中断)

1.原理图 2.配置 3.代码 关键函数 HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1) HAL_TIM_IC_CaptureCallback(TIM_HandTypeDef *htim)//回调函数 HAL_TIM_GET_COUNTER(&htim3) __HAL_TIM_SetCounter(&htim3,0)void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef …

spring5源码篇(4)——beanFactoryPostProcessor执行/注解bean的装配

spring-framework 版本:v5.3.19 前面研究了beanDefinition的注册,但也仅仅是注册这一动作。那么在spring容器启动的过程中,是何时/如何装配的?以及装配的bean是如何注入的? (考虑到xml方式基本不用了以及篇…

探秘MySQL——全面了解索引、索引优化规则

文章目录0.什么是索引1.常用索引分类逻辑维度底层数据结构维度物理维度(InnoDB)2.为什么底层是B树平衡二叉查找树红黑树B树(多叉)B树(多叉)3.MySQL索引优化SQL性能分析之explainQ.MySQL如何查看查询是否用到…

fastdfs提高系统连接数

1.操作系统 vi /etc/systemd/system.conf 修改后重启系统。 ulimit -n 验证是否生效。 2.tracker ①docker exec -it trackerID bin/bash ②vi /etc/fdfs/tracker.conf 一般性能测试场景可配置10000 3.storage ①docker exec -it storageID bin/bash ②vi /etc/fdfs/st…

k8s-Pod域名学习总结

k8s-Pod域名学习总结 大纲 k8s内置DNS服务 配置Pod的域名服务 CornDNS配置 默认Pod的域名 自定义Pod的域名 实战需求 1 Pod有自己的域名 2 集群内部的Pod可以通过域名访问其他的Pod 基础准备: 1 k8s 集群版本1.17 k8s内置DNS服务 k8s1.17安装完成后自动创建…

保姆级使用PyTorch训练与评估自己的MixMIM网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…

【python】如何用canvas在自己设计的软件上作画

文章目录前言Canvas组件Canvas画布界面画长方体画多边形PhotoImage组件展示gif的图片展示gif法2总结前言 python学习之路任重而道远,要想学完说容易也容易,说难也难。 很多人说python最好学了,但扪心自问,你会用python做什么了&a…

数据结构——线性数据结构(C语言实现顺序表详解)

1.什么线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串等… 在讲顺序表之前,我们先大致了解一下线性表。…

qt .pro文件 qmake编译过程

#:注释一行 QT:此项目中使用的Qt modules列表 CONFIG:此项目中使用的配置选项 TARGET:目标输出文件的名字 TEMPLATE:当生成二进制文件时项目的模版,例如app,lib 平台下使用 windows { SOURCES SysInf…

剑指 Offer II 024. 反转链表

题目链接 剑指 Offer II 024. 反转链表 easy 题目描述 给定单链表的头节点 head,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:h…

不用费劲,这5款效率工具为你解决学习工作烦恼

今天我要向大家推荐5款超级好用的效率软件,无论是在学习还是办公中都能够极大地提高效率。这些软件可以帮助你解决许多问题,而且每个都是真正的神器。 1.键盘仿真鼠标——NeatMouse NeatMouse 是一个小型的工具能够使用鼠标光标控制指针。当你的鼠标不…

python编程基础

python编程基础 1、什么是编程语言? 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错&#xf…

opencv加水印

本文介绍opencv给图片加水印的方法。 目录1、添加水印1.1、铺满1.2、在指定区域添加1.3、一比一铺满1、添加水印 添加水印的原理是调低两张图片的透明度,然后叠加起来。公式如下: dst src1 * opacity src2 * (1 - opacity) gamma; opacity是透明度&a…

UE官方教程笔记02-实时渲染基础下

对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记没听懂的地方就瞎写反射实时渲染中反射是一个非常有挑战的特性UE中有多种不同的方案,各有各的优势和缺点反射捕获屏幕空间反射平面反射LumenRT Reflection反射捕获在指定位置捕获一张Cube Map需要预计算…

低代码:助力乡村振兴事业开启“智慧模式”

伴随着脱贫攻坚目标任务的全面完成,我国“三农”工作重心历史性地转向全面推进乡村振兴,这也标志着我国农业农村工作迈上了一个新台阶。 什么是乡村振兴? 乡村振兴是新时代“三农”工作的总抓手,坚持农业农村优先发展,…

windows 下docker 安装clickhouse

docker 下载https://www.docker.com/products/docker-desktop/将下载下来的Docker Desktop Installer.exe文件双击进行安装即可,安装完成后,任务栏会出现一个蓝色的小鲸鱼图标(注意安装完成后可能会重启系统)Docker Desktop如果出…

禁用XXE处理漫谈

前言 近期准备面试题时,XXE漏洞防范措施(或者说修复方式)在一些文章中比较简略, 故本文根据研究进行总结,作为技术漫谈罢了。 简述 XXE漏洞 XXE(XML外部实体注入),程序解析XML数…