NVIDIA Jetson Nano: tes dan tayangan pertama

Hai, Habr.

Baru-baru ini, dalam hal ini, 2019, NVIDIA mengumumkan komputer papan tunggal yang kompatibel dengan faktor bentuk Raspberry Pi, yang berfokus pada AI dan perhitungan intensif sumber daya.



Setelah muncul dijual, menjadi menarik untuk melihat cara kerjanya dan apa yang bisa dilakukan di sana. Tidak terlalu menarik untuk menggunakan tolok ukur standar, jadi kami akan membuat sendiri, untuk semua tes kode sumber diberikan dalam teks. Bagi mereka yang tertarik dengan apa yang terjadi, terus di bawah potongan.

Perangkat keras


Sebagai permulaan, spesifikasi dari situs web NVIDIA:



Yang menarik, berikut adalah beberapa poin.

Yang pertama adalah GPU dengan 128 core, masing-masing, di papan Anda dapat menjalankan tugas berorientasi GPU, seperti CUDA (didukung dan diinstal di luar kotak) atau Tensorflow. Prosesor utama adalah 4-core, dan, seperti yang ditunjukkan di bawah ini, cukup bagus. Memori 4GB dibagi antara CPU dan GPU.

Yang kedua adalah kompatibilitas dengan Raspberry Pi. Papan ini memiliki konektor 40-pin dengan berbagai antarmuka (I2C, SPI, dll.), Ada juga konektor kamera, yang juga kompatibel dengan Raspberry Pi. Dapat diasumsikan bahwa sejumlah besar aksesori yang ada (layar, papan kontrol motor, dll.) Akan berfungsi (Anda mungkin harus menggunakan kabel ekstensi, karena ukuran Jetson Nano masih berbeda).

Ketiga, dewan memiliki 2 output video, Gigabit-Ethernet dan USB 3.0, mis. Jetson Nano secara keseluruhan bahkan sedikit lebih fungsional daripada prototipe. Daya 5V, dapat diambil baik melalui Micro USB, dan melalui konektor terpisah, yang direkomendasikan untuk menambang bitcoin dari tugas intensif sumber daya. Seperti dalam Raspberry Pi, perangkat lunak dimuat dari kartu SD, gambar yang pertama-tama harus direkam. Secara umum, secara ideologis, papan ini sangat mirip dengan Raspberry Pi, yang tampaknya dikandung di NVIDIA. Tetapi tidak ada WiFi di papan tulis, ada minus yang pasti, mereka yang ingin harus menggunakan modul USB-WiFi.

Jika Anda melihat lebih dekat, Anda dapat melihat bahwa secara struktural perangkat terdiri dari dua modul - modul Jetson Nano itu sendiri, dan papan bawah dengan konektor, koneksi melalui konektor.



Yaitu papan dapat diputus dan digunakan secara terpisah, itu dapat nyaman untuk solusi yang tertanam.

Bicara soal harga. Harga asli Jetson Nano di AS adalah $ 99, harga di Eropa dengan mark-up di toko-toko lokal adalah sekitar 130 Euro (jika Anda mendapatkan diskon, Anda mungkin bisa menemukan lebih murah). Berapa biaya Nano di Rusia tidak diketahui.

Perangkat lunak


Seperti disebutkan di atas, unduhan dan pemasangan tidak jauh berbeda dari Raspberry Pi. Kami memuat gambar ke kartu SD melalui Etcher atau Win32DiskImager, masuk ke Linux, letakkan perpustakaan yang diperlukan. Panduan langkah demi langkah yang sangat baik ada di sini , saya menggunakannya. Mari kita beralih ke tes segera - mari kita coba untuk menjalankan berbagai program di bawah Nano, dan lihat bagaimana mereka bekerja. Sebagai perbandingan, saya menggunakan tiga komputer - laptop kerja saya (Core I7-6500U 2.5GHz), Raspberry Pi 3B + dan Jetson Nano.

Tes CPU

Untuk memulai, tangkapan layar dari perintah lscpu.

Raspberry Pi 3B +:



Jetson nano:



Untuk perhitungan, mari kita mulai dengan sesuatu yang sederhana, tetapi membutuhkan waktu prosesor. Misalnya dengan menghitung angka Pi. Saya mengambil program Python sederhana dengan stackoverflow .

Saya tidak tahu apakah itu optimal atau tidak, tetapi itu tidak masalah bagi kami - kami tertarik pada waktu yang relatif .

Kode sumber di bawah spoiler
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*(rm*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) 


Seperti yang diharapkan, program tidak bekerja dengan cepat. Hasil untuk Jetson Nano: 0.8c.



Raspberry Pi 3B + menunjukkan waktu yang lebih lama: 3.06c. Laptop "teladan" menyelesaikan tugas di 0,27-an. Secara umum, bahkan tanpa menggunakan GPU, prosesor utama di Nano cukup baik untuk faktor bentuknya. Mereka yang ingin dapat memeriksa Raspberry Pi 4, saya tidak memilikinya.

Tentunya ada orang yang ingin menulis di komentar bahwa Python bukan pilihan terbaik untuk perhitungan seperti itu, saya ulangi sekali lagi bahwa penting bagi kita untuk membandingkan waktu, tidak perlu menguranginya. Jelas bahwa ada program yang menghitung angka Pi jauh lebih cepat.

Pycuda

Mari kita beralih ke perhitungan yang lebih menarik menggunakan GPU, yang tentu saja (papan dari NVIDIA), kita akan menggunakan CUDA. Pustaka PyCUDA memerlukan perdukunan selama instalasi, tidak menemukan cuda.h, penggunaan perintah "sudo env" PATH = $ PATH "pip install pycuda" membantu, mungkin ada cara lain (lebih banyak opsi dibahas di forum devtalk.nvidia.com ).

Untuk pengujian, saya mengambil program sederhana SimpleSpeedTest untuk PyCUDA, yang hanya menghitung sinus dalam satu lingkaran, tidak ada gunanya, tetapi sangat mungkin untuk mengevaluasinya, dan kodenya sederhana dan jelas.

Kode sumber di bawah spoiler
 # 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]))) 


Seperti yang Anda lihat, perhitungan dilakukan menggunakan GPU melalui CUDA dan menggunakan CPU melalui numpy.

Hasil:
Jetson nano - GPU 0,67c, CPU 13,3c.
Raspberry Pi 3B + - 41.85c CPU, GPU - tidak ada data, CUDA pada RPi tidak berfungsi.
Notebook - GPU 0,05, CPU 3,08c.

Semuanya sangat diharapkan. Perhitungan pada GPU jauh lebih cepat daripada perhitungan pada CPU (masih 128 core), Raspberry Pi tertinggal cukup signifikan. Yah, tentu saja, tidak peduli berapa banyak Anda memberi makan serigala, gajah masih memiliki kartu video laptop jauh lebih cepat daripada kartu di Jetson Nano - kemungkinan ada lebih banyak inti pemrosesan di dalamnya.

Kesimpulan


Seperti yang Anda lihat, papan NVIDIA ternyata sangat menarik dan sangat produktif. Ini sedikit lebih besar dan lebih mahal daripada Raspberry Pi, tetapi jika seseorang membutuhkan lebih banyak daya komputasi dengan ukuran yang kompak, maka itu sangat berharga. Tentu saja, ini tidak selalu diperlukan - misalnya, untuk mengirim suhu ke narodmon, Raspberry Pi Zero sudah cukup, dan dengan beberapa margin. Jadi Jetson Nano tidak mengklaim untuk mengganti Raspberry dan klon, tetapi untuk tugas-tugas yang intensif sumber daya, ini sangat menarik (dapat berupa tidak hanya drone atau robot seluler, tetapi juga, misalnya, kamera untuk bel pintu dengan pengenalan wajah).

Pada satu bagian, semua yang dikandung tidak sesuai. Pada bagian kedua, akan ada tes bagian AI - tes Keras / Tensorflow dan tugas klasifikasi dan pengenalan gambar.

Source: https://habr.com/ru/post/id460723/


All Articles