У меня есть генерирующая последовательность модель 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).