我正在尝试理解Tensorflow镜像策略和Horovod分发策略之间的基本区别。
从文档和源代码调查中,我发现Horovod (https://github.com/horovod/horovod)使用消息传递协议在多个节点之间进行通信。具体地说,它使用了MPI的all_gather all_reduce。
根据我的观察(我可能是错的),镜像策略也使用all_reduce算法(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute)。
它们都使用数据并行、同步训练方法。所以我有点困惑他们有什么不同?只是实现上的不同,还是有其他(理论上)的不同?
与horovod相比,镜像策略的性能如何?
发布于 2020-10-06 08:06:49
镜像策略有自己的all_reduce算法,它在幕后使用远程过程调用(gRPC)。
正如您所提到的,Horovod使用MPI/GLOO在多个进程之间进行通信。
发布于 2020-10-06 12:15:26
关于性能,我的一位同事在使用来自here的代码使用4个特斯拉V100 GPU之前进行了实验。结果表明,3种设置效果最好:带有all_reduce_spec=nccl的replicated、带有适当调整的allreduce_merge_scope (例如32)的collective_all_reduce和horovod。我没有看到这三个之间的显著差异。
https://stackoverflow.com/questions/55008213
复制相似问题