From a8ee9fa900c31767cf487ad24853a8c038e3c5b0 Mon Sep 17 00:00:00 2001 From: ImNoBadBoy <102226413+ImNoBadBoy@users.noreply.github.com> Date: Wed, 30 Mar 2022 17:15:06 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E3=80=90Hackathon=20No.112=E3=80=91RFC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【PaddlePaddle Hackathon 2】112、深度体验飞桨分布式训练功能,并产出一份评估报告 提交rfc --- rfcs/Docs/20220330_design_for_Fleet_API | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 rfcs/Docs/20220330_design_for_Fleet_API diff --git a/rfcs/Docs/20220330_design_for_Fleet_API b/rfcs/Docs/20220330_design_for_Fleet_API new file mode 100644 index 000000000..deed1b742 --- /dev/null +++ b/rfcs/Docs/20220330_design_for_Fleet_API @@ -0,0 +1,83 @@ +# 飞桨文档体验方案 + +|领域 | 飞桨文档体验方案 | +|---|---| +|提交作者 | mkm wjc | +|提交时间 | 2022-03-30 | +|版本号 | V1.0 | +|依赖飞桨版本 | paddlepaddle-gpu==2.2 | +|文件名 | 20220320_docs_eval_docs.md
| + + +# 一、概述 +## 1、相关背景 + +飞桨框架于 2.0 正式版全面支持了动态图训练,并在2.1、2.2 两个大版本中不断完善分布式能力,同时大幅增强了训练功能。需要进行飞浆动态图分布式训练的评估。 + +## 2、功能目标 + +根据文档示例,体验分布式训练相关功能,包括但不限于:在Fleet API使用、分布式动态图训练、环境配置、报错查错、性能调优、文档质量等方面,反馈使用体验。 + +## 3、意义 + +从用户角度体验飞桨分布式框架,发掘文档体系中可以改善的功能点。 + +# 二、飞桨现状 + +飞桨从 [2.0.0](https://github.com/PaddlePaddle/Paddle/releases/tag/v2.0.0) 从 1.x 到 2.0 做了较大的功能更新。对应的文档,也随着做出了较大的改动。 + +[飞桨的文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/index_cn.html) 显式遵循了 https://documentation.divio.com/ 所描述的文档体系。这与 [MindSpore](https://www.mindspore.cn/) 类似。与 [PyTorch](https://pytorch.org/docs/stable/index.html) 不同。这在用户体验上各有特色,给用户不同的感受。 + +在本次黑客松之前,未见有人发起对飞桨 2.0 之后的文档做充分分析并生成体验报告。 + +# 三、业内方案调研 + +Pytorch目前支持分布式训练,其API包括torch.nn.parallel.DataParallel与torch.nn.parallel.DistributedDataParallel这两个,其都属于数据并行。 +DataParallel和DistributedDataParallel有如下不同: + DataParallel是单进程,多线程的并行训练方式,并且只能在单台机器上运行。 + DistributedDataParallel是多进程,并且适用于单机和多机训练。DistributedDataParallel 还预先复制模型,而不是在每次迭代时复制模型,并避免了全局解释器锁定,相对来说, + DistributedDataParallel数据并行的效率比DataParallel数据并行的效率高。 + +Distributed Data-Parallel Training (DDP) 分布式数据并行训练(DDP)是一种广泛采用的单程序多数据训练范式。 +使用DDP,在每个进程上复制模型,每个模型副本都将提供一组不同的输入数据样本。DDP负责梯度通信以保持模型副本的同步,并将其与梯度计算重叠以加快训练。 + +RPC-Based Distributed Training (RPC)基于RPC的分布式训练(RPC)支持无法适应数据并行训练的一般训练结构,如分布式管道并行、参数服务器范例以及DDP与其他训练范例的组合。 + +Collective Communication (c10d) library集体通信(c10d)库支持跨组内的进程发送张量。它提供了集体通信API(例如,all_reduce和all_gather)和P2P通信API(例如,send和isend)。DDP和RPC(ProcessGroup后端)构建在c10d上,前者使用集体通信,后者使用P2P通信。通常,开发人员不需要直接使用这个原始通信API,因为DDP和RPC API可以服务于许多分布式培训场景。但是,在一些用例中,此API仍然很有用。一个例子是分布参数平均,应用程序希望在向后传递后计算所有模型参数的平均值,而不是使用DDP传递梯度。这可以将通信与计算分离,并允许对通信内容进行更精细的控制,但另一方面,它也放弃了DDP提供的性能优化。 + + +# 四、对比分析 + +对比pytorch框架以及飞浆分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。 + +# 五、设计思路与实现方案 + +1、实现pytorch版本的DDP分布式并行训练,预期采用cifar10数据集完成图像分类的样例。 +2、实现飞浆分布式框架的训练,完成图像分类的样例 +3、对比分析1 2 中的数据 +4、给出评估报告 + +## 命名与参数设计 + +因为是报告形式,无 API 接口设计 + + +# 六、测试和验收的考量 + +一份飞桨分布式使用评估报告文档,包括分布式产品基本情况摸底表格和至少包含以上提示中3项功能的评测报告,且每项评估至少包含3点内容: +(1)你认为的该功能比较好的使用体验(提供竞品名称及功能描述); +(2)该功能 Paddle 的使用体验; +(3)1和2之间的使用体验对比(易用性、完整性、前瞻性等) + +# 七、可行性分析和排期规划 + +对各Pytorch分布式训练框架ddp已经有一定了解,之后需要对比ddp和飞浆分布式框架之间的不同,进一步做细致的体验测试及分析。形成详细的报告文档。 + + +# 八、影响面 + +无 + +# 名词解释 + +# 附件及参考资料 From aa4d950b227f2663c4180a59517a8feb1cc48609 Mon Sep 17 00:00:00 2001 From: ImNoBadBoy <102226413+ImNoBadBoy@users.noreply.github.com> Date: Sat, 2 Apr 2022 15:13:55 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E3=80=90Hackathon=20No.12=E3=80=91?= =?UTF-8?q?=E6=B7=B1=E5=BA=A6=E4=BD=93=E9=AA=8C=E9=A3=9E=E6=A1=A8=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8F=E8=AE=AD=E7=BB=83=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=BA=A7=E5=87=BA=E4=B8=80=E4=BB=BD=E8=AF=84=E4=BC=B0?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对提出的修改意见进行了修改,修改主要为第五点。谢谢 --- rfcs/Docs/20220330_design_for_Fleet_API | 49 ++++++++++++++----------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/rfcs/Docs/20220330_design_for_Fleet_API b/rfcs/Docs/20220330_design_for_Fleet_API index deed1b742..71c041e4b 100644 --- a/rfcs/Docs/20220330_design_for_Fleet_API +++ b/rfcs/Docs/20220330_design_for_Fleet_API @@ -32,30 +32,44 @@ # 三、业内方案调研 -Pytorch目前支持分布式训练,其API包括torch.nn.parallel.DataParallel与torch.nn.parallel.DistributedDataParallel这两个,其都属于数据并行。 +Pytorch目前支持分布式训练,其API包括torch.nn.parallel.DataParallel与torch.nn.parallel.DistributedDataParallel,两个API都属于数据并行。 DataParallel和DistributedDataParallel有如下不同: DataParallel是单进程,多线程的并行训练方式,并且只能在单台机器上运行。 - DistributedDataParallel是多进程,并且适用于单机和多机训练。DistributedDataParallel 还预先复制模型,而不是在每次迭代时复制模型,并避免了全局解释器锁定,相对来说, - DistributedDataParallel数据并行的效率比DataParallel数据并行的效率高。 + DistributedDataParallel是多进程,并且适用于单机和多机训练。DistributedDataParallel数据并行的效率比DataParallel数据并行的效率高。 -Distributed Data-Parallel Training (DDP) 分布式数据并行训练(DDP)是一种广泛采用的单程序多数据训练范式。 -使用DDP,在每个进程上复制模型,每个模型副本都将提供一组不同的输入数据样本。DDP负责梯度通信以保持模型副本的同步,并将其与梯度计算重叠以加快训练。 +paddle 使用的分布式框架的Fleet API 该 API支持动态图编译以及静态图编译。 -RPC-Based Distributed Training (RPC)基于RPC的分布式训练(RPC)支持无法适应数据并行训练的一般训练结构,如分布式管道并行、参数服务器范例以及DDP与其他训练范例的组合。 +# 四、对比分析 -Collective Communication (c10d) library集体通信(c10d)库支持跨组内的进程发送张量。它提供了集体通信API(例如,all_reduce和all_gather)和P2P通信API(例如,send和isend)。DDP和RPC(ProcessGroup后端)构建在c10d上,前者使用集体通信,后者使用P2P通信。通常,开发人员不需要直接使用这个原始通信API,因为DDP和RPC API可以服务于许多分布式培训场景。但是,在一些用例中,此API仍然很有用。一个例子是分布参数平均,应用程序希望在向后传递后计算所有模型参数的平均值,而不是使用DDP传递梯度。这可以将通信与计算分离,并允许对通信内容进行更精细的控制,但另一方面,它也放弃了DDP提供的性能优化。 +对比pytorch框架以及飞浆分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。(具体查看第五点实现方案) +# 五、设计思路与实现方案 -# 四、对比分析 +环境配置 +(1)在曙光超算昆山计算服务器部署pytorch分布式环境,给出部署步骤(已经完成) +(2)在曙光超算昆山计算服务器部署paddle分布式环境,给出部署步骤(已经完成) +(3)对比两者的易用性与区别 -对比pytorch框架以及飞浆分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。 +文档质量 +(1)寻找pytorch分布式文档,对其进行分析 +(2)分析运行paddle官方给出的分布式文档例子,给出文档中代码或者其他方面的不足。(目前发现一个不足点) +(3)对比(1)(2) + +Fleet API的使用 +(1)分析pytorch分布式框架DDP某些API的使用(已经完成) +(2)按照文档内容使用Fleet API(已经完成) +(3)1和2之间的使用体验对比 + +分布式动态图训练 +(1)使用pytorch完成一个图像分类的动态图分布式例子,给出分析(即将完成) +(2)使用paddle完成一个图像分类的分布式例子,给出分析(已经完成)完成单机多卡的实现,由于曙光超算的环境问题,目前暂时无法实现曙光上多机多卡的分布式例子。 +(3)分析两者程序上的区别,分析运行时间,最后的准确率。 + +报错查错 +(1) 在曙光超算昆山计算服务器部署paddle环境时出现的报错并分析给出解决方案 +(2) 分析在运行paddle文档分布式代码时出现的错误,并给出解决方案 -# 五、设计思路与实现方案 -1、实现pytorch版本的DDP分布式并行训练,预期采用cifar10数据集完成图像分类的样例。 -2、实现飞浆分布式框架的训练,完成图像分类的样例 -3、对比分析1 2 中的数据 -4、给出评估报告 ## 命名与参数设计 @@ -74,10 +88,3 @@ Collective Communication (c10d) library集体通信(c10d)库支持跨组内 对各Pytorch分布式训练框架ddp已经有一定了解,之后需要对比ddp和飞浆分布式框架之间的不同,进一步做细致的体验测试及分析。形成详细的报告文档。 -# 八、影响面 - -无 - -# 名词解释 - -# 附件及参考资料 From 36652ae73a50a089c30f7e7f78b7517bcf039738 Mon Sep 17 00:00:00 2001 From: ImNoBadBoy <102226413+ImNoBadBoy@users.noreply.github.com> Date: Sun, 3 Apr 2022 22:15:21 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E3=80=90Hackathon=20No.112=E3=80=91RFC?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【队名】:xd_no-bad 【序号】:112 【状态】:PR修改 --- rfcs/Docs/20220330_design_for_Fleet_API | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/rfcs/Docs/20220330_design_for_Fleet_API b/rfcs/Docs/20220330_design_for_Fleet_API index 71c041e4b..c273642c0 100644 --- a/rfcs/Docs/20220330_design_for_Fleet_API +++ b/rfcs/Docs/20220330_design_for_Fleet_API @@ -39,12 +39,10 @@ DataParallel和DistributedDataParallel有如下不同: paddle 使用的分布式框架的Fleet API 该 API支持动态图编译以及静态图编译。 -# 四、对比分析 +# 四、设计思路与实现方案 对比pytorch框架以及飞浆分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。(具体查看第五点实现方案) -# 五、设计思路与实现方案 - 环境配置 (1)在曙光超算昆山计算服务器部署pytorch分布式环境,给出部署步骤(已经完成) (2)在曙光超算昆山计算服务器部署paddle分布式环境,给出部署步骤(已经完成) @@ -65,26 +63,14 @@ Fleet API的使用 (2)使用paddle完成一个图像分类的分布式例子,给出分析(已经完成)完成单机多卡的实现,由于曙光超算的环境问题,目前暂时无法实现曙光上多机多卡的分布式例子。 (3)分析两者程序上的区别,分析运行时间,最后的准确率。 -报错查错 +报错查错(错误汇总) (1) 在曙光超算昆山计算服务器部署paddle环境时出现的报错并分析给出解决方案 (2) 分析在运行paddle文档分布式代码时出现的错误,并给出解决方案 - -## 命名与参数设计 - -因为是报告形式,无 API 接口设计 - - -# 六、测试和验收的考量 - -一份飞桨分布式使用评估报告文档,包括分布式产品基本情况摸底表格和至少包含以上提示中3项功能的评测报告,且每项评估至少包含3点内容: -(1)你认为的该功能比较好的使用体验(提供竞品名称及功能描述); -(2)该功能 Paddle 的使用体验; -(3)1和2之间的使用体验对比(易用性、完整性、前瞻性等) - -# 七、可行性分析和排期规划 +# 五、可行性分析和排期规划 对各Pytorch分布式训练框架ddp已经有一定了解,之后需要对比ddp和飞浆分布式框架之间的不同,进一步做细致的体验测试及分析。形成详细的报告文档。 +已经完成一份评估文档,以及完成了pytorch和paddlepaddle的分布式训练。 From 9bc55f2670b0a69cdae16017fb3916e70ad46c7a Mon Sep 17 00:00:00 2001 From: ImNoBadBoy <102226413+ImNoBadBoy@users.noreply.github.com> Date: Sun, 3 Apr 2022 22:16:55 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E3=80=90Hackathon=20No.112=E3=80=91RFC?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【队名】:xd_no-bad 【序号】:112 【状态】:rfc修改 --- ...\220Hackathon No.112\343\200\221RFC\344\277\256\346\224\271" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename rfcs/Docs/20220330_design_for_Fleet_API => "rfcs/Docs/\343\200\220Hackathon No.112\343\200\221RFC\344\277\256\346\224\271" (98%) diff --git a/rfcs/Docs/20220330_design_for_Fleet_API "b/rfcs/Docs/\343\200\220Hackathon No.112\343\200\221RFC\344\277\256\346\224\271" similarity index 98% rename from rfcs/Docs/20220330_design_for_Fleet_API rename to "rfcs/Docs/\343\200\220Hackathon No.112\343\200\221RFC\344\277\256\346\224\271" index c273642c0..c274d8a84 100644 --- a/rfcs/Docs/20220330_design_for_Fleet_API +++ "b/rfcs/Docs/\343\200\220Hackathon No.112\343\200\221RFC\344\277\256\346\224\271" @@ -61,7 +61,7 @@ Fleet API的使用 分布式动态图训练 (1)使用pytorch完成一个图像分类的动态图分布式例子,给出分析(即将完成) (2)使用paddle完成一个图像分类的分布式例子,给出分析(已经完成)完成单机多卡的实现,由于曙光超算的环境问题,目前暂时无法实现曙光上多机多卡的分布式例子。 -(3)分析两者程序上的区别,分析运行时间,最后的准确率。 +(3)分析两者程序上运行结果。 报错查错(错误汇总) (1) 在曙光超算昆山计算服务器部署paddle环境时出现的报错并分析给出解决方案