我正在使用Keras和TensorFlow作为后端。
我有一个已编译/训练好的模型。
我的预测循环速度较慢,因此我希望找到一种方法来并行化`predict_proba`调用以加快速度。 我想要把数据分成批次,并对于每个可用的GPU,对其中一部分批次运行`model.predict_proba()`。 基本上,就是:
我的预测循环速度较慢,因此我希望找到一种方法来并行化`predict_proba`调用以加快速度。 我想要把数据分成批次,并对于每个可用的GPU,对其中一部分批次运行`model.predict_proba()`。 基本上,就是:
data = [ batch_0, batch_1, ... , batch_N ]
on gpu_0 => return predict_proba(batch_0)
on gpu_1 => return predict_proba(batch_1)
...
on gpu_N => return predict_proba(batch_N)
我知道在纯Tensorflow中可以将操作分配给指定的GPU (https://www.tensorflow.org/tutorials/using_gpu)。然而,由于我是使用Keras的api构建/编译/训练模型的,所以我不知道如何转换到我的情况。
我曾认为,也许我只需要使用Python的多进程模块,并启动每个GPU的一个进程来运行predict_proba(batch_n)
。我知道这在理论上是可能的,参考我的另一个SO帖子:Keras + Tensorflow和Python中的多处理。但是,这仍然让我陷入了一个困境,即不知道如何实际上“选择”一个GPU来操作该进程。
我的问题归结为:当使用Tensorflow作为Keras后端时,如何将一个模型的预测并行化到多个GPU上?
此外,我很想知道是否可以在仅使用一个GPU的情况下进行类似的预测并行化。
非常感谢您提供高级描述或代码示例!
谢谢!