Я пытаюсь развернуть модель TensorFlow на платформе Google AI для онлайн-прогнозирования. У меня проблемы с задержкой и пропускной способностью .
Модель запускается на моем компьютере менее чем за 1 секунду (только с процессором Intel Core I7 4790K) для одного образа. Я развернул его на платформе AI на машине с 8 ядрами и графическим процессором NVIDIA T4.
При запуске модели на платформе AI в упомянутой конфигурации отправка только одного изображения занимает чуть меньше секунды. Если я начинаю отправлять много запросов, каждый с одним изображением, модель в конечном итоге блокируется и перестает отвечать. Поэтому я вместо этого отправляю пакеты изображений по каждому запросу (от 2 до 10, в зависимости от внешних факторов).
Проблема в том, что я ожидал, что пакетные запросы будут почти постоянными во времени. При отправке 1 изображения загрузка ЦП составляла около 10%, а ГП - 12%. Поэтому я ожидал, что пакет из 9 изображений будет использовать ~ 100% оборудования и отвечать одновременно ~ 1 se c, но это не так. Пакет из 7-10 изображений занимает от 15 до 50 секунд .
Я уже пытался оптимизировать свою модель. Я использовал map_fn
, заменил это ручными циклами, переключился с Float 32 на Float 16, попытался векторизовать операции в максимально возможной степени, но он все еще в той же ситуации.
Что мне здесь не хватает ?
Я использую последнюю версию среды исполнения AI Platform для онлайн-прогнозирования (Python 3.7, TensorFlow 2.1, CUDA 10.1).
Модель представляет собой большую версию YOLOv4 (~ 250 МБ в Формат SavedModel). Я создал несколько алгоритмов постобработки в TensorFlow, которые работают с выходными данными модели.
И последнее, но не менее важное: я также попробовал отладить с помощью TensorBoard, и оказалось, что YOLOv4 часть TensorFlow Graph - это занимает ~ 90% времени обработки. Я ожидал, что эта конкретная часть модели будет очень параллельной.
Заранее благодарим за любую помощь с этим. Пожалуйста, попросите меня предоставить любую информацию, которая может вам понадобиться, чтобы лучше понять проблему.
ОБНОВЛЕНИЕ 2020-07-13: как предлагается в комментарии ниже, я также попытался запустить модель на ЦП , но он реально медленный и страдает теми же проблемами, что и с GPU. Кажется, что изображения из одного запроса не обрабатываются параллельно.
Кроме того, я думаю, что у меня проблемы с обслуживанием TensorFlow из-за скорости и количества запросов. Я использовал изображение tensorflow/serving:latest-gpu
Docker локально, чтобы проверить это дальше. Модель отвечает в 3 раза быстрее на моей машине (GeForce GTX 1650), чем на платформе AI, но это действительно несовместимо с временем отклика. Я получаю следующее время ответа (<amount of images> <response time in milliseconds>
):
3 9004
3 8051
11 4332
1 222
3 4386
3 3547
11 5101
9 3016
10 3122
11 3341
9 4039
11 3783
11 3294
Затем, поработав минуту, я начинаю получать задержки и ошибки:
3 27578
3 28563
3 31867
3 18855
{
message: 'Request failed with status code 504',
response: {
data: { error: 'Timed out waiting for notification' },
status: 504
}
}