Layout converting management
当一个张量在上下游算子中被要求的sharding spec不同时,我们需要进行分布转换处理(Layout Conversion)。目前主流的方式有两种,打表转换和逐维度转换。打表转换就是将所有可能的情况枚举出来,然后在遇到需要转换的情况下,去表格中找到对应的转换方案。 为了解决这个问题,我们提出一个新奇的想法,使用启发式的搜索,来解决sharding spec的转换问题。 然而它有一个很大问题,就是随着设备块(Device Mesh)的维度增加,这个问题的规模极具膨胀,以至于无法通过这种枚举打表的方式来解决。逐维度转换是对于一个N-d tensor的sharding spec,X0X1...Xn-1,我们让i从0到n-1逐维度地进行转换,这样不管设备块和张量的维度多少,我们都只需要一次扫描,就可以得到一个可行的转换操作序列,然而它问题是这样的转换效率会很差。为了解决这个问题,我们提出一个新奇的想法,使用启发式算法,来解决sharding spec的转换问题。,这个算法可以描述为: 1. 从source spec生成所有的one-step transform sharding specs 2. 在one-step transform sharding specs中,根据相似度函数,挑选一个”区别最小“的sharding spec作为后续的source sharding spec,并将该sharding spec记录在transform path中,如果one-step transform sharding spec中,有与target sharding spec相同的sharding spec,则算法结束。 3. 重复a,b直到算法结束
Source/target sharding spec pairs | All gather | Shard | All to All | One step transform | Best sharding spec | Transform path |
---|---|---|---|---|---|---|
\(S_{01}RR, RS_{01}R\) | \(S_0RR\) | - | \(S_0RS_1, S_0S_1R\) | \(S_0RR, S_0RS_1, S_0S_1R\) | \(S_0RR\) | \(S_0RR\) |
\(S_0RR, RS_{01}RR\) | \(RRR\) | \(S_0S_1R, S_0RS_1\) | \(RS_0R, RRS_0\) | \(RRR\), \(S_0S_1R\), \(S_0RS_1\), \(RS_0R\), \(RRS_0\) | \(RS_0R\) | \(S_0RR\) -> \(RS_0R\) |
\(RS_0R, RS_{01}RR\) | \(RRR\) | \(RS_{01}R, S_1S_0R, RS_0S_1\) | \(S_0RR, RRS_0\) | \(RRR\), \(RS_{01}R\), \(S_1S_0R\), \(RS_0S_1\), \(S_0RR\), \(RRS_0\) | \(RS_{01}R\) | \(S_0RR\) -> \(RS_0R\) -> \(RS_{01}R\) |
最后更新:
November 25, 2023
创建日期: November 25, 2023
创建日期: November 25, 2023