HPCA 2020 |AccPar 深度模型划分算法论文精读
1. Introduction
One Weird Trick (OWT) 建议conv用数据并行,FC用模型并行。
HYPAR搜寻一种最小化数据通信的最优丙型策略。比OWT好很多,但有几个问题:
1) 设计空间内的不完全搜索
2) 只能处理线性DNN结构
3) 缺乏损耗模型,且只用通信量作为优化标准。
4) 最重要的是:它假设执行环境是同构的。
受到诸如数据、模型并行在多GPU训练系统中的混合,多设备上递归方法划分策略,以及动态规划递归方法划分策略等的启发,作者提出ACCPAR——一个principled的系统的方法。这个方法可以确定tensor在异构加速器阵列上的划分。
创新性/贡献:
1. 考虑了一个完全的tensor划分空间,空间中由三个维度:batch size, input data size, output data size. 因此,该方法可以找到以前所找不到的一些并行configuration。且该搜索算法的完整性和最优性是可以保证的
2. 将异构执行环境的计算cost和通信 cost都考虑在内。
3. ACCPAR提供了一个在加速器之间灵活的tensor划分比,来匹配不同的计算功率和网络带宽。
4. 最后,提供了一个技术来处理多路径patterns,如ResNet中的那些。
ACCPAR极高的超越了SOTA方法,且提供了第一个完整的异构加速器阵列的tensor划分方法。
ACCPAR实验
在一个有TPU-v2和TPU-v3的异构加速器阵列进行了实验。训练了大规模DNN模型如Alexnet,VGG和 Resnet。OWT,HYPAR和ACCPAR相较于数据并行的平均性能比为2.98倍,3.78倍,6.30倍。For Vgg series, ACCPAR can achieve a speedup up to 16.14×, while the highest speedup of OWT and HYPAR are 8.24× and 9.46×, respectively. For Resnet series, ACC- PAR can achieve performance speedup from 1.92× to 2.20×, while the ranges of speedup achieved by OWT and HYPAR are 1.22× to 1.38× and 1.03× to 1.04×, respectively.
2. Background and motivation
- 摩尔定律的结束,加速器墙。因此单加速器上细粒度的优化很能再进一步的达成了。
- 现有的加速器很少是为了训练而设计的。
- 异构问题的优化尚待解决
3. Tensor Partitioning Space
3.2 在三个维度中的划分
有三个维度Batch size, input size, output size,他们不是独立的,因此每次只能有一个维度可以被划分。
3.2.1 Type-I: 划分Batch Size(数据并行)
F
l
[
b
,
q
o
]
F_l[b,qo]
Fl[b,qo] b为{1,2,3,…,B}的集合,qo为{1,2,3,… , D_(o,l)}的集合。Type-I方法将{1,2,…,B}进行划分。假如有两个加速器,则分成{1,2,…,αB} 和{αB+1, …,B}两个部分。
需要复制权重矩阵W。
△W 梯度要做element-wise add
3.2.2 Type-II 划分Di,l维(包含了模型并行)
和Type-I的划分很像
误差E要复制。
F_{l+1}要做element-wise add。
与Type-I的重要区分是,intra-layer通信发生在前向过程中,Type-I的发生在梯度计算过程中。
3.2.3 Type-III,划分Do,l 维
这种方法是以前的所有解决方法中所没有提到过的,也是很重要的一种划分策略。
F_l要做复制,即输入的特征。
后向传播的El要做 element-wise add。
3.3 扩展至CONV
三种划分方案仍然有效。只是Fl, Fl+1和El,El+1变成四维张量了。i.e., (batch, channel)×(width, height) 。将式子中的乘法换成卷积就可以了。
只影响计算复杂度,而不影响基于已有三种维度的划分策略。
3.4 完整性
由于在前向、后向和梯度三种计算中,只有三个维度出现了,且已经验证每一次只能有一种维度进行划分。因此,以上三种划分策略构成了完整的划分空间。
psum 为Partial sum
3.5 One Weird Trick 和HyPar的问题
OWT将卷积层进行数据并行,FC层进行模型并行。但没有任何的解释去说明为什么这样的做法可行,也没说明这种做法是否是最好的。因此这个解决方法基本上是经验主义的。
HyPar只考虑了数据并行和模型并行,对应Type-I和Type-II。因此HyPar的并行设置是不完全的。它忽视了一种intra-layer样式(Type-III),以及5种inter-layer通信样式(见4.1)。并且,HyPar总是平等地划分tensor,因此不能够很好的发现加速器中的性能异构问题。
4. ACCPAR COST MODEL
为了找到最好的划分策略,作者设计了多加速器的开销模型。
认为单加速器计算和多加速器通信时两大影响DNN性能的因素。HyPar只用了通信作考虑。
4.1 通信开销模型
定义通信开销E_cm为
T为被接入张量,b_i为加速器的网络带宽。A(T)为所有维度的长度之积。eg:一个16通道3x3的卷积核,输出维度为32,则A(T)=16x3x3x32=608.
4.1.1 Intra-layer 通信开销
以Type-I为例,梯度需要进行通信。设加速器的划分比为α,对任意b属于{1,…,αB},中间张量size为A(F⊤l [:,b]×El+1[b,:]) = Di,l ·Do,l = A(△Wl) = A(Wl) ,这些张量会在加速器本地进行聚合(求和)得到Partial Sum,以减少通信量。因此,最终的两个加速器之间的通信量为A(Wl) 而非(1−α)·B·A(Wl) 。因此节点内通信开销为A(Wl)/bi。
Type-II和Type-III依此类推。
4.1.2 Inter-layer 通信代价
由于每一层都分配了一个张量划分类型,当两层之间进行内容交换的时候,一个加速器可能需要做远程接入(remote accessing),也就是inter-layer 通信。
有两种转换需要需要通信:(1)l层的输出Fl+1给到l+1层的输入Fl+1的时候;(2)l+1层的误差张量输出El+1要给到l层的输入El+1的时候。
则一共有九种情况,即三种类型的相互通信。
(a) I to II, (f) II to III, (h) III to II. 这三种情况由于张量在l层和l+1层有相同的划分,因此不需要转换,通信开销为0。
(c )I to III, (d) II to I, (e)II to II, (i) III to III. 以©作为例子,加速器i(划分比为α)在l层的时候只有α部分的输出Fl+1,但是在l+1层时又需要所有的张量信息。因此需要让加速器j将剩余的β部分传过来。因此inter-layer通信量为(βB)×Do,l = βA(Fl+1) ,开销为βA(Fl+1)/bi。
(b)I to II, (g) III to I. 以(b)为例,绿色阴影部分是加速器i中第l层的 F_l+1(αB,D_o,l,
在第l+1层,加速器i又需要蓝色阴影部分
F
l
+
1
(
B
,
α
D
o
,
l
)
F_{l+1}(B,\alpha D_{o,l})
Fl+1(B,αDo,l) 黑色部分是区别之处,也是需要通信的部分。因此通信量是
β
B
⋅
α
D
o
,
l
=
α
β
A
(
F
l
+
1
)
βB\cdot αD_{o,l}=αβA(F_{l+1})
βB⋅αDo,l=αβA(Fl+1) 。则通信开销
α
β
A
(
F
l
+
1
)
/
b
i
αβA(F_{l+1})/b_i
αβA(Fl+1)/bi。
同理可算出后向传播的开销
α
β
A
(
E
l
+
1
)
/
b
i
αβA(E_{l+1})/b_i
αβA(El+1)/bi。
则总开销为两者之和。
4.2 计算代价模型
假设加速器i的张量计算密度为
c
i
c_i
ci ,两个张量的乘法的浮点计算次数为
C
(
T
1
×
T
2
)
C(T_1 \times T_2)
C(T1×T2)。如果划分比为α,则有效计算次数为
α
C
(
T
1
×
T
2
)
αC(T_1 \times T_2)
αC(T1×T2) 。
定义加速器i的计算代价
E
c
p
=
α
C
(
T
1
×
T
2
)
/
o
v
e
r
c
i
E_{cp}=αC(T1\times T2)/over c_i
Ecp=αC(T1×T2)/overci。
计算计算代价中最重要的一步就是计算一个张量乘法的FLOP数目。eg:计算
F
l
+
1
F_{l+1}
Fl+1的FLOP数为
(
B
⋅
D
o
,
l
)
(
D
i
,
l
+
D
i
,
l
−
1
)
=
A
(
F
l
+
1
⋅
(
D
i
,
l
+
D
i
,
l
−
1
)
(B\cdot D_{o,l})(D_{i,l} + D_{i,l}-1)=A(F_{l+1}\cdot (D_{i,l} + D_{i,l}-1)
(B⋅Do,l)(Di,l+Di,l−1)=A(Fl+1⋅(Di,l+Di,l−1)。
4.3 卷积操作上的讨论
可将四维张量(batch, channel, height, width)看成三维张量(batch, channel, [height, width])。
最终计算结果就是前一张ppt的结果乘上卷积核的大小而已。
具体推算可以看文章。
5. AccPar 划分算法
Layer-wise动态划分方法AccPar更加有泛化性:1)有完全的搜索空间;2)可以基于异构计算、通信代价和加速器之间的带宽设置任意的划分比;3)可以处理DNN中的多路径。
5.1 Layer-wise 划分
在有N层的DNN模型中,暴力搜索的复杂度为
O
(
3
N
)
O(3^N)
O(3N)。但是通过使用动态规划算法,可以降至
O
(
N
)
O(N)
O(N)。
C
(
L
i
+
1
,
t
)
C(L_{i+1},t)
C(Li+1,t)为第i+1层选择t策略时的累计代价。
E
c
m
(
t
t
,
t
)
E_{cm}(tt, t)
Ecm(tt,t)为inter-layer通信代价和intra-layer通信代价之和。
5.2 处理多路径
多路径划分的关键为:(1)列举 L i + 1 L_{i+1} Li+1的划分状态 ( L i + 1 , t ) (L_{i+1}, t) (Li+1,t);(2)列举L_{i}的划分状态 ( L i , t t ) (L_{i}, tt) (Li,tt);(3)为 ( L i + 1 , t ) (L_{i+1}, t) (Li+1,t)和 ( L i , t t ) (L_{i}, tt) (Li,tt)之间的每一条路径独立地计算一次layer-wise划分;(4)计算出最低开销 ( L i + 1 , t ) (L_{i+1}, t) (Li+1,t)。
5.3 划分比
AccPar允许通过调节异构加速器中的划分比,来均衡单个加速器的通信和计算代价。对于每一个α和一个划分策略,有
E
c
p
(
α
,
p
i
,
l
)
E_{cp}(α,p_{i, l})
Ecp(α,pi,l)和
E
c
m
(
α
,
p
i
,
l
)
E_{cm}(α,p_{i, l})
Ecm(α,pi,l)。且由于代价对α是线性的,可写作
α
E
c
p
(
p
i
,
l
)
αE_{cp}(p_{i, l})
αEcp(pi,l)和
α
E
c
m
(
p
i
,
l
)
αE_{cm}(p_{i, l})
αEcm(pi,l)。为了找到两个加速器之间的最优划分比,只需解下列线性方程:
α
⋅
E
c
p
(
p
i
,
l
)
+
α
⋅
E
c
m
(
p
i
,
l
)
=
β
⋅
E
c
p
(
p
j
,
l
)
+
β
⋅
E
c
m
(
p
j
,
l
)
.
α ·E_{cp}(p_i,l)+α ·E_{cm}(p_i,l) = β ·E_{cp}(p_j,l)+β ·E_{cm}(p_j,l).
α⋅Ecp(pi,l)+α⋅Ecm(pi,l)=β⋅Ecp(pj,l)+β⋅Ecm(pj,l).
6. 评估
6.1 实验设置
用了9种DNN模型,分别是Lenet, Alexnet, Vgg11, Vgg13, Vgg19, Resnet18, Resnet32, Resnet50。用MNIST训练Lenet,其他的模型则用ImageNet训练。
与DP、OWT、HyPar三种并行方法进行对比。
加速器条件如下图:
6.2 异构阵列
AccPar性能提升的原因:(1)完整的划分类型搜索空间;(2)通信和计算的优化考虑到了异构性。
数据并行中,所有层只用了Type-I 。Type-II和Type-III实际上是划分模型权重的。
计算密度大的时候,偏向于用Type-I,因此Resnet的提升不大
6.3 同构阵列
在fc层,Type-II和Type-III被用来最小化通信量。他们在局部保留部分权重,且对feature maps进行通信。在conv层,可以看到Type-I不是唯一的选择。随着hierarchy level的增加,更多的层被配置为Type-II或者Type-III。这说明了AccPar的完整搜索空间的重要性。
6.4 Scalability with Hierarchy levels
在异构加速器阵列上研究AccPar在不同的层级上的可扩展性。用VGG19进行试验,hierarchy level由2到9。随着level的增加,tensor可以被划分为更细粒度的级别。
能看到OWT和HyPar趋向于饱和了,而AccPar的加速比仍在增加。这是因为搜索空间完全。
DP,OWT,HyPar和AccPar三种方法的灵活性,如下图所示:
7.结论
AccPar可以在异构加速器阵列中找到最优的tensor划分策略。是一种先前不为人所知的并行配置方法。
我的一些看法:
这篇文章其实很好的解释了以往为什么我们要选择数据并行和模型并行。在AccPar中,数据并行和模型并行是被包含在AccPar中的子划分方法。简而言之就是AccPar的模型并行策略划分空间是完整的,并且其划分策略可以自动生成。
但是,虽然这种方法给了我们很好的思路,但是并没有开源,而且实验做的都是仿真实验,真实效果还得等以后有志之人去把它做出来。
论文地址:http://alchem.usc.edu/portal/static/download/accpar.pdf