Параллельное обучение модели Keras с использованием многопроцессорной обработки python

#python #tensorflow #keras #training-data #early-stopping

#python #tensorflow #keras #обучение-данные #ранняя остановка

Вопрос:

Я одновременно тренирую на рабочей станции с 64-ядерным процессором несколько моделей Keras MLP. Поэтому я использую пул многопроцессорной обработки Python для выделения для каждого процессора одной обучаемой модели. Для обучаемой модели я использую раннюю остановку и обратный вызов контрольной точки модели, определенный таким образом:

 es = EarlyStopping(monitor='val_mse', mode='min', verbose=VERBOSE_ALL, patience=10)
mc = ModelCheckpoint('best_model.h5', monitor='val_mse', mode='min', verbose=VERBOSE_ALL, save_best_only=True)
  

Используя единую модель, обучение проходит без каких-либо проблем.
Однако, когда я начинаю использовать пул многопроцессорной обработки, у меня возникают проблемы с обратными вызовами. Возникает проблема с сохранением модели hdf5:

 Traceback (most recent call last):
  File "C:UsersICN_adminAnaconda3libsite-packagestensorflow_corepythonkerascallbacks.py", line 1029, in _save_model
    self.model.save(filepath, overwrite=True)
  File "C:UsersICN_adminAnaconda3libsite-packagestensorflow_corepythonkerasenginenetwork.py", line 1008, in save
    signatures, options)
  File "C:UsersICN_adminAnaconda3libsite-packagestensorflow_corepythonkerassavingsave.py", line 112, in save_model
    model, filepath, overwrite, include_optimizer)
  File "C:UsersICN_adminAnaconda3libsite-packagestensorflow_corepythonkerassavinghdf5_format.py", line 92, in save_model_to_hdf5
    f = h5py.File(filepath, mode='w')
  File "C:UsersICN_adminAnaconda3libsite-packagesh5py_hlfiles.py", line 394, in __init__
    swmr=swmr)
  File "C:UsersICN_adminAnaconda3libsite-packagesh5py_hlfiles.py", line 176, in make_fid
    fid = h5f.create(name, h5f.ACC_TRUNC, fapl=fapl, fcpl=fcpl)
  File "h5py_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5pyh5f.pyx", line 105, in h5py.h5f.create
OSError: Unable to create file (file signature not found)
  

Эта ошибка возникает более или менее спорадически, и через исключения я могу перехватить ее для повторения обучения модели.
Но есть ли способ обойти эту проблему, установив флаги или используя другой формат файла обратного вызова?

Версия Tensorflow: 2.1.0

Версия Keras: 2.3.1

библиотека включает:

 from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.callbacks import ModelCheckpoint
  

Комментарии:

1. Убедитесь, что каждый раз, когда вы создаете h5 файл, вы закрываете f.close() его, прежде чем вызывать новый или создавать новый. И иногда проблема может быть связана с использованием многих рабочих, попробуйте уменьшить рабочие узлы, и это может решить вашу проблему. Вы можете следить за этой темой и проверять предложения пользователей github.com/keras-team/keras/issues/11101