1D 张量并行
作者: Zhengda Bian, Yongbin Li
示例代码
相关论文
张量并行将模型参数划分到多个设备上,以减少内存负荷。
Megatron-LM 介绍了一种高效的一维张量并行化实现。
让我们以一个线性层为例,它包括一个 GEMM Y=XA。 给定2个处理器,我们把列 A 划分为 [A1 A2], 并在每个处理器上计算 Yi=XAi , 然后形成 [Y1 Y2]=[XA1 XA2]. 这被称为列并行方式。
当第二个线性层 Z=YB 跟随上述列并行层的时候, 我们把 B 划分为
[B1B2] 这就是所谓的行并行方式.
为了计算
Z=[Y1 Y2][B1B2] 我们首先在每个处理器上计算 YiBi 然后使用一个all-reduce操作将结果汇总为 Z=Y1B1+Y2B2。
我们还需要注意,在后向计算中,列并行线性层需要聚合输入张量 X, 因为在每个处理器 i 上,我们只有 Xi˙=Yi˙AiT,因此,我们在各处理器之间进行all-reduce,得到 X˙=Y˙AT=Y1˙A1T+Y2˙A2T。
给定 P 个处理器, 我们展现理论上的计算和内存成本,以及基于环形算法的1D张量并行的前向和后向的通信成本。
计算 | 内存 (参数) | 内存 (activations) | 通信 (带宽) | 通信 (时延) |
---|
O(1/P) | O(1/P) | O(1) | O(2(P−1)/P) | O(2(P−1)) |
在ColossalAI最新的版本中,1D张量并行由Shardformer
功能实现。
关于Shardformer
的原理和用法细节请参考当前目录下的Shardformer文档。