مشاركة عبر


تكامل Azure Stream Analytics مع التعلم الآلي من Azure

يمكنك تنفيذ نماذج التعلم الآلي كوظيفة معرفة من قبل المستخدم (UDF) في مهام Azure Stream Analytics للقيام بتسجيل النقاط والتوقعات في الوقت الحقيقي على بيانات إدخال الدفق. يسمح لك التعلم الآلي من Azure باستخدام أي أداة مفتوحة المصدر شائعة، مثل TensorFlow أو scikit-learn أو PyTorch، لإعداد النماذج وتدريبها وتوزيعها.

المتطلبات الأساسية

أكمل الخطوات التالية قبل إضافة نموذج التعلم الآلي كوظيفة إلى مهمة Stream Analytics الخاصة بك:

  1. استخدم التعلم الآلي من Azure لتوزيع النموذج الخاص بك كخدمة ويب.

  2. يجب أن تحتوي نقطة نهاية التعلم الآلي على swagger مقترن يساعد Stream Analytics على فهم مخطط الإدخال والإخراج. يمكنك استخدام تعريف swagger النموذجي هذا كمرجع للتأكد من إعداده بشكل صحيح.

  3. تأكد من قبول خدمة الويب وإرجاع بيانات JSON المتسلسلة.

  4. توزيع النموذج الخاص بك على خدمة Azure Kubernetes لعمليات توزيع الإنتاج على نطاق واسع. إذا لم تتمكن خدمة الويب من معالجة عدد الطلبات الواردة من وظيفتك، فسيتدهور أداء وظيفة Stream Analytics، مما يؤثر على زمن الانتقال. يتم دعم النماذج الموزعة على مثيلات حاوية Azure فقط عند استخدام مدخل Azure.

إضافة نموذج التعلم الآلي إلى مهمتك

يمكنك إضافة وظائف التعلم الآلي من Azure إلى مهمة Stream Analytics مباشرة من مدخل Azure أو Visual Studio Code.

مدخل Azure

  1. انتقل إلى مهمة Stream Analytics في مدخل Azure وحدد الوظائف ضمن مخطط المهمة. ثم حدد خدمة التعلم الآلي من Azure من القائمة المنسدلة + إضافة.

    إضافة Azure التعلم الآلي UDF

  2. تعبئة نموذج وظيفة خدمة التعلم الآلي من Azure بقيم الخاصية التالية:

    تكوين Azure التعلم الآلي UDF

يصف الجدول التالي كل خاصية من وظائف خدمة التعلم الآلي من Azure في Stream Analytics.

الخاصية ‏‏الوصف
الاسم المستعار للدالة أدخل اسمًا لاستدعاء الدالة في الاستعلام.
الاشتراك اشتراك Azure الخاص بك.
مساحة عمل Azure Machine Learning مساحة عمل التعلم الآلي من Azure التي استخدمتها لتوزيع النموذج الخاص بك كخدمة ويب.
نقطة النهاية خدمة الويب التي تستضيف النموذج الخاص بك.
توقيع الدالة تم استنتاج توقيع خدمة الويب الخاصة بك من مواصفات مخطط واجهة برمجة التطبيقات. إذا فشل توقيعك في التحميل، فتحقق من أنك قدمت عينة إدخال وإخراج في البرنامج النصي لتسجيل النقاط لإنشاء المخطط تلقائياً.
عدد الطلبات المتوازية لكل قسم هذا تكوين متقدم لتحسين معدل النقل على نطاق واسع. يمثل هذا الرقم الطلبات المتزامنة المرسلة من كل قسم من وظيفتك إلى خدمة الويب. المهام التي تحتوي على ست وحدات دفق البيانات وأقل لها قسم واحد. المهام التي تحتوي على 12 وحدة دفق بيانات لها قسمان، و18 وحدة دفق بيانات لديها ثلاثة أقسام وما إلى ذلك.

على سبيل المثال، إذا كانت مهمتك تحتوي على قسمين وقمت بتعيين هذه المعلمة إلى أربعة، فسيكون هناك ثمانية طلبات متزامنة من مهمتك إلى خدمة الويب الخاصة بك.
العدد الأقصى للدفعة هذا تكوين متقدم لتحسين معدل النقل على نطاق واسع. يمثل هذا الرقم الحد الأقصى لعدد الأحداث التي يتم تجميعها معاً في طلب واحد يتم إرساله إلى خدمة الويب الخاصة بك.

استدعاء نقطة نهاية التعلم الآلي من استعلامك

عندما يستدعي استعلام Stream Analytics وظيفة معرفة من قبل المستخدم للتعلم الآلي من Azure، تنشئ المهمة طلب JSON متسلسلاً إلى خدمة الويب. يستند الطلب إلى مخطط خاص بالنموذج يستنتجه Stream Analytics من swagger لنقطة النهاية.

تحذير

لا يتم استدعاء نقاط النهاية التعلم الآلي عند الاختبار باستخدام محرر استعلام مدخل Microsoft Azure لأن المهمة لا تعمل. لاختبار استدعاء نقطة النهاية من المدخل، يجب تشغيل وظيفة Stream Analytics.

استعلام Stream Analytics التالي هو مثال على كيفية استدعاء وظيفة معرفة من قبل المستخدم للتعلم الآلي من Azure:

SELECT udf.score(<model-specific-data-structure>)
INTO output
FROM input
WHERE <model-specific-data-structure> is not null

إذا كانت بيانات الإدخال المرسلة إلى وظيفة معرفة من قبل المستخدم للتعلم الآلي غير متسقة مع المخطط المتوقع، فسترجع نقطة النهاية استجابة برمز الخطأ 400، مما سيؤدي إلى انتقال مهمة Stream Analytics إلى حالة فاشلة. يوصى بتمكين سجلات الموارد لمهمتك، ما سيمكنك من تصحيح هذه المشاكل واستكشاف الأخطاء وإصلاحها بسهولة. لذلك، يوصى بشدة بأن:

  • التحقق من صحة الإدخال إلى ML UDF الخاص بك ليس خاليا
  • التحقق من نوع كل حقل هو إدخال في الوظيفة المعرفة من قبل المستخدم للتعلم الآلي للتأكد من أنه يطابق ما تتوقعه نقطة النهاية

إشعار

يتم تقييم الوظائف المعرفة من قبل المستخدم للتعلم الآلي لكل صف من خطوة استعلام معينة، حتى عند استدعاؤها عبر تعبير شرطي (أي CASE WHEN [A] IS NOT NULL THEN udf.score(A) ELSE '' END). إذا لزم الأمر، فاستخدم عبارة WITH لإنشاء مسارات متباينة، مع استدعاء الوظيفة المعرفة من قبل المستخدم للتعلم الآلي فقط عند الحاجة، قبل استخدام UNION لدمج المسارات معاً مرة أخرى.

تمرير معلمات إدخال متعددة إلى الوظيفة المعرفة من قبل المستخدم

الأمثلة الأكثر شيوعاً للإدخالات إلى نماذج التعلم الآلي هي صفائف numpy وDataFrames. يمكنك إنشاء صفيف باستخدام الوظيفة المعرفة من قبل المستخدم لـ JavaScript، وإنشاء DataFrame متسلسل JSON باستخدام العبارة WITH.

إنشاء صفيف إدخال

يمكنك إنشاء الوظيفة المعرفة من قبل المستخدم لـ JavaScript التي تقبل عدد N من الإدخالات وتنشئ صفيفاً يمكن استخدامه كإدخال إلى الوظيفة المعرفة من قبل المستخدم للتعلم الآلي من Azure.

function createArray(vendorid, weekday, pickuphour, passenger, distance) {
    'use strict';
    var array = [vendorid, weekday, pickuphour, passenger, distance]
    return array;
}

بمجرد إضافة JavaScript UDF إلى وظيفتك، يمكنك استدعاء Azure التعلم الآلي UDF باستخدام الاستعلام التالي:

WITH 
ModelInput AS (
#use JavaScript UDF to construct array that will be used as input to ML UDF
SELECT udf.createArray(vendorid, weekday, pickuphour, passenger, distance) as inputArray
FROM input
)

SELECT udf.score(inputArray)
INTO output
FROM ModelInput
#validate inputArray is not null before passing it to ML UDF to prevent job from failing
WHERE inputArray is not null

JSON التالي هو مثال على الطلب:

{
    "Inputs": {
        "WebServiceInput0": [
        ["1","Mon","12","1","5.8"],
        ["2","Wed","10","2","10"]
        ]
    }
}

إنشاء Pandas أو PySpark DataFrame

يمكنك استخدام العبارة WITH لإنشاء DataFrame متسلسل JSON يمكن تمريره كمدخل إلى الوظيفة المعرفة من قبل المستخدم للتعلم الآلي من Azure كما هو موضح أدناه.

ينشئ الاستعلام التالي DataFrame عن طريق تحديد الحقول الضرورية ويستخدم DataFrame كإدخال إلى الوظيفة المعرفة من قبل المستخدم للتعلم الآلي من Azure.

WITH 
Dataframe AS (
SELECT vendorid, weekday, pickuphour, passenger, distance
FROM input
)

SELECT udf.score(Dataframe)
INTO output
FROM Dataframe
WHERE Dataframe is not null

JSON التالي هو مثال على طلب من الاستعلام السابق:

{
    "Inputs": {
        "WebServiceInput0": [
        {
            "vendorid": "1",
            "weekday": "Mon",
            "pickuphour": "12",
            "passenger": "1",
            "distance": "5.8"
        },
        {
            "vendorid": "2",
            "weekday": "Tue",
            "pickuphour": "10",
            "passenger": "2",
            "distance": "10"
        }]
    }
}

تحسين أداء الوظائف المعرفة من قبل المستخدم للتعلم الآلي من Azure

عند توزيع النموذج الخاص بك إلى خدمة Azure Kubernetes، يمكنك تعريف النموذج الخاص بك لتحديد استخدام الموارد. يمكنك أيضاً تمكين نتيجة تحليلات التطبيق لعمليات التوزيع لفهم معدلات الطلب وأوقات الاستجابة ومعدلات الفشل.

إذا كان لديك سيناريو مع معدل نقل الحدث العالي، فقد تحتاج إلى تغيير المعلمات التالية في Stream Analytics لتحقيق الأداء الأمثل مع زمن انتقال منخفض من طرف إلى طرف:

  • الحد الأقصى لعدد الدفعات.
  • عدد الطلبات المتوازية لكل قسم.

تحديد حجم الدفعة الصحيح

بعد نشر خدمة الويب الخاصة بك، يمكنك إرسال نموذج طلب بأحجام دفعات مختلفة بدءا من 50 وزيادة ترتيبها بالمئات. على سبيل المثال، 200 و500 و1000 و2000 وما إلى ذلك. ستلاحظ أنه بعد حجم دفعة معين، يزداد زمن انتقال الاستجابة. النقطة التي بعد ذلك يجب أن يكون زمن انتقال زيادة الاستجابة هو الحد الأقصى لعدد الدفعات لمهمتك.

تحديد عدد الطلبات المتوازية لكل قسم

عند التحجيم الأمثل، يجب أن تكون مهمة Stream Analytics قادرة على إرسال طلبات متوازية متعددة إلى خدمة الويب الخاصة بك والحصول على استجابة في غضون بضعة مللي ثانية. يمكن أن يؤثر زمن انتقال استجابة خدمة الويب بشكل مباشر على زمن انتقال وأداء مهمة Stream Analytics الخاصة بك. إذا استغرقت المكالمة من وظيفتك إلى خدمة الويب وقتا طويلا، فمن المحتمل أن ترى زيادة في تأخير العلامة المائية وقد ترى أيضا زيادة في عدد أحداث الإدخال المتراكمة.

يمكنك تحقيق زمن انتقال منخفض عن طريق التأكد من توفير نظام مجموعة Azure Kubernetes Service (AKS) بالعدد الصحيح من العقد والنسخ المتماثلة. من المهم أن تكون خدمة الويب الخاصة بك متوفرة بشكل كبير وترجع استجابات ناجحة. إذا تلقت وظيفتك خطأ يمكن إعادة المحاولة، مثل استجابة الخدمة غير المتوفرة (503)، فستعيد المحاولة تلقائيا مع التراجع الأسي. إذا تلقت مهمتك أحد هذه الأخطاء كاستجابة من نقطة النهاية، فستنتقل المهمة إلى حالة فاشلة.

  • طلب غير صحيح (400)
  • تعارض (409)
  • لم يتم العثور عليه (404)
  • غير مصرح به (401)

القيود

إذا كنت تستخدم خدمة Azure ML Managed Endpoint، يمكن ل Stream Analytics حاليا الوصول فقط إلى نقاط النهاية التي تم تمكين الوصول إلى الشبكة العامة بها. اقرأ المزيد حول ذلك على الصفحة حول نقاط النهاية الخاصة ب Azure ML.

الخطوات التالية