توزيع النماذج باستخدام REST
تعلم كيفية استخدام واجهة برمجة تطبيقات REST للتعلم الآلي من Microsoft Azure لنشر النماذج.
تقوم واجهة برمجة تطبيقات REST باستخدام أفعال HTTP القياسية لإنشاء الموارد واستردادها وتحديثها وحذفها. كما تعمل واجهة برمجة تطبيقات REST مع أي لغة أو أداة بإمكانها تقديم طلبات HTTP. بنية REST المباشرة تجعل منها خيارًا جيدًا في بيئات البرمجة النصية وأتمتة MLOps.
وفي هذه المقالة، ستتعرّف على كيفية استخدام واجهات برمجة تطبيقات REST الجديدة من أجل:
- إنشاء أصول للتعلم الآلي
- إنشاء مهمة أساسية للتدريب
- إنشاء مهمة مسح لضبط المعلّمات الفائقة
المتطلبات الأساسية
- اشتراك Azure الذي تمتلك حقوق إدارته. في حال عدم امتلاك مثل هذا الاشتراك، فجرب الاشتراك الشخصي المجاني أو المدفوع.
- مساحة عمل للتعلم الآلي من Microsoft Azure.
- كيان الخدمة في مساحة عملك. تستخدم طلبات REST الإدارية مصادقة كيان الخدمة.
- رمز مصادقة مميز لكيان الخدمة. اتبع الخطوات الواردة في استرداد رمز مصادقة كيان الخدمة المميز لاسترداد هذا الرمز المميز.
- أداة curl المساعدة. يتاح برنامج curl في نظام Windows الفرعي لـ Linux أو أي توزيع UNIX. في PowerShell، curl هو اسم مستعار لـ Invoke-WebRequest و
curl -d "key=val" -X POST uri
يصبحInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.
تعيين اسم نقطة النهاية
إشعار
ينبغي أن تكون أسماء نقاط النهاية مميزة على مستوى منطقة Azure. على سبيل المثال، يمكن أن تكون هناك نقطة نهاية واحدة فقط باسم my-endpoint في westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
نقاط نهاية التعلم الآلي من Microsoft Azure عبر الإنترنت
تسمح لك نقاط النهاية عبر الإنترنت بنشر النموذج الخاص بك دون الحاجة إلى إنشاء وإدارة البنية الأساسية بالإضافة إلى مجموعات Kubernetes. في هذه المقالة، ستقوم بإنشاء نقطة نهاية ونشر عبر الإنترنت، والتأكد من صحتها عن طريق استدعائها. ولكن أولا سيتعين عليك تسجيل الأصول اللازمة للتوزيع، بما في ذلك النموذج والتعليمة برمجية والبيئة.
هناك العديد من الطرق لإنشاء نقطة نهاية Azure التعلم الآلي عبر الإنترنت بما في ذلك Azure CLI، وبشكل مرئي مع الاستوديو. المثال التالي يمثل نقطة نهاية عبر الإنترنت مع واجهة برمجة التطبيقات REST.
إنشاء أصول للتعلم الآلي
أولًا، قم بإعداد أصول التعلم الآلي من Microsoft Azure لتكوين المهمة.
في استدعاءات واجهة برمجة تطبيقات REST التالية، نستخدم SUBSCRIPTION_ID
وRESOURCE_GROUP
وLOCATION
وWORKSPACE
كعناصر نائبة. استبدل العناصر النائبة بقيمتك الخاصة.
وتستخدم طلبات REST الإدارية رمز مصادقة مميز لكيان الخدمة. استبدل TOKEN
بقيمك الخاصة. بإمكانك استرداد هذا الرمز المميز باستخدام الأمر الآتي:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
يستخدم موفر الخدمة الوسيطة api-version
للتأكد من التوافق. تختلف الوسيطة api-version
من خدمة إلى أخرى. قم بتعيين إصدار API كمُتغير للتوافق مع الإصدارات المستقبلية:
API_VERSION="2022-05-01"
احصل على التفاصيل الخاصة بحساب التخزين
لتسجيل النموذج والتعليمات البرمجية، يجب أولاً أن يتم تحميلهما إلى حساب تخزين. تتوفر تفاصيل حساب التخزين في مخزن البيانات. في هذا المثال، بإمكانك الحصول على مخزن البيانات الافتراضي وحساب Azure Storage لمساحة عملك. استعلم عن مساحة عملك مع طلب GET للحصول على ملف JSON بالمعلومات.
بإمكانك استخدام أداة jq لتوزيع نتيجة JSON والحصول على القيم المطلوبة. يمكنك أيضاً استخدام مدخل Microsoft Azure للبحث عن نفس المعلومات:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
تحميل التعليمات البرمجية وتسجيلها
الآن بعد أن أصبح لديك مخزن البيانات، يمكنك تحميل البرنامج النصي للتسجيل. استخدم Azure Storage CLI لتحميل كائن ثنائي كبير الحجم إلى حاويتك الافتراضية:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
تلميح
يمكنك أيضاً استخدام أساليب أخرى للتحميل، مثل مدخل Microsoft Azure أو Azure Storage Explorer.
وبمجرد تحميل التعليمة البرمجية، يمكنك تحديد التعليمة البرمجية باستخدام طلب PUT والإشارة إلى مخزن البيانات من خلال datastoreId
:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score\"
}
}"
تحميل نموذج وتسجيلها
على غرار التعليمات البرمجية، قم بتحميل ملفات النموذج:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
والآن، قم بتسجيل النموذج:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelUri\":\"azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model\"
}
}"
إنشاء بيئة
يحتاج التوزيع إلى أن يتم تشغيله في بيئة تحتوي على التبعيات المطلوبة. قم بإنشاء البيئة باستخدام طلب PUT. قم باستخدام صورة docker من Microsoft Container Registry. بإمكانك تكوين صورة docker باستخدام Docker
وإضافة تبعيات conda باستخدام condaFile
.
في القصاصة البرمجية الآتية، تمت قراءة محتويات بيئة Conda (ملف YAML) في متغير بيئي:
ENV_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\":{
\"condaFile\": \"$CONDA_FILE\",
\"image\": \"mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1\"
}
}"
قم بإنشاء نقطة نهاية
قم بإنشاء نقطة النهاية عبر الإنترنت:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"identity\": {
\"type\": \"systemAssigned\"
},
\"properties\": {
\"authMode\": \"AMLToken\"
},
\"location\": \"$LOCATION\"
}")
قم بإنشاء توزيع
قم بإنشاء توزيع تحت نقطة النهاية:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"location\": \"$LOCATION\",
\"sku\": {
\"capacity\": 1,
\"name\": \"Standard_DS2_v2\"
},
\"properties\": {
\"endpointComputeType\": \"Managed\",
\"scaleSettings\": {
\"scaleType\": \"Default\"
},
\"model\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1\",
\"codeConfiguration\": {
\"codeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1\",
\"scoringScript\": \"score.py\"
},
\"environmentId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION\"
}
}")
استدعي نقطة النهاية لتسجيل البيانات باستخدام نموذجك
نحتاج إلى معرف موارد منتظم للتسجيل والرمز المميز للوصول لاستدعاء نقطة النهاية. أولا احصل على معرف موارد منتظم للتسجيل:
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN")
scoringUri=$(echo $response | jq -r '.properties.scoringUri')
احصل على الرمز المميز للوصول لنقطة النهاية:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
والآن، قم باستدعاء نقطة النهاية باستخدام curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
افحص السجلات
افحص سجلات النشر:
curl --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue/getLogs?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{ \"tail\": 100 }"
احذف نقطة النهاية
إذا كنت لن تستخدم النشر، فيجب عليك حذفه بالأمر أدناه (يحذف نقطة النهاية وجميع عمليات النشر التي تستند عليها):
curl --location --request DELETE "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" || true
الخطوات التالية
- تعلم كيفية نشر نموذجك باستخدام Azure CLI.
- تعلم كيفية نشر نموذجك باستخدام studio.
- تعرف علىكيفية استكشاف أخطاء نشر نقاط النهاية عبر الإنترنت والتسجيل وإصلاحها
- تعلم كيفية الوصول إلى موارد Azure بنقطة نهاية عبر الإنترنت وهوية مُدارة
- تعلم كيفية مراقبة نقاط النهاية عبر الإنترنت.
- تعلم الطرح الآمن لنقاط نهاية عبر الإنترنت.
- اعرض تكاليف نقطة نهاية عبر الإنترنت مُدارة من التعلم الآلي من Microsoft Azure.
- قائمة SKU لنقاط نهاية مُدارة عبر الإنترنت.
- تعرف على حدود نقاط النهاية عبر الإنترنت.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ