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

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

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

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.mzph.cn/news/658531.shtml

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

相关文章

ONLYOFFICE | 免费开源办公神器新选择

目录 前言: 1、什么是ONLYOFFICE? 2、ONLYOFFICE下载使用 3、ONLYOFFICE团队协作云办公功能 4、ONLYOFFICE 8.0新版本的亮点功能 4.1、显示协作者头像 4.2、插件 UI 界面更新 4.3、可填写的 PDF 表单 5、最后 前言: 一个好的开发工具…

blender关于几何接近(geometry proximity)节点的理解

如图,可以见到,我输入了一个立方体,一个圆锥体,为了便于区分 ,将原生的立方体与圆锥转为了曲线,而进行了几何接近处理的网格不进行此转换。 几何接近的输入端,分为target(目标&…

Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件

Adobe Photoshop 2024 v25.4.0更新了,从照片编辑和合成到数字绘画、动画和图形设计,任何您能想象到的内容都能通过PS2024轻松实现。 利用人工智能技术进行快速编辑。学习新技能并与社区分享您的工作。借助我们的最新版本,做令人惊叹的事情从未…

更改远程桌面网关端口和远程Web应用程序端口

很多玩Home-Lab的小伙伴会使用远程桌面网关(Remote Desktop Gateway)来安全远程家庭内网的计算机,但由于国内电信法律法规的原因,普通家庭宽带并不能使用默认的443端口(TCP)和3391端口(UDP&…

qt-C++笔记之QStringList、QList<QString>、QString、QChar、QList<QChar>区别

qt-C笔记之QStringList、QList、QString、QChar、QList区别 —— 杭州 2024-01-30 凌晨0:27 参考博文&#xff1a;qt-C笔记之QStringList code review! 文章目录 qt-C笔记之QStringList、QList<QString>、QString、QChar、QList<QChar>区别1.Qt的字符容器类1.QSt…

postgresql 查询缓慢原因分析

pg_stat_activity 最近发现系统运行缓慢&#xff0c;查询数据老是超时&#xff0c;于是排查下pg_stat_activity 系统表&#xff0c;看看有没有耗时的查询sql SELECT pid, state, query, query_start, backend_type FROM pg_stat_activity WHERE state active AND query LIK…

Android 使用高德地图

一、获取高德平台key 【1】基于application包名&sha1值在高德控制台获取key值&#xff0c;详情参考&#xff1a; 获取Key-创建工程-开发指南-Android 地图SDK | 高德地图API 【2】在manifest中声明权限 【3】将拿到的key值在manifest中进行声明 <!--允许程序打开网络…

git clone常见问题一览及解决方法

在使用Ubuntu下&#xff0c;终端运行git clone命令时会遇见许多问题&#xff0c;本文主要针对一些常见的问题进行整理。关于换源问题&#xff0c;推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述&#xff0c;ubuntu下个人使用发现体验良好&am…

【Java】创建一个SpringBoot项目

软件版本&#xff1a;IDE专业版 一、创建 创建项目时&#xff0c;要注意的有下面几点 1、 为了使用JDK1.8&#xff0c;我们在创建时用阿里云国服&#xff0c;将Server URL &#xff1a; https://start.spring.io/ 或者http://start.springboot.io/更改为&#xff1a;https:/…

Roxlabs全球IP代理服务:解锁高效数据采集与网络应用新境界

引言 在这个数字化迅速发展的时代&#xff0c;数据采集和网络应用的重要性显得愈发突出。江苏阿克索网络科技有限公司旗下的Roxlabs&#xff0c;以其卓越的全球IP代理服务&#xff0c;正引领着这一领域的创新和发展。Roxlabs不仅提供遍及200多个国家和地区的高质量动态住宅IP资…

Java基础—面向对象—19static关键字详解、抽象类、接口、N种内部类

1、static关键字 匿名代码块、静态代码块、构造方法 静态代码块是在类加载的时候执行&#xff0c;仅执行一次 匿名代码块在调用构造函数之前 验证如下图&#xff1a; 2、静态导入包&#xff08;可能很多人听都没听过&#xff09; 3、Math是用final关键字的&#xff0c;fina…

日调用量超千万,超低查询延迟!跨越速运基于Flink + OceanBase的实时分析解决方案与实践

跨越速运成立于 2007 年&#xff0c;是一家在物流行业颇具影响力的大型综合速运企业。随着国内经济的持续增长&#xff0c;消费者的购物习惯也在不断变化&#xff0c;对物流行业的需求呈现爆发式增长。目前&#xff0c;跨越速运的服务已经覆盖全国 99% 的城市&#xff0c;年服务…

边缘计算第二版——第5章 边缘计算系统平台

5.3 面向智能家居的边缘计算系统 5.3.1 为什么要用EdgeOsH 智能家居的定义&#xff1a;一个自动化且智能的家居环境&#xff0c;使得居住者能够享受更健康、更舒适的生活。为了满足和改善居住者的生活方式&#xff0c;智能家居应该同时具备自我意识、自我管理、自我学习的能力…

【项目管理】整合管理

一、管理基础 1、项目整合管理由项目经理负责&#xff0c;项目经理负责整合所有其他知识领域的成果&#xff0c;并掌握项目总体情况。项目整合管理的责任不能被授权或转移&#xff0c;项目经理必须对整个项目承担最终责任。整合是项目经理的一项关键技能。执行项目整合时项目经…

java学习_数组

数组的储存原理 java内存分配数组名.length动态初始化数组的初始化 静态初始化 数组的长度eg. b.应用举例 c.在java中多个数组之间是可以相互赋值的。 eg. int []arr2 {1,2,3,4,5,6,7} int [] arr1arr2; 数组案例&#xff1a; 数组的初始化数组的访问数组的遍历 importjava.…

AIGC项目——Meta:根据对话音频生成带动作和手势的3d逼真数字人

From Audio to Photoreal Embodiment: Synthesizing Humans in Conversations From Audio to Photoreal Embodiment:Synthesizing Humans in Conversations 从二元对话的音频中&#xff0c;我们生成相应的逼真的面部、身体和手势。 概括性:角色是由作者的声音驱动的(而不是模…

SpringBoot 配置类解析

全局流程解析 配置类解析入口 postProcessBeanDefinitionRegistry逻辑 processConfigBeanDefinitions逻辑 执行逻辑解析 执行入口 ConfigurationClassPostProcessor.processConfigBeanDefinitions()方法中的do while循环体中 循环体逻辑 parse方法调用链 doProcessConfigurat…

STM32——看门狗

STM32——看门狗 1.独立看门狗IWDG 独立看门狗介绍 什么是看门狗&#xff1f; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#x…

2023IT监控运维管理行业年度报告

随着信息技术的快速发展&#xff0c;IT监控运维管理软件在各行各业的应用越来越广泛。LinkSLA智能运维管家作为IT监控运维管理领域的优势品牌&#xff0c;深入洞察行业发展趋势&#xff0c;致力于为客户提供高效、稳定、安全的IT监控解决方案。 根据Gartner和艾瑞数据曾预测&a…