التعلم الآلي ONNX وAzure: إنشاء نماذج ML وتسريعها
تعرف على كيفية استخدام Exchange الشبكة العصبية المفتوحة (ONNX) للمساعدة في تحسين الاستدلال على نموذج التعلم الآلي الخاص بك. الاستدلال ، أو تسجيل النموذج ، هو المرحلة التي يتم فيها استخدام النموذج المنشور للتنبؤ ، والأكثر شيوعا في بيانات الإنتاج.
يعد تحسين نماذج التعلم الآلي للاستدلال (أو تسجيل النموذج) أمرا صعبا نظرا لأنك تحتاج إلى ضبط النموذج ومكتبة الاستدلال لتحقيق أقصى استفادة من قدرات الأجهزة. تصبح المشكلة صعبة للغاية إذا كنت ترغب في الحصول على الأداء الأمثل على أنواع مختلفة من الأنظمة الأساسية (السحابة / الحافة ، وحدة المعالجة المركزية / وحدة معالجة الرسومات ، وما إلى ذلك) ، نظرا لأن كل منها لديه قدرات وخصائص مختلفة. يزداد التعقيد إذا كان لديك نماذج من مجموعة متنوعة من الأطر التي تحتاج إلى التشغيل على مجموعة متنوعة من المنصات. يستغرق الأمر وقتا طويلا للغاية لتحسين جميع المجموعات المختلفة من الأطر والأجهزة. هناك حاجة إلى حل للتدريب مرة واحدة في الإطار المفضل لديك وتشغيله في أي مكان على السحابة أو الحافة. هذا هو المكان الذي يأتي فيه ONNX.
أنشأت Microsoft ومجتمع من الشركاء ONNX كمعيار مفتوح لتمثيل نماذج التعلم الآلي. يمكن تصدير النماذج من العديد من الأطر بما في ذلك TensorFlow و PyTorch و SciKit-Learn و Keras و Chainer و MXNet و MATLAB و SparkML أو تحويلها إلى تنسيق ONNX القياسي. بمجرد أن تكون النماذج بتنسيق ONNX ، يمكن تشغيلها على مجموعة متنوعة من الأنظمة الأساسية والأجهزة.
ONNX Runtime هو محرك استدلال عالي الأداء لنشر طرازات ONNX في الإنتاج. تم تحسينه لكل من السحابة والحافة ويعمل على Linux و Windows و Mac. مكتوب في C ++ ، كما أنه يحتوي على واجهات برمجة تطبيقات C و Python و C # و Java و JavaScript (Node.js) للاستخدام في مجموعة متنوعة من البيئات. يدعم ONNX Runtime كلا من DNN وطرازات ML التقليدية ويتكامل مع المسرعات على أجهزة مختلفة مثل TensorRT على وحدات معالجة الرسومات NVidia و OpenVINO على معالجات Intel و DirectML على Windows والمزيد. باستخدام ONNX Runtime، يمكنك الاستفادة من التحسينات الشاملة على مستوى الإنتاج والاختبارات والتحسينات المستمرة.
يستخدم وقت تشغيل ONNX في خدمات Microsoft عالية النطاق مثل Bing Office وAzure Cognitive Services. تعتمد مكاسب الأداء على عدد من العوامل ، ولكن هذه خدمات Microsoft شهدت زيادة في الأداء بمعدل 2x على وحدة المعالجة المركزية. بالإضافة إلى خدمات Azure التعلم الآلي، يتم تشغيل ONNX Runtime أيضا في منتجات أخرى تدعم أحمال عمل التعلم الآلي، بما في ذلك:
- Windows: يتم تضمين وقت التشغيل في Windows كجزء من Windows التعلم الآلي ويعمل على مئات الملايين من الأجهزة.
- عائلة منتجات Azure SQL: تشغيل التسجيل الأصلي على البيانات في Azure SQL EdgeوAzure SQL المثيل المدار.
- ML.NET: قم بتشغيل طرازات ONNX في ML.NET.
احصل على طرازات ONNX
يمكنك الحصول على طرازات ONNX بعدة طرق:
- تدريب نموذج ONNX جديد في Azure التعلم الآلي (راجع الأمثلة في أسفل هذه المقالة) أو باستخدام إمكانات التعلم الآلي التلقائية
- تحويل النموذج الحالي من تنسيق آخر إلى ONNX (انظر البرامج التعليمية)
- احصل على نموذج ONNX مدرب مسبقا من حديقة ONNX النموذجية
- إنشاء نموذج ONNX مخصص من خدمة Azure Custom Vision
يمكن تمثيل العديد من النماذج بما في ذلك تصنيف الصور واكتشاف الكائنات ومعالجة النصوص كنماذج ONNX. إذا واجهت مشكلة في نموذج لا يمكن تحويله بنجاح ، فيرجى تقديم مشكلة في GitHub المحول المعني الذي استخدمته. يمكنك الاستمرار في استخدام نموذج التنسيق الحالي حتى تتم معالجة المشكلة.
نشر نماذج ONNX في Azure
باستخدام Azure التعلم الآلي، يمكنك نشر طرز ONNX وإدارتها ومراقبتها. باستخدام سير عمل النشر القياسي ووقت تشغيل ONXX، يمكنك إنشاء نقطة نهاية REST مستضافة في السحابة. انظر مثال دفاتر ملاحظات Jupyter في نهاية هذه المقالة لتجربتها بنفسك.
تثبيت واستخدام وقت تشغيل ONNX مع بايثون
تتوفر حزم Python لوقت تشغيل ONNX على PyPi.org (وحدة المعالجة المركزيةووحدة معالجة الرسومات). يرجى قراءة متطلبات النظام قبل التثبيت.
لتثبيت وقت تشغيل ONNX ل Python، استخدم أحد الأوامر التالية:
pip install onnxruntime # CPU build
pip install onnxruntime-gpu # GPU build
للاتصال ب ONNX Runtime في البرنامج النصي Python الخاص بك، استخدم:
import onnxruntime
session = onnxruntime.InferenceSession("path to model")
عادة ما تخبرك الوثائق المصاحبة للنموذج بالمدخلات والمخرجات لاستخدام النموذج. يمكنك أيضا استخدام أداة تصور مثل Netron لعرض النموذج. يتيح لك ONNX Runtime أيضا الاستعلام عن بيانات تعريف النموذج والمدخلات والمخرجات:
session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name
لاستنتاج النموذج الخاص بك، استخدم run ومرر في قائمة المخرجات التي تريد إرجاعها (اتركها فارغة إذا كنت تريد كل منها) وخريطة لقيم الإدخال. والنتيجة هي قائمة بالنواتج.
results = session.run(["output1", "output2"], {
"input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})
للحصول على مرجع واجهة برمجة تطبيقات Python الكامل، راجع المستندات المرجعية لوقت تشغيل ONNX.
أمثلة
راجع كيفية الاستخدام-azureml/deployment/onnx على سبيل المثال دفاتر ملاحظات Python التي تنشئ نماذج ONNX وتنشرها.
تعرف على كيفية تشغيل دفاتر الملاحظات باتباع المقالة استخدام دفاتر ملاحظات Jupyter لاستكشاف هذه الخدمة.
يمكن العثور على عينات للاستخدام بلغات أخرى في GitHub وقت تشغيل ONNX.
مزيد من المعلومات
تعرف على المزيد حول ONNX أو ساهم في المشروع:
تعرف على المزيد حول وقت تشغيل ONNX أو ساهم في المشروع:
