Abstracting Systems Challenges from Distributed Deep Learning