نشر نموذج إلى مجموعة خدمة Azure Kubernetes باستخدام v1

هام

توضح هذه المقالة كيفية استخدام Azure التعلم الآلي CLI (v1) وAzure التعلم الآلي SDK ل Python (v1) لنشر نموذج. للحصول على النهج الموصى به للإصدار 2، راجع Deploy and score a machine learning model by using an online endpoint.

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

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

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

هام

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

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

إشعار

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

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

  • مساحة عمل للتعلم الآلي من Microsoft Azure. لمزيد من المعلومات، راجع إنشاء مساحة عمل التعلم الآلي من Azure.

  • نموذج التعلم الآلي المسجل في مساحة عملك. إذا لم يكن لديك نموذج مسجل، فشاهد نشر نماذج التعلم الآلي إلى Azure.

  • ملحق Azure CLI (الإصدار 1) لخدمة التعلم الآلي أو Azure Machine Learning Python SDK أو ملحق Azure Machine Learning Visual Studio Code.

    هام

    تتطلب أوامر Azure CLI الواردة في هذه المقالة ملحق azure-cli-ml، أو الإصدار 1، التعلم الآلي من Microsoft Azure. سينتهي دعم ملحق الإصدار 1 في 30 سبتمبر 2025. ستتمكن من تثبيت ملحق v1 واستخدامه حتى ذلك التاريخ.

    نوصي بالانتقال إلى ملحق ml أو الإصدار 2 قبل 30 سبتمبر 2025. لمزيد من المعلومات حول ملحق v2، راجع ملحق Azure ML CLI وPython SDK v2.

  • تفترض القصاصة البرمجية Python في هذه المقالة أنه تم تعيين المتغيرات التالية:

    • ws - معينة إلى مساحة العمل الخاصة بك.
    • model - معينة إلى نموذجك المسجل.
    • inference_config - معينة إلى تكوين الاستدلال للنموذج.

    لمزيد من المعلومات حول تعيين هذه المتغيرات، راجع How and where to deploy models.

  • تفترض قصاصات CLI في هذه المقالة أنك قمت بالفعل بإنشاء مستند inferenceconfig.json . لمزيد من المعلومات حول إنشاء هذا المستند، راجع نشر نماذج التعلم الآلي إلى Azure.

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

    • إذا كنت ترغب في نشر نماذج إلى عقد GPU أو عقد FPGA (أو أي منتج معين)، فيجب عليك إنشاء نظام مجموعة مع المنتج المحدد. لا يوجد دعم لإنشاء تجمع عقدة ثانوي في نظام مجموعة موجود وتوزيع النماذج في تجمع العقدة الثانوي.

فهم عمليات التوزيع

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

في Azure التعلم الآلي، يتم استخدام النشر بالمعنى الأكثر عمومية لإتاحة موارد المشروع وتنظيفها. الخطوات التي يعتبرها التعلم الآلي من Microsoft Azure جزءاً من النشر هي:

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

موجه التعلم الآلي Azure

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

هام

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

إشعار

الحد الأقصى لحمولة الطلب هو 100 ميغابايت.

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

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

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

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

عندما يقوم Azure التعلم الآلي بإنشاء أو إرفاق نظام مجموعة AKS، يتم نشر نظام مجموعة AKS بأحد نموذجي الشبكة التاليين:

  • شبكة Kubenet: عادة ما يتم إنشاء موارد الشبكة وتكوينها عند نشر نظام مجموعة AKS.
  • شبكة Azure Container Networking Interface (CNI): شبكة نظام مجموعة AKS متصلة بمورد وتكوينات شبكة ظاهرية موجودة.

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

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

Diagram that shows connectivity requirements for AKS inferencing.

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

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

متطلبات دقة DNS الإجمالية

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

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

الاتصال المتطلبات بالترتيب الزمني

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

  • حل DNS لخادم واجهة برمجة تطبيقات AKS
  • حل DNS ل MCR لتنزيل صور docker لموجه Azure التعلم الآلي
  • تنزيل الصور من MCR، حيث يلزم الاتصال الصادر

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

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

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

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

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

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

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

إشعار

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

التوزيع إلى AKS

لنشر نموذج إلى AKS، قم بإنشاء تكوين توزيع يصف موارد الحوسبة المطلوبة. على سبيل المثال، عدد الذاكرات الأساسية والذاكرة. تحتاج أيضاً إلى تكوين الاستدلال، الذي يصف البيئة اللازمة لاستضافة النموذج وخدمة الويب. لمزيد من المعلومات حول إنشاء تكوين الاستدلال، راجع How and where to deploy models.

إشعار

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

ينطبق على:Python SDK azureml v1

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())

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

التحجيم التلقائي

ينطبق على:Python SDK azureml v1

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

هام

  • لا تقم بتمكين Kubernetes Horizontal Pod Autoscaler (HPA) لنشر النموذج. يؤدي القيام بذلك إلى تنافس مكوني التحجيم التلقائي مع بعضهما البعض. تم تصميم Azureml-fe للتحجيم التلقائي للنماذج التي تم نشرها بواسطة Azure التعلم الآلي، حيث سيتعين على 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%.

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

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

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، يتم تمكين المصادقة المستندة إلى المفتاح بشكل افتراضي. يمكنك أيضاً تمكين المصادقة المستندة إلى الرمز المميز. تتطلب المصادقة المستندة إلى الرمز المميز من العملاء استخدام حساب Microsoft Entra لطلب رمز مصادقة مميز، والذي يستخدم لتقديم طلبات إلى الخدمة المنشورة.

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

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

للحصول على معلومات حول المصادقة من تطبيق عميل، راجع استخدام نموذج التعلم الآلي من Microsoft 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 التعلم الآلي في نفس المنطقة مثل نظام مجموعة AKS. للمصادقة باستخدام رمز مميز، تقوم خدمة الويب بإجراء استدعاء للمنطقة التي يتم فيها إنشاء مساحة عمل Azure التعلم الآلي. إذا كانت منطقة مساحة العمل الخاصة بك غير متوفرة، فلا يمكنك إحضار رمز مميز لخدمة الويب الخاصة بك حتى، إذا كانت مجموعتك في منطقة مختلفة عن مساحة العمل الخاصة بك. يؤدي هذا بشكل فعال إلى عدم توفر المصادقة المستندة إلى الرمز المميز حتى تتوفر منطقة مساحة العمل مرة أخرى. بالإضافة إلى ذلك، كلما كانت المسافة بين منطقة نظام المجموعة الخاصة بك ومنطقة مساحة العمل الخاصة بك أكبر، كلما استغرق الأمر وقتا أطول لجلب رمز مميز.

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

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

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