![a53164f458544e9c9797d7d2e0736a3e.png](https://i-blog.csdnimg.cn/blog_migrate/6ca8a75295db5d7e722873ab358446ad.png)
1介绍
Horovod 是 Uber 开源的又一个深度学习工具,它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点,可为用户实现分布式训练提供帮助。使用比tensorflow提高的分布式特性要简单的多,能大幅提高gpu利用率,而且提高性能。具体特性介绍看下面页面。
参考页面:
Meet Horovod: Uber’s Open Source Distributed Deep Learning Framework for TensorFloweng.uber.com![5eab8eabd2060466aac420e4e8ec1c99.png](https://i-blog.csdnimg.cn/blog_migrate/0dda49757faf87abf0c21430fb63f5ff.png)
![dbb99e882d9cd3b5b2344945c5c6863e.png](https://i-blog.csdnimg.cn/blog_migrate/73c5a84d6e540f270d6d1e6c02f990f1.jpeg)
2.安装
1) 依赖库
openmpi 4.0.0
g++-4.8.5
或者g++-4.9
nccl 2
nv_peer_driver
horovod
2) openmpi安装
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.0.tar.gz
gunzip -c openmpi-4.0.0.tar.gz | tar xf -
cd openmpi-4.0.0
./configure --prefix=/usr/local
make all install
add PATH=/usr/local/bin:$PATH to /etc/profile
source /etc/profile
参考页面:
FAQ: Building Open MPIwww.open-mpi.org Open MPI: Version 4.0www.open-mpi.org3) nccl 安装
wget https://developer.download.nvidia.cn/compute/machine-learning/repos/rhel7/x86_64/nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm
rpm -ivh nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm
yum provides '*/applydeltarpm'
yum install deltarpm -y
sudo yum install libnccl-2.4.8-1+cuda10.0 libnccl-devel-2.4.8-1+cuda10.0 libnccl-static-2.4.8-1+cuda10.0
参考页面:
https://developer.nvidia.com/nccl/nccl-downloaddeveloper.nvidia.com4) psutil安装
yum install python36-devel.x86_64
pip3.6 install --user psutil
5) horovod
pip3.6 install horovod
参考页面:
https://github.com/horovod/horovod#installgithub.com3.使用
支持分布式训练需要的改动是非常简单的,不需要配ClusterSpec,也不需要任何tensorflow的分布式特性支持,完全使用horovod的特性即可,启动管理也很简单,上述安装过程经过多次验证。
1) 修改
支持horovod需要修改的代码很少,具体参考horovod的github文档的Usage部分以及给的实例,实例挺丰富,按照实例修改即可,上手非常简单。另外,有几个openmpi的概念需要熟悉下。
github: https://github.com/horovod/horovod
examples: https://github.com/horovod/horovod/tree/master/examples
openmpi核心概念:https://github.com/horovod/horovod/blob/master/docs/concepts.rst
2) 运行
运行直接使用horovod提供的脚本提交即可,下面是完整的运行实例,np参数指定总进程数,H参数指定机器列表,格式为hostname: 进程数,后面是启动脚本,跨机器需要配置ssh密钥。
测试过程出现了几个问题需要注意下:
1) 进程数<=GPU,多于GPU数会出现allreduce问题,运行前最好配置CUDA_VISIBLE_DEVICES环境变量;
2) 运行时每个进程会占用进程数的gpu,占用显存很少,可能是用于数据交换的,这个不必在意;
sh: horovodrun -np 4 -H localhost:4 python3 test.py
参考页面:
https://github.com/horovod/horovodgithub.com Multi-GPU enabled BERT using Horovodlambdalabs.com![d874325f6bcfec13fc6a931954d94229.png](https://i-blog.csdnimg.cn/blog_migrate/258893c83d7c8365f8d4ee7cbd5bc4e9.png)