提交 58024991 编写于 作者: Z Ziyan

auto parallel design

上级 c5e36ac2
......@@ -29,7 +29,7 @@
### 集合通信
集合通信指在一组进程间通信,组内所有进程满足一定规则的发送和接收数据。MindSpore通过集合通信的方式进行并行训练过程中的数据传输工作,在Ascend芯片上它依赖于华为集合通信库HCCL完成。
集合通信指在一组进程间通信,组内所有进程满足一定规则的发送和接收数据。MindSpore通过集合通信的方式进行并行训练过程中的数据传输工作,在Ascend芯片上它依赖于华为集合通信库`HCCL`完成,在GPU上它依赖于英伟达集合通信库`NCCL`完成。
### 同步模式
......@@ -41,11 +41,11 @@
### 数据并行原理
<div align=center><img src="./images/data_parallel.png" alt="数据并行图解" align="middle"></div>
![数据并行图解](./images/data_parallel.png)
1. 环境依赖
每次开始进行并行训练前,通过调用`mindspore.communication.init`接口初始化通信资源,并自动创建全局通信组`HCCL_WORLD_GROUP`。
每次开始进行并行训练前,通过调用`mindspore.communication.init`接口初始化通信资源,并自动创建全局通信组`WORLD_COMM_GROUP`。
2. 数据分发
......@@ -77,28 +77,28 @@
## 自动并行
自动并行作为MindSpore的关键特性,用于实现自动的数据并行加模型并行的混合并行训练方式,旨在帮助用户以单机的脚本表达并行算法逻辑,降低分布式训练难度,提高算法研发效率,同时又能保持训练的高性能。
自动并行作为MindSpore的关键特性,用于实现自动的数据并行加模型并行的混合并行训练方式,旨在帮助用户以单机的脚本表达并行算法逻辑,降低分布式训练难度,提高算法研发效率,同时又能保持训练的高性能。这个小节介绍了在MindSpore中`ParallelMode.AUTO_PARALLEL`自动并行模式及`ParallelMode.SEMI_AUTO_PARALLEL`半自动并行模式是如何工作的。
### 自动并行原理
<img src="./images/auto_parallel.png" alt="自动并行架构图" width=50% height=50% align="middle">
![自动并行图解](./images/auto_parallel.png)
1. 通用的张量排布模型
在上面的架构图中,自动并行流程会对单机的正向计算图(ANF Graph)进行遍历,以算子(Distributed Operator)为单位对张量进行切分建模,表示一个算子的输入输出张量如何分布到集群各个卡上(Tensor Layout)。这种模型充分地表达了张量和设备间的映射关系,并且可以通过算法推导得到任意排布的张量间通信转换方式(Tensor Redistribution)。
为了得到张量的排布模型,每个算子都具有切分策略(Parallel Strategy),它表示算子的各个输入在相应维度的切分情况。通常情况下只要满足以2为基、均匀分配的原则,张量的任意维度均可切分。以下图为例,这是一个三维矩阵乘操作,它的切分策略由两个元组构成,分别表示`input`和`weight`的切分形式。其中元组中的元素与张量维度一一对应,`2^N`为切分份数,`1`表示不切。当我们想表示一个数据并行切分策略时,即`input`的`batch`维度切分,其他维度不切,可以表达为`strategy=((2^N, 1, 1),(1, 1, 1))`;当表示一个模型并行切分策略时,即`weight`的`channel`维度切分,其他维度不切,可以表达为`strategy=((1, 1, 1),(1, 1, 2^N))`;当表示一个混合并行切分策略时,可以表达为`strategy=((2^N, 1, 1),(1, 1, 2^N))`。
<img src="./images/operator_split.png" alt="算子切分定义" width="60%" height="60%" align="middle">
![算子切分定义](./images/operator_split.png)
依据算子的切分策略,框架将自动推导得到算子输入张量和输出张量的排布模型。这个排布模型由`device_matrix`,`tensor_shape`和`tensor map`组成,分别表示设备矩阵形状、张量形状、设备和张量维度间的映射关系。根据排布模型框架可以自动实现对整图的切分,并推导插入算子内张量重复计算及算子间不同排布的张量变换所需要的通信操作。以数据并行转模型并行为例,第一个数据并行矩阵乘的输出在`batch`维度存在切分,而第二个模型并行矩阵乘的输入需要全量张量,框架将会自动插入`AllGather`算子实现排布变换。
<img src="./images/tensor_redistribution.png" alt="张量排布变换" width="65%" height="65%" align="middle">
![张量排布变换](./images/tensor_redistribution.png)
总体来说这种分布式表达打破了数据并行和模型并行的边界,轻松实现混合并行。并且用户无需感知模型各切片放到哪个设备上运行,框架会自动调度分配。从脚本层面上,用户仅需构造单机网络,即可表达并行算法逻辑。
2. 高效的并行策略搜索算法
当用户熟悉了算子的切分表达,并手动对算子配置切分策略,这就是`SEMI_AUTO_PARALLEL`半自动并行模式。这种方式对手动调优有帮助,但还是具有一定的调试难度,用户需要掌握并行原理,并根据网络结构、集群拓扑等计算分析得到高性能的并行方案。为了进一步帮助用户加速并行网络训练过程,在半自动并行模式的基础上,`AUTO_PARALLEL`自动并行模式引入了并行切分策略自动搜索的特性。自动并行围绕昇腾AI处理器构建代价函数模型(Cost Model),计算出一定数据量、一定算子在不同切分策略下的计算开销(Computation Cost),内存开销(Memory Cost)及通信开销(Communication Cost)。然后通过动态规划算法(Dynamic Programming),以单卡的内存上限为约束条件,高效地搜索出性能较优的切分策略。
当用户熟悉了算子的切分表达,并手动对算子配置切分策略,这就是`SEMI_AUTO_PARALLEL`半自动并行模式。这种方式对手动调优有帮助,但还是具有一定的调试难度,用户需要掌握并行原理,并根据网络结构、集群拓扑等计算分析得到高性能的并行方案。为了进一步帮助用户加速并行网络训练过程,在半自动并行模式的基础上,`AUTO_PARALLEL`自动并行模式引入了并行切分策略自动搜索的特性。自动并行围绕硬件平台构建相应的代价函数模型(Cost Model),计算出一定数据量、一定算子在不同切分策略下的计算开销(Computation Cost),内存开销(Memory Cost)及通信开销(Communication Cost)。然后通过动态规划算法(Dynamic Programming),以单卡的内存上限为约束条件,高效地搜索出性能较优的切分策略。
策略搜索这一步骤代替了用户手动指定模型切分,在短时间内可以得到较高性能的切分方案,极大降低了并行训练的使用门槛。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册