3年前曾经写过关于分布式环境下batch normalization是否需要特殊实现的讨论:
batch normalization的multi-GPU版本该怎么实现? 【Tensorflow 分布式PS/Worker模式下异步更新的情况】
当时我给出的观点就是在多卡环境下batch normalization使用每个step内的各显卡batch上的相关值进行同步的话会和单卡情况取得相似的结果,因此我给出的结论就是多卡情况下是没有必要针对batch normalization算子开发什么高深的替代版本,你不论是同步更新还是异步更新的情况下对每个显卡上运行得到的batch normalization算子中的参数进行同样的update就可以了,因为从我之前做的仿真使用中可以看出不论是单机情况还是多卡同/异步更新情况下都是对batch normalization算子中参数的估计,而这几种方法之间的差别其实不大,可以说极为相近,也正是如此在几年前我就得出了没有必要为多卡/分布式环境下设计特殊的batch normalization算子,不管是同步更新还是异步更新同时对batch normalization算子中的参数进行同样操作就和单卡情况下不会有太大的差距。几年前得到这个结论的时候只是考个人推断和仿真实验获得的,并没有在实际的代码上跑过,当时主要的原因就是省时、省力,同时也是对但是网上的各种针对多卡/分布式环境下开发出的特殊batch normalization算子的一种反对意见,最近看到一篇可以佐证我观点的文章这里给出相关链接并摘录出部分内容:
https://zhuanlan.zhihu.com/p/402198819
=========================================
标签:异步,multi,多卡,batch,算子,GPU,normalization,分布式 From: https://www.cnblogs.com/devilmaycry812839668/p/17585527.html