Scalable Deep Learning on Distributed Infrastructures: Challenges, Techniques and Tools