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