Прогнозы Tensorflow RNN параллельно - многопроцессорность - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть генерирующая последовательность модель TensorFlow. Обучение это не проблема, но предсказание (которое дает топ-n последовательностей) является пошаговым и использует A * -подобный подход, так что это не просто model.predict (), но много вперед и назад между предсказаниями с TF, забил с чистым Python, решив, что продлить et c. Это очень медленно, как 1 секунда на прогноз (где тренировка составляет 1 мс / выборка). Псевдокод выглядит примерно так:

def predict_sequence(X, model, top_n = 1):
 growing_sequences = []
 terminated_sequences = []
 while(len(terminated_sequences) < top_n):
  # this calls the actual prediction for a single step of a single sequence, no parallelization here:
  seq = (find_best(growing_sequences).extend(model)) 
  if seq.is_terminated():
   terminated_sequences.append(seq)
  else
   growing_sequences.append(seq)
 return terminated_sequences

В самом коде есть варианты распараллеливания, но в большинстве случаев это будет сложная архитектура. Я просто хотел бы предсказать многопроцессорность, например,

with mp.Pool(10) as p: 
     p.map(predict_sequence, [validation_data.shard(10, i) for i in range(10)])

Однако это не так просто, потому что TF уже обрабатывает параллелизм и не может легко работать. Существуют ли простые подходы, которые не предполагают создание TF-сервера - python клиентская архитектура? Мне не нужен графический процессор для предсказания, просто процессор хорош, поскольку в этом сценарии графический процессор фактически ничего не ускоряет.

Я видел Луч , который, возможно, предлагал бы некоторые варианты , но в настоящее время он не работает на Windows, что является ограничением, потому что некоторые мои тесты выполняются на Windows (большая часть работы на кластере Linux).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...