тензор потока и керас - быстрый вывод в производство от SQS - PullRequest
0 голосов
/ 02 мая 2020

Моя модель написана и обучена в Керасе. Я пытаюсь использовать это для вывода в производстве. Я получаю SQS-сообщения «задачи», содержащие кортеж (path_in, path_out).

Я, очевидно, могу использовать:

BATCH_SIZE = 10
batch_messages = []


while True:
  while len(batch_messages) < BATCH_SIZE:
    msg = sqs.read_messsage()  
    batch_messages.apend(msg)

  assert len(batch_messages) == BATCH_SIZE
  batch = np.array([read_image(msg.path_in) for msg in batch_messages]) 

  output_batch = model.predict(batch)

  for i in range(BATCH_SIZE):
    write_output(output_batch[i], path=batch_messages[i].path_out)

  batch_messages = []

Проблема в том, что код тратит большую часть времени на чтение из SQS, чтение изображения с диска и запись в конце. Это означает, что GPU простаивает все это время.

Мне известно о Sequence Keras, но я не уверен, предназначено ли оно и для этого случая, и для вывода (а не для обучения)

1 Ответ

0 голосов
/ 02 мая 2020

Я бы предложил вам использовать решение Tensorflow Serving , поскольку оно реализует стратегию пакетирования на стороне сервера, которая оптимизирует скорость вывода и использование GOU. Кроме того, если вы хотите ускорить конвейер, вам следует преобразовать модель в модель TensorRT , которая оптимизирует операции моделей для конкретного c графического процессора (и делает это намного больше).

...