النشر على NVIDIA Jetson باستخدام TensorRT و DeepStream SDK
📚 يشرح هذا الدليل كيفية نشر نموذج مدرب في منصة NVIDIA Jetson وإجراء الاستدلال باستخدام TensorRT و DeepStream SDK. هنا نستخدم TensorRT لتحقيق أقصى قدر من أداء الاستدلال على منصة Jetson.
التحقق من الأجهزة
لقد اختبرنا هذا الدليل وتحققنا منه على أجهزة Jetson التالية
- تمت إعادة كمبيوتر J1010 الذي تم بناؤه باستخدام وحدة Jetson Nano
- تمت إعادة كمبيوتر J2021 المصمم باستخدام وحدة Jetson Xavier NX
قبل البدء
تأكد من تثبيت JetPack SDK بشكل صحيح مع جميع مكونات SDK و DeepStream SDK على جهاز Jetson لأن هذا يتضمن CUDA ، TensorRT و DeepStream SDK اللازمة لهذا الدليل.
يوفر JetPack SDK بيئة تطوير كاملة لتطوير الذكاء الاصطناعي المتطورة المسرع للأجهزة. يتم دعم جميع وحدات Jetson ومجموعات المطورين بواسطة JetPack SDK.
هناك طريقتان رئيسيتان للتثبيت بما في ذلك ،
- طريقة صورة بطاقة SD
- طريقة إدارة NVIDIA SDK
يمكنك العثور على دليل تثبيت مفصل للغاية من موقع NVIDIA الرسمي. يمكنك أيضا العثور على أدلة تتوافق مع إعادة الكمبيوتر J1010 و reComputer J2021 المذكورة أعلاه.
تثبيت الحزم الضرورية
- الخطوة 1. الوصول إلى محطة جهاز Jetson ، وتثبيت النقطة وترقيتها
- الخطوة 2. استنساخ الريبو التالي
- الخطوه 3. فتح requirements.txt
- الخطوة 5. قم بتحرير الأسطر التالية. هنا تحتاج إلى الضغط على i أولا للدخول إلى وضع التحرير. اضغط على ESC ، ثم اكتب : wq للحفظ والإنهاء
ملاحظه: torch ويتم استبعاد Torchvision في الوقت الحالي لأنه سيتم تثبيتها لاحقا.
- الخطوة 6. تثبيت التبعية أدناه
- الخطوة 7. تثبيت الحزم اللازمة
أقام PyTorch و Torchvision
لا يمكننا التثبيت PyTorch و Torchvision من النقطة لأنها غير متوافقة للتشغيل على منصة Jetson التي تعتمد على بنية ARM aarch64. لذلك ، نحتاج إلى تثبيت يدويا مسبق الصنع PyTorch عجلة نقطة وتجميع / تثبيت Torchvision من المصدر.
قم بزيارة هذه الصفحة للوصول إلى جميع PyTorch وروابط Torchvision.
فيما يلي بعض الإصدارات التي يدعمها JetPack 4.6 والإصدارات الأحدث.
PyTorch الإصدار 1.10.0
بدعم من JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) مع Python 3.6
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- عنوان URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch الإصدار 1.12.0
بدعم من JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) مع Python 3.8
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
الخطوة 1. أقام torch وفقا لإصدار JetPack الخاص بك بالتنسيق التالي
على سبيل المثال ، نحن هنا نقوم بتشغيل JP4.6.1 ، وبالتالي نختار PyTorch الإصدار 1.10.0
cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- الخطوة 2. تثبيت torchvision اعتمادا على إصدار PyTorch التي قمت بتثبيتها. على سبيل المثال ، اخترنا PyTorch v1.10.0 ، مما يعني أننا بحاجة إلى اختيار Torchvision v0.11.1
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install
فيما يلي قائمة بإصدار torchvision المقابل الذي تحتاج إلى تثبيته وفقا ل PyTorch الإصدار:
- PyTorch v1.10 - Torchvision v0.11.1
- PyTorch v1.12 -- Torchvision v0.13.0
تكوين DeepStream ل YOLOv5
- الخطوة 1. استنساخ الريبو التالي
- الخطوة 2. نسخ gen_wts_yoloV5.py من ديب ستريم-Yolo/ المرافق في yolov5 دليل
- الخطوه 3. داخل yolov5 الريبو ، قم بتنزيل ملف PT من YOLOv5 الإصدارات (مثال ل YOLOv5s 6.1)
- الخطوة 4. إنشاء ملفات cfg و wts
ملاحظة: لتغيير حجم الاستدلال (الإعداد الافتراضي: 640)
- الخطوة 5. انسخ ملفات cfg و wts التي تم إنشاؤها إلى ملف ديب ستريم-Yolo مجلد
- الخطوة 6. افتح الزر ديب ستريم-Yolo مجلد وتجميع المكتبة
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
- الخطوة 7. قم بتحرير ملف config_infer_primary_yoloV5.txt وفقا للطراز الخاص بك
- الخطوة 8. تحرير ملف deepstream_app_config
- الخطوة 9. قم بتغيير مصدر الفيديو في deepstream_app_config الملف. هنا يتم تحميل ملف فيديو افتراضي كما ترى أدناه
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
تشغيل الاستدلال
النتيجة المذكورة أعلاه تعمل على Jetson Xavier NX مع FP32 و YOLOv5s 640x640. يمكننا أن نرى أن FPS حوالي 30.
معايرة INT8
إذا كنت تريد استخدام دقة INT8 للاستدلال ، فأنت بحاجة إلى اتباع الخطوات أدناه
- الخطوة 1. تثبيت OpenCV
- الخطوة 2. تجميع / إعادة ترجمة مكتبة nvdsinfer_custom_impl_Yolo بدعم OpenCV
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
-
الخطوه 3. بالنسبة لمجموعة بيانات COCO ، قم بتنزيل val2017 واستخراجه والانتقال إليه ديب ستريم-Yolo مجلد
-
الخطوة 4. إنشاء دليل جديد لصور المعايرة
- الخطوة 5. قم بتشغيل ما يلي لتحديد 1000 صورة عشوائية من مجموعة بيانات COCO لتشغيل المعايرة
ملاحظه: توصي NVIDIA بما لا يقل عن 500 صورة للحصول على دقة جيدة. في هذا المثال ، يتم اختيار 1000 صورة للحصول على دقة أفضل (المزيد من الصور = دقة أكبر). ستؤدي قيم INT8_CALIB_BATCH_SIZE الأعلى إلى مزيد من الدقة وسرعة معايرة أسرع. اضبطه وفقا لذاكرة GPU الخاصة بك. يمكنك ضبطه من الرأس -1000. على سبيل المثال ، بالنسبة ل 2000 صورة ، الرأس -2000. قد تستغرق هذه العملية وقتا طويلا.
- الخطوة 6. قم بإنشاء ملف calibration.txt مع جميع الصور المحددة
- الخطوة 7. تعيين متغيرات البيئة
- الخطوة 8. تحديث ملف config_infer_primary_yoloV5.txt
من
ل
- الخطوة 9. تشغيل الاستدلال
النتيجة المذكورة أعلاه تعمل على Jetson Xavier NX مع INT8 و YOLOv5s 640x640. يمكننا أن نرى أن FPS حوالي 60.
النتائج المعيارية
يلخص الجدول التالي كيفية أداء الطرز المختلفة على Jetson Xavier NX.
اسم الموديل | دقة | حجم الاستدلال | وقت الاستدلال (مللي ثانية) | إطارا في الثانية |
---|---|---|---|---|
يولو v5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
زائد
هو مكتوب هذا البرنامج التعليمي من قبل أصدقائنا في seeed @lakshanthad وإيلين