Является ли Tensorflow 2.0 поточно-ориентированным?
Точнее говоря, вызывает ли fit
/ predict
или другие методы на той же модели из разных потоков безопасные в Tensorflow 2.0 (с использованием Keras API)?
Я не смог найти четкого ответа из документации или поиска в Интернете.
Я видел этот вопрос от 2017 года, в котором говорится, что Keras (хотя в этом вопросе упоминался бэкэнд Theano ) является поточно-ориентированным, но вы должны вызвать закрытый метод model._make_predict_function()
, прежде чем вызывать predict()
(который, я считаю, не рекомендуется) Тем не менее, я прочитал это сообщение в блоге от 2019 года, в котором говорится, что он не является потокобезопасным.
Я также нашел этот вопрос от 2018 года, в котором говорится, что Tensorflow (pre-Keras) является поточно-ориентированным, но вы должны убедиться, что вы используете стандартную чистоту графа (что я считаю неуместным для Tensorflow 2. * из-за стремительного выполнения). Когда я посмотрел потокобезопасность в нетерпеливом исполнении, я увидел эту статью в документах, где упоминается поточностная безопасность нетерпеливого исполнения, но это относится к Java.
И Еще более запутанно, я видел реализацию A3 C в Github с Keras с этого года (2020), которая использовала блокировки перед обучением сетей с общей политикой / ценностями, намекая на то, что Keras не является поточно-ориентированным, и вам нужно приобрести заблокировать перед тренировкой общей модели. Тем не менее, мне кажется, что реализация имеет недостатки, потому что каждый работник создавал и использовал свою собственную уникальную блокировку, которая отказывается от цели иметь блокировку. Я пришел к выводу, что либо его код выполнялся успешно независимо от «блокировки», потому что Keras является поточно-ориентированным, либо у него есть ошибка.
Я провел свой собственный финальный тест, где я запустил два потока, подходящих к одному и тому же. смоделируйте для разных выходов (для одного и того же постоянного ввода) и попытались вызвать предикат во время обучения, и это, кажется, работает, но я задаю этот вопрос, потому что хочу убедиться. Есть ли случаи, когда Tensorflow 2.0 / Keras не безопасны для потоков?