Фон

Компьютерное зрение — одна из самых популярных областей в области машинного обучения, и оно имеет широкий спектр приложений, которые можно реализовать на tiket.com. В настоящее время у нас есть несколько модулей компьютерного зрения, которые помогают нам поддерживать качество нашей страницы сведений о размещении, например, обнаружение неприемлемого контента, обнаружение сцен, сходство изображений, оценка качества изображения (с использованием моделей размытия-боке и OCR) и обнаружение объектов. Мы назвали наш проект компьютерного зрения Aurora. Это позволяет нам поддерживать чистоту и безопасность нашей платформы для наших пользователей. Используя компьютерное зрение, мы можем автоматизировать многие задачи, которые в противном случае выполнялись бы вручную, что экономит наше время и ресурсы.

Проект Aurora был запущен в 2020 году, когда мы осознали огромное количество графических данных, которыми должен управлять tiket.com. С учетом того, что на нашем сайте перечислены миллионы объектов размещения, каждое из которых содержит от сотен до тысяч изображений, стало ясно, что люди не смогут обработать или просмотреть все эти изображения по отдельности.

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

Когда проект Aurora был впервые запущен в 2020 году, мы решили использовать процессоры для обработки изображений, поскольку на тот момент они могли удовлетворить потребности в производительности. Однако в 2022 году мы столкнулись с новой проблемой, когда группа размещения попросила использовать Aurora для управления огромными данными номеров, которые включали сотни миллионов изображений, по крайней мере в четыре раза больше, чем мы обрабатывали в настоящее время. Стало очевидно, что наш текущий подход не сможет справиться с возросшим объемом изображений как с точки зрения времени обработки, так и стоимости. В связи с этим мы решили внедрить NVIDIA TensorRT, SDK с открытым исходным кодом для высокопроизводительного вывода на основе глубокого обучения, который включает в себя оптимизатор вывода на основе глубокого обучения и среду выполнения, обеспечивающую низкую задержку и высокую пропускную способность для приложений вывода. Использование TensorRT позволяет разработчикам повысить производительность своих моделей глубокого обучения за счет увеличения скорости логического вывода и снижения требований к памяти.

Детали эталона

Мы провели сравнительный анализ нашей модели обнаружения сцен (с использованием EfficientNet B2), созданной с помощью tensorflow. Сравнение производительности вывода модели было выполнено с использованием машины E2 с 2-ядерным виртуальным ЦП и 1 графическим процессором Tesla T4. Исходя из этого, были разработаны 3 сценария:

  1. Вывод с использованием ЦП
  2. Вывод с использованием графического процессора с моделью Tensorflow
  3. Вывод с использованием GPU с TensorRT

Наш бенчмаркинг учитывал только процесс вывода, мы не сравнивали части предварительной и постобработки, потому что в настоящее время TensorRT работает только с нашими процессами вывода. Было использовано 8141 изображение для партий 4 разных размеров. Размер пакета показывает, сколько изображений обрабатывается одновременно. Учитывались 2 показателя:

  1. Среднее время вывода на данные
  2. Использование памяти графического процессора

Сравнительный результат

Как показано на диаграмме, графический процессор TensorRT превзошел модель Tensorflow, обработанную как на ЦП, так и на графическом процессоре, обеспечив до 17 раз более высокую производительность для прогнозирования одного изображения. Производительность графического процессора Tensorflow сильно зависит от размера пакета. Увеличение размера пакета приводит к значительному улучшению производительности. Однако графический процессор TensorRT уже работает лучше даже при меньших размерах пакетов и становится еще быстрее при увеличении размера пакета, хотя и не пропорционально.

Как видно из результатов тестов, модель Tensorflow с использованием графического процессора потребляла значительно больше памяти по сравнению с TensorRT. Это связано с тем, что Tensorflow резервирует большую часть ресурсов памяти, в то время как TensorRT выделяет только необходимую память, позволяя другим процессам использовать оставшиеся ресурсы.

Заключение

Таким образом, графический процессор TensorRT может повысить производительность до 64 раз по сравнению с использованием ЦП и даже в 4 раза эффективнее, чем Tensorflow на графическом процессоре. С растущим объемом изображений, которые необходимо обрабатывать, TensorRT в сочетании с графическим процессором может стать очень жизнеспособным решением для нашей компании.

Следите за нашими следующими подробными результатами тестов и реализацией TensorRT!! 😄