Влияние программного обеспечения и архитектуры ускорителя на производительность
Несколько лет назад у меня на прошлой работе состоялась интересная дискуссия с коллегой из отделения микроэлектроники. Его идея заключалась в том, что производительность в инференсе нейронных сетей на GPGPU от NVIDIA превосходит наше решение в связи с использованием более продвинутого тех. процесса, более высоких тактовых частот и из-за большей площади кристалла. Как программист, я не мог с этим согласиться, но на тот момент ни у кого не было времени и желания проверить эту гипотезу. Недавно в разговоре с уже нынешними коллегами мне вспомнилась эта дискуссия и я решил довести это до конца. В этой статье приведено сравнение производительности модуля NM Card от НТЦ Модуль и видеокарты GT730 от NVIDIA.
Disclaimer
Вся информация получена из открытых источников, открытой документации и/или докладов на конференциях.
Сравнение характеристик чипов
Модуль NM Card построен на базе процессора К1879ВМ8Я, также известного как NM6408, изготовленного на фабрике TSMC по технологическим нормам 28 нм в 2017 году. Площадь кристалла составляет 83 мм2, содержит 1.05 млрд транзисторов, потребляемая мощность не превышает 35 Вт [1]. Микросхема содержит контроллер PCIe 2.0×4 и интерфейс к памяти DDR3. Пиковая (теоретическая) производительность составляет 512 GFLOPS в формате данных fp32. Процессорные ядра NMC4 работают на тактовой частоте 1ГГц.
К1879ВМ8Я
Ближайшими аналогами этого чипа выглядят два графических процессора от NVIDIA: GK208B обновлённого поколения Kepler для дискретных видеокарт [2] и GM108S поколения Maxwell для сегмента ноутбуков [3]. Оба чипа практически идентичны, вышли в марте 2014 года. В связи с тем, что GM108S поставляется только в составе ноутбуков, а их цена на вторичном рынке высоковата для простого удовлетворения любопытства, был выбран первый вариант. Однако стоит отметить, что Maxwell является более новой архитектурой, поддерживается более актуальным стеком ПО и потенциально способен достичь большей производительности.
GK208B
Чтобы не дублировать текстовое описание, сравнение характеристик чипов сведено в таблицу:
К1879ВМ8Я | GK208B | |
Фабрика и тех.процесс | TSMC, 28нм | TSMC, 28нм |
Площадь кристалла, мм2 | 83 | 87 |
Количество транзисторов, млрд | 1.05 | 1.02 |
Максимальная мощность, Вт | 35 | 23 |
Контроллер PCIe | Gen 2, x4 | Gen 2, x8 |
Интерфейс памяти | DDR3 | DDR3* |
Пиковая производительность, GFLOPS | 512 | 692.7 |
Частота, МГц | 1000 | 902 |
* — также поддерживается память GDDR5 |
Можно заметить, что по характеристикам чипы практически идентичны. Однако, GK208B обладает определённой гибкостью, в связи с чем важно выбрать правильную видеокарту для корректного сравнения.
Сравнение модулей
В качестве модуля на базе NM6408, как уже было сказано, выбран NM Card [4]. В плане производительности все модули с одним NM6408 показывают идентичную производительность, которая приведена в документации на фреймворк для инференса от Модуля под названием NMDL [5], на которую я и буду ссылаться в дальнейшем.
Модуль NM Card
За пару дней поисков по местным барахолкам мне удалось найти за 14 евро видеокарту MSI GT 730 (N730K-2GD3H/LPV1) [6], в России на момент написания статьи можно найти на Авито за 500–1000 рублей. Видеокарта была произведена в 2016 году и достаточно близко соответствует модулю NM Card. Обе карты имеют пассивное охлаждение, однако у GT730 всего 2 ГБ памяти против 5 ГБ у NM Card. Это сказалось во время исследования на ограничении на размер батча, что потенциально ограничило пиковую производительность для нескольких сетей. Второе отличие заключается в штатной частоте: 902 МГц против 1000 МГц у NM6408, но её можно одним действием поднять в Afterburner. После этого пиковая производительность составит 768 GFLOPS, что соответствует разнице в 1.5 раза относительно NM6408.
MSI GT730
Тестовый стенд и программное обеспечение
Тестовый стенд
В качестве тестового стенда я достал лежащий без дела компьютер с весьма скромными характеристиками: i3–7100 и 8 ГБ памяти DDR4. Однако, поскольку осуществляется замер производительности видеокарты, это не должно оказать значительного влияния. В связи с достаточно старой архитектурой, последняя версия CUDA, которая работает с этой картой, является 11.6. Современный onnxruntime поставляется с зависимостью от CUDA 12.x, для CUDA 11.x требуется собирать onnxruntime самостоятельно.
В итоге, чтобы получить работающую версию onnxruntime с cuDNN и TensorRT, были найдены и выбраны следующие версии компонентов:
Компонент | Версия |
onnxruntime | 1.14 |
CUDA | 11.6.2 |
cuDNN | 8.7.0 |
TensorRT | 8.5.3.1 |
В качестве бенчмарка была написана простая программа с применением onnxruntime, которая загружала модель, запускала инференс с разным размером батча и измеряла время исполнения на протяжении 10 секунд, после чего бралось среднее время выполнения. Для чистоты эксперимента была сделана попытка по максимуму использовать референсные модели, которые распространяются в качестве дополнительных данных к фреймворку NMDL.
Название модели | Использована референсная модель | Комментарий |
alexnet | + | |
inception_229 | + | |
resnet-18 | - | Некорректный параметр модели |
resnet-50 | + | |
squeezenet | - | Некорректный параметр модели |
yolov2-tiny | - | Несовпадение размеров между слоями внутри модели |
yolov3-tiny | + | |
yolov5s | + | |
yolo3 | + | |
inception_512 | + | |
unet | + | |
yolo5l | - | Не предоставлена модель |
Режимы обработки данных
NM6408 может работать в двух режимах: multi-unit и single-unit. Для понимания этих двух режимов следует вкратце описать архитектуру чипа. NM6408 содержит внутри четыре независимых вычислительных кластера, каждый из которых содержит четыре ядра NMC4 и одно управляющее ядро arm. Каждый кластер имеет свой контроллер DDR3, к которому подключён 1 ГБ памяти. Помимо этих четырёх кластеров, есть дополнительное (управляющее) ядро arm со своим контроллером DDR3 и дополнительным гигабайтом памяти. Все кластеры имеют прямой доступ к памяти друг друга, но этот доступ ограничен первыми 512 МБ памяти, что вызвано использованием 32-битного адресного пространства.
Режим single-unit представляет собой независимую работу каждого кластера. В случае работы одной и той же модели это можно представить как работу с батчем размера 4 и в режиме data parallelism.
В режиме multi-unit общий входной тензор обрабатывается одновременно на всех четырёх кластерах. Это так же можно представить как работу с батчем размера 1 и в режиме spatial paralellism.
Режимы обработки в NM6408 из документации
Главное отличие работы NM6408 и традиционного GPGPU заключается в том, что в первом случае весь граф исполнения модели находится на устройстве и выполняется при минимальном участии хост-устройства. В какой-то степени это схоже с тем, как работают современные NPU. В то же время GPGPU работают с т.н. кернелами, т.е. отдельными слоями. Такой подход позволяет лучше распределить работу на множество параллельных вычислительных устройств, но об этом в другой раз.
В рамках данного исследования использование традиционного GPGPU позволяет достичь большей гибкости в плане выбора размера батча, тем самым увеличивая загрузку устройства.
Результаты сравнения
Важное отличие измеряемых величин заключается в том, что NMDL возвращает время выполнения по шкале времени управляющего ядра arm без учёта пересылок данных входных и выходных тензоров. Onnxruntime не предоставляет такого механизма, в связи с чем в этом эксперименте метки времени берутся по шкале CPU до и после выполнения запуска инференса через onnxruntime. Таким образом, при прочих равных, полученные значения производительности от onnxruntime будут ниже.
Для размера батча 1 наблюдаются следующие результаты:
Название модели | Результат GT730, fps | Результат NM Card, fps | Ускорение, % |
alexnet | 42.05 | 12.6 | 233.7 |
inception_229 | 13.75 | 12.8 | 7.4 |
resnet-18 | 63.74 | 25 | 154.9 |
resnet-50 | 19.55 | 12.2 | 60.2 |
squeezenet | 149.8 | 74.4 | 101.3 |
yolov2-tiny | 25.96 | 21 | 23.6 |
yolov3-tiny | 29.14 | 27.3 | 6.7 |
yolov5s | 9.1 | 4.7 | 93.6 |
yolo3 | 2.89 | 3.7 | -21.9 |
inception_512 | 4.69 | 3.93 | 19.3 |
unet | 1.68 | 2 | -16 |
yolo5l | 1.66 | 1.39 | 19.4 |
Две модели из 12 оказались медленнее на GT730, производительность двух моделей оказалась на уровне, остальные получили значительный прирост производительности. Среднее улучшение относительно NM Card составило 56.8%
Следующий эксперимент состоял в поиске «оптимального» размера батча по степеням двойки, т.е. батч размером 1, 2, 4, … 64.
Название модели | Результат GT730, fps | Результат NM Card, fps | Ускорение, % | Оптимальный размер батча |
alexnet | 259,06 | 13 | 1892.7 | 64 |
inception_229 | 17.42 | 20.3 | -14.1 | 32 |
resnet-18 | 98.66 | 47 | 109.9 | 64 |
resnet-50 | 27.68 | 20.6 | 34.3 | 64 |
squeezenet | 170.6 | 100 | 70.6 | 64 |
yolov2-tiny | 35.18 | 30.4 | 15.7 | 16 |
yolov3-tiny | 36.53 | 35.3 | 3.4 | 16 |
yolov5s | 9.39 | 5.7 | 64.7 | 16 |
yolo3 | 2.89 | 4.5 | -35.7 | 1 |
inception_512 | 5.24 | 5.44 | -3.6 | 8 |
unet | 1.7 | 2 | -14.5 | 2 |
yolo5l | 1.9 | 1.43 | 32.8 | 8 |
В этом эксперименте начинает сказываться тот факт, что на GT730 установлено на 3 ГБ меньше памяти. В своё время были выпущены варианты этой видеокарты с 4 ГБ GDDR5, но для чистоты эксперимента я специально купил карту с DDR3. ПО этим результатам можно заметить, что alexnet показывает колоссальный прирост, если эту модель исключить, то улучшение составляет примерно 24%.
Заключение
По проведённым измерениям можно судить, что GT730 в общем показывает лучшую производительность при идентичных технологических нормах производства системы-на-кристалле и схожих конструктивных решениях изготовления модуля. Определённый интерес могло бы представить сравнение также с GT940M на базе упомянутого выше GM108S, но стоимость ноутбуков в рабочем состоянии с этим чипом колеблется в пределах 100–150 евро, что несколько охлаждает моё любопытство.
Ссылки на источники
[1] https://www.elcomdesign.ru/netcat_files/File/48(7).pdf
[2] https://www.techpowerup.com/gpu-specs/nvidia-gk208b.g815
[3] https://www.techpowerup.com/gpu-specs/nvidia-gm108s.g1033
[4] https://www.module.ru/directions/iskusstvennyj-intellekt/nm-card
[5] https://www.module.ru/directions/iskusstvennyj-intellekt/neuromatrix-deep-learning
[6] https://www.msi.com/Graphics-Card/N730K-2GD3HLPV1/Overview