Tensorflow镜像策略和Horovod分发策略

时间:2019-03-05 17:15:22

标签: tensorflow deep-learning mpi distributed-tensorflow horovod

我试图了解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相比,镜像策略的性能如何?

2 个答案:

答案 0 :(得分:0)

Mirror Strategy具有自己的all_reduce算法,该算法在后台使用远程过程调用(gRPC)。

就像您提到的那样,Horovod使用MPI / GLOO在多个进程之间进行通信。

答案 1 :(得分:0)

关于性能,我的一位同事在使用来自here的代码使用4个Tesla V100 GPU之前进行了实验。结果表明,三种设置效果最佳:> memory.limit() [1] 3498 > memory.limit(size=10497) [1] 10497 > require(neonUtilities) Loading required package: neonUtilities > Swcws <- loadByProduct(dpID="DP1.00094.001", + site=c("JORN"), + startdate="2017-07", + enddate="2020-08") Finding available files |===========================================================================| 100% Continuing will download files totaling approximately 1.1 GiB. Do you want to proceed y/n: y Downloading 38 files |===========================================================================| 100% Unpacking zip files using 1 cores. |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 59s |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s Stacking operation across a single core. Stacking table SWS_1_minute |++++++++++++++++++++++++++++++++++++++++ | 79% ~01m 02s Error: cannot allocate vector of size 349 Kb replicatedall_reduce_spec=nccl与经过适当调整的collective_all_reduce(例如32)和allreduce_merge_scope。我发现这3个之间没有显着差异。