NVIDIA Jetson Nano: тесты и первые впечатления

    Привет, Хабр.

    Относительно недавно, в этом, 2019 году, NVIDIA анонсировала одноплатный компьютер совместимого с Raspberry Pi форм-фактора, ориентированный на AI и ресурсоемкие расчеты.



    После его появления в продаже, стало интересно посмотреть, как это работает и что на нем можно делать. Стандартные бенчмарки использовать не так интересно, так что придумаем свои, для всех тестов в тексте приведены исходники. Для тех, кому интересно что получилось, продолжение под катом.

    Hardware


    Для начала, технические характеристики с сайта NVIDIA:



    Из интересного, здесь можно отметить несколько моментов.

    Первое — это GPU, имеющий 128 ядер, соответственно, на плате можно запускать GPU-ориентированные задачи, вроде CUDA (поддерживается и установлен из «коробки») или Tensorflow. Основной процессор 4х ядерный, и как будет показано ниже, вполне неплохой. Память 4Гб, общая между CPU и GPU.

    Второе — это совместимость с Raspberry Pi. Плата имеет 40-пиновый разъем с различными интерфейсами (I2C, SPI и пр), также имеется разъем камеры, который тоже совместим с Raspberry Pi. Можно предположить, что большое количество уже имеющихся аксессуаров (экраны, платы управления моторами и пр) будут работать (возможно, придется использовать удлиннительный кабель, т.к. Jetson Nano все же отличается по габаритам).

    Третье — на плате имеется 2 видеовыхода, Gigabit-Ethernet и USB 3.0, т.е. Jetson Nano в целом даже чуть более функциональна чем «прообраз». Питание 5В, может браться как по Micro USB, так и через отдельный разъем, который рекомендуется для майнинга биткоинов ресурсоемких задач. Так же как и в Raspberry Pi, софт грузится с SD-карты, образ которой нужно предварительно записать. В целом, по идеологии, плата вполне похоже на Raspberry Pi, что видимо и задумывалось в NVIDIA. Но вот WiFi на плате нет, что есть определенный минус, желающим придется использовать USB-WiFi модуль.

    Если присмотреться внимательно, то можно увидеть, что конструктивно устройство состоит из двух модулей — собственно модуля Jetson Nano, и нижней платы с коннекторами, соединение осуществляется через разъем.



    Т.е. плату можно отсоединить и использовать отдельно, это может быть удобно для встраиваемых решений.

    Кстати о цене. Оригинальная цена Jetson Nano в США 99$, цена в Европе с наценкой в местных магазинах порядка 130Евро (если ловить скидки, наверно можно найти и дешевле). Сколько стоит Nano в России, неизвестно.

    Software


    Как упоминалось выше, загрузка и установка мало отличается от Raspberry Pi. Загружаем образ на SD-карту через Etcher или Win32DiskImager, попадаем в Linux, ставим необходимые библиотеки. Отличное по подробности пошаговое руководство есть здесь, я пользовался им. Перейдем сразу к тестам — попробуем запустить разные программы под Nano, и посмотрим как они работают. Для сравнения я использовал три компьютера — свой рабочий ноутбук (Core I7-6500U 2.5ГГц), Raspberry Pi 3B+ и Jetson Nano.

    Тест CPU

    Для начала, скриншот команды lscpu.

    Raspberry Pi 3B+:



    Jetson nano:



    Для расчетов начнем с чего-нибудь простого, но требующего процессорного времени. Например, с вычисления числа Пи. Я взял несложную программу на Python со stackoverflow.

    Не знаю, является ли она оптимальной или нет, но нам это и не важно — нам интересно относительное время.

    Исходный код под спойлером
    import time
    
    # Source: https://stackoverflow.com/questions/9004789/1000-digits-of-pi-in-python
    
    def make_pi():
        q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
        for j in range(10000):
            if 4 * q + r - t < m * t:
                yield m
                q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x
            else:
                q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2
    
    t1 = time.time()
    
    pi_array = []
    for i in make_pi():
        pi_array.append(str(i))
    
    pi_array = pi_array[:1] + ['.'] + pi_array[1:]
    pi_array_str = "".join(pi_array)
    
    print("PI:", pi_array_str)
    print("dT:", time.time() - t1)


    Как и ожидалось, программа работает не быстро. Результат для Jetson Nano: 0.8c.



    Raspberry Pi 3B+ показал заметно большее время: 3.06c. «Образцовый» ноутбук выполнил задачу за 0.27с. В общем, даже без использования GPU, основной процессор в Nano вполне неплох для своего форм-фактора. Желающие могут проверить на Raspberry Pi 4, у меня ее в наличии нет.

    Наверняка найдутся желающие написать в комментариях, что Python не лучший выбор для таких расчетов, еще раз повторюсь, что нам важно было сравнить время, необходимости его минимизировать здесь нет. Понятно, что есть программы, вычисляющие число Пи гораздо быстрее.

    PyCUDA

    Перейдем к более интересному, расчетам с помощью GPU, для чего разумеется (плата ведь от NVIDIA), будем использовать CUDA. Библиотека PyCUDA потребовала некоторого шаманства при установке, она не находила cuda.h, помогло использование команды «sudo env „PATH=$PATH“ pip install pycuda», возможно есть другой способ (еще варианты обсуждались на форуме devtalk.nvidia.com).

    Для теста я взял несложную программу SimpleSpeedTest для PyCUDA, которая просто в цикле считает синусы, ничего полезного такой тест не делает, но время оценить им вполне можно, и его код простой и понятный.

    Исходный код под спойлером
    # SimpleSpeedTest.py
    # https://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest
    
    import pycuda.driver as drv
    import pycuda.autoinit
    from pycuda.compiler import SourceModule
    import numpy
    import time
    
    
    blocks = 64
    block_size = 128
    nbr_values = blocks * block_size
    n_iter = 100000
    
    print("Calculating %d iterations" % (n_iter))
    print()
    
    #####################
    # SourceModule SECTION
    
    # create two timers so we can speed-test each approach
    start = drv.Event()
    end = drv.Event()
    
    mod = SourceModule("""__global__ void gpusin(float *dest, float *a, int n_iter)
                          {
                              const int i = blockDim.x*blockIdx.x + threadIdx.x;
                              for(int n = 0; n < n_iter; n++) {
                                a[i] = sin(a[i]);
                              }
                              dest[i] = a[i];
                          }""")
    
    gpusin = mod.get_function("gpusin")
    
    # create an array of 1s
    a = numpy.ones(nbr_values).astype(numpy.float32)
    # create a destination array that will receive the result
    dest = numpy.zeros_like(a)
    
    start.record() # start timing
    gpusin(drv.Out(dest), drv.In(a), numpy.int32(n_iter), grid=(blocks,1), block=(block_size,1,1) )
    end.record() # end timing
    # calculate the run length
    end.synchronize()
    secs = start.time_till(end)*1e-3
    print("PyCUDA time and first three results:")
    print("%fs, %s" % (secs, str(dest[:3])))
    print()
    
    #############
    # CPU SECTION
    # use numpy the calculate the result on the CPU for reference
    
    a = numpy.ones(nbr_values).astype(numpy.float32)
    t1 = time.time()
    
    for i in range(n_iter):
        a = numpy.sin(a)
    
    print("CPU time and first three results:")
    print("%fs, %s" % (time.time() - t1, str(a[:3])))


    Как можно видеть, вычисление делается с помощью GPU через CUDA и с помощью CPU, через numpy.

    Результаты:
    Jetson nano — 0.67c GPU, 13.3c CPU.
    Raspberry Pi 3B+ — 41.85c CPU, GPU — данных нет, CUDA на RPi не работает.
    Ноутбук — 0.05с GPU, 3.08c CPU.

    Все вполне ожидаемо. Расчеты на GPU гораздо быстрее расчетов на CPU (все же 128 ядер), Raspberry Pi отстает весьма значительно. Ну и разумеется, сколько волка не корми, у слона все равно больше ноутбучная видеокарта гораздо быстрее карты в Jetson Nano — вполне вероятно, что вычислительных ядер в ней гораздо больше.

    Заключение


    Как можно видеть, плата у NVIDIA получилась вполне интересной и весьма производительной. Она немного больше по размеру и дороже, чем Raspberry Pi, но если кому-то нужна большая вычислительная мощность при компактном размере, то оно вполне стоит того. Разумеется, нужно это не всегда — чтобы например, отправлять температуру на narodmon, хватит и Raspberry Pi Zero, причем с многократным запасом. Так что Jetson Nano не претендует на замену Raspberry и клонов, но для ресурсоемких задач она весьма интересна (это могут быть не только дроны или мобильные роботы, но и например, камера для дверного звонка с распознаванием лиц).

    В одну часть все задуманное не уместилось. Во второй части будут тесты AI-части — тесты Keras/Tensorflow и задач по классификации и распознаванию изображений.
    Поделиться публикацией

    Похожие публикации

    Комментарии 38

      +3
      В рабочем ноуте какая видеокарта?
        –1
        По памяти не помню, в понедельник посмотрю и напишу.
        +1
        Немного отдалет субъективностью: Raspberry Pi v.4 c А72 вряд ли медленнее А57.
        В целом, железка занятная. Можно предварительно фильтровать видео перед сжатием и отправкой. Можно сделать игровую консоль. Цена только — не юзер френдли. Как раньше, сервер печати для стареньких принтеров + интернет радио за $13 — не поднимешь.
          +1
          Да, в тексте написано что тестировалась Raspberry Pi 3B+, Pi 4 у меня нет. Исходники выложены, если кто запустит тесты, добавлю результаты в текст.
            +2
            джетсон сделан не для этих целей, а для мобильных решений где например нужно запускать нейронную сеть
            +3
            M.2 Key E это PCIe ×2 ( плюс USB 2.0, I2C, SDIO, UART and PCM)
            можно пробовать подключать уже достаточно интересную периферию, но дороговато
              –11
              Десятый iPhone выпущенный больше года назад мощнее этой карточки. Он даже 4K@60 умеет кодировать, а тут специализированное решение не в состоянии справиться с этой элементарной для компании производящий видеокарты задачей.
              Аналогично 4-й малинке нет NVMe. Чем люди думают, когда делают эти железки?
              Какой смысл в этой железяке, если к ней банально нельзя подключить быстрый диск?
                +4

                NVidia Jetson не про кодирование видео. Больше ориентировано на всякие задачи робототехники, компьютерное зрение, ИИ и так далее. Если мало произвольности — ну вы можете купить Jetson Xavier, там GPU на базе Volta (512 cuda cores, 64 tensor cores).

                  +10
                  А чертов нож-открывашка пивных банок не может завалить медведя, хотя мой старый нож-кинжал, выпущеный в 1871 году делает это наура. Чем люди думают, когда делают эти ножи?
                  Какой смысл в этом ноже, если им банально нельзя завалить медведя?
                    +2

                    Десятое "сплющенное яблоко" стоит кратно больше $99, при (наверное) в 100000 раз большем тираже и при этом тоже не имеет NVMe ;-)

                      +2
                      Не совсем.
                      Появившиеся в сентябре 2015 смартфоны Apple iPhone 6s и iPhone 6s Plus стали первыми мобильными устройствами, оснащёнными встроенными NVMe-накопителями
                      NVM Express
                        +1

                        Спасибо что поправили меня, не ожидал что оно там уже появилось.

                    +2
                    Сколько стоит Nano в России, неизвестно.
                    По предзаказу на официальном сайте 8 990 рублей, курьерская доставка по России (самолётом) входит в стоимость.
                    Но вот WiFi на плате нет, что есть определенный минус, желающим придется использовать USB-WiFi модуль.
                    Либо комбинированную плату типа такой + антенну NGFF
                      +2
                      По производительности в нейросетях этот джетсон нано примерно как разогнанный kendrite K210 за $8 (460 gmulps). И распознование лиц там тоже работает. И с wifi вариант есть. www.youtube.com/watch?v=TaoEwmwEAE8
                        +1
                        У kendrite K210 заявленно VGA@30, а здесь вроде как повыше разрешение. Да и ресурсов побольше.
                          +1
                          Только хотел про K210 упомянуть. Но у него памяти 8 мегабайт. Если туда можно уложить нужную сетку — прекрасно, он ничего не жрёт и неплохо работает. Но банальный face encoder у меня упихать в него не получилось: каскад на распознавание лиц работает, а кодировщик занимает мегабайт 20.
                          –1
                          Я так думаю, это больше для автопроизводителей, для которых, это не такой уж и большой ценник.
                            +1

                            У автопроизводителей — невероятные требования по надежности. Там такая погремушка не пройдет.

                            –2
                            Что там с процессорным майнингом Monero в Xmrig? Судя по наличию поддержки процессором SHA1 инструкций хешрейт майнинга должен быть выше чем у малинки.
                              +2
                              Вы бы ещё на банковских карточках пытались майнить :)
                                0
                                Это не круто.
                                Вот на симкарте — да.
                                  +2
                                  Это, по сути, одно и то же.
                              +3
                              ИМХО важно указать — насколько нужны блобы
                                +2
                                Спасибо за обзор. Чуть больше года искал энергоэффективное решение для полевой обработки данных. А именно обработка видео и распознованием обьектов с камеры

                                Хотели уже с интеловскими модулями для нейросетей делать, а тут оп, у нвидии 9к рублей, 10 ватт потребление да и без каких либо костылей с Pi4 работать будет. Да еще с мониторами уложимся в 35 ватт потребления и все питается от 5 вольт. Чет прям сказка

                                Спасибо за обзор, пошел заказывать и собирать тестовый образец.
                                  0

                                  DmitrySpb79 попробуйте пожалуйста, если есть возможность, запустить ffmpeg с кудой (-c:v h264_nvenc) на данном устройстве. Я себе его давно присматриваю для работы в архиве, но все еще не уверен упрется-ли он в iops или скорей в gpu.

                                  0
                                  У меня к девайсу пока главные вопросы — это питание и теплоотвод. Играюсь с ним в свободное время и результаты пока такие: на ресурсоемких примерах он стабильно виснет минут через 5-10.

                                  Радиатор при этом достаточно горячий. Сначала грешил на питание, мол радиатор горячий, но возможно это рабочий режим и зависание из-за просадки по питанию. Взял качественный блок питания на 3+ Ампера и качественный micro USB кабель. Все аналогично. Взял в блок питания с бочонком 5В/4А. Аналогично. Поставил кулер, правда работающий на 5 вольтах 12 вольтовый, особо не улучшилась ситуация.

                                  Может Micro SD дефектный оказался, не знаю, но без нагрузки в целом все работает. У кого какой опыт есть по локализации таких проблем? Может что из логов может пролить свет на причины?
                                    0
                                    Я бы как минимум, выводил в лог температуру процессора. Питание по USB можно посмотреть девайсом типа usb doctor, но если блок питания на 4А, то вряд ли дело в питании.

                                    Попробуйте на devtalk.nvidia.com/default/board/371/jetson-nano спросить, приложив код, который вешает Nano.

                                    Наконец, может плату и радиатор разобрать, термопастой какой-нибудь смазать.

                                    PS: А проблема точно не программная? Может утечка памяти/дескрипторов/еще чего-нибудь, вот оно минут через 10 и виснет? Стандартные бенчмарки какие-нибудь пробовали?
                                      +1
                                      Просто на чистой системе собирал github.com/dusty-nv/jetson-inference и запускал примеры. Запуск любого примера в итоге перегревает плату. Если без радиатора, то вообще без вариантов виснет.
                                      0
                                      Здесь пишут про некую перемычку J48, которой включают питание по DC на 5В/4А.
                                        +1
                                        Перемычку переключал для активации разъема, без нее бы не заработал.
                                        0
                                        Попробуйте Micro SD поменять всё же.
                                        Мы гоняли >7000 фотографий (720х480, 2.3 секунды на 1 фото) — ничего не зависало.
                                          0
                                          Использовал в работе, тоже вис постоянно, грешил на питание, так как много usb устройств было подключено. В итоге при переходе на 5в/4а зависания исчезли, но и куллер в этот же момент поставил. Ставил кулер noctua. В целом плата очень горячая и чисто с радиатором использовать на полную не выйдет.
                                          –2
                                          Синтетика под линухой — верх ананизма. Банально погонять на этой машинке вин10 с мелкими казуалками было бы куда информативнее чем деление на ноль числа пи.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое