Tensorflow 中的同步与异步计算
Synchronous vs asynchronous computation in Tensorflow
在 Tensorflow CIFAR 教程中它谈到了使用多个 GPU 并给出了这个警告:
"Naively employing asynchronous updates of model parameters leads to sub-optimal training performance because an individual model replica might be trained on a stale copy of the model parameters. Conversely, employing fully synchronous updates will be as slow as the slowest model replica."
这是什么意思?有人可以提供一个非常简单的示例来说明此警告吗?
假设你有n个工人
异步是指每个worker只是读取参数,计算更新,写入更新的参数,完全没有任何锁机制。工人可以自由地覆盖彼此的工作。
假设 worker 1 由于某种原因运行缓慢。 Worker 1 在时间 t 读取参数,然后在时间 t+100 尝试写入更新的参数。与此同时,worker 2-n 在时间步 t+1、t+2 等都完成了大量更新。当慢速 worker 1 最终完成写入时,它会覆盖其他 worker 已取得的所有进展。
全同步意味着所有的worker都是协调的。每个工人读取参数,计算梯度,然后等待其他工人完成。然后学习算法计算它们计算的所有梯度的平均值,并根据该平均值进行更新。如果工人 1 很慢,需要 100 个时间步才能完成,但是工人 2-n 都在时间步 2 上完成,那么大多数工人将大部分时间坐着等待工人 1。
在 Tensorflow CIFAR 教程中它谈到了使用多个 GPU 并给出了这个警告:
"Naively employing asynchronous updates of model parameters leads to sub-optimal training performance because an individual model replica might be trained on a stale copy of the model parameters. Conversely, employing fully synchronous updates will be as slow as the slowest model replica."
这是什么意思?有人可以提供一个非常简单的示例来说明此警告吗?
假设你有n个工人
异步是指每个worker只是读取参数,计算更新,写入更新的参数,完全没有任何锁机制。工人可以自由地覆盖彼此的工作。 假设 worker 1 由于某种原因运行缓慢。 Worker 1 在时间 t 读取参数,然后在时间 t+100 尝试写入更新的参数。与此同时,worker 2-n 在时间步 t+1、t+2 等都完成了大量更新。当慢速 worker 1 最终完成写入时,它会覆盖其他 worker 已取得的所有进展。
全同步意味着所有的worker都是协调的。每个工人读取参数,计算梯度,然后等待其他工人完成。然后学习算法计算它们计算的所有梯度的平均值,并根据该平均值进行更新。如果工人 1 很慢,需要 100 个时间步才能完成,但是工人 2-n 都在时间步 2 上完成,那么大多数工人将大部分时间坐着等待工人 1。