一、写在前面
深度学习模型其实就是由数(权重、偏置等)和数与数之间的运算构成,其中的数学原理包括矩阵运算(线性代数)、求导(高等数学)、概率计算(概率论)等。其中矩阵运算(线性代数)是其中十分重要的基础。
本文将解释分布式训练中的数据分布式、模型分布式(并行模式、串行模式)的数学原理,这是分布式训练的基础。
二、分布式训练的数学原理
1、矩阵运算基础回顾
我们首先回顾一下矩阵运算的基础,假设有以下的矩阵:
矩阵点乘:
则有其中:
矩阵相加:
其中:
2、数据分布式训练数学基础
假设:模型输入为,其中表示一条独立的数据,即表示一个数量为的数据集;是模型的权重,是模型的输出。
数据分布式训练即将数据进行拆分,分别送到不同的机器(或GPU)上的模型进行前馈计算,然后对所有的梯度进行汇总平均,再进行模型的参数更新。其中数据分布式训练包括DP和DDP两种,这里不展开描述。
上述的过程可以用以下的数学表达式进行描述(不考虑反馈过程,且假设只有两张GPU显卡):
对于GPU0:
对于GPU1:
进行横向拼接生成完整的数据训练:
通过这种方式可以显著减少每一个epoch的迭代次数,达到加速模型训练的目的。
3、模型分布式训练并行策略数学基础
假设:模型输入为,其中表示一条独立的数据,即表示一个数量为的数据集;是模型的权重,是模型的输出。
模型分布式训练的并行策略即将权重进行拆分,分别送到不同的机器(或GPU)上的模型进行前馈计算,然后对所有的梯度进行汇总平均,再进行模型的参数更新。
上述的过程可以用以下的数学表达式进行描述(不考虑反馈过程,且假设只有两张GPU显卡):
对于GPU0:
对于GPU1:
进行竖向拼接生成完整的训练:
通过这种方式,可以显著减少占用每一台机器(或GPU)的内存目的。
4、模型分布式训练串行策略数学基础
这个其实就是将模型按照计算图之间逻辑上的先后关系拆分模型,然后分配到不同的机器(或GPU)上,通过接力的方式完成整个模型的计算。
通过这种方式,可以显著减少占用每一台机器(或GPU)的内存目的。