Tensorflow镜像策略和Horovod分布策略
Posted
技术标签:
【中文标题】Tensorflow镜像策略和Horovod分布策略【英文标题】:Tensorflow Mirror Strategy and Horovod Distribution Strategy 【发布时间】:2019-07-27 05:44:54 【问题描述】:我正在尝试了解 Tensorflow 镜像策略和 Horovod 分布策略之间的基本区别。
从文档和源代码调查中,我发现 Horovod (https://github.com/horovod/horovod) 正在使用消息传递协议 (MPI) 在多个节点之间进行通信。具体来说,它使用 MPI 的 all_reduce、all_gather。
根据我的观察(我可能错了)Mirror Strategy 也在使用 all_reduce 算法(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute)。
他们都使用数据并行的同步训练方法。 所以我有点困惑它们有什么不同?差异仅在实现上还是存在其他(理论)差异?
镜像策略和horovod相比表现如何?
【问题讨论】:
看看logicalclocks.com/… 【参考方案1】:Mirror Strategy 有自己的 all_reduce 算法,该算法在后台使用远程过程调用 (gRPC)。
就像你提到的,Horovod 使用 MPI/GLOO 在多个进程之间进行通信。
【讨论】:
【参考方案2】:关于性能,我的一位同事在使用 4 个 Tesla V100 GPU 之前使用来自here 的代码进行了实验。结果表明 3 种设置效果最好:replicated
和 all_reduce_spec=nccl
、collective_all_reduce
和经过适当调整的 allreduce_merge_scope
(例如 32)和 horovod
。我没有看到这 3 个之间有显着差异。
【讨论】:
以上是关于Tensorflow镜像策略和Horovod分布策略的主要内容,如果未能解决你的问题,请参考以下文章
CoRR 2018 | Horovod: Fast and Easy Distributed Deep Learning in Tensorflow
horovod使用学习之一 -- hvd.DistributedOptimizer(optimizer)