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

[WeeklyReport] Corle-hyz 2024.04.19~2024.05.10 #295

Merged
merged 15 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
### 姓名
何咏哲

### 实习项目
全自动并行架构升级

### 本周工作

1. **探究异构集群的性质**

* 异构的定义:广义上来说,异构集群指由具有不同硬件或软件配置的计算节点组成的计算集群。它可以指不同的计算资源如CPU、GPU、TPU、DCU等等,也可以指GPU中的不同平台如NV和AMD,或者同一平台下的不同型号,如V100、A100(40GB)、A100(80GB)。考虑到目前大部分用的还是NV的卡,所以这里的异构一般指最后一种。

* 异构与同构在全自动并行上的区别:异构集群中的节点在处理器类型、内存大小、网络带宽等方面具有很大的差异,以全自动并行为例,以往的并行模式仅仅需要考虑单一设备下的峰值显存即可,但是异构环境需要对每一类设备进行逐一考虑,进一步的,并行模式对于模型、数据集等的拆分也不应该是均等的,否则无法达到负载均衡的效果,不能有效提高异构资源的利用率。

* 对异构环境的建模:对于不同的计算卡,存在差异的主要有算力C、显存M和带宽B。显存和带宽都有比较明确的数值,在分布式训练领域,由于算力主要取决于Tensor Core的性能,因此算力可以用TFLOPS代表。

2. **初步构建一个异构体系下的全自动并行方案**

* 原本的全自动并行方案:原本的全自动并行方案是对不同配置下分布式训练的(峰值)显存占用进行建模,从而将OOM的策略剪枝。并且仅仅使用少量资源在全量资源下对剩下的策略的性能进行profile,使得原本同时只能进行一次profile的规模,现在能同时进行多次profile。

* 异构环境下的并行方案:异构环境对框架的灵活性有了更高的要求。例如,当使用PP时,如果还是简单的将模型拆成PP dimension个stage,很容易在异构环境下造成负载不均衡的状态。虽然部分框架目前还不支持(或不容易做到)这样高的自由度,但是对于建模来说应该充分考虑到这种情况。因此我们调整[原本的公式](https://github.com/Corle-hyz/Camp/blob/main/WeeklyReports/Hackathon_5th/12_Corle-hyz/%5BWeeklyReport%5D2023.11.08~2023.11.21.md),原本是将一个模型沿着PP、DP等维度均等地拆分,现在将这个数量更改为可变的,具体数值由达到动态均衡的拆分算法来确定。通过这样的形式可以实现对异构环境下的显存占用进行建模。

* 后续工作:借助显存公式完成动态均衡的拆分算法


### 下周工作

1. 完善异构体系下的全自动并行方案,将其参数化。

### 导师点评
本周初步次分析了异构体系下的全自动并行方案,期待进一步完善。
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
### 姓名
何咏哲

### 实习项目
全自动并行架构升级

### 本周工作

1. **借助显存公式完成动态均衡的拆分算法**

* 负载均衡需要权衡的条件主要有三个:
* 不会显存溢出(OOM);
* 不会因为计算能力的差异而带来等待(Bubble);
* 在此基础上尽可能地发挥硬件的独特优势。

* 为达到上述三个目的,我们设计了一个异构体系下的全自动并行方案:
* 首先将异构硬件的计算能力参数化(TFlops);
* 然后根据计算能力之间的比值,来决定PP和TP在异构设备间切分的比例;
* 根据该比例,改变PP和TP等并行方式切分模型的位置及维度,运用已经完成的自动搜索算法(包括使用显存模型进行剪枝),快速得到异构体系下最优的训练配置。

2. **完善异构体系下的全自动并行方案,将其参数化**

* 假设设备A的算力是CA、数量是NA,设备B的算力是CB、数量是NB。要在这样一个集群上训练一个n层的DNN网络。
* 首先考虑A和B的全同子结构,该子结构中A的数量为SNA=NA/g.c.d(NA, NB), SNB=B的数量为NB/g.c.d(NA, NB)。
* 确定两种设备的算力和之比(CA\*SNA)/(CB\*SNB),该比例即两种设备计算的tokens数之比。
* 考虑到异构设备一般是放置在不同节点内的,而节点间通信的带宽一般又远小于节点内的带宽,因此:
* 首先将两种设备放到两个DP Rank中(Sharding),在各自内部运用自动搜索引擎进行剪枝;
* 然后再将两种设备放置在同一DP Rank中,根据算力之比进行各个并行维度的分配,同时通过显存公式剪枝;
* 对符合显存模型约束的备选策略进行profiling,选出最优的一种。
* 在进行All Reduce时,需要给梯度进行加权平均,权重即为算力比。


### 下周工作

准备答辩

### 导师点评

本周提出了一种将原本的搜索模式与显存模型应用到异构资源上的想法,但是该想法还有待验证与细化。
Loading