Я пытаюсь развернуть модель TensorFlow на платформе Google AI для онлайн-прогнозирования. У меня возникают проблемы с задержкой и пропускной способностью.
Модель запускается на моем компьютере менее чем за 1 секунду (только с процессором Intel Core I7 4790K) для одного образа. Я развернул его на платформе AI на машине с 8 ядрами и графическим процессором NVIDIA T4.
При запуске модели на платформе AI в указанной конфигурации отправка только одного изображения занимает чуть меньше секунды. Если я начну отправлять много запросов, каждый с одним изображением, модель в конечном итоге блокируется и перестает отвечать. Поэтому я вместо этого отправляю партии изображений по каждому запросу (от 2 до 10, в зависимости от внешних факторов).
Проблема в том, что я ожидал, что пакетные запросы будут почти постоянными во времени. При отправке 1 изображения загрузка ЦП составляла около 10%, а ГП - 12%. Поэтому я ожидал, что пакет из 9 изображений будет использовать ~ 100% оборудования и отвечать за одно и то же время ~ 1 секунду, но это не так. Обработка пакета из 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: как предлагается в комментарии ниже, я также пробовал запустить модель на ЦП, но она действительно медленная и страдает теми же проблемами, что и с графическим процессором. . Кажется, что изображения из одного запроса не обрабатываются параллельно.
Кроме того, я думаю, что у меня проблемы с обслуживанием 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
}
}