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

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

Ближайшими аналогами этого чипа выглядят два графических процессора от NVIDIA: GK208B обновлённого поколения Kepler для дискретных видеокарт [2] и GM108S поколения Maxwell для сегмента ноутбуков [3]. Оба чипа практически идентичны, вышли в марте 2014 года. В связи с тем, что GM108S поставляется только в составе ноутбуков, а их цена на вторичном рынке высоковата для простого удовлетворения любопытства, был выбран первый вариант. Однако стоит отметить, что Maxwell является более новой архитектурой, поддерживается более актуальным стеком ПО и потенциально способен достичь большей производительности. Характеристики обоих систем-на-кристалле (СнК) приведены в таблице ниже:
К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  | ||
Сравнение модулей

В качестве модуля на базе NM6408, как уже было сказано, выбран NM Card [4]. В плане производительности все модули с одним NM6408 показывают идентичную производительность, которая приведена в документации на фреймворк для инференса от Модуля под названием NMDL [5], на которую я и буду ссылаться в дальнейшем.

За пару дней поисков по местным барахолкам мне удалось найти видеокарту MSI GT 730 (N730K-2GD3H/LPV1) [6]. Видеокарта была произведена в 2016 году и достаточно близко соответствует модулю NM Card. Обе карты имеют пассивное охлаждение, однако у GT730 всего 2 ГБ памяти против 5 ГБ у NM Card. Это может сказаться при работе с более требовательными к памяти сетями, к которым ни одна из исследуемых не относится. Второе отличие заключается в штатной частоте: 902 МГц против 1000 МГц у NM6408, но её можно одним действием поднять в Afterburner. После этого пиковая производительность составит 768 GFLOPS, что соответствует разнице в 1.5 раза относительно NM6408.
Тестовый стенд и софт

В качестве тестового стенда я достал лежащий без дела компьютер с весьма скромными характеристиками: 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, которая загружала модель, запускала инференс с батчем 1 и измеряла время исполнения на протяжении 10 секунд, после чего бралось среднее время выполнения. Для чистоты эксперимента была сделана попытка по максимуму использовать референсные модели, которые распространяются в качестве дополнительных данных к фреймворку NMDL.
Название модели  | 
Использована референсная модель  | 
Комментарий  | 
alexnet  | 
+  | 
|
inception_229  | 
+  | 
|
resnet-18  | 
-  | 
Некорректный параметр модели  | 
resnet-50  | 
+  | 
|
squeezenet  | 
-  | 
Некорректный параметр модели  | 
yolov2-tiny  | 
-  | 
Несовпадение размеров между слоями внутри модели  | 
yolov3-tiny  | 
+  | 
|
yolov5s  | 
+  | 
|
yolo3  | 
+  | 
|
inception_512  | 
+  | 
|
unet  | 
+  | 
|
yolo5l  | 
-  | 
Не предоставлена модель  | 
Батч 1 был выбран как максимальное приближение к клиентскому инференсу, ориентированному на минимальную задержку. Использование больших батчей может привести к более полной утилизации вычислительных блоков, но в рамках данного эксперимента оставим это за скобками.
Результаты сравнения
Важное отличие измеряемых величин заключается в том, что NMDL возвращает время выполнения по шкале времени управляющего ядра arm без учёта пересылок данных входных и выходных тензоров. Onnxruntime не предоставляет такого механизма, в связи с чем в этом эксперименте метки времени берутся по шкале CPU до и после выполнения запуска инференса через onnxruntime. Таким образом, при прочих равных, полученные значения производительности от onnxruntime будут ниже.
Название модели  | 
Результат 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%
Заключение
По проведённым измерениям можно судить, что GT730 в общем показывает лучшую производительность при идентичных технологических нормах производства системы-на-кристалле и схожих конструктивных решениях изготовления модуля. Более глубокие исследования могут быть посвящены софту, а именно удельной производительности отдельных операций и качеству графового оптимизатора.
Ссылки на источники
[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
          
 
Wicron
Почему бы не увеличить разрядность шины памяти (проставить HBM2 и IP блок контроллера для нее) и не перейти на концепцию как у Эльбруса - VLIW?. Ведь как я понял, они оперируя ограничением, вызванным тех. процессом, как раз искали решение, где не условные удельные частоты решают, а иной принцип организации вычислений. То есть объединения команд (слов) в группу, высокая разрядность регистров, большое их число.
NelSon29 Автор
Ответ прост — сложно и дорого, особенно в то время, когда NM6408 проектировался. Помимо цены на IP и модули памяти, значительно вырастает стоимость корпусирования. Вдобавок к этому, HBM применяют в другом классе устройств.