Я использую Keras с тензорным потоком в качестве backend. У меня есть одна скомпилированная/обучаемая модель.
Мой цикл предсказания медленный, поэтому я хотел бы найти способ распараллеливать вызовы 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 можно назначить ops заданному gpu (https://www.tensorflow.org/tutorials/using_gpu). Тем не менее, я не знаю, как это переводится в мою ситуацию, поскольку я создал/скомпилировал/обучил мою модель, используя api Keras.
Я подумал, что, возможно, мне просто нужно использовать модуль многопроцессорности python и запустить процесс на gpu, который будет запускать predict_proba(batch_n)
. Я знаю, что это теоретически возможно с учетом другой моей должности: Keras + Tensorflow и Multiprocessing в Python. Тем не менее, это все еще оставляет мне дилемму не знать, как на самом деле "выбрать" gpu для управления процессом.
Мой вопрос сводится к следующему: как распараллеливать предсказание для одной модели в Keras через несколько gpus при использовании Tensorflow как бэкэнд Keras?
Кроме того, мне любопытно, возможно ли подобное распараллеливание для предсказания только с одним gpu.
Приветствуется описание высокого уровня или пример кода!
Спасибо!