在TensorFlow优化器中,use_locking=True是什么意思?

10

这个锁只保护异步更新吗?还是会让其他对变量的访问等待更新完成后再执行?我正在同时使用同一个模型进行训练和推理,并且想确保推理始终在一致的模型上进行。

1个回答

12

在创建TensorFlow优化器或变量赋值操作时,传递use_locking=True会导致在变量的相关更新周围获取锁。在相同变量上使用use_locking=True创建的其他优化器/赋值操作也将被串行化。

然而,当使用此选项时,有两个注意事项:

  • 变量的读取不在锁下执行,因此可能会看到中间状态和部分应用的更新。序列化读取需要额外的协调,例如由tf.train.SyncReplicasOptimizer提供。

  • 对于相同变量的写入(优化器/赋值操作)仍然可以使用use_locking=False,并且不会获取锁。程序员需要确保这些写入不会发生。


在ps-worker模式下,多个worker的子图会更新同一变量。例如,在ApplyFtrl中,默认use_locking=False,多个写操作将处理相同的内存区域,这是一个bug还是在这种情况下我们必须打开use_locking? - Tongxuan Liu
1
@mrry 当你说“同一变量上使用 use_locking=True 创建的其他优化器/分配将被序列化”时,你是什么意思,请解释。 - Yash Kant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接