AllToAll通信为什么用于EP并行?

1 AllToAll通信原理

首先要明白ALLTOALL通信是做了什么事情。

假设我们有3个进程(A、B、C),每个进程都有三段数据,分别是a1, a2, a3;b1, b2, b3;c1, c2, c3。

进程A想发送:a1到进程A自己,a2到进程B,a3到进程C。
进程B想发送:b1到进程A,b2到进程B自己,b3到进程C。
进程C想发送:c1到进程A,c2到进程B,c3到进程C自己。

在执行AlltoAll操作后:
进程A会拥有:a1(自己的),b1(从B接收的),c1(从C接收的)。
进程B会拥有:a2(从A接收的),b2(自己的),c2(从C接收的)。
进程C会拥有:a3(从A接收的),b3(从B接收的),c3(自己的)。
这样,通过AlltoAll通信,每个进程都能得到来自其他进程的数据,同时也分享了自己的数据。
用矩阵表示就是:
在这里插入图片描述
用一句话描述:将进程 i 的发送缓冲区中的第 j 块数据发送给进程 j,进程 j 将接收到的来 自进程 i 的数据块放在自身接收缓冲区的第 i 块位置。

也可以参考小编的另外一篇文章:
https://zhuanlan.zhihu.com/p/717814079

2 什么是EP并行?

EP并行一般使用在MOE层,先了解下什么是MOE。

2.1 MOE

  • 将FFN分为多个,每个称为一个专家
  • 引入route,负责分发token到不同的专家
  • 每个token只有部分专家参与计算,从而极大减少计算量,但是维持效果
    在这里插入图片描述
    每个FFN都是一个专家,不同的专家可能在不同的卡上。
    假设当前有4个专家,1个token经过Router分发后,会形成类似index的排序结构[1,3],表示当前的token会给专家1处理和专家3处理。

2.1 EP并行

结合如下的图具体分析。

  1. 图中的DP=2,EP=2
  2. 每个DP域内,有TP并行,并且开了sp并行(为了与TP联合使用)
  3. 经过Route后,会进行数据重排,以便选择合适的专家;
  4. 黄色的部分,表示要给EP1计算;蓝色的部分表示要给EP2计算;
  5. 将需要给EP1计算的数据收集起来放在一起;将需要给EP2计算的数据收集起来放在一起(这里就是引入AllToAll的关键
  6. 然后经过FFN的计算。
  7. 计算完成之后,再将数据发送回各自的DP域。
    在这里插入图片描述

3 AlltoAll通信为什么用于EP并行?

通过上述的第5步就是问题的回答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值