我正在使用带有tensorflow的Keras作为后端。我有一个经过编译/训练的模型。
我的预测循环很慢,因此我想找到一种方法来并行化predict_proba调用以加快处理速度。我想获取(数据)批次的列表,然后针对每个可用的gpu,运行model.predict_proba()这些批次的子集。 本质上:
predict_proba
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来执行该过程。
predict_proba(batch_n)
我的问题归结为:当使用Tensorflow作为Keras的后端时,如何在多个GPU上并行化Keras中一个模型的预测?
另外,我很好奇,如果仅使用一个GPU就能进行类似的并行预测。
高级描述或代码示例将不胜感激!
谢谢!
我创建了一个简单的示例来展示如何在多个GPU上运行keras模型。基本上,将创建多个进程,并且每个进程都拥有一个GPU。要指定正在处理的GPU ID,设置环境变量CUDA_VISIBLE_DEVICES是一种非常简单的方法(os.environ [“ CUDA_VISIBLE_DEVICES”])。希望这个git repo可以帮助您。
https://github.com/yuanyuanli85/Keras-Multiple-Process- Prediction