استخدام حاوية مخصصة لنشر نموذج إلى نقطة نهاية عبر الإنترنت

ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)

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

يمكن أن تستخدم عمليات نشر الحاوية المخصصة خوادم الويب بخلاف خادم Python Flask الافتراضي المستخدم من قبل التعلم الآلي من Microsoft Azure. لا يزال بإمكان مستخدمي عمليات النشر هذه الاستفادة من المراقبة والتحجيم والتنبيه والمصادقة المضمنة في التعلم الآلي من Microsoft Azure.

يسرد الجدول التالي أمثلة توزيع مختلفة تستخدم حاويات مخصصة مثل TensorFlow Serving وS torchServe و Triton Inference Server وحزمة سباك R وصورة Azure التعلم الآلي Inference Minimal.

مثال البرنامج النصي (CLI) ‏‏الوصف
الحد الأدنى/متعدد النماذج deploy-custom-container-minimal-multimodel انشر نماذج متعددة إلى نشر واحد عن طريق توسيع صورة Azure التعلم الآلي Inference Minimal.
الحد الأدنى/نموذج واحد deploy-custom-container-minimal-single-model نشر نموذج واحد عن طريق توسيع صورة Azure التعلم الآلي Inference Minimal.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit توزيع نموذجين MLFlow بمتطلبات Python مختلفة إلى توزيعين منفصلين خلف نقطة نهاية واحدة باستخدام Azure التعلم الآلي Inference Minimal Image.
r/multimodel-السباك deploy-custom-container-r-multimodel-plumber توزيع ثلاثة نماذج انحدار إلى نقطة نهاية واحدة باستخدام حزمة سباك R
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two انشر نموذج Half Plus Two باستخدام حاوية مخصصة TensorFlow Serving باستخدام عملية تسجيل النموذج القياسي.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated انشر نموذج Half Plus Two باستخدام حاوية مخصصة TensorFlow Serving مع النموذج المدمج في الصورة.
torchserve/densenet deploy-custom-container-torchserve-densenet نشر نموذج واحد باستخدام حاوية مخصصة TorchServe.
torchserve/huggingface-textgen deploy-custom-container-torchserve-huggingface-textgen انشر نماذج Hugging Face إلى نقطة نهاية عبر الإنترنت واتبعها مع مثال Hugging Face Transformers TorchServe.
triton/single-model deploy-custom-container-triton-single-model نشر نموذج Triton باستخدام حاوية مخصصة

تركز هذه المقالة على تقديم نموذج TensorFlow مع خدمة TensorFlow (TF).

تحذير

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

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

قبل اتباع الخطوات الواردة في هذه المقالة، تأكد من توفر المتطلبات الأساسية التالية لديك:

  • مساحة عمل للتعلم الآلي من Microsoft Azure. إذا لم يكن لديك واحدة، فاستخدم الخطوات الواردة في مقالة التشغيل السريع: إنشاء موارد مساحة العمل لإنشاء واحدة.

  • Azure CLI والملحق mlأو Azure التعلم الآلي Python SDK v2:

    • لتثبيت Azure CLI والملحق، راجع تثبيت CLI (v2) وإعداده واستخدامه.

      هام

      تفترض أمثلة CLI في هذه المقالة أنك تستخدم Bash (أو متوافق). على سبيل المثال، من النظام الخاص بـ Linux أو نظام Windows الفرعي لـ Linux‬.

    • لتثبيت Python SDK v2، استخدم الأمر التالي:

      pip install azure-ai-ml azure-identity
      

      لتحديث تثبيت موجود من SDK إلى أحدث إصدار، استخدم الأمر التالي:

      pip install --upgrade azure-ai-ml azure-identity
      

      لمزيد من المعلومات، راجع تثبيت Python SDK v2 ل Azure التعلم الآلي.

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

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

تنزيل تعليمة برمجية المصدر

لمتابعة هذا البرنامج التعليمي، استنسخ التعليمات البرمجية المصدر من GitHub.

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

هيّئ بعض متغيرات البيئة

تعريف متغيرات البيئة:

BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1

تنزيل نموذج TensorFlow

نزّل وفك ضغط نموذج يقسم إدخالًا على اثنين ويضيف 2 إلى النتيجة:

wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH

شغّل صورة خدمة TF محليًا لاختبار أنها تعمل

استخدم docker لتشغيل صورتك محليًا للاختبار:

docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
 -e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
 --name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10

تحقق من إمكانية إرسال طلبات الحياة وتسجيل النقاط إلى الصورة

أولا، تحقق من أن الحاوية على قيد الحياة، ما يعني أن العملية داخل الحاوية لا تزال قيد التشغيل. ستحصل هذه المرة على الاستجابة 200 (موافق).

curl -v http://localhost:8501/v1/models/$MODEL_NAME

وبعد ذلك، تحقق من أنه يمكنك الحصول على تنبؤات حول البيانات غير المسماة:

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

أوقف الصورة

الآن بعد أن اختبرت محليا، أوقف الصورة:

docker stop tfserving-test

قم بتوزيع نقطة النهاية عبر الإنترنت على Azure

بعد ذلك، قم بتوزيع نقطة النهاية عبر الإنترنت إلى Azure.

أنشئ ملف YAML لنقطة النهاية والنشر

بإمكانك تكوين توزيع السحابة باستخدام YAML. ألقِ نظرة على نموذج YAML لهذا المثال:

tfserving-endpoint.yml

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

tfserving-deployment.yml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: {{MODEL_VERSION}}
  path: ./half_plus_two
environment_variables:
  MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/{{MODEL_VERSION}}
  MODEL_NAME: half_plus_two
environment:
  #name: tfserving
  #version: 1
  image: docker.io/tensorflow/serving:latest
  inference_config:
    liveness_route:
      port: 8501
      path: /v1/models/half_plus_two
    readiness_route:
      port: 8501
      path: /v1/models/half_plus_two
    scoring_route:
      port: 8501
      path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1

توجد بعض المفاهيم المهمة التي يجب ملاحظتها في معلمة YAML/Python هذه:

مسار الاستعداد مقابل مسار الحياة

يُحدِد خادم HTTP مسارات لكل من الحياة والاستعداد. يُستخدم مسار الحياة للتحقق مما إذا كان الخادم قيد التشغيل. يتم استخدام مسار الاستعداد للتحقق ما إذا كان الخادم جاهزًا للقيام بالعمل. في استدلال التعلم الآلي، يُمكن للخادم الاستجابة 200 «موافق» لطلب فعالية قبل تحميل نموذج. يمكن أن يستجيب الخادم 200 موافق لطلب الاستعداد فقط بعد تحميل النموذج في الذاكرة.

لمزيد من المعلومات حول تحقيقات الحياة والاستعداد، راجع وثائق Kubernetes.

لاحظ أن هذا النشر يستخدم نفس المسار لكل من الحياة والاستعداد، نظرًا لأن خدمة TF تحدد مسار الحياة فقط.

تحديد موقع النموذج المثبت

عند نشر نموذج كنقطة نهاية عبر الإنترنت، يقوم التعلم الآلي من Microsoft Azure بإدخال النموذج الخاص بك إلى نقطة النهاية الخاصة بك. يسمح لك تحميل النموذج بنشر إصدارات جديدة من النموذج دون الحاجة إلى إنشاء صورة Docker جديدة. بشكل افتراضي، سيكون النموذج المسجل باسم foo والإصدار 1 موجودا في المسار التالي داخل الحاوية المنشورة: /var/azureml-app/azureml-models/foo/1

على سبيل المثال، إذا كان لديك بنية دليل من /azureml-examples/cli/endpoints/online/custom-container على جهازك المحلي، حيث تتم تسمية النموذج half_plus_two:

رسم تخطيطي يوضح عرض شجرة لهيكل الدليل المحلي.

ويحتوي tfserving-deployment.yml على:

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

ثم سيكون النموذج الخاص بك ضمن /var/azureml-app/azureml-models/tfserving-deployment/1 في النشر الخاص بك:

رسم تخطيطي يوضح عرض الشجرة لهيكل دليل التوزيع.

يمكنك اختياريا تكوين model_mount_path. يتيح لك تغيير المسار حيث يتم تحميل النموذج.

هام

model_mount_path يجب أن يكون مسارًا مطلقا صالحًا في Linux (نظام التشغيل لصورة الحاوية).

على سبيل المثال، يمكنك الحصول على model_mount_pathمعلمة في tfserving-deployment.yml الخاص بك:

name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: 1
  path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
.....

ثم يقع النموذج الخاص بك في /var/tfserving-model-mount/tfserving-deployment/1 في التوزيع الخاص بك. لاحظ أنه لم يعد ضمن azureml-app/azureml-models، ولكن ضمن مسار التحميل الذي حددته:

رسم تخطيطي يوضح عرض الشجرة لهيكل دليل التوزيع عند استخدام mount_model_path.

إنشاء نقطة النهاية والنشر

الآن بعد أن فهمت كيفية إنشاء YAML، قم بإنشاء نقطة النهاية الخاصة بك.

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml

قد يستغرق إنشاء عملية نشر بضع دقائق.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic

استدع نقطة النهاية

بمجرد اكتمال النشر، تحقق ما إذا كان يمكنك تقديم طلب تسجيل نقاط إلى نقطة النهاية المنشورة.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

احذف نقطة النهاية

الآن بعد أن نجحت في تسجيل النقاط باستخدام نقطة النهاية الخاصة بك، يمكنك حذفها:

az ml online-endpoint delete --name tfserving-endpoint