paddle mpi cpu 分布式训练 各节点相同参数差别很大
Created by: maosengshulei
在使用fluid.DistributeTranspiler()在mpi集群进行分布式训练时发现,使用同步训练的模式,每个pass训练完毕之后我打印了网络最后一层fc层的参数值,发现各节点 的参数值差距非常大,按照paddle文档的说明:
在同步训练方式下,所有的trainer节点,会在每个mini-batch 同步地合并所有节点的梯度数据并发送给parameter server完成更新。每个pserver进程会保存一部分模型参数,并负责接收从trainer发送的梯度并更新这些模型参数;每个trainer进程会保存一份完整的模型,并使用一部分数据进行训练,然后向pserver发送梯度,最后从pserver拉取更新后的参数。
按理说各节点的参数差距应该很小。实际训练的最后一个pass完之后,节点0的参数:('Actor_policy_fc_2', array([[-0.09919014], [-0.07706659], [ 0.15149316], [ 0.24905424], [-0.17098974], [-0.11270164], [-0.01968399], [ 0.2743668 ], [-0.1433557 ], [ 0.14188483], [ 0.20844515], [-0.0490464 ], [ 0.11418835], [-0.37285838], [-0.18944874], [-0.02813045], [-0.17195037], [-0.07114062], [ 0.04488323], [-0.0181214 ], [-0.07311901], [ 0.15194745], [ 0.05776843], [ 0.16771908], [ 0.10417483], [-0.1317194 ], [-0.13919024], [-0.55580485], [-0.11387549], [-0.16347751], [ 0.12223423], [ 0.38121474]], dtype=float32))。 节点1的参数: ('Actor_policy_fc_2', array([[ 0.14999457], [ 0.1127115 ], [ 0.27952927], [ 0.07309379], [ 0.04199386], [-0.1717749 ], [ 0.04166281], [ 0.1752305 ], [ 0.10016509], [-0.2413249 ], [ 0.04228054], [ 0.11794597], [-0.09898959], [-0.23881884], [ 0.04556027], [ 0.3225479 ], [ 0.35859534], [ 0.03653806], [ 0.07052232], [-0.05517238], [-0.16326298], [-0.3494468 ], [-0.08201389], [-0.21375085], [-0.46986333], [ 0.14656068], [ 0.39859325], [ 0.07877456], [ 0.37925312], [ 0.09065256], [-0.1606088 ], [ 0.22432764]], dtype=float32))
感觉不符合文档的说明。