DLI: Deep Learning Inference Benchmark

DLI — система для автоматической оценки производительности вывода широко известных нейросетевых моделей на различных аппаратных конфигурациях. Отличие данной системы от существующих состоит в том, что предоставляются результаты вывода большого количества глубоких моделей на аппаратных решениях компании Intel (Intel CPUs, Intel Processor Graphics, Intel Movidius Neural Compute Stick). Полученные результаты позволяют оценить перспективы практического применения моделей. Исходный код системы выложен в открытый доступ на GitHub, что дает возможность стороннему пользователю самостоятельно провести эксперименты по анализу производительности вывода интересующих моделей на имеющемся у него аппаратном обеспечении.

DLI поддерживает следующие фреймворки для вывода глубоких нейронных сетей:

Архитектура

Система состоит из нескольких основных компонент.

  1. ConfigMaker – графическое приложение для автоматизации процедуры формирования конфигурационных файлов для разных запускаемых компонент системы. Приложение является самостоятельным и не зависит от остальных компонент системы.
  2. Deployment – компонент, обеспечивающий автоматическое развертывание тестовой инфраструктуры на вычислительных узлах средствами технологии Docker. Информация о вычислительных узлах содержится в конфигурационном файле компонента.
  3. BenchmarkApp – компонент, отвечающий за сбор показателей производительности вывода набора моделей с использованием различных инструментов глубокого обучения. Информация о моделях и параметрах запуска вывода содержится в конфигурационном файле компонента.
  4. Inference – компонент, содержащий реализацию вывода глубоких нейросетевых моделей с помощью различных инструментов глубокого обучения. Используется компонентом BenchmarkApp для непосредственного запуска вывода нейросетей с заданными параметрами.
  5. AccuracyChecker – компонент, обеспечивающий оценку качества работы моделей на открытых данных. Является надстройкой над аналогичным компонентом OpenVINO.
  6. RemoteController – компонент, выполняющий удаленный запуск экспериментов для определения производительности и качества глубоких моделей на вычислительных узлах.
  7. Converters – вспомогательный компонент, содержащий различные конвертеры для удобного представления результатов производительности и качества работы моделей. В частности, данный компонент обеспечивает преобразование выходных данных в HTML-формат для публикации результатов экспериментов на странице проекта.

Основной сценарий работы предполагает выполнение следующих действий.

  1. Формирование конфигурационных файлов с помощью ConfigMaker для компонент Deployment, RemoteController, BenchmarkApp и AccuracyChecker.
  2. Развертывание тестовой инфраструктуры на вычислительных узлах с использованием компонента Deployment. Все необходимые данные для запуска экспериментов хранятся на FTP-сервере. На данном этапе выполняется подготовка структуры директорий на FTP-сервере, копирование шаблонного docker-образа машины с готовой тестовой инфраструктурой на FTP-сервер, удаленное скачивание docker-образа с FTP-сервера на вычислительный узел и локальное развертывание docker-образа, копирование конфигураций проводимых экспериментов на узел.
  3. Удаленный запуск экспериментов на вычислительных узлах средствами RemoteController. RemoteController запускает AccuracyChecker, где сначала определяется качество исходных моделей, а затем качество моделей, которые сконвертированы в промежуточное представление с помощью OpenVINO с форматами весов FP32 и FP16. Далее RemoteController запускает BenchmarkApp для определения показателей производительности вывода (порядок тестов такой же, как для AccuracyChecker). BenchmarkApp использует компонент Inference для запуска вывода отдельной модели из перечня проводимых экспериментов, каждая модель запускается средствами OpenVINO и исходного фреймворка, в котором она была обучена, если DLI поддерживает данный фреймворк для запуска вывода. После всех вычислений RemoteController формирует файл с результатами экспериментов на FTP-сервере.
  4. Конвертирование таблицы результатов в HTML-формат средствами Converters. Данный компонент преобразовывает таблицы с результатами работы компонент BenchmarkApp и AccuracyChecker в HTML-формат для их публикации на официальной странице проекта.

Наборы данных для тестирования

Анализ производительности нейронных сетей, которые решают ту или иную задачу, выполняется на избранных изображениях набора данных, приведенного ниже.

  • Классификация изображений (image classification): ImageNet.
  • Детектирование объектов (object detection): MS COCO, PASCAL VOC.
  • Семантическая сегментация (semantic segmentation): MS COCO, PASCAL VOC.
  • Сегментация объектов (instance segmentation): MS COCO.
  • Семантическая сегментация дорожных сцен (semantic segmentation of on-road scenes): Cityscapes.
  • Детектирование лиц (face detection): LFW, VGGFace2, Wider Face.
  • Другие задачи: публичные изображения из сети Интернет.

Показатели производительности вывода

Разработанная система для вывода нейронных сетей использует компонент Inference Engine в составе пакета Intel Distribution of OpenVINO Toolkit. Intel Distribution of OpenVINO Toolkit поддерживает два режима вывода.

  1. Режим минимизации времени выполнения одного запроса (latency mode). Предполагает создание и выполнение одного запроса для вывода модели на выбранном устройстве. Следующий запрос на вывод создается по завершении предыдущего. Во время анализа производительности количество сгенерированных запросов определяется числом итераций цикла тестирования модели.
  2. Режим минимизации времени выполнения набора запросов (throughtput mode). Предполагает создание набора запросов для вывода нейронной сети на выбранном устройстве. Порядок выполнения запросов может быть произвольным. Количество наборов запросов определяется количеством итераций цикла тестирования модели.

Inference Engine предоставляет 2 программных интерфейса для вывода глубоких моделей.

  1. Синхронный интерфейс (Sync API). Используется для реализации вывода в режиме минимизации времени выполнения одного запроса (latency mode).
  2. Асинхронный интерфейс (Async API).  Используется для реализации вывода в режиме минимизации времени выполнения одного запроса (latency mode), если создан один запрос, и вывода в режиме минимизации времени выполнения набора запросов (throughput mode), если создано более одного запроса.

Один запрос на вывод соответствует прямому проходу нейронной сети для пачки изображений. Обязательные параметры выполнения:

  • размер пачки (batch size),
  • количество итераций тестирования (число замеров времени вывода одного запроса для latency-режима и набора запросов для througput-режима),
  • количество запросов, созданных в асинхронном режиме.

Вывод может быть выполнен в многопоточном режиме. Количество потоков (threads) может быть установлено в качестве параметра выполнения вывода модели.

Для асинхронного интерфейса есть возможность выполнять запросы параллельно, используя стримы (streams). Стрим — это логическая группа физических потоков. Число стримов является параметром асинхронного режима. По умолчанию количество стримов совпадает с количеством запросов на вывод.

Поскольку OpenVINO обеспечивает два режима вывода, то выделяется два набора показателей производительности. При оценке производительности вывода для режима минимизации времени выполнения одного запроса (latency mode) запросы выполняются последовательно. Следующий запрос выполняется после завершения предыдущего. Для каждого запроса измеряется продолжительность его выполнения. Стандартное отклонение рассчитывается на основе набора полученных длительностей, а те, которые выходят за пределы трех стандартных отклонений относительно среднего времени вывода, отбрасываются. Результирующий набор времен используется для вычисления метрик производительности для latency-режима.

  1. Латентность (Latency)* — медиана времен выполнения.
  2. Среднее время одного прохода (Average time of a single pass)* — отношение общего времени исполнения всех запросов к числу итераций цикла тестирования.
  3. Среднее количество кадров, обрабатываемых за секунду (Batch Frames per Second, Batch FPS) — отношение размера пачки изображений к латентности.
  4. Количество кадров, обрабатываемых за секунду (Frames per Second, FPS) — отношение общего количества обрабатываемых изображений к общему времени выполнения всех запросов на вывод.

Для режима минимизации времени выполнения набора запросов (throughput mode) вычисляется следующий набор показателей.

  1. Среднее время одного прохода (Average time of a single pass)* — отношение времени выполнения всех наборов запросов к количеству итераций цикла тестирования. Представляет собой время выполнения одновременно созданных запросов на устройстве.
  2. Среднее количество кадров, обрабатываемых за секунду (Batch Frames per Second, Batch FPS) — отношение произведения размера пачки изображений и числа итераций ко времени выполнения всех запросов.
  3. Количество кадров, обрабатываемых за секунду (Frames per Second, FPS) — отношение общего количества обрабатываемых изображений к общему времени выполнения всех запросов на вывод.

Наряду с OpenVINO, система DLI поддерживает вывод с использованием Intel Optimization for Caffe, Intel Optimization for TensorFlow и некоторых других фреймворков. Данные фреймворки, как правило, работают только в одном режиме, аналогичном latency-режиму OpenVINO. Поэтому для них справедливы соответствующие введенные показатели производительности.

* С некоторого момента разработки системы указанные показатели не публикуются на странице проекта, поскольку показатель Batch FPS является более наглядным, а также некоторые показатели можно вычислить на основании Batch FPS. С 2023 г. вместо показателя Batch FPS публикуется FPS, поскольку он вычисляется одинаково для всех фреймворков и режимов вывода.

Параметры экспериментов

  • <precision> – формат вещественных чисел (FP16, FP32, INT8);
  • <dataset> – тестовый набор данных;
  • <batch_size> – размер пачки изображений, подаваемой на вход сети при однократном проходе;
  • <mode> – режим выполнения (sync или latency, async или throughput для старых и новых версий OpenVINO соответственно);
  • <plugin> (<device>) – CPU (Intel CPU), GPU (Intel Processor Graphics), MYRIAD (Movidius);
  • [<async_req_count>] – количество асинхронных запросов (для async или throughput mode);
  • <iterations_num> – количество итераций тестового цикла;
  • [<threads_num>] – количество потоков (threads), по умолчанию выставляется автоматически и совпадает с количеством физических ядер;
  • [<streams_num>] – количество стримов (streams, для async или throughput mode).

Результаты экспериментов

Результаты производительности вывода доступны в Wiki проекта по ссылке.

Результаты качества работы публичных моделей также доступны в Wiki проекта по ссылке.

Публикации

  1. Kustikova V., Vasilyev E., Khvatov A., Kumbrasiev P., Vikhrev I., Utkin K., Dudchenko A., Gladilov G. Intel Distribution of OpenVINO Toolkit: A Case Study of Semantic Segmentation // Lecture Notes in Computer Science. V. 11832. 2019. P. 11-23. [https://link.springer.com/chapter/10.1007/978-3-030-37334-4_2].
  2. 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].
  3. Сидорова А.К.,  Алибеков М.Р., Макаров А.А., Васильев Е.П., Кустикова В.Д. Автоматизация сбора показателей производительности вывода глубоких нейронных сетей в системе Deep Learning Inference Benchmark // Математическое моделирование и суперкомпьютерные технологии. Труды XXI Международной конференции (Н. Новгород, 22–26 ноября 2021 г.). – Нижний Новгород: Издательство Нижегородского госуниверситета, 2021. – 423 с. [https://hpc-education.unn.ru/files/conference_hpc/2021/MMST2021_Proceedings.pdf].
  4. Алибеков М.Р., Березина Н.Е., Васильев Е.П., Кустикова В.Д., Маслова З.А., Мухин И.С., Сидорова А.К., Сучков В.Н. Методика анализа производительности вывода глубоких нейронных сетей на примере задачи классификации изображений // Russian Supercomputing Days (RSD-2023). — 2023. (Принята к публикации).