Tensorflow中的同步与异步计算

在Tensorflow的CIFAR教程中,提到了使用多GPU,并给出了以下警告:

“简单地使用模型参数的异步更新会导致训练性能不佳,因为单个模型副本可能会在一个陈旧的模型参数副本上进行训练。相反,完全同步更新的速度将与最慢的模型副本一样慢。”

这意味着什么?能否提供一个非常简单的例子来说明这个警告?


回答:

假设你有n个工作者。

异步意味着每个工作者只是读取参数,计算更新,然后写入更新后的参数,完全没有锁定机制。工作者可以自由地覆盖彼此的工作。假设工作者1由于某些原因速度较慢。工作者1在时间t读取参数,然后尝试在时间t+100写入更新后的参数。与此同时,工作者2到n在时间步t+1、t+2等已经完成了很多更新。当慢速的工人1最终进行写入时,它会覆盖其他工作者所做的所有进展。

完全同步意味着所有工作者都是协调的。每个工作者读取参数,计算梯度,然后等待其他工作者完成。然后,学习算法计算他们计算的所有梯度的平均值,并基于这个平均值进行更新。如果工作者1非常慢,需要100个时间步才能完成,但工作者2到n都在第2个时间步完成,那么大多数工作者将大部分时间都花在等待工作者1上,什么也不做。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注