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环境时出现的报错并分析给出解决方案