Horovod是一個支持TensorFlow、Keras、PyTorch和Apache MXNet的分布式訓練框架。Horovod的目標是讓分布式深度學習更快更易用。
為啥不用原生的TensorFlow分布式訓練?
1、代碼改動多少?
2、比原生的分布式訓練快多少?
Horovod用的MPI比分布式TensorFlow用的parameter servers,簡單直接得多。而且,Horovod更快,下面的benchmark用了128台服務器,每台機器4張Pascal GPU,機器之間是有RoCE能力的25Gbit/s網絡。
對於Inception V3和ResNet-101,Horovod有90%的擴展效率,對於VGG-16,則是68%。
安裝Horovod:(這些環境問題要注意!!!)
1、安裝OpenMPI或者其他MPI實現。OpenMPI 3.1.3有個問題會導致卡住,建議降級到3.1.2,或者升級到4.0.0。
2、如果是用PyPI裝的TensorFlow,要確保裝g++-4.8.5或者g++-4.9。如果是用PyPI裝的PyTorch,要確保裝g++-4.9或者以上。如果是用Conda裝的TensorFlow或者PyTorch,要確保裝gxx_linux-64 Conda包。
3、安裝Horovod pip包。
pip install horovod
通過docker使用Horovod:https://github.com/horovod/horovod/blob/master/docs/docker.rst 。
單機運行docker:
$ nvidia-docker run -it horovod:latest // 可能還要別的參數,例如--net=host root@c278c88dd552:/examples# horovodrun -np 4 -H localhost:4 python keras_mnist_advanced.py // 舊版本只有mpirun,不是horovodrun
下面的錯誤信息是因為容器運行沒有用--privileged參數
Read -1, expected 131072, errno = 1
添加Mellanox RDMA支持
如果你有Mellanox網卡,
參考鏈接:
https://github.com/horovod/horovod
https://arxiv.org/pdf/1802.05799.pdf