التصدير إلى AMD Xilinx باستخدام Vitis AI لنماذج Ultralytics YOLO#
عند تصدير نماذج Ultralytics YOLO26 باستخدام format="xilinx"، تُكمَّم النماذج عبر AMD Quark لتشغيلها على وحدة NPU في أنظمة SoCs التكيفية من AMD Versal AI Edge Series Gen 2، وتصبح جاهزة لمترجم Vitis AI من AMD لإنشاء نموذج .rai. وتتحقق عملية التصدير نفسها من دقة INT8 على أي مضيف قبل النشر.
يستهدف التصدير مسار Vitis AI لوحدات NPU الذي تتم صيانته حاليًا لأجهزة Versal AI Edge Series Gen 2، مثل مجموعة التقييم VEK385. تستخدم وحدات DPU في Zynq UltraScale+ وKria ووحدة NPU من الجيل الأول في Versal AI Edge (VEK280) مسارات Vitis AI أخرى، موضّحة في النشر على أهداف AMD Xilinx الأخرى.
تُشغّل أجهزة AMD Xilinx كثيراً من الكاميرات الصناعية وأنظمة الرؤية للسيارات والروبوتات والطائرات المسيّرة ومنتجات التصوير الطبي في العالم. وهي تجمع معالجات Arm مع المنطق القابل للبرمجة، وتضم في الأجهزة الأحدث محركات AI مخصصة، ما يتيح لشريحة واحدة التقاط الفيديو ومعالجته مسبقاً وتشغيل الكشف عن الكائنات والاستجابة للنتائج مع زمن استدلال منخفض ويمكن التنبؤ به.
يغطي هذا الدليل التصدير إلى AMD Xilinx، وطريقة ترجمته وتشغيله على لوحة Versal، وعائلات أجهزة AMD Xilinx، وكيفية تشغيل الذكاء الاصطناعي عليها، ومشغّلات Ultralytics YOLO التي يدعمها كل مسرّع.
ما هي AMD Xilinx؟#
ابتكرت Xilinx مجال مصفوفات البوابات المنطقية القابلة للبرمجة ميدانياً (FPGA) في ثمانينيات القرن الماضي، وأصبحت مورداً رائداً لـأنظمة SoC المتكيفة وFPGAs. أكملت AMD استحواذها على Xilinx في فبراير 2022، وتُباع خطوط المنتجات الآن تحت علامة AMD التجارية باسم AMD Zynq وAMD Kria وAMD Versal وAMD Vitis.
يشير الاسمان إلى المنتجات نفسها. تسوّقها AMD باسم «أنظمة SoC المتكيفة وFPGAs»، لكن المهندسين ما زالوا يستخدمون اسم «Xilinx» على نطاق واسع. تحتفظ أرقام القطع بالبادئة XC (على سبيل المثال xczu7ev)، وما زال مستودع Vitis AI الأقدم وصور Docker متاحين تحت الاسم Xilinx على GitHub وDocker Hub. يستخدم هذا الدليل تسمية «AMD Xilinx» لتتمكن من العثور عليه بأي من الاسمين.
المصطلحات والمفاهيم الأساسية#
يستخدم النشر على AMD Xilinx مصطلحات خاصة به. يشرح الجدول أدناه جميع المصطلحات الواردة في هذا الدليل.
| المصطلح | ما المقصود به |
|---|---|
| FPGA | مصفوفة بوابات منطقية قابلة للبرمجة ميدانياً: شريحة تُهيّأ دوائرها المنطقية الرقمية بعد التصنيع بتحميل تصميم يُسمى تدفق البتات. ويمكنها تنفيذ عتاد مخصص مثل مسارات الفيديو أو مسرّعات الشبكات العصبية. |
| المنطق القابل للبرمجة (PL) | نسيج FPGA داخل نظام AMD Xilinx SoC. في أجهزة Zynq وKria، يُبنى مسرّع AI ضمن PL. |
| نظام المعالجة (PS) | أنوية CPU الصلبة من Arm ووحدات التحكم في الذاكرة والأجهزة الطرفية في نظام SoC. يشغّل Linux وتطبيقك وأي طبقات من النموذج يتعذر على المسرّع تنفيذها. |
| نظام SoC متكيف / MPSoC | نظام على شريحة يجمع نظام معالجة مع منطق قابل للبرمجة، ويضم أيضاً محركات AI في كثير من أجهزة Versal. يشير MPSoC إلى نظام متعدد المعالجات على شريحة. |
| محرك AI (AIE، AIE-ML، AIE-MLv2) | مصفوفات من معالجات متجهية مدمجة في العتاد في كثير من أجهزة Versal، ومنها سلسلة Versal AI Edge التي يتناولها هذا الدليل، وهي مصممة للتعلم الآلي ومعالجة الإشارات. |
| DPU | وحدة معالجة التعلم العميق: مسرّع الشبكات العصبية INT8 من AMD، يُوفّر كملكية فكرية IP مدمجة في PL (على سبيل المثال DPUCZDX8G في أجهزة Zynq UltraScale+ وKria). وتعبر الأحجام مثل B512 إلى B4096 عن ذروة العمليات لكل دورة ساعة. |
| NPU / NPU IP | وحدة معالجة الشبكات العصبية: مسرّع الاستدلال من الجيل الحالي لدى AMD، ويحل محل DPU في إصدارات Vitis AI الحديثة. تصف AMD ملكية NPU الفكرية بأنها مسرّع برمجي يجمع محركات AI مع المنطق القابل للبرمجة، ولذلك يحتاج أيضاً إلى تصميم عتاد مطابق. راجع مدخل مسرد NPU. |
| Vitis AI | سلسلة أدوات AMD لنشر الشبكات العصبية على أجهزة AMD Xilinx. وتشمل التكميم والترجمة البرمجية وبيئات التشغيل والأمثلة وبيئات Docker. |
| AMD Quark | مكتبة AMD الحالية لـتكميم النماذج، وتستخدمها آلية العمل على Versal AI Edge Gen 2 لتحويل نموذج FP32 بتنسيق ONNX إلى نموذج INT8. |
| التكميم وPTQ وQAT | تحويل الأوزان والتنشيطات من FP32 إلى INT8. يستخدم التكميم بعد التدريب (PTQ) صور المعايرة. يعمل التدريب الواعي بالتكميم (QAT) على ضبط النموذج بدقة لاستعادة الدقة. |
| صور المعايرة | مجموعة صغيرة وممثّلة من الصور تمر عبر النموذج أثناء PTQ لاختيار مقياس INT8 لكل موتر. |
| BF16 والدقة المختلطة | BFloat16 تنسيق فاصلة عائمة بدقة 16 بت يحافظ على نطاق FP32. تستخدم الدقة المختلطة INT8 لمعظم الشبكة وBF16 للطبقات الحساسة. |
| XIR | التمثيل الوسيط لـXilinx: تنسيق الرسم البياني الذي ينتجه مترجم DPU وتقرأه بيئة التشغيل. |
.xmodel | رسم بياني XIR متسلسل. يكتب المكمّم .xmodel مكمّماً، ثم يحوّله مترجم DPU إلى .xmodel مترجم يتضمن تعليمات DPU وأوزاناً مكمّمة وأي رسوم فرعية لوحدة CPU. يتطلب النموذج المترجم إعداد DPU المطابق. |
arch.json / بصمة DPU | الملف الذي يصف إعداداً محدداً لـDPU. يحتاج إليه مترجم DPU، ولن يعمل .xmodel المترجم لبصمة معينة على بصمة أخرى. |
| لقطة | دليل النموذج المترجم الذي تنتجه آلية عمل NPU على Versal AI Edge (VEK280). ويرتبط بمتغير واحد من NPU IP. |
.rai | ملف النموذج المترجم الذي تنتجه آلية عمل NPU على Versal AI Edge Gen 2. |
| VART / VART-ML | مكتبات Vitis AI Runtime التي تحمّل النماذج المترجمة وتشغّلها على اللوحة، مع واجهات API للغتين C++ وPython. |
| ONNX Runtime Vitis AI EP | VitisAIExecutionProvider الخاص بـONNX Runtime، والذي يترجم نماذج ONNX ويشغّلها على وحدات AMD NPU. |
| الرجوع إلى CPU / تقسيم الرسم البياني | عندما يتعذر على المسرّع تشغيل أحد العوامل، يقسّم المترجم النموذج عادةً إلى رسوم فرعية للمسرّع وCPU، ويضيف كل تقسيم عملية نقل بيانات قد تهيمن على زمن الاستجابة. وفي بعض الحالات، تفرض عوامل معينة تشغيل النموذج بأكمله على CPU أو تؤدي إلى فشل الترجمة. |
عائلات أجهزة AMD Xilinx للذكاء الاصطناعي الطرفي#
تنقسم أجهزة AMD Xilinx المخصصة للذكاء الاصطناعي الطرفي إلى ثلاث عائلات. تستخدم Zynq وKria وحدة DPU في المنطق القابل للبرمجة، بينما تستخدم أجهزة Versal AI Edge التي يتناولها هذا الدليل وحدة NPU على محركات AI.
| العائلة | ماهيتها | CPU التطبيق | مسرّع AI | أمثلة على اللوحات |
|---|---|---|---|---|
| Zynq UltraScale+ MPSoC | معالجات Arm ومنطق FPGA على شريحة واحدة، بأحجام تتراوح من ZU1 إلى ZU19 | Arm Cortex-A53 ثنائي أو رباعي النوى | DPU مدمجة في المنطق القابل للبرمجة | ZCU104، وZCU102، ولوحات مخصصة |
| وحدة Kria K26 على شريحة | وحدة جاهزة للإنتاج مبنية حول Zynq UltraScale+ MPSoC | Arm Cortex-A53 رباعي النوى | DPU مدمجة في المنطق القابل للبرمجة | مجموعة KV260 Vision AI Starter Kit، ومجموعة KR260 Robotics Starter Kit |
| سلسلة Versal AI Edge | أنظمة SoC متكيفة؛ تشغّل مكونات AIE-ML مثل VE2302 وVE2802 وحدة NPU | Arm Cortex-A72 ثنائي النواة | وحدة NPU على محركات AIE-ML AI والمنطق القابل للبرمجة PL | VEK280 |
| سلسلة Versal AI Edge Gen 2 | نظام SoC متكيف من الجيل التالي مع محركات AI من نوع AIE-MLv2 | حتى ثمانية معالجات Arm Cortex-A78AE | وحدة NPU على محركات AIE-MLv2 AI والمنطق القابل للبرمجة PL | VEK385 |
Zynq UltraScale+ MPSoC#
تجمع كل شريحة Zynq UltraScale+ نظام معالجة Arm، يضم أنوية Cortex-A53 ثنائية (CG) أو رباعية (EG وEV) النوى وأنوية Cortex-R5F للوقت الحقيقي، مع منطق FPGA. وتضيف أجهزة EV برنامج ترميز فيديو H.264/H.265 مدمجاً في العتاد. لتشغيل الشبكات العصبية، يدمج المصممون وحدة DPU في المنطق إلى جانب مسارات الكاميرا والفيديو. وفي الأجهزة الصغيرة، تتنافس DPU على المساحة مع بقية التصميم.
وحدات Kria على شريحة#
تضم وحدة Kria K26 نظام Zynq UltraScale+ MPSoC والذاكرة والطاقة في وحدة جاهزة للإنتاج، ما يجنبك تصميم المعالج والذاكرة والنظام الفرعي للطاقة بنفسك. وتُركّب الوحدة على لوحة ناقلة، إما لوحة مجموعة بدء التشغيل أو تصميمك الخاص. وهي تشغّل مجموعة KV260 Vision AI Starter Kit للكاميرات الذكية ومجموعة KR260 Robotics Starter Kit لـالروبوتات. وبما أن K26 مبنية على Zynq UltraScale+، فهي تستخدم آلية عمل DPU نفسها. وتشمل مجموعة منتجات Kria وحدات أخرى أيضاً، لذا تحقّق من المعالج المستخدم في وحدتك قبل اختيار آلية العمل.
أنظمة Versal SoC المتكيفة#
Versal هي عائلة أنظمة SoC المتكيفة من AMD. وتضيف سلسلتا AI Edge وAI Core فيها محركات AI مدمجة في العتاد إلى جانب أنوية Arm والمنطق القابل للبرمجة، في حين لا تضم بعض سلاسل Versal الأخرى محركات AI. تعمل ملكية NPU الفكرية من AMD على محركات AI والمنطق القابل للبرمجة معاً، وتستهدف Vitis AI مكونات AIE-ML من سلسلة AI Edge، مثل VE2302 وVE2802. وتُعد سلسلة Versal AI Edge (مجموعة التقييم VEK280) وسلسلة Versal AI Edge Gen 2 (مجموعة التقييم VEK385) الهدفين الحاليين من AMD للذكاء الاصطناعي الطرفي ومحور إصدارات Vitis AI الحالية.
كيفية تشغيل AI على أجهزة AMD Xilinx: DPU مقابل NPU#
تتبع معظم عمليات نشر AI على أجهزة AMD Xilinx النمط نفسه. يشغّل المسرّع الطبقات التي يدعمها، ويشغّل CPU Arm المعالجة المسبقة والمعالجة اللاحقة وأي طبقات يتعذر على المسرّع تنفيذها، بينما تنسّق بيئة تشغيل على اللوحة بينهما.
أصدرت AMD جيلين من المسرّعات، لكل منهما سلسلة أدوات وملف نموذج مترجم خاصان به. يتناول هذا الدليل Vitis AI 3.5 لوحدة DPU وVitis AI 6.3 لوحدة NPU؛ راجع وثائق AMD الحالية للاطلاع على الإصدارات الأحدث.
| آلية العمل | العتاد | سلسلة الأدوات | المكمّم | المُخرَج المترجم | بيئة التشغيل على اللوحة | الحالة |
|---|---|---|---|---|---|---|
| DPU | Zynq UltraScale+ وKria | Vitis AI 3.5 (Docker) | vai_q_pytorch | .xmodel | VART | مترجم ثابت ومستودع نماذج وملكية DPU الفكرية |
| NPU (Versal AI Edge) | VEK280 وأجزاء Versal AI Edge الأخرى | Vitis AI 6.3 (Docker) | مدمج في تدفق اللقطات | لقطة | VART-ML | نشط |
| NPU (Versal AI Edge Gen 2) | VEK385 وأجزاء Gen 2 الأخرى | Vitis AI 6.3 (Docker) | AMD Quark | .rai | ONNX Runtime Vitis AI EP أو VART-ML | نشط |
يُعد Vitis AI 3.5 الإصدار الأخير الذي يتضمن تحديثات لمترجم DPU ومجموعة النماذج. وتحافظ الإصدارات اللاحقة في مستودع Xilinx/Vitis-AI على المترجم ومجموعة النماذج وIP الخاص بـ Zynq UltraScale+ DPU دون تغيير، مع تحديث بيئة التشغيل والتوافق مع إصدارات AMD الأحدث من الأدوات (راجع ملاحظات إصدار Vitis AI 5.0)، كما توضح وثائق Vitis AI الحالية من AMD أن NPU هو البديل لبنية DPU المهملة. ويمكن مواصلة شحن منتجات Zynq UltraScale+ وKria الحالية باستخدام DPU، لكن دعم المشغّلات فيه لن يتوسع؛ لذلك تتطلب البنى الأحدث للنماذج التعديلات الموضحة في توافق نماذج YOLO.
تحتوي معالجات AMD Ryzen AI في الحواسيب أيضًا على NPU، لكنها تستخدم حزمة Ryzen AI Software المنفصلة بدلًا من تدفقات Vitis AI المضمنة الواردة في هذا الدليل. وبالنسبة إلى وحدات GPU من AMD Instinct وRadeon، راجع تكامل AMD GPU.
ما تدفق Vitis AI الذي أحتاج إليه؟#
اختر التدفق بحسب الجهاز الموجود على لوحتك:
التصدير إلى AMD Xilinx: تحويل نموذج YOLO#
المهام المدعومة#
يدعم التصدير إلى AMD Xilinx مهام Ultralytics السبع. لا يتوفر التقسيم الدلالي وتقدير العمق إلا في YOLO26، وهي العائلة الوحيدة التي تتضمن هذين الرأسين.
التثبيت#
يعمل التصدير إلى AMD Xilinx على Linux (x86-64 أو ARM64) مع Python من الإصدار 3.11 إلى 3.13، وهي الإصدارات التي يدعمها AMD Quark. كما يترجم التصدير الأول مشغّلات Quark المخصصة، ويتطلب ذلك مترجم C++ مثل g++.
# Install the required package for YOLO
pip install ultralyticsيُثبّت AMD Quark تلقائيًا من PyPI عند أول عملية تصدير. لتثبيت تبعيات التصدير مسبقًا:
pip install "ultralytics[export-xilinx]"لتثبيت المستودع في وضع قابل للتحرير، استبدل "ultralytics[export-xilinx]" بـ -e ".[export-base,export-xilinx]". لإعادة إنشاء بيئة Python 3.12 وتصدير اختبار الدخان المستخدمين في CI، شغّل أداة إنشاء البيئة الحالية من جذر المستودع:
ULTRALYTICS_ISOLATED_VENVS="$PWD/.venvs" python .github/scripts/create-export-env.py --env isolated-xilinxالاستخدام#
يدعم تنسيق AMD Xilinx أوضاع التصدير والتنبؤ والتحقق. في غياب AMD Vitis AI Execution Provider، ينفّذ التنبؤ والتحقق النموذج المكمّم باستخدام ONNX Runtime على CPU، ما يتيح قياس دقة INT8 على أي مضيف. وعندما يوفر ONNX Runtime المكوّن VitisAIExecutionProvider، كما هو الحال على لوحة Versal AI Edge Series Gen 2، تختاره Ultralytics تلقائيًا.
from ultralytics import YOLO
# تحميل نموذج YOLO26
model = YOLO("yolo26n.pt")
# التصدير إلى تنسيق AMD Xilinx للوحة VEK385 (يُفرض quantize=8 تلقائيًا)
model.export(format="xilinx") # creates 'yolo26n_xilinx_model/'from ultralytics import YOLO
# تحميل نموذج AMD Xilinx المُصدّر
model = YOLO("yolo26n_xilinx_model")
# تنفيذ الاستدلال
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# تحميل نموذج AMD Xilinx المُصدّر
model = YOLO("yolo26n_xilinx_model")
# التحقق من دقة INT8 على مجموعة بيانات COCO8
metrics = model.val(data="coco8.yaml")أسماء التنسيقات vitis وvitisai وversal هي أسماء مستعارة لـxilinx.
وسيطات التصدير#
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'xilinx' | التنسيق المستهدف للنموذج المُصدّر، ويحدد التوافق مع وحدات NPU في AMD Versal AI Edge Series Gen 2. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لإدخال النموذج، ويُحدّد كعدد صحيح للصور المربعة أو كصف (height, width). حجم الدفعة للنموذج المُصدّر ثابت عند 1. |
quantize | int أو str | 8/تلقائي | دقة التكميم. يلزم استخدام 8 (Vitis AI INT8)، ويُفعّل تلقائيًا إذا لم يُحدّد. |
data | str | None | ملف YAML لمجموعة البيانات المستخدم لمعايرة INT8؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مدمجة. إذا لم يُحدّد، تستخدم Ultralytics مجموعة بيانات المعايرة الخاصة بالمهمة، مثل coco128.yaml للكشف. |
fraction | float | 1.0 | نسبة مجموعة بيانات المعايرة المراد استخدامها. |
name | str | 've2-xc2ve3858' | جهاز مترجم Vitis AI: 've2-xc2ve3858' (مجموعة التقييم VEK385)، أو 've2-xc2ve3804'، أو 've2-xc2ve3558'، أو 've2-xc2ve3504'، أو 've2-xc2ve3358'، أو 've2-xc2ve3304'. |
opset | int | None | إصدار ONNX opset للرسم البياني الوسيط. القيمة الافتراضية هي 17، وهو الإصدار الذي تتحقق AMD من صلاحيته لـYOLO على Vitis AI. |
simplify | bool | True | يبسّط رسم ONNX الوسيط باستخدام onnxslim. |
device | str | None | يحدد الجهاز المستخدم للتصدير: GPU (device=0) أو CPU (device=cpu). |
عيّن nms=False لتصدير رأس YOLO26 الخالي من NMS YOLO26 NMS-free head. لا يُدعم NMS المضمن (nms=True)، لأن AMD تدرج NonMaxSuppression ضمن المشغّلات التي قد تجبر النموذج بأكمله على العمل على CPU.
تعتمد دقة INT8 على مدى تمثيل صور المعايرة لمشهد النشر. مرّر إلى data= ملف YAML لمجموعة بيانات يضم 300 صورة تمثيلية على الأقل من كاميراتك؛ فمجموعات بيانات المعايرة الافتراضية عينات عامة صغيرة.
لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.
بنية الإخراج#
بعد نجاح التصدير، يُنشأ مجلد للنموذج بالتخطيط التالي:
yolo26n_xilinx_model/
├── yolo26n.onnx # AMD Quark VINT8 model with the Ultralytics metadata
└── vitisai_config.json # Vitis AI compiler configuration for the target deviceتضيف ترجمة النموذج، كما هو موضح أدناه، ذاكرة تخزين مؤقت للمترجم yolo26n/ إلى الدليل نفسه، وتحتوي على نموذج NPU yolo26n.rai وتقارير الترجمة من AMD مثل final-vaiml-pass-summary.txt.
آلية عمل التصدير#
يتبع التصدير مسار Vitis AI الموثق من AMD لـVersal AI Edge Series Gen 2:
- تصدير ONNX باستخدام opset 17 وحجم دفعة ثابت يساوي 1.
- تكميم AMD Quark باستخدام إعداد
VINT8(INT8 متماثل بمقاييس قوى العدد 2)، والخيارات التي تشترطها AMD لترجمة NPU:Int32Bias=Falseوenable_npu_cnn=TrueوDedicatedQDQPair=TrueوQuantizeAllOpTypes=True. تستخدم المعايرة أداة تحميل بيانات معايرة INT8 القياسية في Ultralytics، مع المعالجة المسبقة نفسها المستخدمة للاستدلال: letterbox وRGB والنطاق من 0 إلى 1. - الدقة المختلطة: يظل رأس النموذج بدقة الفاصلة العائمة، ويشغّله مترجم Vitis AI بدقة BF16 على وحدة NPU. يؤدي تكميم الرأس إلى INT8 إلى معظم فقدان الدقة، ولذلك يستبعد درس AMD حول YOLOv8m ذيل المعالجة اللاحقة من INT8 للسبب نفسه.
- إعداد المترجم: يحدد
vitisai_config.jsonالهدفVAIMLوالجهاز منname.
الدقة#
يقارن الجدول النموذج المُصدّر بدقة INT8 بنموذج ONNX بدقة FP32 على مجموعة التحقق val2017 من COCO (5,000 صورة) بحجم 640؛ ويُشغّل كلاهما باستخدام ONNX Runtime على CPU المضيف. عُيّرت نماذج INT8 باستخدام مجموعة البيانات الافتراضية coco128.yaml؛ وعادةً ما تقلّص المعايرة على صور النشر الخاصة بك الفجوة.
تُشغّل نتائج المضيف هذه النموذج المكمّم باستخدام ONNX Runtime على CPU، وهو خط الأساس الذي تقارن به منهجية الدقة لدى AMD نتائج NPU. وتُظهر نتائج AMD المنشورة لـYOLOv8m على VEK385 النهج نفسه للدقة المختلطة على وحدة NPU:
| إعداد YOLOv8m | العتاد | mAP50-95 (COCO) |
|---|---|---|
| ONNX بدقة FP32 | CPU المضيف | 49.95 |
| BF16 | NPU في VEK385 | 50.29 |
| VINT8 مكمّم، والجزء الختامي بدقة FP32 | CPU المضيف | 48.75 |
| VINT8 مع جزء ختامي بدقة BF16 | NPU في VEK385 | 48.38 |
المصدر: البرنامج التعليمي لـ YOLOv8m على Versal AI Edge Gen 2 من AMD، ويتضمن أيضًا متوسط زمن استدلال قدره 10.69 ms عبر 100 تشغيل لـ VART عند dp_size=1.
الترجمة والتشغيل على Versal AI Edge Gen 2#
الدليل المُصدّر جاهز لمترجم Vitis AI من AMD، الذي ينشئ نموذج .rai القابل للتشغيل على وحدة NPU.
-
إعداد المضيف واللوحة. نفّذ الترجمة على مضيف Linux بنظام x86-64 باستخدام صورة Docker من Vitis AI 6.3 لـVersal AI Edge Gen 2 من AMD وترخيص مترجم AMD AI Engine (راجع صفحة الترخيص لدى AMD). أعدّ VEK385 باستخدام دليل إعداد اللوحة من AMD.
-
الترجمة. أنشئ داخل الحاوية جلسة ONNX Runtime باستخدام Vitis AI Execution Provider، بالطريقة نفسها المستخدمة في دليل الترجمة من AMD. تكتب الجلسة ذاكرة التخزين المؤقت
yolo26n/معyolo26n.raiفي دليل التصدير:import onnxruntime as ort d = "yolo26n_xilinx_model" options = {"config_file": f"{d}/vitisai_config.json", "cache_dir": d, "cache_key": "yolo26n", "target": "VAIML"} ort.InferenceSession(f"{d}/yolo26n.onnx", providers=["VitisAIExecutionProvider"], provider_options=[options])تحقق من
yolo26n_xilinx_model/yolo26n/final-vaiml-pass-summary.txtلمعرفة مقدار النموذج الذي يعمل على وحدة NPU. بالنسبة إلى YOLO26n بحجم 640، يضع مترجم Vitis AI 6.3 من AMD نسبة 99.9% من المشغّلات والحسابات على وحدة NPU في VEK385 ضمن قسم واحد. -
التشغيل على اللوحة. انسخ دليل التصدير إلى VEK385. يحمّل ONNX Runtime مع Vitis AI Execution Provider النموذج المُترجم
yolo26n.raiويشغّله على وحدة NPU، كما يختارYOLO("yolo26n_xilinx_model")هذا المزوّد تلقائيًا عند توفره.
لا تتطلب الترجمة سوى ONNX Runtime من AMD؛ لذا صدّر على أي جهاز Linux وانسخ الدليل إلى الحاوية بدلًا من تثبيت Ultralytics فيها، إذ قد يغيّر ذلك الحزم المثبتة بإصدارات محددة في الحاوية. عندما تكون Ultralytics مثبتة إلى جانب إصدار AMD onnxruntime-vitisai، كما على اللوحة، فإنها تحتفظ بذلك الإصدار بدلًا من استبداله بإصدار onnxruntime القياسي.
يضبط التصدير الترجمة القياسية لـONNX Runtime، التي تشغّل أي مشغّلات غير المتوافقة مع NPU، مثل اختيار top-k في YOLO26 باستخدام nms=False، على CPU الخاص بـArm نفسه. لا تشغّل بيئة VART-ML النموذج إلا إذا كانت جميع المشغّلات على وحدة NPU، ما لم تضف تمريرات تقسيم CPU من AMD إلى vitisai_config.json؛ ولا يمكن تشغيل هذه العناصر عبر ONNX Runtime.
توافق نماذج YOLO والمشغّلات المدعومة#
لا يسرّع المسرّع إلا المشغّلات التي ينفذها عتاديًا. عندما يحتوي النموذج على مشغّل غير مدعوم، يوجّه المترجم عادةً ذلك الجزء من الشبكة إلى Arm CPU، وتضيف كل عملية انتقال ذهابًا وإيابًا بين المسرّع ووحدة CPU زمن استجابة. ولا يمكن تقسيم بعض المشغّلات: ففي NPU الخاص بـ Versal AI Edge Gen 2، تدرج AMD مشغّلات مثل NonZero وNonMaxSuppression التي قد تجبر النموذج بأكمله على العمل على CPU. ويُعد دعم المشغّلات العامل الأهم في تحديد مدى جودة أداء نموذج YOLO على عتاد AMD Xilinx.
يوضح الجدول مكان تشغيل كل مشغّل في نموذج YOLO26. يحتوي تصدير ONNX عادي لنموذج YOLO26n على 87 عملية تنشيط SiLU، يُصدّر كل منها بوصفها Sigmoid وMul، إضافة إلى 4 مشغّلات MatMul و2 من مشغّلات Softmax ضمن كتلتي الانتباه فيه: كتلة C2PSA في نهاية العمود الفقري (الطبقة 10)، وكتلة C3k2 المفعّل فيها الانتباه التي تنتج خرج P5 (الطبقة 22).
| المشغّل | موضع ظهوره في YOLO | DPU (Zynq UltraScale+ وKria) | NPU (Versal AI Edge Gen 2) |
|---|---|---|---|
| الالتفاف + تطبيع الدفعات | كل كتلة Conv | ✅ | ✅ |
| تنشيط SiLU | كل كتلة Conv (التنشيط الافتراضي) | ❌ يعمل على CPU؛ استبدله بـ Hard-Swish | ✅ |
| Hard-Swish وReLU وReLU6 وLeakyReLU | التنشيطات الاختيارية المحددة في YAML النموذج | ✅ مدمج في الالتفاف | ✅ |
| Sigmoid | درجات الفئات في رأس الكشف | ❌ يعمل على CPU (عادةً كجزء من المعالجة اللاحقة) | ✅ |
| MatMul بين عمليتي تنشيط | كتل الانتباه (C2PSA؛ YOLO26 C3k2) | ❌ يعمل على CPU | ✅ |
| Softmax | كتل الانتباه؛ DFL في YOLOv8 وYOLO11 | ❌ يعمل على CPU | ✅ |
| إعادة التشكيل، تبديل المحاور | كتل الانتباه | ⚠️ يُدمج متى أمكن، وإلا فيعمل على CPU | ✅ |
| تقسيم، اقتطاع | كتل C3k2 وC2f | ⚠️ يُحوّل إلى شرائح؛ تحقّق من تقرير المترجم | ✅ |
| تغيير الحجم (رفع دقة بأقرب جار) | رفع دقة العنق | ✅ | ✅ |
| MaxPool وConcat وAdd | كتلة SPPF ودمج السمات | ✅ | ✅ |
| TopK وGatherElements | رأس YOLO26 الخالي من NMS (nms=False) | ❌ يعمل على CPU | ⚠️ تقسيم على CPU في المضيف Arm |
| NonMaxSuppression | فقط عند التصدير باستخدام nms=True | ❌ يعمل على CPU | ❌ قد يجبر النموذج على العمل على CPU |
المصادر: المشغّلات المدعومة في AMD UG1414، ودعم مشغّلات PyTorch، وقوائم المشغّلات المدعومة وتقسيم CPU وغير المدعومة في Versal AI Edge Gen 2. يعتمد الدعم أيضًا على إعداد DPU وأنماط الرسم البياني؛ لذا تحقّق دائمًا من تقرير التقسيم الصادر عن المترجم.
يزيل YOLO26 خسارة البؤرة التوزيعية (DFL)، ولذلك لا تحتاج مخرجات الصناديق فيه إلى فك ترميز softmax، بخلاف YOLO11 وYOLOv8. كما يضيف كتلة انتباه ثانية مقارنةً بـ YOLO11؛ لذا قارن تقارير المترجم الخاصة بالهدف واختبارات الأداء على الجهاز قبل اختيار نموذج. تحافظ عمليات التصدير التي لا يُضبط فيها nms على الرأس one-to-many، وتحتاج إلى NMS على CPU مثل نماذج YOLO الأخرى. صدّر باستخدام nms=False لاستخدام رأس YOLO26 one-to-one الخالي من NMS بدلًا من ذلك، إذ يستبدل NMS بعملية اختيار خفيفة لـ top-k تعمل على CPU.
جهّز YOLO26 للعمل على DPU باستخدام Hard-Swish#
لا يدمج DPU في عمليات الالتفاف إلا ReLU وReLU6 وLeakyReLU وHard-Swish وHard-Sigmoid. وHard-Swish تقريب ملائم للعتاد لـ SiLU، ما يجعله البديل الطبيعي. تقبل ملفات YAML الخاصة بنماذج Ultralytics مفتاح activation لتغيير التنشيط الافتراضي لكتل Conv (دليل إعداد YAML للنماذج).
انسخ yolo26.yaml إلى yolo26-hswish.yaml وأضف سطرًا واحدًا ضمن المعلمات:
# Parameters
nc: 80 # number of classes
activation: nn.Hardswish() # default Conv activation, DPU-native
end2end: True # whether to use end-to-end modeثم أنشئ النموذج، وانقل أوزان YOLO26 المدرّبة مسبقًا، وأجرِ الضبط الدقيق على مجموعة بياناتك:
from ultralytics import YOLO
# # أنشئ YOLO26n بتنشيطات Hard-Swish؛ يشير الحرف 'n' في الاسم إلى المقياس nano
model = YOLO("yolo26n-hswish.yaml").load("yolo26n.pt") # # انقل الأوزان المدرّبة مسبقًا
# # اضبط النموذج بدقة ليتكيف مع Hard-Swish
model.train(data="coco8.yaml", epochs=100, imgsz=640)ليس للتنشيطات أوزان، لذا تُنقل جميع الأوزان المدرّبة مسبقًا. يحتوي رسم ONNX المُصدّر بعد ذلك على 87 مشغّل HardSwish ولا يحتوي على SiLU. استبدل coco8.yaml بـمجموعة بياناتك، وقارن الدقة بنموذج SiLU باستخدام وضع Val قبل النشر.
- الاستبدال أثناء التكميم: اضبط
"convert_silu_to_hswish": trueفي إعداد JSON الخاص بمكمّم PyTorch ضمن Vitis AI 3.5 لاستبدال SiLU أثناء التكميم. يوفر ذلك جولة تدريب، لكنه غالبًا ما يقلل الدقة؛ ويمكن للضبط الدقيق السريع أو QAT من AMD استعادة جزء منها. راجع دليل إعداد vai_q_pytorch. - LeakyReLU: ينفذ DPU LeakyReLU بميل سالب ثابت قدره 26/256 (نحو 0.1). إذا استخدمت LeakyReLU، فدرّب باستخدام
activation: nn.LeakyReLU(0.1015625)لتتطابق قيم الميل في التدريب والنشر.
التعامل مع كتل الانتباه على DPU#
يطبق YOLO26 الانتباه عند أدنى دقة (شبكة 20×20 عند إدخال بحجم 640) في موضعين: كتلة C2PSA في الطبقة 10، وكتلة C3k2 المفعّل فيها الانتباه في الطبقة 22. يحتوي YOLO11 على كتلة C2PSA واحدة. على DPU، تعمل مشغّلات MatMul وSoftmax الخاصة بها على CPU، ما يقسم النموذج إلى رسوم فرعية متناوبة بين DPU وCPU. لديك ثلاثة خيارات:
-
اقبل كتل CPU. عندئذٍ يحتوي
.xmodelالمُجمّع على رسوم فرعية لوحدة CPU؛ لذا شغّله باستخدام Graph Runner من AMD، الذي ينفذ الرسوم الفرعية لـ DPU وCPU معًا عندما يتوفر تنفيذ على CPU لكل مشغّل؛ وإلا فعليك تنفيذ المشغّلات الناقصة وتسجيلها. حساب الانتباه صغير عند 20×20، لكن كل عملية نقل إضافية بين DPU وCPU تزيد زمن الاستجابة؛ لذا قِس الأداء على لوحتك. -
استخدم YAML خاليًا من الانتباه. في ملف YAML الخاص بـ Hard-Swish، استبدل طبقة C2PSA بـ
nn.Identityحتى تظل فهارس الطبقات التي تستخدمهاConcatوDetectصالحة، وعطّل الانتباه في الطبقة 22:backbone: # ... layers 0-9 unchanged - [-1, 1, nn.Identity, []] # 10 C2PSA removed; keeps later layer indices valid head: # ... layers 11-21 unchanged - [-1, 1, C3k2, [1024, True, 0.5, False]] # 22 (P5/32-large), attention disabled - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)لن يحتوي رسم ONNX المُصدّر عندئذٍ على مشغّلات MatMul أو Softmax. ولن تعود أوزان الانتباه صالحة (تُنقل 624 من أصل 666 وزنًا في YOLO26n)، لذا أطل مدة الضبط الدقيق وقارن الدقة باستخدام وضع Val.
-
استخدم نموذجًا خاليًا من الانتباه مثل YOLOv8، الذي استخدمته AMD في أمثلة DPU الخاصة بها.
في Versal AI Edge Gen 2، تُدرج مشغّلات الانتباه ضمن المشغّلات المدعومة على NPU؛ لذا لا تكون هذه التغييرات ضرورية عادةً. أكّد موضع التنفيذ في تقرير المترجم، لأن AMD تشير إلى أن المشغّلات المدعومة قد تنتقل مع ذلك إلى CPU بسبب قيود الإعداد أو الذاكرة.
لمحة سريعة عن توافق النماذج#
| النموذج | DPU (Zynq UltraScale+ وKria) | NPU (Versal AI Edge Gen 2) |
|---|---|---|
| YOLO26 | التدريب باستخدام Hard-Swish؛ تتحول كتلتا الانتباه إلى رسوم فرعية لـ CPU؛ لا يستخدم DFL | تصدير أصلي لـformat="xilinx"؛ يعمل الرأس بدقة BF16 |
| YOLO11 | التدريب باستخدام Hard-Swish؛ تعمل C2PSA وSoftmax الخاصة بـ DFL على CPU | تصدير أصلي لـformat="xilinx"؛ يعمل الرأس بدقة BF16 |
| YOLOv8 | التدريب باستخدام Hard-Swish؛ تعمل Softmax الخاصة بـ DFL على CPU | تصدير أصلي لـformat="xilinx". درس AMD حول YOLOv8m (Vitis AI 6.3 وVEK385 وINT8 مع ذيل BF16): يُظهر تقرير المترجم 1,181 مشغّلًا (99.915%) و99.994% من GOPs على وحدة NPU، دون تغييرات على النموذج |
النشر على أهداف AMD Xilinx الأخرى#
تستخدم وحدات DPU في Zynq UltraScale+ وKria ووحدة NPU من الجيل الأول في Versal AI Edge مسارات Vitis AI التي لا ينتجها format="xilinx". درّب باستخدام Ultralytics، ثم أنشئ عنصر النشر الخاص بالهدف باستخدام أدوات AMD ضمن صور Docker لنظام Linux بنظام x86-64. اختر علامة التبويب الخاصة بجهازك:
-
شغّل صورة Docker الخاصة بـ Vitis AI 6.3 من AMD لمنصة Versal AI Edge.
-
فعّل بيئة NPU الخاصة بـ IP الخاص بـ NPU على لوحتك عبر تنفيذ
settings.shكمصدر. مرّر اسم IP الخاص بـ NPU في لوحتك كوسيطة، أو مرّرLISTلعرض IPs المتاحة. -
التقط لقطة بتشغيل نص استدلال عادي على صور ممثلة مع تعيين متغير البيئة
VAISW_SNAPSHOT_DIRECTORY. لا حاجة إلى إجراء تغييرات على الشيفرة:# Activate the NPU environment inside the Vitis AI Docker container source $VITIS_AI_REPO/npu_ip/settings.sh # Capture a mixed INT8/BF16 snapshot, calibrating on 100 images from your inference script VAISW_SNAPSHOT_DIRECTORY=snapshot.yolo26n VAISW_FE_PRECISION=MIXED VAISW_QUANTIZATION_NBIMAGES=100 python3 my_inference.py
يقبل VAISW_FE_PRECISION القيمة INT8 (الافتراضية) أو BF16 أو MIXED، وتكون القيمة الافتراضية لـ VAISW_QUANTIZATION_NBIMAGES هي 4 صور، لذا عيّن عددًا أكبر وممثّلًا لنماذج الكشف. ترتبط اللقطة بمتغير IP الخاص بـ NPU في لوحتك. لا تعمل أجزاء المعالجة اللاحقة لـ YOLO إلا على AI Engines بدقة BF16 أو بدقة MIXED. تختلف وثائق AMD بشأن Softmax: إذ تذكر صفحة العينات أن Softmax لا تُسرَّع، وأنها توجّه الجزء الختامي لـ Softmax في YOLOv8 إلى CPU، بينما تفيد ملاحظات إصدار Vitis AI 6.1 بالتسريع الكامل لـ YOLOv8 باستخدام الدقة المختلطة. افحص ملف wrp_network_iriz.onnx داخل اللقطة للتأكد من الأجزاء التي تعمل من نموذجك على NPU، بما في ذلك الانتباه في YOLO11 وYOLO26. راجع استخدام نموذجك الخاص.
أعدّ اللوحة باستخدام تصميم عتادي وصورة Linux يتضمنان إعداد المسرّع الذي ترجمه، إلى جانب بيئة تشغيل Vitis AI المطابقة. راجع أدلة إعداد AMD لأهداف Zynq UltraScale+ وKria DPU وVersal AI Edge (VEK280)، ثم انسخ العناصر التي تحتاج إليها بيئة التشغيل:
| آلية العمل | العناصر المطلوب نسخها إلى اللوحة | بيئة التشغيل على اللوحة |
|---|---|---|
| DPU (Zynq UltraScale+ وKria) | .xmodel مُجمّع | VART؛ Graph Runner للرسوم البيانية الفرعية التي تعمل على CPU |
| NPU (Versal AI Edge، VEK280) | دليل اللقطة | VART-ML |
في DPU، تخزّن مخازن VART المؤقتة قيم INT8 ذات الفاصلة الثابتة: استعلم عن شكل كل موتر ومقياس fix_point، ثم كمّم المدخلات وأزل تكميم المخرجات قبل المعالجة اللاحقة. يعيد Graph Runner مخرجات الرسم البياني الكامل، بينما يعيد مشغّل DPU فقط مخرجات الرسوم الفرعية الوسيطة لـDPU، ويتعين على شيفرتك إكمال حسابها. تستخدم VART-ML على VEK280، افتراضيًا، طرق عرض الموترات العتادية التي قد تختلف أشكالها وأنواع بياناتها وتخطيطات ذاكرتها عن تخطيطات ONNX؛ لذا اضبط أنواع موترات الإدخال والإخراج في المشغّل على طرق عرض CPU أو حوّل التنسيق العتادي بنفسك (راجع نظرة عامة على بنية VART-ML من AMD).
يتطلب شحن YOLO من Ultralytics ضمن منتج AMD Xilinx تجاري الامتثال لـ ترخيص AGPL-3.0 أو الحصول على ترخيص Ultralytics للمؤسسات.
تطبيقات واقعية#
تشيع أجهزة AMD Xilinx في كل مكان يتطلب فيه تشغيل رؤية الذكاء الاصطناعي في الوقت الفعلي، باستهلاك منخفض للطاقة وبالقرب من المستشعر:
- السلامة الصناعية وسلامة مواقع الإنشاء: اكتشف الأشخاص والآلات بالقرب من المعدات الثقيلة، وراقب مناطق العمل باستخدام كشف الكائنات وعدّ الكائنات.
- الرؤية للسيارات والمركبات المخصصة للطرق الوعرة: شغّل الإدراك المعتمد على الكاميرات على مكوّنات مؤهلة للاستخدام في السيارات، دعمًا لـالمركبات ذاتية القيادة وأنظمة مساعدة السائق.
- الكاميرات الذكية وتحليلات الفيديو: اجمع بين التقاط الفيديو وترميزه والاستدلال باستخدام YOLO على شريحة واحدة لأنظمة الأمن وتحليلات الفيديو.
- الرؤية الآلية وفحص الجودة: اقرن التقاط الصور عالي السرعة المعتمد على FPGA مع تجزئة المثيلات أو التصنيف باستخدام YOLO للكشف عن العيوب على خط الإنتاج.
- الروبوتات والطائرات المسيّرة: استخدم وحدات Kria KR260 أو Versal لتقدير الوضعية وكشف الكائنات الموجّهة والملاحة بزمن استجابة حتمي.
الملخص#
يكمّم التصدير باستخدام format="xilinx" نماذج Ultralytics YOLO عبر AMD Quark لوحدات NPU في Versal AI Edge Series Gen 2، ويبقي الرأس بدقة BF16، ويكتب إعداد مترجم Vitis AI بجانب النموذج. تحقّق من دقة INT8 على أي مضيف، وترجم نموذج .rai في صورة Docker لـVitis AI من AMD، ثم شغّله على اللوحة باستخدام ONNX Runtime وVitis AI Execution Provider.
تستخدم أجهزة AMD Xilinx الأقدم مسارات عمل أخرى. تستخدم وحدة DPU في Zynq UltraScale+ وKria سلسلة أدوات Vitis AI 3.5 المجمدة وملفات .xmodel، وتتطلب دوال تنشيط أصلية لـDPU مثل Hard-Swish، كما تنفّذ الانتباه على CPU. أما وحدة NPU من الجيل الأول في Versal AI Edge فتستخدم مسار snapshot، ويعتمد دعم المشغّلات فيها على إصدار Vitis AI ودقته.
لأهداف النشر الأخرى، راجع دليل خيارات نشر النماذج وأفضل ممارسات النشر، وتكاملات المسرّعات مثل Hailo وRockchip RKNN وAxelera.
الأسئلة الشائعة#
نعم. أكملت AMD استحواذها على Xilinx في فبراير 2022، وتُباع منتجات Xilinx الآن بوصفها أنظمة SoC تكيفية وFPGA من AMD: AMD Zynq وAMD Kria وAMD Versal وAMD Vitis. لا يزال المهندسون يستخدمون اسم Xilinx على نطاق واسع، وتحافظ أرقام القطع على البادئة
XC.نعم. يكمّم
model.export(format="xilinx")النموذج عبر AMD Quark لوحدات NPU في Versal AI Edge Series Gen 2، وينشئ دليلًا يضم نموذج ONNX المكمّم وإعداد مترجم Vitis AI الخاص به. ترجمه إلى.raiباستخدام أدوات Vitis AI من AMD، كما هو موضح في الترجمة والتشغيل على Versal AI Edge Gen 2. تستخدم أهداف Zynq UltraScale+ وKria وVEK280 مسارات العمل الواردة في النشر على أهداف AMD Xilinx الأخرى.DPU (وحدة معالجة التعلم العميق) هو مسرّع INT8 الأقدم من AMD. وهو مدمج في المنطق القابل للبرمجة بأجهزة Zynq UltraScale+ وKria، ويُجمّع باستخدام Vitis AI 3.5، وينتج ملفات
.xmodel. وقد حلّ NPU محلّه في إصدارات Vitis AI الحالية. وفي أجهزة Versal AI Edge، يجمع NPU بين AI Engines مُعزّزة والمنطق القابل للبرمجة، ويدعم INT8 وBF16 والدقة المختلطة، كما يدعم مزيدًا من العمليات، ومنها SiLU والانتباه على Versal AI Edge Gen 2.ملف
.xmodelهو رسم بياني XIR مُسلسَل تستخدمه سلسلة أدوات AMD DPU. يكتب المُكمِّم.xmodelمكمّمًا، ثم يحوّله المترجمvai_c_xirإلى.xmodelمُجمّع يتضمن تسلسل تعليمات DPU وأوزان INT8 مكمّمة وأي رسوم بيانية فرعية يجب تشغيلها على CPU. يستهدف الملف المُجمّع إعداد DPU محددًا، موصوفًا ببصمةarch.json، ويعمل على اللوحة عبر Vitis AI Runtime (VART)، أو عبر Graph Runner عندما يتضمن رسومًا بيانية فرعية تعمل على CPU.لا. يسرّع DPU دوال التنشيط ReLU وReLU6 وLeakyReLU وHard-Swish وHard-Sigmoid فقط، ويشغّل Sigmoid وSoftmax وMatMul بين دالتي تنشيط على CPU. درّب YOLO باستخدام
activation: nn.Hardswish()في ملف YAML الخاص بالنموذج لإبقاء عمليات الالتفاف على DPU، وراجع التعامل مع كتل الانتباه على DPU للاطلاع على خيارات الانتباه. تدعم وحدات NPU في Versal AI Edge Gen 2 دوال SiLU وSoftmax وMatMul محليًا.تستخدم KV260 نظام Zynq UltraScale+ MPSoC مزودًا بـ DPU، لذا اتبع تدفق عمل DPU. درّب نموذج YOLO26 يستخدم Hard-Swish، وكمّمه باستخدام
vai_q_pytorchفي صورة Docker الخاصة بـ Vitis AI 3.5، واجمعه باستخدامvai_c_xirمعarch.jsonالخاص بـ KV260، ثم شغّل.xmodelالناتج على اللوحة باستخدام VART، أو Graph Runner إذا كان يتضمن رسومًا بيانية فرعية تعمل على CPU.لا. يعمل التصدير على أي مضيف Linux مزوّد بـPython من الإصدار 3.11 إلى 3.13 ولا يتطلب حسابًا لدى AMD، كما يعمل النموذج المُصدّر على CPU لإجراء فحوص الدقة على أي مضيف. يتطلب تجميع نموذج
.raiصورة Docker لـVitis AI من AMD وترخيص مترجم AI Engine، ويتطلب تشغيله على وحدة NPU لوحة Versal AI Edge Series Gen 2.لا تستخدم Ultralytics Vitis AI Execution Provider إلا عندما يوفره ONNX Runtime، كما في إصدار AMD
onnxruntime-vitisaiعلى لوحة Versal أو في صورة Docker من AMD. وفي غير ذلك، تشغّل النموذج المكمّم باستخدام ONNX Runtime القياسي على CPU، وهي طريقة قياس دقة INT8 قبل النشر.يمكن تشغيل أي مهمة إذا أمكن تجميع عملياتها لمسرّعك. تعمل العمليات غير المدعومة عادةً على CPU، لكن بعضها قد يجبر النموذج بأكمله على العمل على CPU أو يؤدي إلى فشل التجميع. يُعد كشف الكائنات عبء العمل الأكثر شيوعًا، وهو ما تستخدمه أمثلة AMD نفسها. وبالنسبة إلى التجزئة وتقدير الوضعية والمهام الأخرى، تحقّق من تقرير تقسيم المترجم للتأكد من أن الطبقات الثقيلة تعمل على المسرّع.