使用Keras API线程的Tensorflow 2.0是否安全



Tensorflow 2.0线程安全吗

更具体地说,在Tensorflow 2.0(使用Keras API(中,从不同线程对同一模型调用fit/predict或其他方法是否安全?

从文档或网上查找都找不到明确的答案。

我在2017年看到了这个问题,它说Keras(尽管这个问题提到了Theano后端(是线程安全的,但在调用predict()之前必须调用私有方法model._make_predict_function()(我认为这已经被否决了(。然而,我读到了2019年的这篇博客文章,其中说它不安全。

我还在2018年发现了一个问题,说Tensorflow(Keras之前(是线程安全的,但你必须确保使用默认的图显式(我认为这与Tensorflow 2.*无关,因为它渴望执行(。当我查找急切执行中的线程安全性时,我在文档中看到了这篇文章,它确实提到了急切执行的线程安全,但它与Java有关。

更令人困惑的是,我从今年(2020年(开始在Github中看到了一个使用Keras的A3C实现,该实现在训练共享策略/价值网络之前使用锁,这暗示Keras不是线程安全的,在训练共享模型之前必须获得锁。然而,在我看来,实现是有缺陷的,因为每个工作人员都在创建和使用自己独特的锁,这违背了拥有锁的目的。我的结论是,要么是因为Keras是线程安全的,所以不管"锁"如何,他的代码都能成功运行,要么是他有一个bug。

我做了自己的最后一个测试,我运行了两个线程,将相同的模型拟合到不同的输出(对于相同的恒定输入(,并在训练期间尝试调用predict,它似乎有效,但我问这个问题是因为我想确保。Tensorflow 2.0/Keras是否存在线程不安全的情况?

根据本期GitHub中的Keras贡献者:

Keras模型不能保证线程安全。考虑用于CPU推理的每个线程中的模型的独立副本。

最新更新