TensorFlow 的 ParameterServerStrategy 何时优于 MultiWorkerMirroredStrategy?

Min*_*ark 1 distributed-computing tensorflow tensorflow2.0

在跨多个服务器和 GPU 训练神经网络时,我想不出ParameterServerStrategyMultiWorkerMirroredStrategy.

ParameterServerStrategy的主要用例是什么,为什么它比 using 更好MultiWorkerMirroredStrategy

Pte*_*tyl 5

  • MultiWorkerMirroredStrategy 用于跨多个worker的同步分布式训练,每个worker可以有多个GPU

  • ParameterServerStrategy: 支持参数服务器。可用于多GPU同步本地训练或异步多机训练。

主要区别之一是 ParameterServerStrategy 可用于异步训练,而 MultiWorkerMirroredStrategy 用于同步分布式训练。在 MultiWorkerMirroredStrategy 中,模型中所有变量的副本保存在所有工作人员的每个设备上,并且需要一种通信方法来保持所有变量同步。相比之下,在 ParameterServerStrategy 中,模型的每个变量都放在一个参数服务器上。

这很重要,因为:

  • 在同步训练中,所有工人在训练时期和步骤方面保持同步,其他工人需要等待失败或被抢占的工人重新启动才能继续。如果失败或被抢占的工作人员由于某种原因没有重新启动,您的工作人员将继续等待。

  • 相比之下,在 ParameterServerStrategy 中,每个 worker 都独立运行相同的代码,但参数服务器运行的是标准服务器。这意味着虽然每个工作人员将在所有 GPU 上同步计算单个梯度更新,但工作人员之间的更新是异步进行的。仅在第一个副本上发生的操作(例如增加全局步骤)将发生在每个 worker 的第一个副本上。因此,与 MultiWorkerMirroredStrategy 不同的是,不同的 worker 不会相互等待。

我想问题是,您是否希望工作人员失败,并且在 MultiWorkerMirroredStrategy 时重新启动他们的延迟会减慢培训速度吗?如果是这种情况,也许 ParameterServerStrategy 更好。

编辑:对评论中问题的回答:

那么 PSS 的唯一好处是它比 MWMS 更能抵抗失败的工人吗?

不完全是 - 即使工作人员在 MWMS 中没有失败,因为工作人员仍然需要同步,可能会出现网络瓶颈。

如果是这样,那么我想它只有在对许多工人进行培训时才有用,比如 20 名或更多,否则在培训期间工人失败的可能性很低(并且可以通过保存常规快照来避免)。

也许不是,这取决于情况。也许在您的场景中,失败的可能性很低。在其他人的情况下,可能会有更高的概率。对于相同数量的工人,工作时间越长,在工作中间发生故障的可能性就越大。为了进一步说明(用一个过于简单的例子),如果我有相同数量的节点,但它们只是更慢,它们可能需要更长的时间来完成一项工作,因此在此期间发生任何类型的中断/故障的可能性更大工作。

(并且可以通过保存常规快照来避免)。

不确定我理解你的意思 - 如果一个工人失败,并且你保存了一个快照,那么你就没有丢失数据。但是工作人员仍然需要重新启动。在失败和重新启动之间的过渡期间,其他工作人员可能正在等待。

I/O 饱和是否有可能的好处?如果更新是异步的,I/O 的时间会更分散,对吗?但也许这个好处被它使用更多的 I/O 取消了?你能详细一点吗?

我将首先尝试从概念的角度来回答它。

  • 我会说尝试从不同的角度看待它 - 在同步操作中,您正在等待其他事情完成,并且您可能会闲着,直到某些事情为您提供所需的东西。与异步操作相反,您做自己的工作,当您需要更多工作时,您会提出要求。

  • 关于同步操作或异步操作哪个更好,没有硬性规定。这取决于实际情况。

我现在尝试从优化的角度来回答:

I/O 饱和是否有可能的好处?如果更新是异步的,I/O 的时间会更分散,对吗?但也许这个好处被它使用更多的 I/O 取消了?你能详细一点吗?

在分布式系统中,您的瓶颈可能是 CPU / GPU、磁盘或网络。现在网络真的很快,在某些情况下比磁盘还快。根据您的工人配置 CPU / GPU 可能是瓶颈。所以这真的取决于你的硬件和网络的配置。

因此,我会做一些性能测试来确定您系统中的瓶颈在哪里,并针对您的特定问题进行优化。

编辑:其他后续问题:

最后一件事:根据您的经验,PSS 用于哪些用例?我的意思是,PSS 和 MWMS 显然都适用于大型数据集(否则一台机器就足够了),但是模型呢?PSS 对于较大的模型会更好吗?根据您的经验,MWMS 使用频率更高吗?

我认为成本和正在处理的问题类型可能会影响选择。例如,AWS 和 GCP 都提供“现货实例”/“抢占式实例”,它们是可以随时带走的大打折扣的服务器。在这种情况下,使用 PSS 可能是有意义的——即使机器故障不太可能发生,但一个实例可能会在没有通知的情况下被带走,因为它是一个“现场实例”。如果使用 PSS,那么服务器消失对性能的影响可能没有使用 MWMS 时那么大。如果您使用的是专用实例,这些实例是专供您使用的,不会被带走——唯一的中断风险是机器故障。在这种情况下,如果您可以利用性能优化或插件架构,MWMS 可能会更具吸引力。