forked from shunliz/Machine-Learning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bing-xing-xue-xi.md
37 lines (17 loc) · 2.4 KB
/
bing-xing-xue-xi.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
标准的数据并行的定义是一个 batch 的数据在不同的 device 上并行处理,这时每一个 device 上都保存了模型的一份完整拷贝,前向计算完进行梯度汇总和更新。
模型并行表示模型不同的参数(层、组件)分配到不同的 device 上,处理一个 batch 的数据。
### 流水线并行简介:
在大语言模型中,流水线并行通常分为以下几个阶段:
1. **输入处理阶段:**将原始输入文本转换为模型可接受的格式,进行分词、编码等操作。
2. **模型计算阶段:**大型语言模型通常由多个层组成,每个层都涉及到矩阵乘法、激活函数等计算。这个阶段包括模型的前向传播。
3. **输出处理阶段:**将模型输出转换为最终的结果,进行解码、生成文本等操作。
每个阶段都可以在独立的设备(例如不同的GPU)上执行,以提高整体计算效率。
![](/assets/parallel-ml1.png)
### 优化策略:
1. **模型分割:**将大型模型分割成多个阶段,每个阶段在不同的设备上并行运行。这要求模型的结构能够被有效地分割和组合。
2. **输入输出异步处理:**在流水线的不同阶段,可以异步地处理输入和输出。例如,在一个阶段的计算进行的同时,另一个阶段可以开始处理下一个输入,从而减少整体的等待时间。
3. **梯度累积和同步:**在训练中,可以通过梯度累积的方式来减小梯度更新的频率,从而减少不同设备之间的通信开销。在每个流水线阶段内部,可以累积梯度,然后在一定的步骤后进行同步更新。
4. **Pipeline模型并行:**使用专门设计的模型并行策略,例如Gpipe(Gradient Pipeline),将模型划分为多个小模型,并在每个小模型上执行前向传播和反向传播。这种方法有助于减少单个模型过大时的内存需求。
5. **模型重排和优化:**对模型结构进行调整,使得流水线并行更加容易实现。这可能包括重新组织模型的层次结构,以便更好地适应流水线并行。
6. **资源动态调整:**根据任务的需求,动态调整不同设备的资源分配,以最大程度地利用硬件资源。
请注意,实施流水线并行需要谨慎考虑模型结构和任务的性质,以及硬件资源的约束。不同任务可能需要不同的流水线并行策略。