基于Keras预测的Python多处理 上下文

基于Keras预测的Python多处理 上下文,python,keras,multiprocessing,python-multiprocessing,Python,Keras,Multiprocessing,Python Multiprocessing,Keras模型(为了MWE)需要同时预测大量测试数据 我将立方体定义为uint的3Dnumpy.ndarray。它的每个垂直切片都是一列,即npixels=128高度,nbins=128深度 每个预测都会将一列转换为去噪列(大小相同) 我提供了三种方法:单线程、多处理和pathos包多处理。这两种多线程方法都不起作用,我不明白原因 代码 分析 我猜的第一件事是,在8次调用(=测试机器上的cpu内核数)之后,对\uu model.predict()的冲刺不知何故被阻塞了。 因此,我放置了一个thr

Keras模型(为了MWE)需要同时预测大量测试数据

我将立方体定义为uint的3D
numpy.ndarray
。它的每个垂直切片都是一列,即npixels=128高度,nbins=128深度

每个预测都会将一列转换为去噪列(大小相同)

我提供了三种方法:单线程、多处理和
pathos
包多处理。这两种多线程方法都不起作用,我不明白原因

代码 分析 我猜的第一件事是,在8次调用(=测试机器上的cpu内核数)之后,对
\uu model.predict()
的冲刺不知何故被阻塞了。 因此,我放置了一个
threading.BoundedSemaphore
,访问次数少于8次。什么都不管用

单线程工作正常:

0.0 acquiring
0.0 acquired
0.0 releasing
0.0 released
< ............ >
99.9 acquiring
99.9 acquired
99.9 releasing
99.9 released
0.0
获得0.0
0.0发布
0.0版本发布
< ............ >
99.9获取
99.9已获得
99.9发布
99.9发布
多处理(两个版本)没有

0.0
获得0.0
3.2获取
3.2获得性
6.4获取
6.4获得性
9.6获取
9.6获得性
12.8获取
12.8获得性
16.0获取
16.0已获得
19.2获取
19.2获得性
22.4获取
22.4获得性
<挂起>
等等,
发行版在哪里?似乎信号量并没有被触摸,或者每次调用都被复制,并且总是被重新初始化。嗯

因此,让我们寻找
really\u predict=True
并交换它的值:
predict()
调用永远不会以这种方式到达


。。。。这个很好用,很好!!!所以这个问题并不是完全可以解决的
多处理
,而是
keras
预测和
多处理
池之间的奇怪联系。有什么建议吗?

请注意,我不相信predict的
keras'
实现是线程安全的,或者至少过去不是。至少您必须调用
\u make\u predict\u function()
。我不熟悉您的示例中的多进程编程,但您可能希望查看Keras
序列
对象,该对象允许输入数据以进行拟合和预测(使用
拟合生成器()
预测生成器())
具有安全的多处理功能。
0.0 acquiring
0.0 acquired
0.0 releasing
0.0 released
< ............ >
99.9 acquiring
99.9 acquired
99.9 releasing
99.9 released
0.0 acquiring
0.0 acquired
3.2 acquiring
3.2 acquired
6.4 acquiring
6.4 acquired
9.6 acquiring
9.6 acquired
12.8 acquiring
12.8 acquired
16.0 acquiring
16.0 acquired
19.2 acquiring
19.2 acquired
22.4 acquiring
22.4 acquired
< hangs >