搜索
您的当前位置:首页分布式训练与单卡训练精度存在差异的几个原因

分布式训练与单卡训练精度存在差异的几个原因

来源:爱问旅游网
  • 一个主要因素是Batch norm。Batch norm依赖当前batch来计算均值和方差,而主流框架(tf,pytorch)的实现是在当前卡上计算这些统计量。显然单个卡上计算出来的统计量是不能代替整个并行batch的结果。考虑一个极端情形,每张卡batch size=1,这时候单卡的方差为0,而整个并行batch的方差不为0。所以单个sample的前向计算结果不一样,最后计算出来的梯度也不一样。

  • NLP 中经常有一个 batch 里各条数据长度不同需要 mask 的情况,而有时候损失函数是 per token 而不是 per sample 的。导致的结果就是,在做数据并行的时候,假如分到每张卡上的 batch 中 token 数量不同,那么总的梯度其实应该等价于每张卡上的梯度以某种方式加权平均(而不是直接平均)。实际实现的时候可以通过根据长度分桶等方式,使得每张卡上的有效 token 数量差异不大,然后所有卡直接平均即可。

  • Numeric stability,由于计算机浮点数的舍入误差,运算的结合律在一定规模下是不成立的。比如对于一个只有1位精度的浮点数,(1+0.5)+0.5=2+0.5=4,0.5在每次加法中因为舍入产生了一次进位,但是换一个计算顺序,我们又有1+(0.5+0.5)=1+1=2。因此不同的计算顺序可能得到不同的计算结果,从而产生差异。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top