小编典典

Keras + Tensorflow:对多个GPU的预测

python

我正在使用带有tensorflow的Keras作为后端。我有一个经过编译/训练的模型。

我的预测循环很慢,因此我想找到一种方法来并行化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上并行化Keras中一个模型的预测?

另外,我很好奇,如果仅使用一个GPU就能进行类似的并行预测。

高级描述或代码示例将不胜感激!

谢谢!


阅读 216

收藏
2021-01-16

共1个答案

小编典典

我创建了一个简单的示例来展示如何在多个GPU上运行keras模型。基本上,将创建多个进程,并且每个进程都拥有一个GPU。要指定正在处理的GPU
ID,设置环境变量CUDA_VISIBLE_DEVICES是一种非常简单的方法(os.environ [“
CUDA_VISIBLE_DEVICES”])。希望这个git repo可以帮助您。

https://github.com/yuanyuanli85/Keras-Multiple-Process-
Prediction

2021-01-16