Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add overview of distributed-training. #4800

Merged
merged 10 commits into from
Jun 1, 2022

Conversation

gongweibao
Copy link
Collaborator

@gongweibao gongweibao commented May 17, 2022

Add an overview of distributed training. It's a restructured implementation of it.

@paddle-bot-old
Copy link

感谢你贡献飞桨文档,文档预览构建中,Docs-New 跑完后即可预览,预览链接:http://preview-pr-4800.paddle-docs-preview.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html
预览工具的更多说明,请参考:[Beta]飞桨文档预览工具

@paddle-bot-old
Copy link

paddle-bot-old bot commented May 17, 2022

✅ This PR's description meets the template requirements!
Please wait for other CI results.

@gongweibao gongweibao merged commit b260c01 into PaddlePaddle:develop Jun 1, 2022
1.概述
------

近几年,深度学习领域的开发者们对模型效果的追求愈演愈烈,各大榜单纪录不断刷新,而这个现象的背后都有着 “大规模训练” 的身影。简单来说,就是使用大规模的数据或大规模参数量的模型来做训练。大规模的数据可以让模型有足够的 “教材” 用于 “学习”,而大规模的参数量则可以让模型“学习能力” 更强,更容易 “学习” 到“教材”中的“知识”。在数据和参数规模增长的过程中,常规的单机训练由于硬件资源的限制渐渐显得捉襟见肘,而分布式训练则成为了广大开发者的必然选择。
Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

近几年,大模型训练在深度学习领域开始新一轮的激烈角逐,各大榜单纪录不断刷新,形成愈演愈烈之势。大模型训练简单来说,就是通过大规模数据让模型有足够的 “教材” 用于 “学习”,通过大规模参数量让模型的“学习”能力更强,更容易 “学习” 到“教材”中的“知识”。随着数据和参数量的不断增长,常规训练方式由于硬件资源的限制形成严重瓶颈,因此分布式训练逐渐应运而生。

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这段话其实都好。^_^

飞桨是我国首个开源开放、自主研发、功能完备的产业级深度学习框架,其英文名“PaddlePaddle” 正是 “Parallel Distributed Deep Learning” 并行分布式深度学习的字母缩写组合。飞桨不仅在业内最早支持了万亿级稀疏参数模型的训练能力,而且近期又创新性的提出了 4D 混合并行策略,以训练千亿级稠密参数模型,可以说分布式训练是飞桨最具特色的技术之一。

飞桨的分布式训练技术在对外提供之前就已经在百度内部广泛应用,如搜索引擎、信息流推荐、百度翻译、百度地图、好看视频、文心 ERNIE 等等,既包含网络复杂、稠密参数特点的计算机视觉(CV)\ 自然语言处理(NLP)模型训练场景,又覆盖了有着庞大的 Embedding 层模型和超大数据量的推荐搜索训练场景,可谓是分布式训练技术得天独厚的“练功房”。

Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

飞桨分布式训练是飞桨框架的核心技术,飞桨英文名“PaddlePaddle” 正是 “Parallel Distributed Deep Learning” 并行分布式深度学习的字母组合,不仅在业内最早支持了万亿级稀疏参数模型的训练能力,而且近期又创新性的提出了 4D 混合并行策略,以训练千亿级稠密参数模型。可以说,分布式训练是飞桨最具特色的技术之一,解决各种场景和各种硬件设备下的大模型训练问题。(下面提供稀疏和稠密的模型训练图)

搜索推荐场景经常面临数据量大、特征维度高且稀疏化的问题。而分布式训练的参数服务器模式采用了一种将模型参数中心化管理的方式来实现模型参数的分布式存储和更新,该模式有两个角色 Server 与 Worker:Worker 用于执行模型的前向与反向计算;Server 负责从各个 Worker 收集汇总梯度并更新参数,因此对于存储超大规模模型参数的训练场景十分友好,常被用于训练拥有海量稀疏参数的搜索推荐领域模型。

Paddle提供了传统纯 CPU 参数服务器、纯 GPU 参数服务器以及异构参数服务器等不同方案,您可以根据自己的模型特点和资源情况进行选择。详细内容可以参考 `搜索推荐场景 <./cluster_quick_start_ps_cn.html>`__

Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

建议先说集合通信。
2.1 CV、NLP 稠密模型的训练场景
2.2 搜索推荐 稀疏模型的训练场景。这块paddleRec要不要提一下?

:align: center

2.2 稠密参数collective训练场景
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

collective是否需要暴露?改为 CV、NLP 稠密模型训练场景

:align: center

2.常见的使用场景
----------------------
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

飞桨分布式训练技术支撑百度内部广泛应用,如搜索引擎、信息流推荐、百度地图、文心 ERNIE 等等。同时,也覆盖了前沿的技术领域,包括稠密参数特点的计算机视觉(CV)、自然语言处理(NLP)模型训练场景,以及庞大的 Embedding 层模型和超大数据量的推荐搜索训练场景,可谓是分布式训练技术得天独厚的“练功房”。

.. note::需要注意的是,我们使用任何一个并行策略都是有性能代价的,而且常常随着并行策略所应用的范围变大而上升。所以,把并行策略限定到尽量少的范围中会对保证训练性能有益。

.. note::分布式程序的性能要点在于:负载均衡、通信极小。

Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

增加 2.3 MLperf性能表现,选择mlperf的性能表现优势对比图

2.2 稠密参数collective训练场景
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
对于 NLP 和 CV 等这类拥有复杂网络、稠密参数特点的模型,飞桨分布式训练技术的集合通信模式可以很好的支持这类模型的训练。该模式没有管理模型参数的中心节点,每个节点都是 Worker,每个 Worker 负责模型训练的同时还需要掌握当前最新的全局梯度信息。集合通信模式对计算芯片的算力和芯片之间的网络互联要求较高,如高性能计算的 GPU、芯片之间的高速网络互联 NVLINK 和 InfiniBand 等,因此非常适合 CV 和 NLP 领域计算密集型训练任务。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这部分太技术了,可以后置
“该模式没有管理模型参数的中心节点,每个节点都是 Worker,每个 Worker 负责模型训练的同时还需要掌握当前最新的全局梯度信息。集合通信模式对计算芯片的算力和芯片之间的网络互联要求较高,如高性能计算的 GPU、芯片之间的高速网络互联 NVLINK 和 InfiniBand 等,因此非常适合 CV 和 NLP 领域计算密集型训练任务。”

在这类场景下,选择合适的分布式并行策略尤为重要,主要解决要面对的显存、通信和负载均衡的问题。下面我们以常见的模型训练场景为例作说明。

当我们的模型比较小或者单卡能放下时,我们可以采用 `数据并行训练 <./data_parallel/index_cn.html>`__ 的方式通过多卡间复制模型、同步梯度、增加minibatch的方法提高训练的效率,比如ERNIE large或者Bert Large模型单卡能够放大下,但是优于计算量偏大,在V100上训练这样的模型经常需要扩展到4机甚至8机上进行训练。

Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

最通用的是数据并行训练方式,它适用于模型参数大小在10亿以下或单卡能放下的情况,比如ERNIE large或者Bert Large模型。此类模型计算量偏大,在V100上训练这样的模型经常需要扩展到4机甚至8机上进行训练。数据并行模式可以通过多卡或多机间复制模型、同步梯度、增加minibatch的方法提高训练的效率。相关使用场景见:xxx

当我们的模型比较小或者单卡能放下时,我们可以采用 `数据并行训练 <./data_parallel/index_cn.html>`__ 的方式通过多卡间复制模型、同步梯度、增加minibatch的方法提高训练的效率,比如ERNIE large或者Bert Large模型单卡能够放大下,但是优于计算量偏大,在V100上训练这样的模型经常需要扩展到4机甚至8机上进行训练。

当模型变大到10亿到百亿这个范围时,比如NLP Bert百亿模型,V100机器单卡放不下但是单机能够放下,我们可以采用 `GroupSharded并行 <./group_sharded_parallel_cn.html>`__ 切分优化器状态、参数方式减少显存使用,用通信换显存占用; 或者使用 `张量并行 <./model_parallel_cn.html>`__ 把 占比例高的参数比如矩阵进行按照行列的维度进行切分,减少显存使用切分计算同时切分计算量。

Copy link
Collaborator

@liuTINA0907 liuTINA0907 Jun 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

当模型参数大小在十亿到百亿范围时,V100机器单卡放不下但是单机能够放下,比如NLP Bert百亿模型。我们采用GroupSharded并行训练方式,通过切分优化器状态、参数方式减少显存使用,实现拿通信换显存占用;或者使用张量并行训练方式,把占比例高的参数(如矩阵)进行按照行列的维度进行切分,减少显存使用切分计算同时切分计算量。相关使用场景见:xxx

.. 样例可以参考`ERNIE 百亿 <https://>`__ 或者Bert。

当模型进一步增加,到达100亿以上、甚至千亿模型,单机可能就放不下了。需要进一步的对模型进行切分,比如`流水线并行 <./pipeline_parallel_cn.html>`__;同时,我们针对这个场景提出了 `4D混合并行的策略 <https://baijiahao.baidu.com/s?id=1697085717806202673&wfr=spider&for=pc&searchword=4d%E6%B7%B7%E5%90%88%E5%B9%B6%E8%A1%8C&sShare=1>`__ 以充分利用各个并行策略的显存、通信、负载均衡等各个维度的特点,对模型进行合理的切分,充分利用机器的计算能力。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

当模型参数大小在百亿到千亿范围时,单机无法放下,比如 xx 模型。我们采用流水线并行训练方式对模型进行切分;同时,我们推出最新的4D混合并行训练方式,充分利用各个并行策略的显存、通信、负载均衡等各个维度的特点,更合理、高效的对模型进行切分,充分利用机器的计算能力。相关使用场景见:xxx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants