Deep Learning Inference Benchmark — измеряем скорость работы моделей глубокого обучения

Перед разработчиками встает задача определения производительности железа в задаче исполнения глубоких моделей. Например, хочется решить проблему анализа пола-возраста покупателей, которые заходят в магазин, чтобы в зависимости от этого менять оформление магазина или наполнение товаром. Вы уже знаете какие модели хотите использовать в вашем ПО, но до конца не понятно как выбрать железо. Можно выбрать самый топ и переплачивать как за простаивающие мощности, так и за электроэнергию. Можно взять самый дешевый i3 и потом вдруг окажется, что он может вывезти каскад из нескольких глубоких моделей на 8 камерах. А может быть камера всего одна, и для решения задачи достаточно Raspberry Pi с Movidius Neural Compute Stick? Поэтому хочется иметь инструмент для оценки скорости работы вашего инференса на разном железе, причем еще до начала обучения.
В целом можно выделить три направления работы с глубокими моделями:
- Обучение. На обучение глубоких моделей уходит требуется много, очень много, а иногда и очень-очень много вычислительной мощности. Начиная с первой ласточки AlexNet (61 миллион параметров), и заканчивая GPT-3 с 175 миллиардами параметров.
- Transfer Learning. Берем существующую модель (как правило решающую задачу классификации), и используем ее в качестве основы для собственной модели. Количество ресурсов для дообучения или переобучения можно значительно уменьшить по сравнению с обучением с нуля.
- Использование моделей глубокого обучения в работе (Inference). Для использования глубоких моделей в прикладных задачах требуется минимизировать использование ресурсов. Решается это различными способами: использование оптимизированных библиотек, которые максимально плотно заполняют конвейер процессора вычислениями; конвертация параметров модели из fp32 в fp16, int8 или даже int1; использование специализированных ускорителей (GPU, TPU, FPGA, нейронные сопроцессоры).
Общую схему решения задач с использованием глубокого обучения можно представить следующим образом:

Из лекции курса по современным методам и технологиям глубокого обучения в компьютерном зрении
Как правило, требования по скорости заложены еще на этапе постановки задачи, и хочется еще до начала обучения или дообучения узнать «уложится» или нет предполагаемая модель в доступные для инференса ресурсы. И для решения этой задачи был создан DLI benchmark.
DLI benchmark
В рамках лаборатории ITLab студентами ННГУ им. Н.И.Лобачевского был разработан открытый фреймворк DLI (https://github.com/itlab-vision/dl-benchmark), который позволяет запустить измерение производительности большого количества разных моделей на доступном железе.
Основные требования, которые были заложены на этапе разработки:
- Измерять время работы того, как модель будет работать в реальном Python приложении.
Мы включили в подсчет времени собственно исполнение модели и копирование обрабатываемых данных из python в библиотеку инференса (это может показать влияние на маленьких моделях). - Обладать модульной архитектурой, чтобы иметь возможность включать в тестирование новые фреймворки, новые модели, новое железо.
Архитектура фреймворка
- Target Hardware — устройства для выполнения замеров. Предполагается, что на этом компьютере установлено необходимое программное обеспечение (сейчас это делается в Docker) и подготовлен набор моделей для тестирования.
- FTP-сервер — хранит конфигурации тестов для каждого тестируемого устройства и результаты измерений.
- Integrator — это компонент, предназначенный для сбора результатов производительности.

Схема со страницы проекта
Алгоритм работы DLI-benchmark:
- Интегратор создает структуру каталогов на FTP-сервере и генерирует файлы конфигурации тестов для инференса на доступных машинах
- Интегратор запускает анализ производительности на каждом устройстве. Анализ производительности на конкретном устройстве включает получение файла конфигурации тестов и последовательное выполнение тестов для каждой модели в отдельном процессе. Измерения производительности собираются во время тестов.
- По завершении тестов результаты производительности копируются из FTP-сервер.
- После того, как бенчмарк завершит все тесты на всём оборудовании, полученные результаты сохраняются в виде csv-таблицы, которая автоматически конвертируется в html-страницу для сайта проекта.
Типы экспериментов
В целом разработчикам привычен синхронный вариант работы программы, когда сначала читается картинка из файла, масштабируется под размер входа сети, вызывается функция run или forward , и цикл начинается сначала.
При обработке картинок по одной вычислительное устройство очень часто недогружено. Можно подать два изображения одной пачкой (batch=2), тогда они обработаются быстрее чем два изображения по отдельности. При увеличении размера пачки производительность сначала начнет расти, а потом падать, и определить лучший размер пачки весьма полезно.
В современных фреймворках поддерживается асинхронный режим работы, когда не нужно дожидаться конца обработки предыдущего изображения, можно новую картинку начать обрабатывать сразу после поступления. При использовании асинхронного API в OpenVINO можно создавать реквесты по 1 картинке независимо и при этом получать по прежнему высокую производительность и при этом низкие задержки. Возможность получать высокую производительность, сохраняя при этом низкие задержки, открывает новые возможности для инференса глубоких моделей на многосокетных высокопроизводительных системах.
Метрики производительности
- Латентность или задержка (Latency) — медианное время обработки одной пачки картинок.
- Среднее время одного прохода (Average time of a single pass) — отношение общего времени обработки всех пачек к числу итераций цикла тестирования.
- Среднее количество кадров, обрабатываемых за секунду (Frames per Second, FPS) — отношение размера пачки изображений к латентности.
В случае когда мы можем подавать несколько картинок независимо друг от друга (асинхронный запуск на обработку), мы используем другие метрики производительности.
- Среднее время одного прохода (Average time of a single pass) — отношение времени обработки всех пачек к количеству итераций цикла тестирования. Представляет собой время выполнения одновременно созданных пачек на устройстве.
- Среднее количество кадров, обрабатываемых за секунду (Frames per Second, FPS) — отношение произведения размера пачки изображений и числа итераций ко времени обработки всех пачек.
Анализ результатов
В ходе экспериментов мы попробовали бенчмарк на различном оборудовании: CPU i7-7700K, i5-8600K, i3-7100, i7-8700, i3-8100, GPU Intel HD Graphics 630, Intel Neural Compute Stick 2.
Пока опубликовали результаты только для фреймворка OpenVINO. Докеры бенчмарка с Caffe, TensofFlow и PyTorch в разработке.
Для демонстрации примеров работы возьмем модель ResNet-152 — это очень объемная модель, которая решает задачу классификации ImageNet.
На графике ниже представлена время обработки одной пачки картинок в различных режимах. На данном графике по оси X отложено количество потоков процессора, которые были использованы для обработки изображений, а по оси Y — среднее время обработки (или задержка, latency) одной пачки изображений. На этом графике мы видим, что при удвоении использованных потоков скорость обработки увеличивается примерно в два раза — это означает отличную параллеллизацию в обработке изображений. Что важно, параллелизация показывает хорошие результаты и для большой пачки картинок, и для одиночной картинки.

Чтобы посчитать FPS (сколько в среднем картинок в секунду обработает процессор в каждом режиме работы) нужно количество картинок в пачке разделить на время обработки одной пачки. Эти данные мы приведем в таблице ниже.

Взглянув на эти цифры, мы видим, что если мы будем использовать все 6 ядер процессора, что при обработке картинок пачками по 8 штук производительность возрастает на 20% из-за более плотной упаковки вычислений. Но в прикладном ПО не слишком хочется писать дополнительные функции, чтобы собирать картинки в пачки, да и задержки тогда возрастают…
В этом случае нам на помощь приходит асинхронный запуск нескольких картинок на обработку! OpenVINO поддерживает возможность не собирать из картинок большую пачку, а подавать картинки независимо друг от друга не дожидаясь завершения обработки предыдущей. В данном режиме вы задаете в программе количество «стримов» (это не поток процессора; это сущность, которая захватывает один или несколько потоков процессора и обрабатывает в себе картинку), и можете независимо запускать на обработку картинки по мере поступления.

С использованием OpenVINO в асинхронном режиме с размером пачки в 1 картинку мы почти достигаем производительности, полученной в синхронном режиме с размером пачки 8, при этом почти не меняя код запуска моделей.
Результаты производительности 63 моделей на CPU, Intel GPU и Intel Neural Compute Stick 2 собраны в HTML-таблиц, посмотреть их можно здесь:
http://hpc-education.unn.ru/en/dli
Пока мы измеряли только производительность моделей, сконвертированных в OpenVINO. Уже пишется код для тестирования моделей Caffe, и в разработке другие библиотеки глубокого обучения.
Кустикова Валентина, Васильев Евгений, Хватов Александр, Кумбрасьев Павел
Изображения в статье взяты из публикации: Kustikova V., Vasilyev E., Khvatov A., Kumbrasiev P., Rybkin R., Kogteva N. DLI: Deep Learning Inference Benchmark // Communications in Computer and Information Science. V. 1129. 2019. P. 542-553. https://link.springer.com/chapter/10.1007/978-3-030-36592-9_44
- компьютерное зрение
- глубокое обучение
- бенчмарк
- производительность
- openvino
- intel
- Блог компании Intel
- Высокая производительность
- Python
- Программирование
- Машинное обучение
Оценка эффективности инференса нейронных сетей

Развитие рынка нейронных сетей подразумевает под собой удешевление стоимости железа при постоянном росте производительности. Обычно нейронная сеть проходит три жизненных этапа: обучение, деплой и инференс. Если про обучение и деплой материала в интернете предостаточно, то инференс нейронной сети- нераскрытая тема, в которой стоит разобраться.
Инференс
Инференсом называется непрерывная работа какой-либо нейронной сети на конечном устройстве. Инференс выполняется, например, для распознавания марок и моделей транспортных средств, лиц, голосов, анализа текстовых материалов и много другого. То есть, это процесс исполнения сети, когда она уже готова к проведению полезной работы.
Для инференса используются процессоры общего назначения CPU, графические процессоры GPU, некоторые другие вычислительные единицы.
Инференс на CPU
В случае использования CPU, инференс выполняется на логических ядрах процессора, число которых равно числу физических ядер или, при использовании технологии Hyper-threading, увеличено вдвое. Решения на современных многоядерных процессорах достаточно дороги, а использование CPU на больших (глубоких) нейросетях неэффективно из-за ограниченного объема кэша процессора и необходимости организации обмена данными с ОЗУ, что существенно влияет на скорость работы. Кроме того, ограничения на производительность накладываются самой архитектурой — в процессе инференса решаются простые задачи сравнения, которые легко переносятся на параллельные вычисления, но количество параллельных потоков обработки всегда будет ограничено количеством логических ядер CPU.
Инференс на GPU
Инференс с использованием GPU за счет иной архитектуры процессора, наличия высокоскоростной памяти и гибкой системы управления кэш-памятью гораздо более эффективен, чем инференс на CPU. Плюсом является кардинальное (до 100 раз) ускорение работы и крайне высокая эффективность обучения нейросети по сравнению с CPU. Одним из основных недостатков этого типа серверов является высокая стоимость решений, которая складывается из цены видеокарт и общей обвязки. В результате итоговая стоимость решения может достигать $20 000. Второй недостаток — необходимость адаптации существующих сетей различных топологий для использования GPU. Третий, и тоже немаловажный, — это узкий круг применения данных решений в отличие от серверов, построенных на процессорах общего назначения.
Оценка производительности инференса
Инференс — процесс несложный, в некоторой степени даже примитивный, однако рост сложности нейронной сети приводит к нелинейному росту необходимых для инференса ресурсов. В результате вполне реально упереться в потолок вычислительной производительности системы или канала передачи данных. Из этой проблемы очевидными видятся два выхода — отправлять данные на обработку к серьезным вычислительным мощностям, если канал передачи данных позволяет, или выполнять его на месте, увеличивая локальную производительность. Но и в первом и во втором случае возникает проблема оценки производительности устройств, осуществляющих инференс. Ведь будет очень странным, если нейросеть работает, но для ее работы требуется система стоимостью много мертвых американских президентов.
Производители устройств всегда нацелены на увеличение продаж. Методики тестирования, которые они предлагают, бывают очень своеобразными, как и выводы которые делаются на базе таких тестов. Например, пытались сравнить количество логических ядер разных устройств, заявляя, что количество ядер имеет решающее значение, хотя понятно, что сравнивать десяток Intel 80486 даже с одним Intel i5 мягко говоря неэтично. Пытались сравнить количество обрабатываемых потоков, гордо заявляя, что решение может обрабатывать 100 каналов, тактично замалчивая, что эти потоки – 240p. Каждый измерял в своих попугаях, и каждый из этих попугаев c точки зрения производителя был более правильный и более производительный.
Очевидно, что для практического применения такие методики непригодны. Мы — компания Combox Technology, как разработчики оборудования, нуждались в сравнительных характеристиках, которые позволяли бы объективно оценивать конечную стоимость эксплуатации системы. Мы попытались привязать эффективность к стоимости — той характеристике, которая прямо связана с клиентом. Было проведено исследование скорости сетей различных топологий на различных видах устройств (процессоры и видеокарты) с привязкой к стоимости. Вы можете ознакомиться с ним по ссылке. Основные метрики, которые нас интересовали — это цена за FPS (frame per second) и скорость (relative FPS).
Результаты получились очень интересные. Именно их мы использовали при разработке наших устройств для инференса. Максимальную скорость инференса при оптимальной стоимости FPS можно получить на одноплатном компьютере (SBC) Intel NUC8i5BEK, поскольку на них в полной мере раскрывается потенциал совместного инферена на CPU и GPU. Именно по этой причине мы использовали это устройство в наших устройствах SBC NUC Server. Для другого устройства OutdoorBox NUC используется Intel NUC4i5MYHE.
Эти решения создавались как раз для того, чтобы решить боль, описанную в начале статьи — максимальная эффективность с максимальной объективностью оценки.
Что же получилось в результате?
OutdoorBox NUC — высокопроизводительное решение для инференса на краю, которое используется при необходимости сократить трафик, решать локальные задачи при минимальной стоимости внедрения и эксплуатации. Устройство выполнено во всепогодном исполнении IP66, обладает низким энергопотреблением (30Вт) и обладает великолепной производительностью при низкой стоимости. Одно устройство способно одновременно эффективно работать с 10 потоками FullHD 15fps.
Для корпоративного сегмента при потребностях в высоких вычислительных мощностях мы разработали SBC NUC Server, которое объединяет в одном корпусе до 8 устройств NUC8i5BEK и обеспечивает обработку до 80 потоков FullHD 15fps.
Очевидно, что такие решения разрабатываются не из-за простого интереса к экспериментам. Мы разрабатываем, обучаем и эксплуатируем нейронные сети, например, для целей распознавания марок и моделей транспортных средств, номерных знаков. Для классификации объектов мы используем нейронную сеть на топологии YOLO (You Only Look Once), которая построена на ее упрощенной оптимизированной модели DarkNet19, использующую 19 слоев, взамен оригинальных 25, и нейронную сеть на топологии UNET для детектирования. Решение используется в коммерческом продукте EDGE с MMR (Make and Model Recognition) и LPR (Licence Plate Recognition), который активно эксплуатируется по всему миру – в национальной полиции Колумбии, Мексики, Белоруссии, Грузии, Болгарии, таможенных терминалах Украины, Азербайджана, системах городского видеонаблюдения Аргентины, Омана, Казахстана. Эффект от внедрения SBC NUC Server был очень существенным и осязаемым – в отличие от GPU-серверов на базе Tesla T4, используемых ранее, стоимостью 1 200 000 рублей, наше решение дешевле на 500 000 рублей, энергопотребление вместо 2 кВт на единицу теперь составляет всего 500 Вт. При этом экономится место в стойках – GPU-сервера обычно имеют формат 2U-4U, в отличие от 1U в нашем случае. Что очень важно – мы получили унифицированное решение на стандартной элементной базе, что позволяет в случае необходимости перепрофилировать устройство под другие задачи, кроме инференса (кластерные решения, web-сервер и пр.)
А потребитель теперь может быть уверен в объективности предлагаемых оценок — эффективность измеряется в деньгах — самых универсальных попугаях.
Более быстрый и точный инференс модели ИИ
Инференс выполняется моделями ИИ, стимулируя инновации во всех отраслях. Но по мере того, как специалисты по data science и инженеры раздвигают границы возможного в компьютерном зрении, распознавании и синтезе речи, обработке естественного языка (NLP) и рекомендательных системах, модели ИИ быстро развиваются, растет их размер, сложность и разнообразие. Чтобы в полной мере воспользоваться этой возможностью, организациям необходимо внедрить комплексный подход к инференсу модели ИИ.
На основе анализа NVIDIA с использованием общедоступных данных и отчетов по результатам отраслевых исследований
Платформа для инференса
Внедряйте инференс модели ИИ нового поколения с помощью платформы NVIDIA.
Платформа NVIDIA предоставляет полный стек продуктов и сервисов, которые обеспечивают производительность, энергоэффективность и отзывчивость в облаке, дата-центре, на периферийных и встраиваемых устройствах, что так важно для инференса модели ИИ нового поколения. Она предназначена для специалистов по data science, разработчиков программного обеспечения и инженеров по инфраструктуре с разным уровнем знаний и опыта в области искусственного интеллекта.
Узнайте о преимуществах инференса модели ИИ NVIDIA.
- Руководителям
- ИИ/платформа MLOps
- Разработчикам ИИ
Ускоренный анализ данных.
Ускорьте завершение процессов и используйте свободное время для итераций для решения рабочих задач. Используется лидерами отрасли для выполнения инференса модели ИИ для широкого спектра задач.
Получайте лучшие результаты.
С легкостью запускайте более крупные и улучшенные модели в производство, чтобы получать более точные результаты.
Оцените более высокую рентабельность инвестиций.
Выполняйте развертывание с меньшим количеством серверов и меньшим энергопотреблением и эффективно масштабируйте решение для более быстрого извлечения полезной информации при значительно меньших затратах.
Стандартизируйте развертывание.
Стандартизируйте развертывание моделей в рамках различных приложений, фреймворков ИИ, архитектур моделей и платформ.
Легкая интеграция.
С легкостью выполняйте интеграцию с инструментами и платформами в общедоступных облаках, в локальных дата-центрах и на периферийных устройствах.
Снижение затрат.
Добейтесь высокой пропускной способности и эффективности использования инфраструктуры ИИ, тем самым снизив затраты.
Интеграция в приложения.
С легкостью интегрируйте ускоренный инференс в свое приложение.
Добейтесь максимальной производительности.
Обеспечьте максимальную производительность модели и лучше удовлетворяйте потребности клиентов. Платформа NVIDIA для инференса неизменно обеспечивает рекордную производительность в нескольких категориях в MLPerf, ведущем бенчмарке для ИИ.
Легкое масштабирование.
Легко масштабируйте инференс в соответствии с потребностями приложения.
Используйте комплексный архитектурный подход.
Комплексный архитектурный подход NVIDIA гарантирует развертывание приложений с поддержкой ИИ с оптимальной производительностью, меньшим количеством серверов и более низким энергопотреблением, что ускоряет анализ данных при значительно меньших затратах.
От совместного проектирования в 3D до
цифровых двойников и разработки
NVIDIA Omniverse не только ускоряет сложные рабочие процессы в 3D, но также предоставляет революционно новые способы визуализации, моделирования и кодирования для реализации идей и инноваций нового уровня. Интеграция сложных технологий, таких как трассировка лучей, искусственный интеллект и вычисления, в 3D-конвейеры больше не обходится дорого, и дает преимущество.
Платформа NVIDIA для ускоренных вычислений
NVIDIA предлагает комплексный портфель графических процессоров, систем и сетевых технологий, обеспечивающих беспрецедентную производительность, масштабируемость и безопасность для каждого дата-центра. Графические процессоры NVIDIA Н100, А100, А30 и А2 с тензорными ядрами обеспечивают высочайшую производительность инференса в облаке, дата-центре и на периферийных устройствах. NVIDIA-Certified Systems™ (сертифицированные NVIDIA системы) обеспечивают графические процессоры NVIDIA и высокоскоростную и безопасную сеть в системах от ведущих партнеров NVIDIA в конфигурациях с доказанной оптимальной производительностью, эффективностью и надежностью.
Профессиональная конференция разработчиков высоконагруженных систем
11-я ежегодная конференция для разработчиков highload-систем, которая соберет 2 700 участников из разных регионов России и мира. Мероприятие направлено на обмен знаниями о технологиях, позволяющих одновременно обслуживать многие тысячи и миллионы пользователей.
Программа охватывает такие аспекты веб-разработок, как архитектуры крупных проектов, базы данных и системы хранения, системное администрирование, нагрузочное тестирование, эксплуатация крупных проектов и другие направления, связанные с высоконагруженными системами.
- Главная
- →
- Нейронные сети, искусственный интеллект
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо)
Нейронные сети, искусственный интеллект
Доклад принят в Программу конференции
— Исследователь и разработчик в областях машинного обучения, нейронных сетей, компьютерного зрения и обработки сигналов.
— Занимался задачами, связанными с медицинскими изображениями, распознаванием, обработкой изображений, 3D-анимацией.
— Время от времени читает вводные научно-популярные лекции по Deep Learning.
Тезисы
Зал «Москва»
8 ноября, 11:00
Современные нейронные сети базируются на высоконагруженных вычислениях. Для быстрого обучения и инференса (прямого распространения) важны как аппаратное обеспечение, так и программное. Современные фреймворки, используемые для построения и обучения нейронных сетей, могут жертвовать производительностью в пользу большей гибкости. Поэтому для внедрения обученной нейронной сети может потребоваться её оптимизация. В докладе будет продемонстрирована возможность быстрого инференса обученной модели на GPU с помощью библиотеки TensorRT.
План доклада:
— Краткое введение в свёрточные нейронные сети.
— Быстрый инференс с помощью TensorRT: описание библиотеки и её особенностей.
— Демонстрация построения и обучения нейронной сети на TensorFlow.
— Демонстрация конвертации обученной модели в TensorRT для последующего быстрого инференса.