دمج Azure Stream Analytics مع Azure التعلم الآلي
يمكنك تنفيذ نماذج التعلم الآلي كدالة معرفة من قبل المستخدم (UDF) في مهام Azure Stream Analytics لإجراء عمليات تسجيل وتنبؤات في الوقت الفعلي على بيانات إدخال الدفق. يسمح لك Azure التعلم الآلي باستخدام أي أداة شائعة مفتوحة المصدر، مثل TensorFlow أو scikit-learn أو PyTorch، لإعداد النماذج وتدريبها ونشرها.
المتطلبات الأساسية
أكمل الخطوات التالية قبل إضافة نموذج تعلم آلي كدالة إلى مهمة Stream Analytics:
استخدم Azure التعلم الآلي لنشر النموذج الخاص بك كخدمة ويب.
يجب أن تحتوي نقطة نهاية التعلم الآلي على أداة ربط تساعد Stream Analytics على فهم مخطط الإدخال والإخراج. يمكنك استخدام تعريف swagger النموذجي هذا كمرجع للتأكد من إعداده بشكل صحيح.
تأكد من أن خدمة الويب الخاصة بك تقبل بيانات JSON المسلسلة وتقوم بإرجاعها.
انشر نموذجك على Azure Kubernetes Service لعمليات نشر الإنتاج على نطاق واسع. إذا لم تتمكن خدمة الويب من التعامل مع عدد الطلبات الواردة من وظيفتك، تدهور أداء وظيفة Stream Analytics، مما يؤثر على زمن الوصول. يتم دعم النماذج التي تم نشرها على مثيلات حاوية Azure فقط عند استخدام مدخل Azure.
إضافة نموذج التعلم الآلي إلى وظيفتك
يمكنك إضافة وظائف Azure التعلم الآلي إلى مهمة Stream Analytics مباشرة من مدخل Azure أو Visual Studio Code.
مدخل Azure
انتقل إلى مهمة Stream Analytics في مدخل Azure، وحدد الوظائف ضمن طبولوجيا الوظيفة. ثم حدد Azure التعلم الآلي Service من القائمة المنسدلة + إضافة.

املأ نموذج الدالة Azure التعلم الآلي Service بقيم الخصائص التالية:

يصف الجدول التالي كل خاصية من وظائف Azure التعلم الآلي Service في Stream Analytics.
| الخاصية | الوصف |
|---|---|
| الاسم المستعار للدالة | أدخل اسمًا لاستدعاء الدالة في الاستعلام. |
| الاشتراك | اشتراكك في Azure.. |
| مساحة عمل Azure Machine Learning | التعلم الآلي Azure مساحة العمل التي استخدمتها لنشر النموذج الخاص بك كخدمة ويب. |
| نقطة النهاية | خدمة الويب التي تستضيف النموذج الخاص بك. |
| توقيع الدالة | يتم الاستدلال على توقيع خدمة الويب الخاصة بك من مواصفات مخطط واجهة برمجة التطبيقات. إذا فشل تحميل توقيعك، فتحقق من أنك قدمت عينة من الإدخال والإخراج في البرنامج النصي لتسجيل النقاط لإنشاء المخطط تلقائيا. |
| عدد الطلبات المتوازية لكل قسم | هذا تكوين متقدم لتحسين الإنتاجية على نطاق واسع. يمثل هذا الرقم الطلبات المتزامنة المرسلة من كل قسم من أقسام وظيفتك إلى خدمة الويب. تحتوي الوظائف التي تحتوي على ست وحدات بث (SU) وأقل على قسم واحد. تحتوي الوظائف التي تحتوي على 12 وحدة SUs على قسمين ، و 18 SUs تحتوي على ثلاثة أقسام وما إلى ذلك. على سبيل المثال، إذا كانت وظيفتك تحتوي على قسمين وقمت بتعيين هذه المعلمة إلى أربعة، فستكون هناك ثمانية طلبات متزامنة من وظيفتك إلى خدمة الويب. |
| العدد الأقصى للدفعة | هذا تكوين متقدم لتحسين الإنتاجية على نطاق واسع. يمثل هذا الرقم الحد الأقصى لعدد الأحداث التي يتم تجميعها معا في طلب واحد يتم إرساله إلى خدمة الويب الخاصة بك. |
الاتصال بنقطة نهاية التعلم الآلي من الاستعلام
عندما يستدعي استعلام Stream Analytics Azure التعلم الآلي UDF، تنشئ المهمة طلب JSON متسلسلا إلى خدمة الويب. يستند الطلب إلى مخطط خاص بالنموذج يستنتجه Stream Analytics من تبجح نقطة النهاية.
يعد استعلام Stream Analytics التالي مثالا على كيفية استدعاء Azure التعلم الآلي UDF:
SELECT udf.score(<model-specific-data-structure>)
INTO output
FROM input
WHERE <model-specific-data-structure> is not null
إذا كانت بيانات الإدخال المرسلة إلى ML UDF غير متسقة مع المخطط المتوقع، فستعرض نقطة النهاية استجابة برمز الخطأ 400، مما سيؤدي إلى انتقال مهمة Stream Analytics إلى حالة فشل. يوصى بتمكين سجلات الموارد لوظيفتك ، مما سيمكنك من تصحيح الأخطاء واستكشاف هذه المشكلات وإصلاحها بسهولة. لذلك ، يوصى بشدة بما يلي:
- التحقق من صحة الإدخال إلى ML UDF الخاص بك ليس فارغا
- التحقق من صحة نوع كل حقل يمثل مدخلا في ML UDF للتأكد من أنه يطابق ما تتوقعه نقطة النهاية
ملاحظة
يتم تقييم ML UDFs لكل صف من خطوات استعلام معينة ، حتى عند استدعائها عبر تعبير شرطي (أي CASE WHEN [A] IS NOT NULL THEN udf.score(A) ELSE '' END). إذا لزم الأمر، استخدم العبارة WITH لإنشاء مسارات متباعدة، مع استدعاء ML UDF فقط عند الحاجة، قبل استخدام UNION لدمج المسارات معا مرة أخرى.
تمرير معلمات إدخال متعددة إلى UDF
الأمثلة الأكثر شيوعا للمدخلات في نماذج التعلم الآلي هي صفائف numpy و DataFrames. يمكنك إنشاء صفيف باستخدام JavaScript UDF، وإنشاء إطار بيانات متسلسل بتنسيق JSON باستخدام العبارة WITH .
إنشاء صفيف إدخال
يمكنك إنشاء JavaScript UDF يقبل عدد N من المدخلات وينشئ صفيفا يمكن استخدامه كمدخلات إلى Azure التعلم الآلي UDF.
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"]
]
}
}
إنشاء الباندا أو PySpark DataFrame
يمكنك استخدام العبارة WITH لإنشاء إطار بيانات متسلسل JSON يمكن تمريره كإدخال إلى Azure التعلم الآلي UDF كما هو موضح أدناه.
يقوم الاستعلام التالي بإنشاء DataFrame عن طريق تحديد الحقول الضرورية واستخدام DataFrame كإدخال إلى Azure التعلم الآلي UDF.
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 التعلم الآلي UDFs
عند نشر النموذج الخاص بك إلى Azure Kubernetes Service، يمكنك تعريف النموذج الخاص بك لتحديد استخدام الموارد. يمكنك أيضا تمكين Insights التطبيقات لعمليات النشر الخاصة بك لفهم معدلات الطلبات وأوقات الاستجابة ومعدلات الفشل.
إذا كان لديك سيناريو بإنتاجية عالية للأحداث، فقد تحتاج إلى تغيير المعلمات التالية في Stream Analytics لتحقيق الأداء الأمثل مع فترات تأخير منخفضة من البداية إلى النهاية:
- الحد الأقصى لعدد الدفعات.
- عدد الطلبات المتوازية لكل قسم.
تحديد حجم الدفعة المناسب
بعد نشر خدمة الويب الخاصة بك ، يمكنك إرسال طلب عينة بأحجام دفعات مختلفة تبدأ من 50 وتزيد من المئات. على سبيل المثال ، 200 و 500 و 1000 و 2000 وما إلى ذلك. ستلاحظ أنه بعد حجم دفعة معين ، يزداد زمن انتقال الاستجابة. يجب أن تكون النقطة التي يزداد بعدها زمن الاستجابة هي الحد الأقصى لعدد الدفعات لعملك.
تحديد عدد الطلبات المتوازية لكل قسم
في التوسع الأمثل ، يجب أن تكون مهمة Stream Analytics قادرة على إرسال طلبات متوازية متعددة إلى خدمة الويب الخاصة بك والحصول على استجابة في غضون بضع ميلي ثانية. يمكن أن يؤثر زمن استجابة خدمة الويب بشكل مباشر على زمن الوصول وأداء مهمة Stream Analytics الخاصة بك. إذا استغرقت المكالمة من وظيفتك إلى خدمة الويب وقتا طويلا ، فمن المحتمل أن ترى زيادة في تأخير العلامة المائية وقد ترى أيضا زيادة في عدد أحداث الإدخال المتراكمة.
يمكنك تحقيق زمن انتقال منخفض من خلال التأكد من توفير مجموعة Azure Kubernetes Service (AKS) الخاصة بك بالعدد الصحيح من العقد والنسخ المتماثلة. من الأهمية بمكان أن تكون خدمة الويب الخاصة بك متاحة بشكل كبير وتعرض استجابات ناجحة. إذا تلقت وظيفتك خطأ قابلا للاسترداد مثل استجابة الخدمة غير المتوفرة (503)، إعادة المحاولة تلقائيا مع التراجع الأسي. إذا تلقت وظيفتك أحد هذه الأخطاء كاستجابة من نقطة النهاية، فستنتقل المهمة إلى حالة فاشلة.
- طلب سيئ (400)
- الصراع (409)
- لم يتم العثور عليها (404)
- غير مصرح به (401)