Влияние программного обеспечения и архитектуры ускорителя на производительность

в 8:00, , рубрики: инференс, искусственный интеллект, машинное обучение

Несколько лет назад у меня на прошлой работе состоялась интересная дискуссия с коллегой из отделения микроэлектроники. Его идея заключалась в том, что производительность в инференсе нейронных сетей на GPGPU от NVIDIA превосходит наше решение в связи с использованием более продвинутого тех. процесса, более высоких тактовых частот и из-за большей площади кристалла. Как программист, я не мог с этим согласиться, но на тот момент ни у кого не было времени и желания проверить эту гипотезу. Недавно в разговоре с уже нынешними коллегами мне вспомнилась эта дискуссия и я решил довести это до конца. В этой статье приведено сравнение производительности модуля NM Card от НТЦ Модуль и видеокарты GT730 от NVIDIA.

Disclaimer

Вся информация получена из открытых источников, открытой документации и/или докладов на конференциях.

Сравнение характеристик чипов

Модуль NM Card построен на базе процессора К1879ВМ8Я, также известного как NM6408, изготовленного на фабрике TSMC по технологическим нормам 28 нм в 2017 году. Площадь кристалла составляет 83 мм2, содержит 1.05 млрд транзисторов, потребляемая мощность не превышает 35 Вт [1]. Микросхема содержит контроллер PCIe 2.0 x4 и интерфейс к памяти DDR3. Пиковая (теоретическая) производительность составляет 512 GFLOPS в формате данных fp32. Процессорные ядра NMC4 работают на тактовой частоте 1ГГц.

К1879ВМ8Я

К1879ВМ8Я

Ближайшими аналогами этого чипа выглядят два графических процессора от NVIDIA: GK208B обновлённого поколения Kepler для дискретных видеокарт [2] и GM108S поколения Maxwell для сегмента ноутбуков [3]. Оба чипа практически идентичны, вышли в марте 2014 года. В связи с тем, что GM108S поставляется только в составе ноутбуков, а их цена на вторичном рынке высоковата для простого удовлетворения любопытства, был выбран первый вариант. Однако стоит отметить, что Maxwell является более новой архитектурой, поддерживается более актуальным стеком ПО и потенциально способен достичь большей производительности.

GK208B

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

Модуль 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

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 из документации

Главное отличие работы 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

Автор: NelSon29

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js