Joh*_*ast 29 python neural-network python-multiprocessing keras tensorflow
我正在使用带有Tensorflow的Keras作为后端.
我试图在我的主进程中保存模型,然后model.predict在另一个进程中加载/运行(即调用).
我目前只是尝试从文档中保存/加载模型的天真方法:https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model.
所以基本上:
model.save() 在主要过程中model = load_model() 在儿童过程中model.predict() 在儿童过程中但是,它只是挂在load_model电话上.
搜索周围我发现了这个可能相关的答案,表明Keras只能在一个过程中使用:与theano一起使用多处理但不确定这是否属实(似乎在这方面似乎找不到太多).
有没有办法实现我的目标?非常感谢高级别描述或简短示例.
注意:我尝试了将图形传递给流程的方法但是失败了,因为似乎张流图不可选(这里有相关的SO帖子:Tensorflow:将会话传递给python多进程).如果确实有一种方法可以将张量流图/模型传递给子进程,那么我也对此持开放态度.
谢谢!
Mar*_*jko 41
根据我的经验 - 问题在于加载Keras到一个进程,然后keras在加载到主环境时生成一个新进程.但对于某些应用程序(例如训练混合Keras模型),将所有这些事情集中在一个过程中会更好.所以我建议的是以下(有点麻烦 - 但为我工作)方法:
不要将KERAS装载到您的主要环境中.如果要加载Keras/Theano/TensorFlow,请仅在功能环境中执行此操作.例如,不要这样做:
import keras
def training_function(...):
...
Run Code Online (Sandbox Code Playgroud)
但要做到以下几点:
def training_function(...):
import keras
...
Run Code Online (Sandbox Code Playgroud)在一个单独的过程中运行与每个模型相关的工作:我通常创建正在完成工作的工作人员(例如培训,调整,评分),并且我在不同的流程中运行它们.有什么好处,这个过程使用的整个内存在你的过程完成后就完全释放了.这有助于解决在使用多处理或在一个进程中运行多个模型时通常遇到的大量内存问题.所以这看起来像这样:
def _training_worker(train_params):
import keras
model = obtain_model(train_params)
model.fit(train_params)
send_message_to_main_process(...)
def train_new_model(train_params):
training_process = multiprocessing.Process(target=_training_worker, args = train_params)
training_process.start()
get_message_from_training_process(...)
training_process.join()
Run Code Online (Sandbox Code Playgroud)不同的方法就是为不同的模型操作准备不同的脚本.但这可能会导致内存错误,尤其是当您的模型耗费内存时.请注意,由于这个原因,最好使您的执行严格按顺序执行.
小智 5
我创建了一个简单的示例,以展示如何在具有多个GPU的多个进程中运行Keras模型。希望此示例可以为您提供帮助。 https://github.com/yuanyuanli85/Keras-Multiple-Process-Prediction
| 归档时间: |
|
| 查看次数: |
20010 次 |
| 最近记录: |