在Tensorflow CIFAR教程中,它讨论了使用多个GPU并提供此警告:
"天真地使用模型参数的异步更新会导致次优的训练性能,因为单个模型副本可能会在模型参数的陈旧副本上进行训练.相反,使用完全同步更新将与最慢的模型副本一样慢."
这是什么意思?有人可以提供一个非常简单的例子来说明这个警告吗?
假设你有n个工人.
异步意味着每个工作者只读取参数,计算更新并写入更新的参数,而根本没有任何锁定机制.工人可以自由地覆盖彼此的工作.假设工人1因某种原因而变慢.Worker 1在时间t读取参数,然后尝试在时间t + 100写入更新的参数.与此同时,工人2-n在时间步骤t + 1,t + 2等都进行了大量更新.当慢工作者1最终写入时,它会覆盖其他工作人员所做的所有进度.
完全同步意味着所有工人都得到协调.每个工人都读取参数,计算梯度,然后等待其他工人完成.然后,学习算法计算它们计算的所有梯度的平均值,并根据该平均值进行更新.如果工人1非常慢并且需要100个时间步骤才能完成,但是工人2-n都按时完成第2步,那么大多数工人将花费大部分时间坐在什么都不做,等待工人1.