ONNX (Open Neural Network Exchange)
ONNX تنسيق مفتوح يخزّن النموذج المدرَّب على هيئة رسم بياني من العمليات القياسية، لذا يمكن تشغيل نموذج دُرّب باستخدام PyTorch على العديد من بيئات التشغيل.
ONNX (تبادل الشبكات العصبية المفتوح) تنسيق ملفات قياسي مفتوح لنماذج تعلّم الآلة. يخزّن ملف .onnx نموذجًا مدرّبًا في صورة مخطط حسابي من عوامل قياسية مع أوزانه، كي يمكن تشغيل نموذج دُرّب باستخدام إطار عمل مثل PyTorch في بيئات تشغيل أخرى وعلى أنواع كثيرة من الأجهزة. أطلقت Facebook وMicrosoft مشروع ONNX في سبتمبر 2017، وأصبح مشروعًا متخرّجًا ضمن LF AI & Data، مؤسسة الذكاء الاصطناعي التابعة لـ Linux Foundation، منذ نوفمبر 2019. ويُعد ONNX نقطة التسليم المعتادة بين التدريب ونشر النموذج: إذ يمكن لملف مُصدَّر واحد أن يمد ONNX Runtime وTensorRT وOpenVINO ومترجمات العديد من مسرّعات الذكاء الاصطناعي الطرفي بالمدخلات.
محتويات ملف ONNX#
يُسلسَل نموذج ONNX باستخدام Protocol Buffers، ويحتوي على أربعة أجزاء:
- المخطط: عُقد تستدعي عوامل مثل
ConvوMatMulوRelu، وتتصل ببعضها بواسطة موترات مسماة. وتحمل مدخلات المخطط ومخرجاته أنواع البيانات وأشكالها، ويمكن أن يكون كل بُعد ثابتًا أو رمزيًا، مثل حجم دفعة متغير. - المهيِّئات: الأوزان المدرّبة. يضع Protocol Buffers حدًا أقصى لحجم الملف الواحد يبلغ 2 GB، لذا تخزّن النماذج الأكبر أوزانها في ملفات بيانات خارجية بجوار ملف
.onnx. - إصدار مجموعة العوامل: تُرقّم العوامل ضمن مجموعات opset، ويجب أن يدعم وقت التشغيل مجموعة opset التي صُدّر بها النموذج. وتضيف مجموعات opset الجديدة عوامل من دون تغيير القديمة، مثل العامل
Attentionالذي أُضيف في opset 23. - البيانات الوصفية: اسم الجهة المنتجة وإصدار النموذج وأزواج مفتاح-قيمة مخصصة، مثل أسماء الفئات.
يغطي مجال عوامل ثانٍ، هو ONNX-ML، النماذج التقليدية مثل تجميعات الأشجار والمصنّفات الخطية، لذا تصدّر محوّلات مثل skl2onnx وonnxmltools نماذج scikit-learn وLightGBM وXGBoost إلى التنسيق نفسه. وتعرض أدوات مثل Netron المخطط عقدةً تلو الأخرى. عمليًا، يقع ONNX بين كثير من أطر التدريب وبيئات التشغيل:
تشغيل نماذج ONNX#
يشغّل ONNX Runtime، وهو محرك استدلال مفتوح المصدر من Microsoft، ملفات ONNX على الخوادم وأجهزة سطح المكتب والهواتف والمتصفحات. ويحسّن المخطط عند تحميل النموذج، مثل طيّ الثوابت ودمج الالتفاف مع تطبيع الدفعة الذي يليه، ثم يسلّم كل جزء من المخطط إلى موفّر تنفيذ ملائم للأجهزة المتاحة: CUDA أو TensorRT على وحدات معالجة الرسومات من NVIDIA، وOpenVINO على أجهزة Intel، وDirectML على وحدات معالجة الرسومات في Windows، وCore ML على أجهزة Apple، وQNN على وحدات NPU من Qualcomm، وWebGPU في المتصفحات. يعمل Windows ML، إطار الاستدلال المحلي من Microsoft، على ONNX Runtime، كما تستورد محركات أخرى مثل TensorRT وOpenVINO ملفات ONNX وتترجمها إلى تنسيقاتها الخاصة.
يُصدّر Ultralytics YOLO26 إلى ONNX باستخدام model.export(format="onnx")، كما ينشئ تصدير TensorRT من Ultralytics المحرك انطلاقًا من ملف ONNX نفسه. يعمل الملف المُصدَّر على ONNX Runtime دون PyTorch:
import onnxruntime as ort
from ultralytics import YOLO
# تصدير YOLO26n إلى ONNX مع أبعاد رمزية للدفعة والارتفاع والعرض
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)
# تحميل المخطط البياني في ONNX Runtime، الذي لا يحتاج إلى PyTorch أو Ultralytics
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
print(tensor.name, tensor.shape)يطبع مدخل المخطط البياني، images، بأبعاد رمزية للدفعة والارتفاع والعرض، ومخرج التنبؤ الخام، output0، وهو التوقيع الذي تستخدمه أي بيئة تشغيل ONNX لإدخال البيانات إلى النموذج وقراءة نتائجه.
مقارنة ONNX بالتنسيقات والأدوات ذات الصلة#
- ONNX Runtime: محرك الاستدلال الذي ينفّذ ملفات ONNX، وهو مشروع منفصل تقوده Microsoft، وغالبًا ما يختصره المستخدمون إلى «ONNX».
- TensorRT: مُصرّف من NVIDIA يحوّل ملف ONNX إلى محرك مُحسّن لنوع واحد من وحدات GPU وإصدار واحد من TensorRT؛ لذلك تحتفظ الفرق بملف ONNX كمصدر قابل للنقل، وتعيد إنشاء المحركات لكل هدف.
- تنسيقات PyTorch: تخزّن نقاط التحقق بتنسيق
.ptوملفات safetensors أوزان النموذج اللازمة للشفرة التي تعيد بناءه، بينما تلتقط TorchScript وtorch.exportالرسوم البيانية لبيئات تشغيل PyTorch نفسها. - تنسيقات النشر الأخرى: تستهدف كلٌّ من OpenVINO IR وملفات LiteRT
.tfliteوحزم Core ML وملفات GGUF الخاصة بنماذج LLM المكمّمة بيئات تشغيل محددة. تحوّل coremltools من Apple نماذج PyTorch مباشرةً، وقد أُزيل دعم إدخال ONNX في الإصدار 6.
تطبيقات عملية#
- التطبيقات متعددة المنصات: يخدم ملف ONNX واحد خوادم Linux وتطبيقات Windows عبر Windows ML وتطبيقات Android وiOS عبر ONNX Runtime Mobile.
- الاستدلال في المتصفح: يشغّل ONNX Runtime Web النماذج على جهاز المستخدم باستخدام WebGPU أو WebAssembly، لذلك لا تغادر إطارات الكاميرا المستخدمة لميزات مثل تقدير الوضعية المتصفح.
- مسرّعات الحافة: تقبل سلاسل أدوات NPU من مورّدين مثل Hailo وQualcomm وRockchip نماذج ONNX كمدخلات وتُصرّفها، وغالبًا ما تستخدم التكميم إلى INT8، لتعمل على رقاقاتها.
- النماذج التقليدية في بيئات الإنتاج: تعمل أشجار التعزيز بالتدرّج وخطوط معالجة scikit-learn المحوّلة إلى ONNX ضمن خدمات C# وJava وC++ عبر ONNX Runtime، من دون الحاجة إلى مفسّر Python في مسار تقديم الخدمة.










