它是否只能防止异步更新,还是会导致对变量的其他访问等待更新?我同时使用相同的模型进行训练和推理,并希望确保始终在一致的模型上进行推理。
答案 0 :(得分:9)
在创建TensorFlow optimizer或变量assignment op时传递use_locking=True
会导致围绕变量的相关更新获取锁定。 <_ 1}}创建的同一变量的其他优化器/赋值将被序列化。
但是,使用此选项时您应该牢记两个警告:
在锁定下不读取变量,因此可以看到中间状态和部分应用的更新。序列化读取需要额外的协调,例如use_locking=True
提供的协调。
仍然可以使用tf.train.SyncReplicasOptimizer
将(优化器/赋值)写入同一个变量,并且不会获取锁定。程序员负责确保不会发生这些写入。