Ответ 1
Да, Keras является потокобезопасным, если вы уделяете ему немного внимания.
Фактически, в обучении подкрепления существует алгоритм, называемый Критики актера асинхронного преимущества (A3C), где каждый агент полагается на одну и ту же нейронную сеть на скажите им, что они должны делать в определенном состоянии. Другими словами, каждый поток вызывает model.predict
одновременно, как и в вашей проблеме. Пример реализации с Keras этого здесь.
Однако вы должны обратить особое внимание на эту строку, если заглянете в код:
model._make_predict_function() # have to initialize before threading
Это никогда не упоминается в документах Keras, но необходимо, чтобы он работал одновременно. Короче говоря, _make_predict_function
- это функция, которая компилирует функцию predict
. В настройке нескольких потоков вы должны вручную вызвать эту функцию для компиляции predict
заранее, в противном случае функция predict
не будет скомпилирована до тех пор, пока вы ее не запустите в первый раз, что будет проблематично, если многие потоки вызовут его сразу. Вы можете увидеть подробное объяснение здесь.
Я до сих пор не встречал никаких других проблем с многопоточными потоками в Keras.