飞桨大模型分布式训练技术

今天我为大家介绍飞桨大模型分布式训练技术,内容分为以下几个部分:

首先,我会介绍大模型训练面临的重点难题;然后,为大家介绍飞桨在大模型训练领域的特色分布式训练技术和优化方案;最后,伴随着代码示例和大模型套件,为大家展示如何使用飞桨框架训练大模型。

1. 背景与挑战

近年来,大模型由于良好的模型效果和广阔的应用前景,逐渐受到业界的广泛重视。主流的 AI 科技公司也站在了大模型研究的前沿,模型参数量的规模呈现快速增长的趋势。从 2018 年 1 亿参数规模的模型增长至今已达千亿参数量规模。

图片

大模型的出现给模型训练带来极大的挑战。即使使用 A800、H800 这样的 GPU,单张 GPU 的算力和显存都是远远无法满足大模型训练需求的。为了保证大模型可训练,并提高整体训练吞吐,需要用到模型并行 + 数据并行等技术。

图片

这张图展示的是大模型分布式训练技术的发展历程。

对于十亿及以下的模型,单卡往往就能放下全量模型参数和梯度,传统的数据并行即可即可覆盖其应用场景。当模型规模到了百亿量级以后,需要使用分组参数切片的方式将模型参数、梯度和优化器状态切分到各个卡上,保证单机可放下。当模型规模到了千亿以后,则需要同时使用模型并行、数据并行等多种并行技术混合进行高效训练。在这个阶段里,分布式并行技术从单一的基础并行策略演进为多种并行策略的组合。

当模型规模到了万亿级别以后,稠密模型已经难以高效训练,从而衍生出稀疏专家模型,也伴随着 MoE 等并行策略的演进与迭代。

下面,我将为大家介绍飞桨在大模型训练领域的特色分布式训练技术。

图片

2. 飞桨大模型特色分布式训练技术

飞桨在 2021 年提出了业界首个 4D 混合并行训练方案,将数据并行、张量模型并行、流水线并行、分组参数切片并行有机结合起来,实现百亿、千亿参数稠密大模型的高效训练。

在最内层,我们进行张量模型并行以及 Sharding 的参数的切分,并使用流水线并行将张量模型并行和 Sharding 并行串联起来。在最外层,使用数据并行技术来提高整体训练吞吐。这种技术应用在了文心 ERNIE 千亿模型训练上,相较于 3D 混合并行方案获得了 24%~44% 的提速效果。

图片

而在稀疏专家模型领域,飞桨在 2022 年提出了高效可扩展的 MoE 训练架构,并结合 4D 混合并行技术,解决稀疏专家模型训练效率低下的难题。

首先,MoE 训练面临的一个重要问题是巨大的参数量,参数量达到万亿级别,但是这些参数是高度稀疏的,MoE 的路由模块每次只会激活部分参数。针对这个问题,飞桨提出了通用多级参数存储的方案,将短期不使用到的参数先 offload 到 CPU 内存、甚至 offload 到 SSD 中去;当即将需要使用时,再从 CPU 内存或 SSD 中预先加载到显存中,保证模型训练和参数预加载 overlap 起来。

其次,MoE 训练面临的另一个重要问题是分布式通信慢,在 MoE 的路由模块里存在 All-to-All 通信,严重影响模型训练效率。飞桨提出了硬件拓扑自动感知技术,感知当前集群的拓扑信息,对 All-to-All 通信进行分层处理,提高分布式通信效率。这些技术最终应用在了百度在 2022 年发布的 VIMER-UFO 视觉大模型中,性能较 PyTorch 有 66% 的提升,达到业内领先水平。

图片

这页 PPT 展示的是蛋白质结构预测领域飞桨的混合并行加速方案。蛋白质结构预测模型中存在以下几个重点难题。其一,蛋白质结构预测中往往会引入 MSA 的维度,MSA 维度往往会特别大,导致单卡无法放下全量模型。其二,在模型训练过程中,模型中有多个分支结构,在传统的方案里这几个分支结构是串行执行的,计算效率较低。其三,模型训练过程中会产生许多很小的张量,数千个小张量的计算和通信都会造成较大的性能瓶颈。

为了解决这些问题,飞桨创新提出了分支并行方案,让模型中的多个分支结构运行在不同设备上,并在必要时候进行聚合。与此同时,我们融合了分支并行、数据并行和动态轴并行形成了 3D 混合并行方案,并使用梯度融合的方式解决数千个小张量计算和通信慢的问题,相比于 AlphaFold 2 获得了 106% 的性能提升。同时,我们使用该方案在千卡国产硬件上训练蛋白质预测模型,整体训练时长从 7 天缩短到了 2.6 天,极大提高了训练效率。

图片

这页 PPT 展示的是飞桨在超长序列训练领域的解决方案。目前许多大模型采用的是 Transformer 的结构,Transformer 结构里的 Self Attention 模块的显存占用是与序列长度的平方成正比的,这给超长序列训练带来极大的挑战。针对这个问题,飞桨集合了 FlashAttention 方案,可将 Attention 模块的显存占用从平方复杂度降低到线性复杂度。

但是,即使将 Attention 模块的显存占用从平方复杂度降低到线性复杂度,整个网络里 Activation 的显存占用仍然与序列长度成正比,当序列长度达到 16K、32K 时会面临巨大的显存压力。而在多种并行策略中,基本只有张量模型并行才能节省 Activation 的显存占用,但当张量模型并行大约 8 后,就会面临跨机的问题,跨机张量模型并行会造成性能的严重下滑。

针对这个问题,飞桨独创了 Segment Parallel 的策略切分序列维度,且可以与数据并行、张量模型并行、序列并行、流水线并行等方案自由组合,达到近线性扩展。

图片

以上介绍的是在某些特定场景下的分布式并行策略。

但是,实际大模型训练过程是非常复杂的,如何根据当前模型结构和集群环境找出最佳的分布式并行策略是十分困难的。针对这个问题,飞桨提出了端到端自适应分布式训练框架,我们通过建立统一的逻辑计算视图表征大模型的模型结构和算力要求,建立统一的异构资源视图表征算力环境和网络环境,结合分布式代价模型,自动搜索出适合当前模型和资源状况的最优并行策略,并进行资源的弹性调度。

以上介绍的是飞桨特色大模型分布式并行策略,下面我为大家介绍飞桨的大模型端到端性能优化方案。

图片

3. 飞桨大模型端到端性能优化方案

下图展示的是飞桨的大模型端到端性能优化方案,涵盖数据读取、模型实现、高性能算子实现和分布式策略优化等模型训练全链条。

图片

在原始数据读取方面,飞桨提供了多进程数据读取 + 每个进程独享数据队列的方式加速数据读取过程,防止 Python 端 GIL 锁以及队列资源抢占导致数据加载低效等问题。

在模型训练过程中,往往还需要对原始数据进程预处理。飞桨在 CV 领域提供了 FlyCV 库,提供高效的图像预处理能力;在 NLP 领域提供了 FastTokenizer,性能达到业内领先水平。

图片

这里是我们针对变长输入模型数据预处理的优化技术。在变长输入下,各设备间的计算负载是不均等的,需要对输入数据进行负载均衡处理保证计算的均衡性。飞桨提出了 GPU + CPU 混合处理的方式对输入数据进行数据交换,实现负载均衡,且让负载均衡过程与模型训练过程完全 overlap,提高大模型整体训练速度。

图片

在模型实现层面,飞桨也做了许多优化工作。例如,针对变长输入模型,飞桨提出了 FlashAttention + 分组多流的优化思路,在 FlashAttention 的基础上对变长输入进行分组并发计算,提高整体训练吞吐。除此以外,我们还针对 Transformer 类模型进行了多粒度的选择性重计算策略,用户可以根据当前显存占用情况选取最佳的重计算策略,达到计算性能和显存占用之间的平衡。

图片

在高性能算子优化方面,针对 Transformer 类大模型,飞桨实现了全环节的算子融合策略,涵盖 Attention、Linear、FFN、Optimizer 等模型的每一个环节,发挥极致的硬件性能。

图片

在分布式策略优化方面,除了常规的反向计算与梯度通信的 overlap 外,飞桨还创新提出了跨 step 的前向计算与参数广播的 overlap,让上一个 step 的参数广播与下一个 step 的前向计算并发执行,在 GPT 类大模型上可获得 11% 左右的提速。

图片

结合上述在大模型上的性能优化工作,我们使用飞桨框架在国际权威 AI 基准测试 MLPerf Training v2.0 和 MLPerf Training v2.1 上提交了 BERT 模型的单机和多机性能数据。在同等 GPU 配置下,飞桨框架性能排名世界第一。

图片

同样地,我们在 GPT 等典型大模型上也是达到了业内领先的效果。下图展示的 GPT 百亿模型 Megatron-LM 和飞桨的性能对比结果。飞桨相较 Megatron-LM 有 9%~11% 的提速。

图片

以上介绍的是飞桨在大模型分布式训练上的特色技术。下面我将用几个实践案例,为大家介绍如何使用飞桨框架来训练大模型。

4. 飞桨大模型应用实践

首先介绍的是飞桨的大模型套件 PaddleFleetX。PaddleFleetX 的定位是端到端大模型套件,它打通了大模型预训练-有监督精调-压缩-推理等开发部署全流程,降低大模型的入门门槛。这里贴的是 PaddleFleetX 的 github 地址,感兴趣的听众可以尝试使用。(https://github.com/PaddlePaddle/PaddleFleetX)

图片

下面我首先介绍下如何使用飞桨实现混合并行的模型。首先介绍的是张量模型并行的例子。在 GPT 的 FFN 结构里有 2 个 Linear 层。变成张量模型并行的代码,只需要把这两个 Linear 层对应地替换成飞桨的张量模型并行 API 即可。与此同时,在模型组网结束后,调用 distributed_model、distributed_optimizer 等 API 将单机模型转换为分布式模型即可。

图片

这里介绍的是一个流水线模型并行的代码例子。与其他并行方式不同,流水线是做的层间的切分,不同设备分到不同的层,因此组网写法上会有一定的特殊性。首先,我们需要定义若干的 LayerDesc,每个 LayerDesc 对应网络中的每一层。然后,同样地,将由 LayerDesc 组出来的网络调用 distributed_model、distributed_optimizer 等 API 将单机模型转换为分布式模型即可。最后调用 train_batch 这个 API 进行流水线并行调度。

图片

上述讲的 2 个例子偏手动并行,即用户组网的时候需要感知这是个分布式程序。这里给大家展示的是一个单卡组网 + 简单的分布式标记即可自动转换为分布式程序的例子。

这里涉及的是飞桨的自动并行技术。用户在组网的时候写的是单卡的程序,通过调用自动并行的 shard_tensor 等 API 标记部分 tensor 应做什么样的分布式切分。最后调用 Engine 接口,内部会自动将用户的单卡组网转换为分布式组网,并进行训练。

图片

以上是我今天分享的全部内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】STM32学习笔记-SPI通信外设(39)

00. 目录 文章目录 00. 目录01. SPI简介02. SPI特征03. SPI外设简介04. SPI框图05. SPI基本结构06. 主模式全双工连续传输07. 非连续传输08. 软件/硬件波形对比09. 附录 01. SPI简介 在大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。…

第十九回 梁山泊义士尊晁盖 郓城县月夜走刘唐-FreeBSD Ubunut系统后台运行程序

林冲请晁盖坐了第一把交椅,吴用坐了第二把交椅,公孙胜坐了第三把交椅,还想让,晁盖吴用公孙胜都不肯接受相让,因此林冲坐了第四把交椅。 一天小喽啰报济州府派了2000人马来攻打梁山。吴用说不须兄长挂心,吴某…

学习使用Flask模拟接口进行测试

前言 学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的 Flask的初始化 app Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称 app…

webassembly003 TTS BARK.CPP-02-bark_tokenize_input(ctx, text);

bark_tokenize_input函数 bark是没有语言控制选项的,但是官方的版本无法运行中文bark_tokenize_input会调用bert_tokenize函数,bark_tokenize_input函数对中文分词失效,也就是导致不支持中文的原因。 void bark_tokenize_input(struct bark_…

Mybatis Plus轻松实现数据库变更全局审计日志

Mybatis Plus轻松实现数据库变更全局审计日志 Mybatis Plus轻松实现数据库变更全局审计日志引言实现审计日志1.创建审计日志表2.创建AuditLogAspect用于记录请求日志4. 保存审计日志 总结 Mybatis Plus轻松实现数据库变更全局审计日志 引言 在日常的业务开发中,监…

MySQL十部曲之一:MySQL概述及手册说明

文章目录 数据库、数据库管理系统以及SQL之间的关系关系型数据库与非关系型数据库MySQL程序系统变量系统状态变量SQL模式MySQL数据目录手册语法约定 数据库、数据库管理系统以及SQL之间的关系 名称说明数据库(Database)即存储数据的仓库,其本…

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则(1)选择根桥网桥原则(2)选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

数据结构——并查集

1.并查集的定义 并查集其实也是一种树形结构,在使用中通常用森林的方式来表示 并查集的逻辑结构其实就是集合 并查集一般可以通过双亲写法(顺序结构)来完成,即通过一个数组存储父亲结点的下标 int s[10005]; int main() {for(…

原来服务器这么有用-使用轻量应用服务器搭建专属自己PDF处理工具

原来服务器这么有用-使用轻量应用服务器搭建专属自己PDF处理工具 1、前言 PDF文件是日常办公中经常使用的一种文档格式。最近,青阳面临一个问题:某公司发送过来的文件需要我们进行印章流程,但由于该公司系统在电子文件加盖电子公章后会自动…

万户 ezOFFICE wpsservlet SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

10V单通道负载开关

概述 EM5220是一款单通道负载开关,具有可编程上升时间和集成输出放电控制。该设备包含一个P沟道NOSFET,可以通过输入进行操作电压范围为4.5V至10V。开关由接通和断开低电平逻辑输入控制,其能够与GPIO信号接口。设备的可编程上升时间可以减少…

代码随想录刷题笔记-Day15

1. 完全二叉树的的节点个数 222. 完全二叉树的节点个数https://leetcode.cn/problems/count-complete-tree-nodes/ 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没…

课时7:shell基础_shell简介

1.3.1 shell简介 学习目标 这一节,我们从 运维、shell语言、小结 三个方面来学习。 运维 简介 运维是什么?所谓的运维,其实就是公司的内部项目当中的一个技术岗位而已,它主要做的是项目的维护性工作。它所涉及的内容范围非常…

Redhat 8.4 一键安装 Oracle 11GR2 单机版

Oracle 一键安装脚本,演示 Redhat 8.4 一键安装 Oracle 11GR2 单机版过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:Shell脚本安装Oracle数据库 脚本…

插接母线温度在线监测系统研究与应用

摘要:低压封闭式插接母线是供配电设施的关键部件,安装在生产车间内部高空,不易保养和维护,在安装不良或保养不当时易发生故障。插接点温度的异常变化与母线故障的发生有着密切的关系,以汽车整车制造工厂为例&#xff0…

Unity 策略模式(实例详解)

文章目录 简介示例1:角色攻击行为示例2:游戏内购折扣策略示例3:NPC寻路策略示例4:动画过渡策略示例5:敌人AI决策策略 简介 在Unity中使用策略模式,我们可以将不同的行为或算法封装成独立的类(策…

SpringMVC 自动配置

SpringMVC 自动配置 一、WebMvcAutoConfiguration(SpringMVC自动配置)二、DisPatcherServletAutoConfiguration.class(中央调度器自动配置)三、WebMvcConfigurationSupport(SpringMVC组件配置类)四、Servle…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

网络隔离场景下访问 Pod 网络

接着上文 VPC网络架构下的网络上数据采集 介绍 考虑一个监控系统,它的数据采集 Agent 是以 daemonset 形式运行在物理机上的,它需要采集 Pod 的各种监控信息。现在很流行的一个监控信息是通过 Prometheus 提供指标信息。 一般来说,daemonset …

低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别

低功耗蓝牙(BLE) vs 经典蓝牙(SPP) 区别项低功耗蓝牙(BLE)经典蓝牙(SPP 串行端口协议)蓝牙版本蓝牙版本 > 4.0,又称蓝牙低功耗、蓝牙智能经典蓝牙2.0 或更早版本,经典配对模式在两台蓝牙设备之间建立虚拟串口数据连接,提供一种简单而直接…
最新文章