我试图了解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相比,镜像策略的性能如何?
答案 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
与replicated
,all_reduce_spec=nccl
与经过适当调整的collective_all_reduce
(例如32)和allreduce_merge_scope
。我发现这3个之间没有显着差异。