Python 镜像策略与中心存储策略的区别
我阅读了Python 镜像策略与中心存储策略的区别,python,tensorflow2.0,Python,Tensorflow2.0,我阅读了CentralStorageStrategy和MirroredStrategy的文档,但无法理解它们之间的本质区别 在镜像策略中: 模型中的每个变量都跨所有副本镜像 在中心存储策略中: 变量不镜像,而是放在CPU上,操作在所有本地GPU上复制 资料来源: 这在实践中意味着什么?CentralStorageStrategy的用例是什么?如果变量在此策略中放置在CPU上,那么培训是如何工作的?在您通常的单一GPU非分布式用例(例如卷积层的权重矩阵)中考虑一个特定变量(称之为“my_var”)
CentralStorageStrategy
和MirroredStrategy
的文档,但无法理解它们之间的本质区别
在镜像策略中
:
模型中的每个变量都跨所有副本镜像
在中心存储策略中
:
变量不镜像,而是放在CPU上,操作在所有本地GPU上复制
资料来源:
这在实践中意味着什么?
CentralStorageStrategy的用例是什么?如果变量在此策略中放置在CPU上,那么培训是如何工作的?在您通常的单一GPU非分布式用例(例如卷积层的权重矩阵)中考虑一个特定变量(称之为“my_var”)
如果使用4个GPU,MirroredStrategy将创建4个变量,而不是“my_var”变量,每个GPU上一个变量。但是,每个变量都有相同的值,因为它们总是以相同的方式更新。因此,变量更新在所有GPU上同步进行
对于CentralStorageStrategy,在主机(CPU)内存中只为“my_var”创建一个变量。更新只发生在一个地方
哪一个更好可能取决于计算机的拓扑结构以及CPU-GPU通信与GPU-GPU通信的速度。如果GPU可以彼此快速通信,镜像策略可能更有效。但我会对它进行基准测试以确定。这是在一台机器上同步更新的参数服务器方法吗?