MLHPC 2016 | Communication Quantization for Data-parallel Training of Deep Neural Networks

在HPC基础架构上实施现有的通信量化算法,并开发我们自己的自适应量化算法以解决它们的缺点。 我们还开发了自己的allreduce实现。 相互比较现有数据和新数据并行通信量化算法以及MPI_Allreduce。 研究在HPC基础架构上进行数据并行培训的可行性

1 Bit SGD可以实现良好的重构和较低的误差,但与阈值量化相比,它的计算开销更大,并且压缩率不能达到32倍以上。阈值量化速度很快,但是不同的模型需要设置不同的阈值,而且选择好的阈值也很困难,并且使用阈值\(\tau\)作为重建值是次优的。如果阈值设置的比较小,那么由于误差补偿的存在,可能会导致传输大量的数据

自适应量化使用固定比例\(\pi\)来表示每次迭代时要发送的梯度更新比例。第一步,自适应量化要确定满足当前迭代所需比例的正阈值\(\tau^+\)和负阈值\(\tau^-\)。假设梯度向量中有\(k\)个非负值,我们只需要发送其中最大的\(\frac{k}{\pi}\)个值,因此,正阈值\(\tau^+\)就是梯度向量中第\(\frac{k}{\pi}\)个值。一般而言,我们可以通过快速选择等高效算法,在\(O(N)\)时间内找到第\(\frac{k}{\pi}\)个元素。负阈值的确定与正阈值类似,只不过是选择梯度向量中最小的\(\frac{k}{\pi}\)个值。注意,正阈值和负阈值都由同一个比例\(\pi\)确定的。同样,自适应量化需要使用误差补偿技术来防止模型不收敛。在接收端的重建阶段,自适应量化分别对大于正阈值\(\tau^+\)和小于负阈值\(\tau^-\)的元素求一个平均值,用这两个均值分别作为重建向量中的元素。

作者发现原始的MPI_Allreduce接口在传输压缩数据时表现不好,而且使用用户自定义操作时MPI_Allreduce会退化成recursive-doubling实现,因此他使用原始的MPI_SendMPI_Recv方法实现了一个类似于Ring Allreduce的聚合通信算法。

猜你喜欢

转载自www.cnblogs.com/littleorange/p/12684063.html