
Несколько лет назад у меня на прошлой работе состоялась интересная дискуссия с коллегой из отделения микроэлектроники. Его посыл заключался в том, что производительность в инференсе нейронных сетей на 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 применяют в другом классе устройств.