NVIDIA Jetson Nano: الاختبارات والانطباعات الأولى

مرحبا يا هبر.

نسبيا في الآونة الأخيرة ، في هذا ، 2019 ، أعلنت NVIDIA عن جهاز كمبيوتر أحادي اللوحة متوافق مع عامل شكل Raspberry Pi ، ويركز على العمليات الحسابية المكثفة والموارد.



بعد ظهورها للبيع ، أصبح من المثير للاهتمام معرفة كيفية عملها وما الذي يمكن القيام به عليه. ليس من المثير للاهتمام استخدام معايير قياسية ، لذلك سنتوصل إلى معاييرنا الخاصة ؛ وبالنسبة لجميع الاختبارات ، يتم تقديم شفرة المصدر في النص. بالنسبة لأولئك الذين يرغبون في ما حدث ، واصلت تحت الخفض.

خردوات


بالنسبة للمبتدئين ، المواصفات من موقع NVIDIA:



من المثير للاهتمام ، وهنا بعض النقاط.

الأول هو GPU مع 128 قلبًا ، على التوالي ، يمكنك تشغيل مهام موجهة نحو GPU ، مثل CUDA (مدعومة ومثبتة خارج الصندوق) أو Tensorflow. المعالج الرئيسي هو 4 النواة ، وكما هو مبين أدناه ، هو جيد جدا. 4GB الذاكرة المشتركة بين وحدة المعالجة المركزية والجرافيك.

والثاني هو التوافق مع Raspberry Pi. تحتوي اللوحة على موصل 40 سنًا مع واجهات متعددة (I2C ، SPI ، إلخ) ، وهناك أيضًا موصل كاميرا ، وهو متوافق أيضًا مع Raspberry Pi. يمكن افتراض أن عددًا كبيرًا من الملحقات الموجودة (الشاشات ، لوحات التحكم في المحرك ، إلخ) ستعمل (قد تضطر إلى استخدام كابل تمديد ، لأن Jetson Nano لا يزال مختلفًا في الحجم).

ثالثًا ، تحتوي اللوحة على مخرجين للفيديو هما 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 يورو (إذا كنت تحصل على خصومات ، فربما تجد أرخص). كم تكلفة نانو في روسيا غير معروفة.

البرمجيات


كما ذكر أعلاه ، فإن التنزيل والتثبيت لا يختلف كثيرًا عن Raspberry Pi. نقوم بتحميل الصورة على بطاقة SD عبر Etcher أو Win32DiskImager ، والدخول إلى Linux ، ووضع المكتبات اللازمة. دليل خطوة بخطوة ممتاز هنا ، اعتدت عليه. دعنا ننتقل إلى الاختبارات على الفور - حاول تشغيل برامج مختلفة ضمن برنامج Nano ، وشاهد كيف تعمل. للمقارنة ، استخدمت ثلاثة أجهزة كمبيوتر - كمبيوتر محمول عملي (Core I7-6500U 2.5 جيجاهرتز) و Raspberry Pi 3B + و Jetson Nano.

اختبار وحدة المعالجة المركزية

للبدء ، لقطة شاشة للأمر lscpu.

توت العليق 3B +:



جيتسون نانو:



بالنسبة للحسابات ، لنبدأ بشيء بسيط ، ولكنه يتطلب وقت المعالج. على سبيل المثال ، من خلال حساب الرقم Pi. أخذت برنامج بيثون بسيط مع 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*(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) 


كما هو متوقع ، البرنامج لا يعمل بسرعة. النتيجة لـ Jetson Nano: 0.8c.



وأظهرت التوت بي 3B + وقتا أطول بشكل ملحوظ: 3.06c. أكمل الكمبيوتر المحمول "المثالي" المهمة في 0.27 ثانية. بشكل عام ، حتى بدون استخدام GPU ، فإن المعالج الرئيسي في Nano مفيد جدًا لعامل الشكل. أولئك الذين يرغبون في التحقق من Raspberry Pi 4 ، لا أمتلك هذا الجهاز.

بالتأكيد هناك من يريد أن يكتب في التعليقات أن بيثون ليس الخيار الأفضل لمثل هذه الحسابات ، وأكرر مرة أخرى أنه من المهم بالنسبة لنا أن نقارن الوقت ، وليس هناك حاجة لتقليله. من الواضح أن هناك برامج تحسب رقم Pi بشكل أسرع.

PyCUDA

دعنا ننتقل إلى حسابات أكثر إثارة للاهتمام باستخدام GPU ، والتي بالطبع (اللوحة من NVIDIA) ، سوف نستخدم CUDA. تطلب مكتبة PyCUDA بعض الشامانية أثناء التثبيت ، ولم تجد cuda.h ، وساعد استخدام الأمر "sudo env" PATH = $ PATH "pip install pycuda" ، ربما هناك طريقة أخرى (تمت مناقشة المزيد من الخيارات في منتدى devtalk.nvidia.com ).

بالنسبة للاختبار ، أخذت البرنامج البسيط SimpleSpeedTest for 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 واستخدام وحدة المعالجة المركزية خلال numpy.

النتائج:
Jetson nano - وحدة معالجة الرسومات 0.67c ، وحدة المعالجة المركزية 13.3c.
توت العليق 3B + - 41.85c وحدة المعالجة المركزية ، GPU - لا توجد بيانات ، لا يعمل CUDA على RPi.
مفكرة - 0.05s GPU ، 3.08c وحدة المعالجة المركزية.

كل شيء متوقع تماما. الحسابات على وحدة معالجة الرسومات أسرع بكثير من العمليات الحسابية على وحدة المعالجة المركزية (لا تزال 128 النوى) ، و Raspberry Pi تتخلف بشكل كبير. حسنًا ، بالطبع ، بصرف النظر عن مقدار تغذية الذئب ، لا يزال الفيل يمتلك بطاقة فيديو للكمبيوتر المحمول أسرع بكثير من البطاقة الموجودة في Jetson Nano - من المحتمل أن يكون هناك عدد أكبر بكثير من مراكز المعالجة.

استنتاج


كما ترون ، تبين أن لوحة NVIDIA مثيرة للاهتمام ومثمرة للغاية. إنه أكبر قليلاً وأكثر تكلفة من Raspberry Pi ، ولكن إذا كان شخص ما بحاجة إلى المزيد من طاقة الحوسبة بحجم صغير ، فإن الأمر يستحق ذلك. بالطبع ، هذا ليس ضروريًا دائمًا - على سبيل المثال ، لإرسال درجة الحرارة إلى narodmon ، فإن Raspberry Pi Zero يكفي وبهوامش متعددة. إذن Jetson Nano لا تدعي أنها تحل محل Raspberry و clones ، ولكن بالنسبة للمهام كثيفة الاستخدام للموارد ، فمن المثير للاهتمام للغاية (قد لا تكون فقط طائرات بدون طيار أو روبوتات متحركة ، ولكن أيضًا ، على سبيل المثال ، كاميرا لجرس الباب مع التعرف على الوجوه).

في جزء واحد ، كل شيء تصور لم يصلح. في الجزء الثاني ، سيكون هناك اختبارات للجزء الجزئي لمنظمة العفو الدولية - اختبارات Keras / Tensorflow ومهام في التصنيف والتعرف على الصور.

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


All Articles