其他
如何超越数据并行和模型并行:从GShard谈起
Tofu提出了一套DSL,方便开发者描述张量的划分策略,使用了类似poly的integer interval analysis来描述并行策略,同样,并行策略的搜索算法上也做了很多很有特色的工作。不过在这里,我主要关心各项工作是如何抽象搜索空间的。
这种区别也会反应到API层面,譬如Mindspore和OneFlow作为通用框架里少数实现了完整的数据并行、模型并行的系统,在Python API上也不同,在Mindspore训练盘古模型的示例代码里可以看到,它的划分接口是放在operator上,相反,OneFlow的SBP体系是把划分接口放在张量上,在operator API上单卡和分布式完全一样(OneFlow论文:https://arxiv.org/pdf/2110.15032.pdf)。
Mesh-TensorFlow的核心理念也是beyond batch splitting,数据并行是batch splitting,模型并行是张量其它维度的切分。这篇文章把集群的加速卡抽象成mesh结构,提出了一种把张量切分并映射到这个mesh结构的办法。
所有这些工作的目的都是提供一个与编程语言”类型系统“类似的annotation 体系,这个体系需要最简且完备,这个体系定义了”自动并行“的搜索空间。 搜索空间中的任何一种构型,也就是任何一种并行策略,在数学上都是正确的,它们的区别仅仅是执行效率不同,我们目的是找到效率最高的并行策略。 框架需要这样一种能力,给定任何一种构型,都能翻译和转换成一个物理图(执行计划),确保这个并行策略可以成功执行,即使它的效率不高。 框架最好能够自动搜索到效率最高的那个构型。