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可以彼此快速通信,镜像策略可能更有效。但我会对它进行基准测试以确定。

这是在一台机器上同步更新的参数服务器方法吗?