Distributed Parallel Strategies for Large Models

通信原语

原语输入输出
Broadcast一个rank有数据所有人一样一个 rank 把数据发送给所有其他 rank
Scatter一个rank有完整数据每人一部分一个 rank 给不同 rank 不同数据
Gather每人一部分一个rank完整所有 rank 发送数据给一个 rank
Reduce每人数据一个结果所有 rank 提供数据,经过某种操作(sum/max/min)后,只保留一个结果
All-Gather每人一部分所有人完整每个 rank 提供一份数据,最后所有 rank 都拿到完整数据
All-Reduce每人数据所有人相同结果先做 Reduce, 再把结果广播给所有 rank
Reduce-Scatter每人完整部分每人得到reduce后的shard先求和,然后切分发送
All-to-All每人切片发送每人重新组合每个 rank 把数据切片后分别发送给所有 rank,最后每个 rank 收集属于自己的那部分

具体功能效果见 parallemism method

  1. All-Gather。通信完成后,每个进程都获得所有进程数据块的拼接总和。所有人最后拿到的内容是完全一样的。
1
2
3
4
5
6
7
8
9
[通信前]
Rank 0: [A]
Rank 1: [B]
Rank 2: [C]

[通信后 (All-Gather)]
Rank 0: [A, B, C]
Rank 1: [A, B, C]
Rank 2: [A, B, C]
  1. All-to-All。通信完成后,每个进程收到的数据,是来自其他所有进程专门发给它的数据块的拼接
1
2
3
4
5
6
7
8
9
[通信前 (每个Rank内部已切分)]
Rank 0: [A0, A1, A2]  (A0留给自己, A1给Rank1, A2给Rank2)
Rank 1: [B0, B1, B2]  (B0给Rank0, B1留给自己, B2给Rank2)
Rank 2: [C0, C1, C2]  (C0给Rank0, C1给Rank1, C2留给自己)

[通信后 (All-to-All)]
Rank 0: [A0, B0, C0]
Rank 1: [A1, B1, C1]
Rank 2: [A2, B2, C2]

不同的并行策略下有不同的通信方式的需求,但是下面的内容的正确性有待确定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Data Parallel:
    All-Reduce
    Reduce-Scatter

Tensor Parallel:
    All-Reduce
    All-Gather

Pipeline Parallel:
    Send/Recv

Sequence Parallel:
    Scatter
    All-Gather

Context Parallel:
    All-Gather
    Ring Attention通信

MoE:
    All-to-All

CP x Ulysses SP

CP=4 表示每个 CP group 内有 4 个 GPU 参与 context parallel

其实不管是何种并行,它的数量表示的都是参与并行的 GPU 数量,这些 GPU 会作为一个单独的组别,多出来的 GPU 则会重复。举个例子

当sequence length 为 16000, 有 8 个 GPU,CP 为 4 时,会形成两个 CP group, 通信发生在 CP group 内部

  1. CP group 0: GPU0 GPU1 GPU2 GPU3
  • GPU0: token 0~3999
  • GPU1: token 4000~7999
  • GPU2: token 8000~11999
  • GPU3: token 12000~15999
  1. CP group 1: GPU4 GPU5 GPU6 GPU7

GPU4~7 保持相同的划分模式,如果没有其他维度的并行,这 4 张卡的计算就是浪费的

当有多种并行机制叠加时,具体组别的划分就要看推理框架的具体实现了,它们可能有着不同的 GPU-to-grid 的映射方式,这里我们只说一种可能的情况,更重要的是理解在多维并行存在时的数据划分方式

序列长度保持不变,head 数量为 16,8 个 GPU,CP 为 4,SP 为 2

  1. CP group 0: GPU0 GPU1 GPU2 GPU3
  • GPU0: token 0~3999, heads 0-7
  • GPU1: token 4000~7999, heads 0-7
  • GPU2: token 8000~11999, heads 0-7
  • GPU3: token 12000~15999, heads 0-7
  1. CP group 1: GPU4 GPU5 GPU6 GPU7
  • GPU4: token 0~3999, heads 8-15
  • GPU5: token 4000~7999, heads 8-15
  • GPU6: token 8000~11999, heads 8-15
  • GPU7: token 12000~15999, heads 8-15

EP

每个 GPU 都拿到完整的 expert

0%