本文基于Ubuntu 16.04 系统介绍Horvod安装使用情况。
官方安装教程见:https://github.com/horovod/horovod#id6。
其中,Open MPI的安装可见本人博客https://blog.csdn.net/u013431916/article/details/80230152。
如需NCCL支持,可见本人博客https://blog.csdn.net/u013431916/article/details/82759525。
如不需使用GPU,可使用以下指令快速安装:
$ pip install horovod
horovod on GPU的官方教程见https://github.com/horovod/horovod/blob/master/docs/gpus.rst#horovod-on-gpu。简单来说,如果希望GPU发挥高性能,先安装NCCL,然后在使用pip安装horovod时,设置使用NCCL进行allreduce操作。如:
$ HOROVOD_GPU_ALLREDUCE=NCCL pip install --no-cache-dir horovod
需要注意的是,如果服务器上有多个版本的cuda,并且你所使用的并非软链接到/usr/local/cuda的版本,那么需要设置cuda路径等变量:
$ HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_CUDA_HOME=/usr/local/cuda-9.0 HOROVOD_NCCL_HOME=/usr/local/cuda-9.0 pip install --no-cache-dir horovod
否则可能出现计算能力不匹配等问题。
horovod的使用,以单机使用2块GPU,启动2个worker为例:
$ CUDA_VISIBLE_DEVICES='0,1' horovodrun -np 2 -H localhost:2 python ~/test/horovod/tensorflow_mnist.py
其中,tensorflow_mnist.py见https://github.com/horovod/horovod/blob/master/examples/tensorflow_mnist.py
附:
- 查看tensorflow使用的NCCL版本:
设置环境变量
$ export NCCL_DEBUG=VERSION
这样,在NCCL首次调用ncclCommInitAll或者ncclCommInitRank的时候会打印NCCL版本。
参考: