SlowMo: Improving Communication-Efficient Distributed SGD with Slow Momentum

Jianyu Wang, Vinayak Tantia, Nicolas Ballas, Michael Rabbat
10/1/2019
cs.LGcs.DCmath.OC

Official code: facebookresearch/fairscale (3,403 stars, last commit 2025-04-26).

Abstract

Distributed optimization is essential for training large models on large datasets. Multiple approaches have been proposed to reduce the communication overhead in distributed training, such as synchronizing only after performing multiple local SGD steps, and decentralized methods (e.g., using gossip algorithms) to decouple communications among workers. Although these methods run faster than AllReduce-based methods, which use blocking communication before every update, the resulting models may be less accurate after the same number of updates. Inspired by the BMUF method of Chen & Huo (2016), we propose a slow momentum (SlowMo) framework, where workers periodically synchronize and perform a momentum update, after multiple iterations of a base optimization algorithm. Experiments on image classification and machine translation tasks demonstrate that SlowMo consistently yields improvements in optimization and generalization performance relative to the base optimizer, even when the additional overhead is amortized over many updates so that the SlowMo runtime is on par with that of the base optimizer. We provide theoretical convergence guarantees showing that SlowMo converges to a stationary point of smooth non-convex losses. Since BMUF can be expressed through the SlowMo framework, our results also correspond to the first theoretical convergence guarantees for BMUF.

View on arXivView PDF

Code Implementations(1)

PyTorch extensions for high performance and large scale training.

3,403293C, C++Jul 7, 20201 years agoNOASSERTION

Similar Papers

Cite this paper

@article{wang2019slowmo,
  title  = {SlowMo: Improving Communication-Efficient Distributed SGD with Slow Momentum},
  author = {Jianyu Wang and Vinayak Tantia and Nicolas Ballas and Michael Rabbat},
  year   = {2019},
  eprint = {1910.00643},
  archivePrefix = {arXiv},
  url    = {https://arxiv.org/abs/1910.00643}
}

Add a badge to your README

Shows whether official code is linked for this paper.

Code of Paper badge
[![Code of Paper](https://codeofpaper.com/badge/1910.00643.svg)](https://codeofpaper.com/paper/1910.00643)

Discussion