تصدير Qualcomm QNN لنماذج Ultralytics YOLO#
يتطلب نشر نماذج الرؤية الحاسوبية على أجهزة Qualcomm Snapdragon تنسيقًا للنموذج مُهيأً لوقت تشغيل Qualcomm AI Engine Direct (QNN). يتيح تصدير نماذج Ultralytics YOLO إلى تنسيق QNN تشغيل الاستدلال المسرّع على الجهاز عبر وحدات CPU وGPU Adreno وNPU Hexagon في Snapdragon، وهي عتاد موجود في مليارات الهواتف المحمولة والحواسيب المحمولة وأنظمة السيارات وأجهزة إنترنت الأشياء. يشرح هذا الدليل كيفية تصدير YOLO إلى Qualcomm QNN ونشره للاستدلال السريع منخفض الطاقة على أجهزة Snapdragon.
توفر إضافة Ultralytics الرسمية لـ Flutter دعم QNN اختياريًا للاستدلال بالكاميرا في الوقت الفعلي والتنبؤ بصورة واحدة عبر مهام YOLO26 السبع. فعّل وقت تشغيل QNN وأضف تبعية ONNX Runtime كما هو موضح في ملف README الخاص بالإضافة. للنشر على iOS، راجع SDK Ultralytics YOLO لنظام iOS وتكامل CoreML.
صدّر نماذج التصنيف إلى imgsz=224. وصدّر نماذج الكشف والتجزئة والدلالات والعمق والوضعية وOBB إلى imgsz=640. ويُستخدم معيار 224/640 هذا في أصول الأجهزة المحمولة الرسمية لـ QNN وLiteRT وCoreML. تتوفر أصول v73 وv81 الجاهزة للتشغيل لجميع المهام النانوية السبع في إصدار yolo-flutter-app v0.6.6.
ما هو Qualcomm QNN؟#
إن Qualcomm AI Engine Direct، المعروف عادةً باسم QNN والموزع ضمن SDK الخاص بـ Qualcomm AI Runtime (QAIRT)، هو حزمة الاستدلال منخفضة المستوى من Qualcomm لمعالجات Snapdragon. يوفر واجهة API موحدة مع مكتبات خاصة بالواجهات الخلفية تستهدف وحدة CPU في Snapdragon ووحدة GPU Adreno ومعالج Hexagon Tensor Processor (HTP)، وهي وحدة معالجة الشبكات العصبية (NPU) المخصصة داخل أنظمة SoC الحديثة من Snapdragon. يمنح QNN المطورين إمكانية الوصول إلى مجموعة متكاملة من مسرّعات الذكاء الاصطناعي في Snapdragon، وهو الخلف الحديث لـ SDK الأقدم Snapdragon Neural Processing Engine (SNPE). ويشغّل الذكاء الاصطناعي على الجهاز عبر منصات الأجهزة المحمولة Snapdragon 8 Gen 2 و8 Gen 3 و8 Elite، وحواسيب Snapdragon X المحمولة، ومنتجات السيارات والواقع الممتد (XR).
لماذا التصدير إلى Qualcomm QNN؟#
تُعد Snapdragon أكثر منصات الحوسبة المحمولة انتشارًا في العالم. ويتيح تصدير Ultralytics YOLO إلى تنسيق Qualcomm QNN الاستفادة من عتاد الذكاء الاصطناعي المخصص في هذه الأجهزة:
- تسريع NPU Hexagon: يؤدي تشغيل YOLO على Hexagon Tensor Processor إلى معدل نقل أعلى بكثير واستهلاك طاقة أقل من الاستدلال على CPU، ما يجعله مثاليًا لـالاستدلال في الوقت الفعلي والرؤية الحاسوبية المستمرة التشغيل على Snapdragon.
- على الجهاز ودون اتصال: يعمل استدلال QNN بالكامل على جهاز Snapdragon، فلا توجد اتصالات ذهابًا وإيابًا مع السحابة، ويبقى زمن الاستجابة منخفضًا، ولا تغادر البيانات الجهاز مطلقًا.
- كفاءة التكميم: يُجري تصدير QNN تكميمًا لـ YOLO إلى أوزان INT8 مع عمليات تنشيط 16 بت، وهو التوازن المفضل بين الدقة والأداء لدى NPU Hexagon، ما يقلص حجم النموذج ويزيد عدد الإطارات في الثانية على الأجهزة العاملة بالبطارية.
- تنسيق واحد لأجهزة عديدة: يستهدف تصدير Qualcomm QNN واحد وحدات CPU في Snapdragon وGPU Adreno وNPU Hexagon ضمن عائلات Snapdragon 8 Gen 2 و8 Gen 3 و8 Elite وما بعدها.
- حزمة Qualcomm AI جاهزة للإنتاج: يُعد QNN (Qualcomm AI Engine Direct / QAIRT) وقت تشغيل Qualcomm الحالي للذكاء الاصطناعي على الجهاز، والذي يحظى بصيانة نشطة، وهو البديل الموصى به لـ SNPE.
تنسيق تصدير QNN#
تُجمّع Ultralytics نماذج YOLO إلى QNN محليًا باستخدام موفّر تنفيذ QNN في ONNX Runtime (حزمة onnxruntime-qnn القابلة للتثبيت عبر pip، والتي تتضمن مكتبات QAIRT). يحوّل المُصدّر نموذجك إلى ONNX، ثم يُكمّمه باستخدام بيانات المعايرة إلى عمليات تنشيط 16 بت وأوزان INT8 (التوازن الموصى به لـ NPU Hexagon)، ثم يهيّئ جلسة ONNX Runtime مع تفعيل التخزين المؤقت للثنائي السياقي، ما يجمّع الرسم البياني المكمّم في ثنائي سياق QNN مضمّن في <model>_qnn.onnx. لا يلزم حساب Qualcomm أو تحميل إلى السحابة أو تنزيل SDK منفصل.
على عكس Qualcomm AI Hub السحابي، الذي يجمّع النماذج ويحلل أداءها على أجهزة Snapdragon المستضافة لدى Qualcomm ويتطلب حساب Qualcomm، يعمل تصدير Ultralytics QNN بالكامل على جهازك باستخدام استدعاء واحد لـ export(format="qnn", imgsz=640) (imgsz=224 للتصنيف). تحصل على هدف وقت تشغيل QNN/QAIRT نفسه — وحدات CPU في Snapdragon وGPU Adreno وNPU Hexagon — من دون تسجيل أو حدود للتحميل أو أوقات انتظار في الطوابير، كما يندمج مباشرةً في سير عمل تصدير YOLO القياسي.
ملف *_qnn.onnx المُصدّر مكتفٍ ذاتيًا: فهو يضمّن ثنائي سياق QNN وبيانات ONNX الوصفية، مثل أسماء الفئات وحجم الصورة والمهمة.
الميزات الرئيسية لنماذج QNN#
- التكميم: يُكمّم النموذج إلى عمليات تنشيط 16 بت وأوزان INT8 باستخدام مسار QNN QDQ في ONNX Runtime ومجموعة بيانات معايرة، وهو التوازن الموصى به بين الدقة والأداء لدى NPU Hexagon. تعرّف على المزيد حول تكميم النماذج.
- التجميع المحلي بالكامل: يُنشأ ثنائي السياق بالكامل على الجهاز المضيف، من دون حساب Qualcomm أو رمز API أو تحميل إلى السحابة.
- تسريع كامل على Snapdragon: شغّل الاستدلال على NPU Hexagon (HTP) أو GPU Adreno أو CPU من خلال وقت تشغيل موحد واحد.
- نطاق واسع من الأجهزة: استهدف مجموعة واسعة من منصات Snapdragon المستخدمة في الهواتف والحواسيب (Windows على Snapdragon) والسيارات والواقع الممتد (XR) والمنتجات المضمنة.
- ثنائي سياق مُجمّع مسبقًا: يقلل شحن ثنائي السياق من تجميع الرسم البياني على الجهاز، ما يخفض زمن تحميل النموذج على الجهاز المستهدف.
- مخرجات مكتفية ذاتيًا: يتضمن ملف ONNX المُصدّر ثنائي سياق QNN المُجمّع مسبقًا والبيانات الوصفية لتسهيل النشر.
الأداء المقاس#
هاتف Android#
العتاد: Xiaomi 17 بذاكرة LPDDR5X سعتها 12 GB ونظام Android 16 / API 36. ويضم معالج Snapdragon 8 Elite Gen 5 بدقة تصنيع 3 nm (SM8850) وحدة CPU من Qualcomm Oryon ذات 8 أنوية (نواتان Prime بتردد يصل إلى 4.6 GHz و6 أنوية Performance بتردد يصل إلى 3.62 GHz)، ووحدة GPU من Adreno، ووحدة NPU من Hexagon (HTP v81).
| النموذج | المهمة | الحجم (بكسل) | CPU w8a32 LiteRT (مللي ثانية) | GPU w8a32 LiteRT (مللي ثانية) | NPU QNN W8A16 (ms) |
|---|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 | 10.7 1.8 / 6.7 / 2.2 |
| YOLO26n-seg | Segment | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 | 17.4 1.8 / 9.9 / 5.7 |
| YOLO26n-sem | دلالي | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 | 11.5 1.8 / 7.1 / 2.6 |
| YOLO26n-depth | العمق | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 | 35.2 1.8 / 26.1 / 7.3 |
| YOLO26n-cls | التصنيف | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 | 1.2 0.6 / 0.6 / 0.0 |
| YOLO26n-pose | الوضعية | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 | 10.9 1.8 / 7.0 / 2.0 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 | 8.6 1.8 / 5.7 / 1.1 |
- قيم السرعة هي زمن استجابة اندفاعي لصورة واحدة — متوسط 15 تشغيلًا بعد 3 عمليات إحماء على
bus.jpg، وقِيست باستخدام أداة الاختبار المعيارية على الجهاز0.6.10الخاصة بـإضافة Flutter وأصولv0.6.6المعيارية. وتناوب ترتيب الواجهات الخلفية بين المهام في دورة متتابعة واحدة. وأكدت السجلات الأصلية أن كل صف CPU استخدم LiteRT CPU/XNNPACK، وأن كل صف GPU فوّض الرسم البياني كاملًا إلى LiteRT OpenCL (LITERT_CL)، وأن كل صف NPU استخدم الواجهة الخلفية QNN Hexagon HTP. - يتوفر سجل الاختبار المعياري المفصل في وثيقة أداء Flutter.
- قارن أجهزة Android الأخرى في تكامل LiteRT، وأجهزة Apple في تكامل CoreML.
حاسوب محمول بنظام Windows على Snapdragon#
استخدمت هذه الدورة التاريخية ثنائيات QNN من v73 سابقة للمعيار؛ وكانت مدخلات الدلالات وOBB بدقة 1024px. وأُجريت على حاسوب Lenovo محمول بذاكرة 32 GB ونظام Windows 11. ويضم Snapdragon X Elite (X1E78100) وحدة CPU من Qualcomm Oryon ذات 12 نواة، ووحدة GPU من Adreno، ووحدة NPU من Hexagon (HTP v73)؛ ولم يُسجّل طراز Lenovo الدقيق. تقارن هذه النتائج على Windows بنظام Snapdragon خط الأساس الأصلي لوحدة CPU، وهو PyTorch FP32 الذي يبدأ به معظم مطوري الحواسيب المكتبية، بمسار ONNX Runtime QNN Hexagon HTP. تعرض كل خلية الوقت الإجمالي الكامل لـ model.predict() مع أزمنة المعالجة المسبقة والاستدلال والمعالجة اللاحقة المُبلّغ عنها أسفلها؛ وقد يشمل الإجمالي عبء عمل إطار العمل خارج هذه المراحل الثلاث. أرقام CPU هي PyTorch FP32 (torch==2.10.0+cpu)، وأرقام NPU هي ONNX Runtime QNN (onnxruntime-qnn==2.2.0، أوزان INT8 / عمليات تنشيط 16 بت).
| النموذج | المهمة | الحجم (بكسل) | CPU PT FP32 (ms) | NPU Hexagon QNN W8A16 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 91.4 4.3 / 75.2 / 0.1 | 27.2 4.9 / 19.4 / 0.9 |
| YOLO26n-seg | Segment | 640 | 138.8 4.5 / 127.1 / 2.8 | 34.3 5.0 / 24.0 / 5.1 |
| YOLO26n-sem | دلالي | 1024 | 295.8 9.1 / 189.2 / 94.8 | 133.0 8.8 / 37.4 / 83.9 |
| YOLO26n-cls | التصنيف | 224 | 15.4 3.0 / 9.8 / 0.0 | 11.7 2.7 / 5.5 / 0.0 |
| YOLO26n-pose | الوضعية | 640 | 109.6 4.6 / 102.9 / 0.2 | 28.9 5.3 / 23.3 / 0.6 |
| YOLO26n-obb | OBB | 1024 | 267.8 8.1 / 254.6 / 0.1 | 64.8 8.9 / 54.7 / 0.6 |
- تعني قيم السرعة زمن الاستجابة لدفعة من صورة واحدة — متوسط 100 تشغيل بعد 10 عمليات إحماء على
bus.jpg، مع القياس باستخدامtime.perf_counter()حول استدعاءmodel.predict()بالكامل على جهاز مستقر حراريًا (ultralytics==8.4.67، Python 3.12.10). - يعمل NPU من Hexagon أسرع بنحو 2-4 مرات من خط الأساس لوحدة CPU في PyTorch عبر المهام ذات الدقة 640-1024 بكسل (نحو 3.4 مرات في الكشف)، ويتقلص الفارق إلى نحو 1.3 مرة في المصنف ذي الدقة 224 بكسل، حيث تطغى كلفة المعالجة المسبقة الثابتة على عبء العمل الصغير.
المهام المدعومة#
يدعم التصدير إلى Qualcomm QNN مهام Ultralytics السبع جميعها. ولا يتاح التقسيم الدلالي وتقدير العمق إلا باستخدام YOLO26، وهي العائلة الوحيدة التي تتضمن هذين الرأسين.
التصدير إلى QNN: تحويل نموذج YOLO الخاص بك#
صدّر نموذج Ultralytics YOLO إلى تنسيق QNN لنشره على أجهزة Qualcomm. تُهيأ الوحدة الثنائية للسياق النهائية لبنية معالج Hexagon المستهدف (HTP) أو لنظام على شريحة (SoC) مدعوم، ويمكنك تحديد ذلك باستخدام الوسيطة name — وهي الوسيطة نفسها المستخدمة لاستهداف شريحة في التصدير إلى RKNN.
أهداف HTP المدعومة#
مرّر البنية المستهدفة أو نظام الشريحة (SoC) عبر name (مثل name="73" أو name="iq-8275"). يتحدد الدعم بحسب هدف HTP، لذا فإن صفوف Snapdragon أدناه تمثل منصات نموذجية وليست قائمة شاملة بكل أنظمة SoC. أما أجهزة Dragonwing فتُدرج صراحةً.
| الحالة | name | Hexagon HTP | مثال على جهاز أو منصة |
|---|---|---|---|
| ✅ مدعوم | 68 | v68 | Snapdragon 888 |
| ✅ مدعوم | 69 | v69 | Snapdragon 8 Gen 1 / 8+ Gen 1 |
| ✅ مدعوم | 73 | v73 | Snapdragon 8 Gen 2، X Elite (افتراضي) |
| ✅ مدعوم | 75 | v75 | Snapdragon 8 Gen 3 |
| ✅ مدعوم | 79 | v79 | Snapdragon 8 Elite |
| ✅ مدعوم | 81 | v81 | Snapdragon 8 Elite Gen 5 |
| ✅ مدعوم | iq-8275 أو qcs8275 | v75 | Dragonwing IQ-8275 / QCS8275 (طراز QNN SoC 82) |
| ❌ غير مدعوم | — | v66 | Dragonwing IQ-615 / QCS615 |
لا يمكن استخدام Dragonwing IQ-615 لتصدير وحدة سياق QNN من Ultralytics، لأن ONNX Runtime لا يتيح DSP v66 بوصفه هدف HTP غير متصل. ومع ذلك، يمكن دمج تصدير ONNX عادي بشكل منفصل باستخدام موفر تنفيذ لوحدة CPU أو GPU يدعمه BSP الخاص باللوحة.
from ultralytics import YOLO
model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)يستخدم تصدير QNN حزمة onnxruntime-qnn. بدءًا من الإصدار 2.4.0، توفر الحزمة ملفات wheel جاهزة لأنظمة Windows (x64 وARM64) وLinux (x86-64 وARM64) على Python 3.11 أو أحدث؛ أما macOS فليس مضيفًا مدعومًا لـ QNN. يُنشأ الملف الثنائي للسياق على مضيف x64، ولا يتطلب وجود جهاز Snapdragon لإجراء التصدير.
التثبيت#
لتثبيت الحزم المطلوبة، شغّل:
# Install the required package for YOLO
pip install ultralyticsتُثبّت حزمة onnxruntime-qnn (التي توفر موفر تنفيذ QNN في ONNX Runtime وتضم مكتبات QAIRT) تلقائيًا عند التصدير لأول مرة. للحصول على تعليمات مفصلة وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت Ultralytics. وإذا واجهت أي صعوبات أثناء تثبيت الحزم المطلوبة لـ YOLO، فراجع دليل المشكلات الشائعة للاطلاع على الحلول والنصائح.
الاستخدام#
يدعم تنسيق QNN أوضاع التصدير والتنبؤ والتحقق. ويُجرى الاستدلال والتحقق على أجهزة Qualcomm Snapdragon من خلال موفر تنفيذ QNN في ONNX Runtime (باستخدام الحزمة نفسها onnxruntime-qnn المستخدمة للتصدير). صدّر النموذج، ثم حمّل النموذج المُصدّر على جهاز Snapdragon لإجراء الاستدلال أو التحقق من دقته.
from ultralytics import YOLO
# تحميل نموذج YOLO26
model = YOLO("yolo26n.pt")
# التصدير إلى تنسيق Qualcomm QNN (INT8، يُفرض تلقائيًا) لهدف HTP الافتراضي v73
model.export(format="qnn", name="73", imgsz=640) # استخدم imgsz=224 للتصنيفfrom ultralytics import YOLO
# تحميل نموذج QNN المُصدّر (على جهاز Snapdragon يتضمن onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# تنفيذ الاستدلال
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# تحميل نموذج QNN المُصدّر (على جهاز Snapdragon يتضمن onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# # التحقق من الدقة على مجموعة بيانات COCO8
metrics = model.val(data="coco8.yaml")وسيطات التصدير#
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'qnn' | التنسيق المستهدف للنموذج المُصدّر، الذي يحدد مدى توافقه مع بيئة تشغيل Qualcomm QNN. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة، أو مجموعة قيم (height, width). |
batch | int | 1 | يحدد حجم الدفعة للنموذج المُصدّر، والذي يُضمّن في الملف الثنائي لسياق QNN المُنشأ. |
name | str | '73' | بنية Hexagon HTP المستهدفة (68 أو 69 أو 73 أو 75 أو 79 أو 81) أو نظام SoC مدعوم (iq-8275 أو qcs8275). تُهيأ الوحدة الثنائية للسياق النهائية لهذا الهدف. |
quantize | int أو str | 'w8a16'/تلقائي | دقة التكميم. يُكمَّم تصدير QNN HTP إلى أوزان INT8 مع تنشيطات 16 بت ('w8a16')، ويُفعّل تلقائيًا إذا لم يُحدّد. ويحل محل علامتي half/int8 المهجورتين. |
simplify | bool | True | يبسّط رسم ONNX الوسيط باستخدام onnxslim. |
opset | int | None | يحدد إصدار opset الخاص بـ ONNX لرسم ONNX الوسيط. وإذا لم يُحدَّد، فسيُستخدم أحدث إصدار مدعوم. |
data | str | None | ملف YAML لمجموعة البيانات المستخدم لمعايرة INT8؛ أما التصنيف فيتطلب دليلًا لمجموعة البيانات أو اسم مجموعة بيانات مضمّنة. إذا لم تحدده، تختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج. |
fraction | float أو int أو list | 1.0 | مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0. |
device | str | None | يحدد الجهاز المستخدم لخطوة تصدير ONNX: GPU (device=0) أو CPU (device=cpu). |
يكمّم تصدير QNN النموذج إلى تنشيطات 16 بت وأوزان INT8 — وهو التوازن الموصى به بين الدقة والأداء لوحدة NPU من Hexagon — باستخدام مسار تكميم ONNX Runtime QDQ وصور المعايرة من data. ويُفرض quantize='w8a16' تلقائيًا.
لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.
بنية الإخراج#
بعد نجاح التصدير، يُنشأ ملف ONNX مستقل بذاته:
yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary and metadata
يتضمن الملف yolo26n_qnn.onnx الوحدة الثنائية لسياق QNN، ويحمّله ONNX Runtime باستخدام موفر تنفيذ QNN على جهاز Snapdragon. كما يحتوي على بيانات وصفية للنموذج، مثل أسماء الفئات وحجم الصورة والمهمة، في ONNX metadata_props.
نشر نماذج YOLO المُصدّرة إلى QNN#
تعمل نماذج QNN على أجهزة Qualcomm المدعومة، ما يجعل نشر النماذج على الجهاز أمرًا مباشرًا. على جهاز متوافق مثبت عليه onnxruntime-qnn، شغّل النموذج المُصدّر مباشرةً باستخدام واجهة Ultralytics البرمجية (yolo predict/yolo val، راجع الاستخدام أعلاه) — إذ تحمّل Ultralytics الوحدة الثنائية لسياق HTP عبر موفر تنفيذ QNN في ONNX Runtime.
يمكنك أيضًا، ضمن مسارات العمل المخصصة، تحميل ONNX الذي يحتوي على الوحدة الثنائية للسياق مباشرةً باستخدام ONNX Runtime. إن onnxruntime-qnn موفر تنفيذ إضافي، لذا سجّله أثناء التشغيل:
import onnxruntime as ort
import onnxruntime_qnn as qnn_ep
# على جهاز Snapdragon، سجّل موفر تنفيذ QNN الإضافي وحدد أجهزته
ort.register_execution_provider_library("QNNExecutionProvider", qnn_ep.get_library_path())
devices = [d for d in ort.get_ep_devices() if d.ep_name == "QNNExecutionProvider"]
options = ort.SessionOptions()
options.add_provider_for_devices(devices, {"backend_path": qnn_ep.get_qnn_htp_path()})
session = ort.InferenceSession("yolo26n_qnn.onnx", sess_options=options)
input_info = session.get_inputs()[0]
outputs = session.run(None, {input_info.name: input_tensor}) # input_tensor: float32 NHWCنظرًا إلى أن الوحدة الثنائية لسياق QNN مُجمّعة مسبقًا، تُحمّل الجلسة بسرعة دون إعادة تجميع الرسم البياني على الجهاز.
متطلبات Linux وYocto BSP#
يجب أن توفر اللوحة المستهدفة بيئة تشغيل Qualcomm وBSP متوافقين معًا. ويتضمن ذلك لاستدلال HTP موفر تنفيذ QNN في ONNX Runtime، وlibQnnSystem.so، وlibQnnHtp.so، ومكتبتَي stub وskeleton لـ HTP v75 من أجل IQ-8275، ودعم FastRPC في مساحة المستخدم مثل libcdsprpc.so، والبرامج الثابتة لـ DSP، وبرامج تشغيل FastRPC/النواة المقابلة. ويجب أن تكون مكتبة skeleton قابلة للاكتشاف عبر مسار مكتبات DSP في BSP.
تأتي هذه المكونات على جانب الجهاز المستهدف من BSP المزوّد من الشركة المصنّعة للوحة، والمُمكّن بـ QAIRT/QNN؛ وهي غير مضمنة في النموذج المُصدّر. أما تنفيذ GPU فيتطلب libQnnGpu.so ومجموعة برامج تشغيل مساحة المستخدم المطابقة لـ Adreno. إن ناتج Ultralytics format=qnn هو وحدة ثنائية لسياق مخصصة لـ HTP، لذا ينبغي أن يبدأ النشر على GPU أو CPU من تصدير ONNX عادي، لا من الملف المُجمّع مسبقًا *_qnn.onnx.
سير العمل الموصى به#
- درّب نموذجك باستخدام وضع التدريب من Ultralytics
- صدّر إلى تنسيق QNN باستخدام
model.export(format="qnn", name="iq-8275", imgsz=640)على منصة مدعومة (استخدمimgsz=224للتصنيف) - انشر الملف المُصدّر
*_qnn.onnxعلى جهاز Qualcomm لديك - شغّل الاستدلال باستخدام ONNX Runtime وموفر تنفيذ QNN مع الواجهة الخلفية HTP
تطبيقات واقعية#
تلائم نماذج YOLO التي تعمل على أجهزة Qualcomm Snapdragon مجموعة واسعة من تطبيقات الذكاء الاصطناعي الطرفي:
- الهواتف الذكية: كشف الأجسام وفهم المشاهد في الوقت الفعلي ضمن تطبيقات الكاميرا والصور، مع تسريع NPU.
- Windows على Snapdragon: رؤية حاسوبية على الجهاز في حواسيب Copilot+ PC دون نقل المعالجة إلى السحابة.
- السيارات: مراقبة السائق، وكشف الركاب، وميزات ADAS على منصات Snapdragon Digital Chassis.
- XR والأجهزة القابلة للارتداء: إدراك منخفض الطاقة وزمن الاستجابة لسماعات AR/VR والنظارات الذكية.
- إنترنت الأشياء والروبوتات: استدلال بصري فعّال على الكاميرات والطائرات المسيّرة والأنظمة المضمنة المدعومة بـ Snapdragon.
الملخص#
في هذا الدليل، تعلّمت كيفية تصدير نماذج Ultralytics YOLO إلى تنسيق Qualcomm QNN محليًا باستخدام موفر تنفيذ QNN في ONNX Runtime. يحوّل مسار التصدير النموذج إلى ONNX، ثم يجمّعه في وحدة ثنائية لسياق QNN على جهازك المضيف — دون الحاجة إلى حساب Qualcomm أو السحابة — لينتج ملف *_qnn.onnx مُحسّنًا لوحدات CPU وGPU من Adreno وNPU من Hexagon في Snapdragon عبر بيئة تشغيل QNN/QAIRT.
يوفر الجمع بين Ultralytics YOLO ومجموعة تقنيات الذكاء الاصطناعي على الجهاز من Qualcomm حلًا فعّالًا لتشغيل أحمال عمل الرؤية الحاسوبية المتقدمة ضمن منظومة Snapdragon الواسعة.
للاطلاع على أهداف النشر الأخرى على الأجهزة والهواتف المحمولة، راجع أدلة التصدير ذات الصلة إلى ONNX وCoreML وNCNN وLiteRT وExecuTorch وRKNN وSony IMX500 وTensorRT. لمقارنة التنسيقات قبل الإطلاق، استخدم وضع قياس الأداء. للاطلاع على القائمة الكاملة للتنسيقات والخيارات، تفضل بزيارة وثائق وضع التصدير وصفحة دليل عمليات التكامل.
الأسئلة الشائعة#
يمكنك تصدير نموذجك باستخدام
export(format="qnn", imgsz=640)(imgsz=224للتصنيف) أو وسيطات CLI المكافئة. ينشئ التصدير أولًا نموذج ONNX، ثم يجمّعه محليًا في وحدة ثنائية لسياق QNN باستخدام موفر تنفيذ QNN في ONNX Runtime. وتُثبّت حزمةonnxruntime-qnnتلقائيًا عند التصدير لأول مرة.مثالfrom ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="qnn", imgsz=640) # استخدم imgsz=224 للتصنيفلا. يُجرى تصدير QNN بالكامل على جهازك المحلي باستخدام حزمة
onnxruntime-qnnالتي تتضمن مكتبات QAIRT. لا يلزم حساب Qualcomm أو رمز API أو الاتصال بالشبكة.Qualcomm AI Hub هي خدمة Qualcomm السحابية لتجميع النماذج وتحليل أدائها وقياسه على أجهزة Snapdragon مستضافة، وتتطلب حساب Qualcomm. يستهدف تصدير QNN من Ultralytics بيئة تشغيل QNN/QAIRT نفسها (وحدات CPU في Snapdragon وGPU من Adreno وNPU من Hexagon)، لكنه يجمّع الوحدة الثنائية للسياق محليًا باستخدام موفر تنفيذ QNN في ONNX Runtime — بلا حساب أو رفع ملفات أو انتظار في قائمة انتظار. إنها أسرع طريقة للانتقال من نموذج
.ptإلى إصدار جاهز لـ Snapdragon مباشرةً ضمن سير عمل تصدير YOLO المعتاد.توفر
onnxruntime-qnn، الإصدار 2.4.0 وما بعده، ملفات wheel جاهزة لأنظمة Windows (x64 وARM64) وLinux (x86-64 وARM64) على Python 3.11 أو أحدث؛ أما macOS فليس مضيفًا مدعومًا لـ QNN. ويُنشأ الملف الثنائي للسياق على مضيف x64، ولا يتطلب جهاز Snapdragon فعليًا.أجرِ التصدير باستخدام
model.export(format="qnn", imgsz=640)(imgsz=224للتصنيف)، وانسخ الملف الناتجyolo26n_qnn.onnxإلى جهاز Snapdragon لديك، ثم شغّلyolo predict model=yolo26n_qnn.onnx source=image.jpg(أوyolo val). تحمّل Ultralytics الوحدة الثنائية للسياق عبر موفر تنفيذ QNN في ONNX Runtime وتشغّلها على وحدة NPU من Hexagon — راجع نشر نماذج YOLO المُصدّرة إلى QNN.QNN (محرك Qualcomm للذكاء الاصطناعي المباشر، وهو جزء من SDK الخاص بـ QAIRT) هو مجموعة تقنيات الاستدلال الحالية من Qualcomm والبديل الموصى به لمجموعة SDK الأقدم، Snapdragon Neural Processing Engine (SNPE). ينبغي أن تستهدف عمليات النشر الجديدة QNN.
نعم، على جهاز Qualcomm Snapdragon مثبت عليه
onnxruntime-qnn— إذ يحمّلYOLO("yolo26n_qnn.onnx")الوحدة الثنائية للسياق عبر موفر تنفيذ QNN ويشغّلpredict/valكما يفعل مع أي تنسيق آخر. أما على مضيف x86 من دون أجهزة QNN، فلا يمكن تشغيل النموذج لأن الوحدة الثنائية للسياق تستهدف وحدة NPU في Snapdragon.ينشئ التصدير ملف ONNX مستقلًا بذاته يحتوي على الوحدة الثنائية للسياق (مثل
yolo26n_qnn.onnx)، ويتضمن أسماء الفئات وحجم الصورة والمهمة وغيرها من البيانات الوصفية للنموذج في ONNXmetadata_props.