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