تصدير النموذج إلى ONNX ينتج تمثيلًا لحسابه، لكن قراءة الملف وحدها لا تجيب عن توافقه مع بيئة التشغيل أو حفاظه على النتائج المطلوبة. يمثل ONNX الحساب برسم من عمليات وقيم. [1]
الخلاصة السريعة
راجع ترتيب العمليات وعقد المدخل، ثم توافق مجموعة العمليات مع المشغل، وقارن المخرجات على مدخلات محددة قبل الحكم على التصدير.
- يحمل رسم ONNX عمليات مترابطة ومدخلات ومخرجات، ويمكن أن يتضمن معاملات ثابتة؛ اسم الملف لا يصف ترتيبها. [1]
- نختار طرح 2 ثم القيمة المطلقة: المدخل سالب 1 يعطي 3؛ عكس العمليتين يعطي سالب 1، بينما يخفي المدخل 5 الفرق.
- اربط نوع المدخل وشكله بإصدار مجموعة العمليات ودعم المشغل؛ التوافق يعتمد على الإصدارات، وليس على امتداد الملف. [1] [2]
- سجل المدخلات والمخرجات ومعيار المقارنة المعلن؛ نجاح حالات محددة لا يثبت التكافؤ لكل مدخل، ولم ننفذ تصديرًا أو تشغيلًا.
ما الذي يصفه الملف؟
توضح مقدمة ONNX رسمًا يعتمد على عمليات تنتج قيمًا لعمليات لاحقة، مع مدخلات ومخرجات ومعاملات يمكن حفظها كثوابت. ليست كل العمليات الخاصة بكل إطار جزءًا من القائمة القياسية. [1]
تخيل بطاقة حساب لا تحمل إلا اسم «نموذج الفرز». لا تستطيع من الاسم معرفة هل تطرح قيمة قبل تحويلها أم بعده. تمثيل الحساب يفيد حين يوضح تلك الخطوات وروابطها؛ مجرد العثور على الملف في مجلد التصدير لا يشرح ما بداخله.
سؤالنا هنا هو انتقال حساب بعينه إلى تمثيل آخر. لا نعيد تدريب النموذج، ولا نستنتج أن المصدر والملف يستخدمان الذاكرة نفسها أو يستغرقان الزمن نفسه. هذه أسئلة تحتاج أدلة مختلفة.
لماذا لا يكفي مدخل واحد؟
نعرّف تمرينًا مستقلًا: اطرح 2 من العدد، ثم خذ القيمة المطلقة للناتج. للمدخل سالب 1، يصبح الناتج الوسيط سالب 3، ثم تكون القيمة النهائية 3. للقيمة المطلقة معنى المسافة العددية عن الصفر، ولذلك لا تبقى الإشارة السالبة.
نفترض الآن بطاقة أخرى عكست الترتيب: خذ القيمة المطلقة للمدخل أولًا، ثم اطرح 2. يتحول سالب 1 إلى 1، ثم إلى سالب 1. اختلفت النتيجة لأننا غيرنا القاعدة، وليس لأننا قسنا خطأ تقريب.
لكن المدخل 5 يعطي 3 في البطاقتين: في الأولى نطرح ثم نأخذ القيمة المطلقة، وفي الثانية نأخذها ثم نطرح. مقارنة هذا المدخل وحده ستفوت الاختلاف. المثال يوضح اختيار حالة تكشف ترتيبًا معينًا، ولا يمثل خطأ اكتشفناه في محول ONNX.
أين تدخل الإصدارات والأنواع؟
ONNX ذو أنواع صريحة ولا يعتمد تحويلًا ضمنيًا عامًا بينها. يحمل النموذج إصدارات مجموعات العمليات، ويعرض ONNX Runtime نطاقات دعم مرتبطة بإصداره. [1] [2]
اكتب في بطاقة المراجعة نوع القيم وشكلها وإصدار مجموعة العمليات ونسخة المشغل المقصودة. لا تعني عبارة «يقرأ ONNX» أنه يقبل كل عملية خاصة أو كل إصدار مستقبلي. نراجع العقد المحدد بدل تحويل اسم الصيغة إلى وعد مفتوح.
في تمريننا استعملنا أعدادًا على الورق. لم نختر تمثيلًا آليًا أو دقة عددية أو شكل مصفوفة، ولذلك لا ننسب النتائج إلى مكتبة بعينها. لا تحل صحة الحساب اليدوي محل فحص تلك التفاصيل في ملف حقيقي.
كيف تكتب حكمًا يمكن مراجعته؟
ابدأ بوصف الحساب المرجعي والمدخلات المختارة. ضع أمام كل مدخل مخرج المرجع ومخرج التمثيل المراد فحصه، وحدد هل المقارنة تطلب مساواة تامة أم فرقًا ضمن حد معلن. لا تختَر الحد بعد رؤية الاختلاف فقط.
عند وجود فرق، يبقى موضعه سؤالًا: ترتيب عملية، أو عقد مدخل، أو تمثيل عددي، أو سبب آخر يحتاج فحصًا. لا يفسره اسم الصيغة وحده. وعند اتفاق الحالات، اكتب أنها اتفقت تحت الشروط المسجلة، دون تحويل العدد المحدود من الحالات إلى برهان شامل.
الرسم يحفظ مسار بطاقة الحساب الأصلية. لم ننشئ ملف نموذج، ولم نشغل محولًا أو مشغلًا. القيمة المفيدة هنا هي طريقة قراءة دليل التصدير: ملف معروف البنية، وبيئة محددة، ومقارنة لها مدخلات ومعيار واضح.
المصادر ومتابعة القراءة
- ONNX: Basic concepts (يفتح في نافذة جديدة)onnx.ai
- ONNX Runtime: Compatibility (يفتح في نافذة جديدة)onnxruntime.ai
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
