使用python mutliprocessing进行并行Keras模型训练

问题描述

我正在64个核cpu工作站上同时训练多个Keras MLP模型。 因此,我正在使用Python多处理池为每个cpu分配一个正在训练的模型。 对于正在训练的模型,我正在使用以这种方式定义的Early Stopping和Model检查点回调:

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

使用单个模型,培训可以顺利进行。 但是,当我开始使用多处理池时,最终会遇到回调问题。 hdf5模型保存问题出现了:

Traceback (most recent call last):
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\tensorflow_core\python\keras\callbacks.py",line 1029,in _save_model
    self.model.save(filepath,overwrite=True)
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\network.py",line 1008,in save
    signatures,options)
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\tensorflow_core\python\keras\saving\save.py",line 112,in save_model
    model,filepath,overwrite,include_optimizer)
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\tensorflow_core\python\keras\saving\hdf5_format.py",line 92,in save_model_to_hdf5
    f = h5py.File(filepath,mode='w')
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\h5py\_hl\files.py",line 394,in __init__
    swmr=swmr)
  File "C:\Users\ICN_admin\Anaconda3\lib\site-packages\h5py\_hl\files.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 "h5py\h5f.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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)