Я использую Keras с бэкэндом TensorFlow в кластерной среде.
Я не делаю никакого обратного распространения в сети, я использую только predict(...)
, layer.get_weights()
и layer.set_weights(...)
.
Я управляю параметрами нейронной сети напрямую, оптимизирую функцию пригодности, используя стратегии эволюции.
У меня есть мастер, генерирующий N наборов параметров (весов и смещений), которые затем передаются работникам с использованием MPI. Для этого я использую mpi4py. Затем эти работники устанавливают эти параметры в своем собственном экземпляре последовательной модели (керас) и оценивают функцию пригодности, прогнозируя действия с использованием этой сети. Затем пригодность передается обратно мастеру, который адаптирует распределение, из которого выбираются наборы параметров.
При запуске моего кода я получаю следующее предупреждение:
Процесс MPI выполнил операцию, включающую вызов
fork()
системный вызов для создания дочернего процесса. Открытый MPI в настоящее время
работать в состоянии, которое может привести к повреждению памяти или
другие системные ошибки; Ваша работа MPI может зависать, зависать или производить тихий
повреждение данных. Использование fork()
(или system()
или других вызовов, которые
создавать дочерние процессы) настоятельно не рекомендуется.
Я реализовал версию моего алгоритма без keras / tenorflow, и ошибка исчезла. Поэтому я полагаю, что тензор потока выполняет вызов system()
или fork()
. Можно ли предотвратить использование таких вызовов tenorflow?