Deploy a model to a Azure Kubernetes Service cluster

تعرف على كيفية استخدام Azure التعلم الآلي لنشر نموذج كخدمة ويب على Azure Kubernetes Service (AKS). تعد Azure Kubernetes Service جيدة لعمليات نشر الإنتاج عالية النطاق. استخدم خدمة Azure Kubernetes إذا كنت بحاجة إلى واحد أو أكثر من الإمكانات التالية:

  • وقت استجابة سريع
  • القياس التلقائي للخدمة المنشورة
  • تسجيل الدخول
  • جمع البيانات النموذجية
  • المصادقة
  • إنهاء TLS
  • خيارات تسريع الأجهزة مثل وحدة معالجة الرسومات وصفائف البوابات القابلة للبرمجة الميدانية (FPGA)

عند النشر إلى Azure Kubernetes Service، يمكنك النشر إلى مجموعة AKS متصلة بمساحة العمل الخاصة بك. للحصول على معلومات حول توصيل مجموعة AKS بمساحة العمل الخاصة بك، راجع إنشاء مجموعة خدمة Azure Kubernetes وإرفاقها.

هام

نوصي بتصحيح الأخطاء محليا قبل النشر إلى خدمة الويب. لمزيد من المعلومات، راجع تصحيح الأخطاء محليا

يمكنك أيضا الرجوع إلى Azure التعلم الآلي - النشر إلى دفتر الملاحظات المحلي

ملاحظة

توفر نقاط نهاية Azure التعلم الآلي (المعاينة) تجربة نشر محسنة وأبسط. تدعم نقاط النهاية سيناريوهات الاستدلال في الوقت الفعلي والدفعات. توفر نقاط النهاية واجهة موحدة لاستدعاء عمليات نشر النماذج وإدارتها عبر أنواع الحوسبة. راجع ما هي نقاط نهاية Azure التعلم الآلي (معاينة)؟.

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

فهم عمليات النشر

تستخدم كلمة "نشر" في كل من Kubernetes و Azure التعلم الآلي. "النشر" له معان مختلفة في هذين السياقين. في Kubernetes ، A Deployment هو كيان ملموس ، محدد بملف YAML تصريحي. لدى Kubernetes دورة حياة محددة وعلاقات ملموسة مع كيانات Kubernetes Deployment الأخرى مثل Pods و ReplicaSets. يمكنك التعرف على Kubernetes من المستندات ومقاطع الفيديو في ما هو Kubernetes؟.

في Azure التعلم الآلي، يتم استخدام "النشر" بالمعنى الأعم لتوفير موارد المشروع وتنظيفها. الخطوات التي يعتبرها Azure التعلم الآلي جزءا من النشر هي:

  1. ضغط الملفات في مجلد المشروع الخاص بك ، وتجاهل تلك المحددة في .amlignore أو .gitignore
  2. توسيع نطاق مجموعة الحوسبة الخاصة بك (المتعلقة ب Kubernetes)
  3. إنشاء ملف dockerfile أو تنزيله إلى عقدة الحوسبة (يتعلق ب Kubernetes)
    1. يقوم النظام بحساب تجزئة من:
    2. يستخدم النظام هذا التجزئة كمفتاح في البحث عن مساحة العمل Azure Container Registry (ACR)
    3. إذا لم يتم العثور عليه ، فإنه يبحث عن تطابق في ACR العالمي
    4. إذا لم يتم العثور عليه ، يقوم النظام بإنشاء صورة جديدة (والتي سيتم تخزينها مؤقتا ودفعها إلى مساحة العمل ACR)
  4. تنزيل ملف المشروع المضغوط إلى وحدة تخزين مؤقتة على عقدة الحوسبة
  5. فك ضغط ملف المشروع
  6. تنفيذ عقدة الحوسبة python <entry script> <arguments>
  7. حفظ السجلات وملفات النماذج والملفات الأخرى المكتوبة إلى ./outputs حساب التخزين المقترن بمساحة العمل
  8. تقليل الحوسبة، بما في ذلك إزالة التخزين المؤقت (يتعلق ب Kubernetes)

Azure ML router

يتم تلقائيا قياس مكون الواجهة الأمامية (azureml-fe) الذي يوجه طلبات الاستدلال الواردة إلى الخدمات المنشورة حسب الحاجة. يعتمد تحجيم azureml-fe على غرض مجموعة AKS وحجمها (عدد العقد). يتم تكوين غرض الكتلة والعقد عند إنشاء مجموعة AKS أو إرفاقها. هناك خدمة azureml-fe واحدة لكل مجموعة ، والتي قد تعمل على قرون متعددة.

هام

عند استخدام مجموعة تم تكوينها كاختبار dev، يتم تعطيل مقياس الأداء الذاتي. حتى بالنسبة لمجموعات FastProd/DenseProd، لا يتم تمكين Self-Scaler إلا عندما يظهر القياس عن بعد الحاجة إليها.

يقوم Azureml-fe بتوسيع نطاقه (رأسيا) لاستخدام المزيد من النوى ، والخروج (أفقيا) لاستخدام المزيد من القرون. عند اتخاذ قرار التوسع، يتم استخدام الوقت الذي يستغرقه توجيه طلبات الاستدلال الواردة. إذا تجاوزت هذه المرة الحد الأدنى ، يحدث توسيع نطاق. إذا استمر وقت توجيه الطلبات الواردة في تجاوز الحد الأدنى ، فسيحدث توسعة.

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

عند التوسع أو التكبير، ستتم إعادة تشغيل pods azureml-fe لتطبيق تغييرات وحدة المعالجة المركزية/الذاكرة. لا تتأثر طلبات الاستدلال بإعادة التشغيل.

فهم متطلبات الاتصال لمجموعة الاستدلال AKS

عندما يقوم Azure التعلم الآلي بإنشاء مجموعة AKS أو إرفاقها، يتم نشر مجموعة AKS باستخدام أحد طرازي الشبكة التاليين:

  • شبكة Kubenet - عادة ما يتم إنشاء موارد الشبكة وتكوينها أثناء نشر مجموعة AKS.
  • شبكات واجهة شبكة حاويات Azure (CNI) - يتم توصيل مجموعة AKS بمورد وتكوينات شبكة ظاهرية موجودة.

بالنسبة لشبكات Kubenet، يتم إنشاء الشبكة وتكوينها بشكل صحيح لخدمة Azure التعلم الآلي. بالنسبة لشبكات CNI ، تحتاج إلى فهم متطلبات الاتصال وضمان دقة DNS والاتصال الصادر لاستنتاج AKS. على سبيل المثال، قد تستخدم جدار حماية لحظر حركة مرور الشبكة.

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

Connectivity Requirements for AKS Inferencing

للحصول على متطلبات اتصال AKS العامة، راجع التحكم في حركة مرور الخروج لعقد الكتلة في Azure Kubernetes Service.

للوصول إلى خدمات Azure ML خلف جدار حماية، راجع كيفية الوصول إلى azureml خلف جدار الحماية.

المتطلبات العامة لدقة DNS

دقة DNS داخل VNet موجود تحت سيطرتك. على سبيل المثال، جدار حماية أو خادم DNS مخصص. يجب أن يكون الوصول إلى المضيفين التاليين قابلين للوصول:

اسم المضيف يستخدم من قبل
<cluster>.hcp.<region>.azmk8s.io خادم AKS API
mcr.microsoft.com تسجيل حاويات مايكروسوفت (MCR)
<ACR name>.azurecr.io سجل حاويات Azure (ACR)
<account>.table.core.windows.net Azure Storage Account (تخزين الجداول)
<account>.blob.core.windows.net Azure Storage Account (blob storage)
api.azureml.ms مصادقة خدمة Azure Active Directory (Azure AD)
ingest-vienna<region>.kusto.windows.net نقطة نهاية Kusto لتحميل القياس عن بعد
<leaf-domain-label + auto-generated suffix>.<region>.cloudapp.azure.com اسم مجال نقطة النهاية، إذا قمت بالإنشاء التلقائي بواسطة Azure التعلم الآلي. إذا استخدمت اسم مجال مخصص، فلن تحتاج إلى هذا الإدخال.

متطلبات الاتصال بترتيب زمني: من إنشاء المجموعة إلى نشر النموذج

في عملية إنشاء AKS أو إرفاقها ، يتم نشر جهاز توجيه Azure ML (azureml-fe) في مجموعة AKS. لنشر جهاز توجيه Azure ML، يجب أن تكون عقدة AKS قادرة على:

  • حل DNS لخادم AKS API
  • حل DNS ل MCR من أجل تنزيل صور عامل الرصيف لجهاز توجيه Azure ML
  • تنزيل الصور من MCR، حيث يلزم الاتصال بالبريد الصادر

مباشرة بعد نشر azureml-fe ، سيحاول البدء وهذا يتطلب ما يلي:

  • حل DNS لخادم AKS API
  • استعلام خادم AKS API لاكتشاف مثيلات أخرى لنفسه (إنها خدمة متعددة الجراب)
  • الاتصال إلى حالات أخرى من نفسها

بمجرد بدء تشغيل azureml-fe ، فإنه يتطلب الاتصال التالي ليعمل بشكل صحيح:

  • الاتصال إلى Azure Storage لتنزيل التكوين الديناميكي
  • حل DNS لخادم مصادقة Azure AD api.azureml.ms والتواصل معه عندما تستخدم الخدمة المنشورة مصادقة Azure AD.
  • الاستعلام عن خادم AKS API لاكتشاف النماذج المنشورة
  • التواصل مع أصحاب الهمم النموذجيين المنشورين

في وقت نشر النموذج، لنشر نموذج ناجح يجب أن تكون عقدة AKS قادرة على:

  • حل DNS ل ACR الخاص بالعميل
  • تنزيل الصور من ACR الخاص بالعميل
  • حل DNS ل Azure BLOBs حيث يتم تخزين النموذج
  • تنزيل النماذج من Azure BLOBs

بعد نشر النموذج وبدء الخدمة، سيكتشفه azureml-fe تلقائيا باستخدام واجهة برمجة تطبيقات AKS وسيكون جاهزا لتوجيه الطلب إليه. يجب أن تكون قادرة على التواصل مع نموذج PODs.

ملاحظة

إذا كان النموذج المنشور يتطلب أي اتصال (على سبيل المثال الاستعلام عن قاعدة بيانات خارجية أو خدمة REST أخرى ، وتنزيل BLOB وما إلى ذلك) ، فيجب تمكين كل من دقة DNS والاتصالات الصادرة لهذه الخدمات.

النشر في AKS

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

ملاحظة

يقتصر عدد النماذج التي سيتم نشرها على 1000 نموذج لكل عملية نشر (لكل حاوية).

from azureml.core.webservice import AksWebservice, Webservice
from azureml.core.model import Model
from azureml.core.compute import AksCompute

aks_target = AksCompute(ws,"myaks")
# If deploying to a cluster configured for dev/test, ensure that it was created with enough
# cores and memory to handle this deployment configuration. Note that memory is also used by
# things such as dependencies and AML components.
deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config, aks_target)
service.wait_for_deployment(show_output = True)
print(service.state)
print(service.get_logs())

لمزيد من المعلومات حول الفئات والأساليب والمعلمات المستخدمة في هذا المثال، راجع المستندات المرجعية التالية:

التكلس التلقائي

المكون الذي يتعامل مع القياس التلقائي لعمليات نشر طراز Azure ML هو azureml-fe، وهو جهاز توجيه طلب ذكي. نظرا لأن جميع طلبات الاستدلال تمر عبرها ، فإنها تحتوي على البيانات اللازمة لتوسيع نطاق النموذج (النماذج) المنشورة تلقائيا.

هام

  • لا تقم بتمكين Kubernetes Horizontal Pod Autoscaler (HPA) لعمليات نشر الطراز. القيام بذلك من شأنه أن يتسبب في تنافس مكونين القياس التلقائي مع بعضهما البعض. تم تصميم Azureml-fe للقياس التلقائي للنماذج التي تم نشرها بواسطة Azure ML ، حيث سيتعين على HPA تخمين أو تقريب استخدام النموذج من مقياس عام مثل استخدام وحدة المعالجة المركزية أو تكوين مقياس مخصص.

  • لا يقوم Azureml-fe بقياس عدد العقد في مجموعة AKS، لأن هذا قد يؤدي إلى زيادات غير متوقعة في التكلفة. بدلا من ذلك ، فإنه يقيس عدد النسخ المتماثلة للنموذج داخل حدود الكتلة المادية . إذا كنت بحاجة إلى قياس عدد العقد داخل المجموعة، فيمكنك قياس الكتلة يدويا أو تكوين مقياس الكتلة التلقائي لنظام AKS.

يمكن التحكم في القياس التلقائي عن طريق الإعداد autoscale_target_utilization، autoscale_min_replicasولخدمة autoscale_max_replicas الويب AKS. يوضح المثال التالي كيفية تمكين القياس التلقائي:

aks_config = AksWebservice.deploy_configuration(autoscale_enabled=True, 
                                                autoscale_target_utilization=30,
                                                autoscale_min_replicas=1,
                                                autoscale_max_replicas=4)

وتستند قرارات الرفع والهبوط إلى استخدام النسخ المتماثلة الحالية للحاويات. عدد النسخ المتماثلة المشغولة (معالجة طلب) مقسوما على إجمالي عدد النسخ المتماثلة الحالية هو الاستخدام الحالي. إذا تجاوز هذا الرقم ، إنشاء المزيد من النسخ المتماثلة autoscale_target_utilization. إذا كان أقل ، تقليل النسخ المتماثلة. بشكل افتراضي ، يكون الاستخدام المستهدف هو 70٪.

قرارات إضافة النسخ المتماثلة حريصة وسريعة (حوالي 1 ثانية). قرارات إزالة النسخ المتماثلة متحفظة (حوالي 1 دقيقة).

يمكنك حساب النسخ المتماثلة المطلوبة باستخدام التعليمة البرمجية التالية:

from math import ceil
# target requests per second
targetRps = 20
# time to process the request (in seconds)
reqTime = 10
# Maximum requests per container
maxReqPerContainer = 1
# target_utilization. 70% in this example
targetUtilization = .7

concurrentRequests = targetRps * reqTime / targetUtilization

# Number of container replicas
replicas = ceil(concurrentRequests / maxReqPerContainer)

لمزيد من المعلومات حول الإعداد autoscale_target_utilization، و ، autoscale_max_replicasراجع autoscale_min_replicasمرجع الوحدة النمطية AksWebservice .

مصادقة خدمة الويب

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

لتعطيل المصادقة، قم بتعيين المعلمة auth_enabled=False عند إنشاء تكوين النشر. يقوم المثال التالي بتعطيل المصادقة باستخدام SDK:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, auth_enabled=False)

للحصول على معلومات حول المصادقة من تطبيق عميل، راجع نموذج استهلاك Azure التعلم الآلي الذي تم نشره كخدمة ويب.

المصادقة باستخدام المفاتيح

إذا تم تمكين مصادقة المفتاح، يمكنك استخدام الطريقة get_keys لاسترداد مفتاح مصادقة أساسي وثانوي:

primary, secondary = service.get_keys()
print(primary)

هام

إذا كنت بحاجة إلى إعادة إنشاء مفتاح، فاستخدم service.regen_key

المصادقة باستخدام الرموز المميزة

لتمكين مصادقة الرمز المميز، قم بتعيين المعلمة token_auth_enabled=True عند إنشاء عملية نشر أو تحديثها. يتيح المثال التالي مصادقة الرمز المميز باستخدام SDK:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, token_auth_enabled=True)

إذا تم تمكين مصادقة الرمز المميز، يمكنك استخدام get_token الطريقة لاسترداد رمز JWT المميز ووقت انتهاء صلاحية هذا الرمز المميز:

token, refresh_by = service.get_token()
print(token)

هام

ستحتاج إلى طلب رمز مميز جديد بعد وقت الرمز المميز refresh_by .

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

لاسترداد رمز مميز، يجب عليك استخدام Azure التعلم الآلي SDK أو الأمر az ml service get-access-token.

المسح الضوئي للثغرات الأمنية

يوفر Microsoft Defender في السحابة إدارة أمان موحدة وحماية متقدمة من التهديدات عبر أحمال العمل السحابية المختلطة. يجب أن تسمح ل Microsoft Defender for Cloud بفحص مواردك واتباع توصياتها. لمزيد من المعلومات، راجع تكامل خدمات Azure Kubernetes مع Defender for Cloud.

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