مزود تنفيذ ONNX وأولوية العمليات يحددان أين يمكن إسناد الحساب في ONNX Runtime. يوثق ترتيب المزودين أولوية النوى المتاحة؛ في المثال الموثق تستعمل نواة CUDA إن توفرت، وإلا CPU. [1]
الخلاصة السريعة
اقرأ ترتيب المزودين وتغطية عمليات الرسم، ثم افحص ما أسند فعليًا عند التنفيذ؛ ذكر GPU في القائمة لا يثبت أن كل عملية نفذت عليه أو كانت أسرع.
- يحدد ترتيب مزودي ONNX Runtime أولوية التنفيذ وفق النوى المتاحة؛ مثال CUDA ثم CPU يترك العمليات غير المتاحة في الأول للثاني. [1]
- في خطتنا نفترض ثلاث عمليات أ وب وج؛ مزود جرافيكي يدعم أ وج، ومزود CPU يدعم الثلاث، فتكون ب خارج تغطية الأول.
- تحدد آلية GetCapability العمليات أو الأجزاء التي يستطيع المزود دعمها؛ لا تكفي تسمية المزود لتقرير موضع كل حساب. [2]
- احتفظ بقائمة المزودين ودعم العمليات ودليل الإسناد الفعلي؛ خطة التوزيع لا تقيس السرعة أو الذاكرة أو صحة النموذج، ولم ننفذها.
ما معنى الأولوية في القائمة؟
توضح واجهة ONNX Runtime ترتيب المزودين بحسب الأولوية: في مثال CUDA ثم CPU تستعمل نواة CUDA حيث تتاح، وإلا نواة CPU. [1]
القائمة ترتيب لا شهادة بأن أول اسم يستطيع كل الحساب. ننظر إلى العملية المطلوبة والنواة التي يدعمها المزود في البيئة المقصودة. وجود خيار جرافيكي في وصف جلسة لا يمحو المزود اللاحق من المعنى.
نركز على إسناد الاستدلال، ولا نقسم شبكة تدريب يدويًا أو نعيد توزيع أوزانها على أجهزة. كذلك لا نستنتج من اسم المزود نوع كل ملف دخل الجلسة أو أداءه.
اكتب تغطية العمليات في مثال صغير
نؤلف رسمًا متتابعًا فيه أ ثم ب ثم ج. نفترض مزودًا جرافيكيًا يدعم أ وج فقط، ومزود CPU يدعم الثلاث. ونضع الجرافيكي أولًا. هذه قائمة دعم افترضناها، لا كشف نوى استخرجناه من حزمة حقيقية.
وفق قاعدة الأولوية التي نعزلها، نجد دعم أ وج في الأول، بينما تحتاج ب إلى التالي. لم تنتقل ب إلى الأول لمجرد أن اسم GPU ظهر على رأس القائمة. ولم نحذفها من الحساب حين لم يدعمها الأول.
لا نسمي عمليات بعينها أو نصدر توقعًا عن إصدار موجود. هذا يمنع تحويل تمرين الملكية إلى جدول دعم تقني زائف. عند التطبيق ينبغي قراءة عمليات النموذج ودعم الحزمة المختارة فعلًا.
كيف يصف المزود قدرته؟
تشرح وثائق المزودين أن GetCapability يحدد العقد أو أجزاء الرسم التي يستطيع مزود التنفيذ التعامل معها. ترتبط القدرة بالنوى المدعومة للعتاد المقصود. [2]
قد لا تكون وحدة الإسناد في تطبيق كامل بطاقة واحدة من بطاقاتنا؛ لهذا لا نجعل الرسم الصغير وصفًا شاملًا لخوارزمية تقسيم كل جلسة. نسأل عن دليل الإسناد في التنفيذ الفعلي بدل استنتاجه من عدد العمليات أو شكل الأسهم.
لو تغيرت قائمة الدعم المفترضة فشملت ب أيضًا في الأول، تغير جواب تمريننا. أما تغيير اسم الملف مع إبقاء الدعم مجهولًا فلا يمنحنا هذا الجواب. القدرة شرط صريح وليست نتيجة اسم مختصر.
ما الذي لم تخبرنا به خريطة الإسناد؟
تخبرنا الخطة أين افترضنا دعم كل خطوة، لكنها لا تمنح أزمنة أو حجم نقل أو كمية ذاكرة. لا نحول وجود عمليتين في الجرافيكي إلى نسبة تسريع، لأننا لم نحدد كلفة الخطوات أو نقسها.
للمراجعة نقترح تسجيل ترتيب المزودين وإصداراتهم والعمليات ذات الصلة ودليل إسناد الجلسة الفعلية عند تشغيلها. افصل هذا عن معيار صحة المخرج وعن مقارنة الأداء التي تحتاج شروطًا مستقلة.
الرسم يربط ثلاث بطاقات بمزودين تحت فرضيات معلنة. لم ننشئ جلسة ONNX Runtime أو نشغل GPU أو نفحص ملفًا. المثال يساعد على قراءة عبارة «التنفيذ على GPU» بقدر ما تدعمه تغطية العمليات، دون وعد يشمل الرسم كله.
المصادر ومتابعة القراءة
- ONNX Runtime: Python API overview (يفتح في نافذة جديدة)onnxruntime.ai
- ONNX Runtime: Execution Providers (يفتح في نافذة جديدة)onnxruntime.ai
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
