كيفية نشر نموذج R مسجل إلى نقطة نهاية عبر الإنترنت (في الوقت الحقيقي)
ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)
في هذه المقالة، ستتعلم كيفية نشر نموذج R إلى نقطة نهاية مدارة (Web API) بحيث يمكن لتطبيقك تسجيل بيانات جديدة مقابل النموذج في الوقت الفعلي تقريبا.
المتطلبات الأساسية
- مساحة عمل للتعلم الآلي من Microsoft Azure.
- تم تثبيت Azure CLI وملحق ml. أو استخدم مثيل حساب في مساحة العمل الخاصة بك، والتي تحتوي على CLI مثبت مسبقا.
- بيئة مخصصة واحدة على الأقل مقترنة بمساحة العمل الخاصة بك. إنشاء بيئة R أو أي بيئة مخصصة أخرى إذا لم يكن لديك بيئة.
- فهم حزمة R
plumber
- نموذج قمت بتدريبه وتعبئته باستخدام
crate
، وتسجيله في مساحة العمل الخاصة بك
إنشاء مجلد بهذه البنية
أنشئ بنية المجلد هذه لمشروعك:
📂 r-deploy-azureml
├─📂 docker-context
│ ├─ Dockerfile
│ └─ start_plumber.R
├─📂 src
│ └─ plumber.R
├─ deployment.yml
├─ endpoint.yml
يتم عرض محتويات كل ملف من هذه الملفات وشرحها في هذه المقالة.
Dockerfile
هذا هو الملف الذي يعرف بيئة الحاوية. ستحدد أيضا تثبيت أي حزم R إضافية هنا.
سيبدو نموذج Dockerfile كما يلي:
# REQUIRED: Begin with the latest R container with plumber
FROM rstudio/plumber:latest
# REQUIRED: Install carrier package to be able to use the crated model (whether from a training job
# or uploaded)
RUN R -e "install.packages('carrier', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# OPTIONAL: Install any additional R packages you may need for your model crate to run
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
RUN R -e "install.packages('<PACKAGE-NAME>', dependencies = TRUE, repos = 'https://cloud.r-project.org/')"
# REQUIRED
ENTRYPOINT []
COPY ./start_plumber.R /tmp/start_plumber.R
CMD ["Rscript", "/tmp/start_plumber.R"]
قم بتعديل الملف لإضافة الحزم التي تحتاجها للبرنامج النصي لتسجيل النقاط.
سباك. R
هام
يوضح هذا القسم كيفية هيكلة السباك. R script. للحصول على معلومات مفصلة حول الحزمة plumber
، راجع plumber
الوثائق .
سباك الملفات . R هو البرنامج النصي R حيث ستقوم بتعريف الدالة لتسجيل النقاط. يقوم هذا البرنامج النصي أيضا بتنفيذ المهام الضرورية لجعل نقطة النهاية تعمل. بيان النص:
- يحصل على المسار حيث يتم تحميل النموذج من
AZUREML_MODEL_DIR
متغير البيئة في الحاوية. - تحميل كائن نموذج تم إنشاؤه باستخدام الدالة
crate
من الحزمةcarrier
، والتي تم حفظها ك crate.bin عند حزمها. - إلغاء تسلسل كائن النموذج
- تعريف دالة تسجيل النقاط
تلميح
تأكد من أن أيا كانت وظيفة التسجيل التي تنتجها يمكن تحويلها مرة أخرى إلى JSON. لا يتم تحويل بعض كائنات R بسهولة.
# plumber.R
# This script will be deployed to a managed endpoint to do the model scoring
# REQUIRED
# When you deploy a model as an online endpoint, Azure Machine Learning mounts your model
# to your endpoint. Model mounting enables you to deploy new versions of the model without
# having to create a new Docker image.
model_dir <- Sys.getenv("AZUREML_MODEL_DIR")
# REQUIRED
# This reads the serialized model with its respecive predict/score method you
# registered. The loaded load_model object is a raw binary object.
load_model <- readRDS(paste0(model_dir, "/models/crate.bin"))
# REQUIRED
# You have to unserialize the load_model object to make it its function
scoring_function <- unserialize(load_model)
# REQUIRED
# << Readiness route vs. liveness route >>
# An HTTP server defines paths for both liveness and readiness. A liveness route is used to
# check whether the server is running. A readiness route is used to check whether the
# server's ready to do work. In machine learning inference, a server could respond 200 OK
# to a liveness request before loading a model. The server could respond 200 OK to a
# readiness request only after the model has been loaded into memory.
#* Liveness check
#* @get /live
function() {
"alive"
}
#* Readiness check
#* @get /ready
function() {
"ready"
}
# << The scoring function >>
# This is the function that is deployed as a web API that will score the model
# Make sure that whatever you are producing as a score can be converted
# to JSON to be sent back as the API response
# in the example here, forecast_horizon (the number of time units to forecast) is the input to scoring_function.
# the output is a tibble
# we are converting some of the output types so they work in JSON
#* @param forecast_horizon
#* @post /score
function(forecast_horizon) {
scoring_function(as.numeric(forecast_horizon)) |>
tibble::as_tibble() |>
dplyr::transmute(period = as.character(yr_wk),
dist = as.character(logmove),
forecast = .mean) |>
jsonlite::toJSON()
}
start_plumber. R
start_plumber الملف . R هو البرنامج النصي R الذي يتم تشغيله عند بدء تشغيل الحاوية، ويستدعي السباك الخاص بك . R script. استخدم البرنامج النصي التالي كما هو.
entry_script_path <- paste0(Sys.getenv('AML_APP_ROOT'),'/', Sys.getenv('AZUREML_ENTRY_SCRIPT'))
pr <- plumber::plumb(entry_script_path)
args <- list(host = '0.0.0.0', port = 8000);
if (packageVersion('plumber') >= '1.0.0') {
pr$setDocs(TRUE)
} else {
args$swagger <- TRUE
}
do.call(pr$run, args)
إنشاء حاوية
تفترض هذه الخطوات أن لديك Azure Container Registry مقترنا بمساحة العمل الخاصة بك، والتي يتم إنشاؤها عند إنشاء بيئتك المخصصة الأولى. لمعرفة ما إذا كانت لديك بيئة مخصصة:
- سجل الدخول إلى Azure Machine Learning Studio.
- حدد مساحة العمل إذا لزم الأمر.
- في جزء التنقل الأيمن، حدد Environments.
- في الجزء العلوي، حدد Custom environments.
- إذا رأيت بيئات مخصصة، فلا حاجة إلى المزيد.
- إذا لم تشاهد أي بيئات مخصصة، فبادر بإنشاء بيئة R أو أي بيئة مخصصة أخرى. (لن تستخدم هذه البيئة للنشر، ولكن ستستخدم سجل الحاوية الذي تم إنشاؤه أيضا لك.)
بمجرد التحقق من أن لديك بيئة مخصصة واحدة على الأقل، استخدم الخطوات التالية لإنشاء حاوية.
افتح نافذة طرفية وسجل الدخول إلى Azure. إذا كنت تقوم بذلك من مثيل حساب Azure التعلم الآلي، فاستخدم:
az login --identity
إذا لم تكن على مثيل الحساب، فاحذف
--identity
المطالبة واتبعها لفتح نافذة مستعرض للمصادقة.تأكد من أن لديك أحدث إصدارات CLI والملحق
ml
:az upgrade
إذا كان لديك اشتراكات Azure متعددة، فقم بتعيين الاشتراك النشط إلى الاشتراك الذي تستخدمه لمساحة العمل الخاصة بك. (يمكنك تخطي هذه الخطوة إذا كان لديك حق الوصول إلى اشتراك واحد فقط.) استبدل
<SUBSCRIPTION-NAME>
باسم اشتراكك. قم أيضا بإزالة الأقواس<>
.az account set --subscription "<SUBSCRIPTION-NAME>"
تعيين مساحة العمل الافتراضية. إذا كنت تقوم بذلك من مثيل حساب، يمكنك استخدام الأمر التالي كما هو. إذا كنت تستخدم أي كمبيوتر آخر، فاستبدل مجموعة الموارد واسم مساحة العمل بدلا من ذلك. (يمكنك العثور على هذه القيم في Azure التعلم الآلي studio.)
az configure --defaults group=$CI_RESOURCE_GROUP workspace=$CI_WORKSPACE
تأكد من أنك في دليل المشروع الخاص بك.
cd r-deploy-azureml
لإنشاء الصورة في السحابة، قم بتنفيذ أوامر bash التالية في المحطة الطرفية الخاصة بك. استبدل
<IMAGE-NAME>
بالاسم الذي تريد إعطاء الصورة.إذا كانت مساحة العمل الخاصة بك في شبكة ظاهرية، فشاهد تمكين Azure Container Registry (ACR) للحصول على خطوات إضافية لإضافتها
--image-build-compute
إلىaz acr build
الأمر في السطر الأخير من هذه التعليمة البرمجية.WORKSPACE=$(az config get --query "defaults[?name == 'workspace'].value" -o tsv) ACR_NAME=$(az ml workspace show -n $WORKSPACE --query container_registry -o tsv | cut -d'/' -f9-) IMAGE_TAG=${ACR_NAME}.azurecr.io/<IMAGE-NAME> az acr build ./docker-context -t $IMAGE_TAG -r $ACR_NAME
هام
سيستغرق إنشاء الصورة بضع دقائق. انتظر حتى تكتمل عملية الإنشاء قبل الانتقال إلى القسم التالي. لا تغلق هذه المحطة الطرفية، ستستخدمها بجوار لإنشاء النشر.
az acr
سيقوم الأمر تلقائيا بتحميل مجلد docker-context - الذي يحتوي على البيانات الاصطناعية لإنشاء الصورة - إلى السحابة حيث سيتم إنشاء الصورة واستضافتها في Azure Container Registry.
توزيع النموذج
في هذا القسم من المقالة، ستقوم بتعريف وإنشاء نقطة نهاية ونشر لنشر النموذج والصورة المضمنة في الخطوات السابقة إلى نقطة نهاية مدارة عبر الإنترنت.
نقطة النهاية هي نقطة نهاية HTTPS يمكن للعملاء - مثل التطبيق - استدعائها لتلقي إخراج تسجيل النقاط لنموذج مدرب. وهو يوفر:
- المصادقة باستخدام المصادقة المستندة إلى "المفتاح والرمز المميز"
- إنهاء SSL
- URI تسجيل ثابت (endpoint-name.region.inference.ml.Azure.com)
التوزيع هو مجموعة من الموارد المطلوبة لاستضافة النموذج الذي يقوم بتسجيل النقاط الفعلي. يمكن أن تحتوي نقطة النهاية الواحدةعلى عمليات نشر متعددة. تتيح لك قدرات موازنة التحميل في Azure التعلم الآلي نقاط النهاية المدارة إعطاء أي نسبة مئوية من نسبة استخدام الشبكة لكل عملية نشر. يمكن استخدام تخصيص نسبة استخدام الشبكة لإجراء عمليات توزيع آمنة باللون الأزرق/الأخضر من خلال موازنة الطلبات بين مثيلات مختلفة.
إنشاء نقطة نهاية مدارة عبر الإنترنت
في دليل المشروع، أضف ملف endpoint.yml مع التعليمات البرمجية التالية. استبدل
<ENDPOINT-NAME>
بالاسم الذي تريد منحه نقطة النهاية المدارة.$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: <ENDPOINT-NAME> auth_mode: aml_token
باستخدام نفس المحطة الطرفية حيث قمت بإنشاء الصورة، قم بتنفيذ أمر CLI التالي لإنشاء نقطة نهاية:
az ml online-endpoint create -f endpoint.yml
اترك المحطة الطرفية مفتوحة لمتابعة استخدامها في القسم التالي.
قم بإنشاء توزيع
لإنشاء النشر الخاص بك، أضف التعليمات البرمجية التالية إلى ملف deployment.yml .
استبدل
<ENDPOINT-NAME>
باسم نقطة النهاية الذي قمت بتعريفه في ملف endpoint.ymlاستبدل
<DEPLOYMENT-NAME>
بالاسم الذي تريد منحه النشراستبدل
<MODEL-URI>
ب URI الخاص بالنموذج المسجل في شكلazureml:modelname@latest
استبدل
<IMAGE-TAG>
بالقيمة من:echo $IMAGE_TAG
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: <DEPLOYMENT-NAME> endpoint_name: <ENDPOINT-NAME> code_configuration: code: ./src scoring_script: plumber.R model: <MODEL-URI> environment: image: <IMAGE-TAG> inference_config: liveness_route: port: 8000 path: /live readiness_route: port: 8000 path: /ready scoring_route: port: 8000 path: /score instance_type: Standard_DS2_v2 instance_count: 1
بعد ذلك، في المحطة الطرفية الخاصة بك قم بتنفيذ أمر CLI التالي لإنشاء النشر (لاحظ أنك تقوم بتعيين 100٪ من نسبة استخدام الشبكة إلى هذا النموذج):
az ml online-deployment create -f deployment.yml --all-traffic --skip-script-validation
إشعار
قد يستغرق نشر الخدمة عدة دقائق. انتظر حتى يتم الانتهاء من النشر قبل المتابعة إلى القسم التالي.
اختبار
بمجرد إنشاء النشر بنجاح، يمكنك اختبار نقطة النهاية باستخدام studio أو CLI:
انتقل إلى Azure التعلم الآلي studio وحدد من نقاط النهاية القائمة اليسرى. بعد ذلك، حدد r-endpoint-iris الذي أنشأته سابقا.
أدخل json التالي في مربع نص Input data to rest real-time endpoint :
{
"forecast_horizon" : [2]
}
حدد اختبار. ينبغي أن تشاهد المخرج التالي:
تنظيف الموارد
الآن بعد أن نجحت في تسجيل النقاط باستخدام نقطة النهاية الخاصة بك، يمكنك حذفها حتى لا تتحمل تكلفة مستمرة:
az ml online-endpoint delete --name r-endpoint-forecast
الخطوات التالية
لمزيد من المعلومات حول استخدام R مع Azure التعلم الآلي، راجع نظرة عامة على قدرات R في Azure التعلم الآلي