الإرساء خدمات الويب في R و Python

مرحبا يا هبر! الحاوية هي نهج لتطوير البرامج يتم فيه تجميع التطبيق أو الخدمة وتبعياتها وتكوينها (ملفات بيان النشر المجردة) معًا في صورة حاوية. في هذه المقالة ، سننظر في إنشاء صورة عامل ميناء واستخدامها لتشغيل R و Python shell والمزيد. انضم الآن!



يمكن اختبار تطبيق حاويات كوحدة نمطية ونشره كمثيل حاوية في نظام التشغيل (OS) للعقدة الحالية. Docker هو مشروع مفتوح المصدر لأتمتة نشر التطبيقات في شكل حاويات محمولة ومكتفية ذاتيًا يمكن أن تعمل في السحابة أو في أماكن العمل. انظر هنا لمزيد من المعلومات.

يعد Microsoft Machine Learning Server نظامًا مؤسسيًا مرنًا لتحليل البيانات القابلة للتطوير وإنشاء تطبيقات ذكية والعثور على معلومات قيمة للأعمال مع دعم كامل لـ Python و R. يعني مصطلح " التشغيل " نشر النماذج والتعليمات البرمجية بلغات R و Python على Microsoft Machine Learning Server في شكل خدمات ويب والاستخدام اللاحق لهذه الخدمات في تطبيقات العميل لتحسين كفاءة الشركة.

في هذه المقالة ، سنلقي نظرة على كيفية إنشاء صورة عامل إرساء تحتوي على Machine Learning Server 9.3 باستخدام ملفات Docker ، وكيفية استخدامها لإجراء العمليات التالية:

  1. تشغيل قذيفة R.
  2. بدء تشغيل قذيفة Python.
  3. قم بتشغيل Jupyter Notebook.
  4. شغّل تهيئة OneBox.
  5. بدء خدمة الويب ر.
  6. بدء خدمة ويب Python.

المكونات المطلوبة


أي جهاز Linux افتراضي مثبت عليه برنامج إصدار مجتمع عامل الميناء (CE). في إعداد هذه المقالة ، قمت بنشر Ubuntu 16.04 VM وتثبيت docker CE .

الخطوة الأولى


أولاً ، سنقوم بإنشاء صورة تسمى mlserver مع تثبيت Machine Learning Server 9.3 باستخدام ملف عامل إرساء التالي:

FROM ubuntu:16.04 RUN apt-get -y update \ && apt-get install -y apt-transport-https wget \ && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ xenial main" | tee /etc/apt/sources.list.d/azure-cli.list \ && wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O /tmp/prod.deb \ && dpkg -i /tmp/prod.deb \ && rm -f /tmp/prod.deb \ && apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893 \ && apt-get -y update \ && apt-get install -y microsoft-r-open-foreachiterators-3.4.3 \ && apt-get install -y microsoft-r-open-mkl-3.4.3 \ && apt-get install -y microsoft-r-open-mro-3.4.3 \ && apt-get install -y microsoft-mlserver-packages-r-9.3.0 \ && apt-get install -y microsoft-mlserver-python-9.3.0 \ && apt-get install -y microsoft-mlserver-packages-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-py-9.3.0 \ && apt-get install -y azure-cli=2.0.26-1~xenial \ && apt-get install -y dotnet-runtime-2.0.0 \ && apt-get install -y microsoft-mlserver-adminutil-9.3.0 \ && apt-get install -y microsoft-mlserver-config-rserve-9.3.0 \ && apt-get install -y microsoft-mlserver-computenode-9.3.0 \ && apt-get install -y microsoft-mlserver-webnode-9.3.0 \ && apt-get clean \ && /opt/microsoft/mlserver/9.3.0/bin/R/activate.sh 

استخدم الأمر docker build لإنشاء صورة mlserver باستخدام ملف docker أعلاه:

 docker build -f mlserver-dockerfile -t mlserver. 

تحقق من اكتمال إنشاء صورة mlserver بنجاح عن طريق تشغيل الأمر التالي:

 docker images 

R Shell Launch


 docker run -it mlserver R 



إطلاق قذيفة بايثون


 docker run -it mlserver mlserver-python 



قم بتشغيل Jupyter Notebook


 docker run -p 8888:8888 -it mlserver /opt/microsoft/mlserver/9.3.0/runtime/python/bin/jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 --allow-root 

يؤدي تشغيل الأمر أعلاه إلى إعطاء رابط من خلال فتحه في متصفح ، يمكنك استخدام Jupyter Notebooks.



شغِّل تهيئة OneBox


يمكن تكوين Microsoft Learning Server بعد التثبيت لاستخدامه كخادم نشر واستضافة خدمات الويب التحليلية للتشغيل .

  FROM ubuntu:16.04 RUN apt-get -y update \ && apt-get install -y apt-transport-https wget \ && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ xenial main" | tee /etc/apt/sources.list.d/azure-cli.list \ && wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O /tmp/prod.deb \ && dpkg -i /tmp/prod.deb \ && rm -f /tmp/prod.deb \ && apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893 \ && apt-get -y update \ && apt-get install -y microsoft-r-open-foreachiterators-3.4.3 \ && apt-get install -y microsoft-r-open-mkl-3.4.3 \ && apt-get install -y microsoft-r-open-mro-3.4.3 \ && apt-get install -y microsoft-mlserver-packages-r-9.3.0 \ && apt-get install -y microsoft-mlserver-python-9.3.0 \ && apt-get install -y microsoft-mlserver-packages-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-py-9.3.0 \ && apt-get install -y azure-cli=2.0.26-1~xenial \ && apt-get install -y dotnet-runtime-2.0.0 \ && apt-get install -y microsoft-mlserver-adminutil-9.3.0 \ && apt-get install -y microsoft-mlserver-config-rserve-9.3.0 \ && apt-get install -y microsoft-mlserver-computenode-9.3.0 \ && apt-get install -y microsoft-mlserver-webnode-9.3.0 \ && apt-get clean \ && /opt/microsoft/mlserver/9.3.0/bin/R/activate.sh RUN echo $'#!/bin/bash \n\ set -e \n\ az ml admin bootstrap --admin-password "Microsoft@2018" --confirm-password "Microsoft@2018" \n\ exec "$@"' > bootstrap.sh RUN chmod +x bootstrap.sh EXPOSE 12800 ENTRYPOINT ["/bootstrap.sh"] CMD ["bash"] 

قم بإنشاء صورة mlserver-onebox باستخدام ملف docker أعلاه:

 docker build -f mlserver-onebox-dockerfile -t mlserver-onebox. 

تحقق من اكتمال إنشاء صورة mlserver-onebox بنجاح عن طريق تشغيل الأمر التالي:

 docker images 

قم بتشغيل حاوية onebox باستخدام الأمر:

 docker run --name mlserver-onebox-container -dit mlserver-onebox 

تحقق من حالة الحاوية مع:

 docker logs mlserver-onebox-container 

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

احصل على عنوان IP الخاص بالحاوية عن طريق تشغيل الأمر:

 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mlserver-onebox-container '172.17.0.3' 

واستخدامها كمربع واحد:

 az login --mls --mls-endpoint "http://172.17.0.3:12800" --username "admin" --password "Microsoft@2018" az ml admin diagnostic run 

بدء خدمة الويب R


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

  FROM ubuntu:16.04 RUN apt-get -y update \ && apt-get install -y apt-transport-https wget \ && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ xenial main" | tee /etc/apt/sources.list.d/azure-cli.list \ && wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O /tmp/prod.deb \ && dpkg -i /tmp/prod.deb \ && rm -f /tmp/prod.deb \ && apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893 \ && apt-get -y update \ && apt-get install -y microsoft-r-open-foreachiterators-3.4.3 \ && apt-get install -y microsoft-r-open-mkl-3.4.3 \ && apt-get install -y microsoft-r-open-mro-3.4.3 \ && apt-get install -y microsoft-mlserver-packages-r-9.3.0 \ && apt-get install -y microsoft-mlserver-python-9.3.0 \ && apt-get install -y microsoft-mlserver-packages-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-py-9.3.0 \ && apt-get install -y azure-cli=2.0.26-1~xenial \ && apt-get install -y dotnet-runtime-2.0.0 \ && apt-get install -y microsoft-mlserver-adminutil-9.3.0 \ && apt-get install -y microsoft-mlserver-config-rserve-9.3.0 \ && apt-get install -y microsoft-mlserver-computenode-9.3.0 \ && apt-get install -y microsoft-mlserver-webnode-9.3.0 \ && apt-get clean \ && /opt/microsoft/mlserver/9.3.0/bin/R/activate.sh RUN echo $'library(mrsdeploy) \n\ carsModel <- glm(formula = am ~ hp + wt, data = mtcars, family = binomial) \n\ manualTransmission <- function(hp, wt) { \n\ newdata <- data.frame(hp = hp, wt = wt) \n\ predict(carsModel, newdata, type = "response") \n\ } \n\ remoteLogin("http://localhost:12800", username = "admin", password = "Microsoft@2018", session = FALSE) \n\ api <- publishService("ManualTransmissionService", code = manualTransmission, model = carsModel, inputs = list(hp = "numeric", wt = "numeric"), outputs = list(answer = "numeric"), v = "1.0.0") \n\ result <- api$manualTransmission(120, 2.8) \n\ print(result$output("answer")) \n\ remoteLogout()' > /tmp/ManualTransmission.R RUN echo $'#!/bin/bash \n\ set -e \n\ az ml admin bootstrap --admin-password "Microsoft@2018" --confirm-password "Microsoft@2018" \n\ /usr/bin/Rscript --no-save --no-restore --verbose "/tmp/ManualTransmission.R" \n\ exec "$@"' > bootstrap.sh RUN chmod +x bootstrap.sh EXPOSE 12800 ENTRYPOINT ["/bootstrap.sh"] CMD ["bash"] 

أنشئ صورة انتقال يدوي باستخدام ملف عامل الميناء أعلاه:

 docker build -f r-manualtransmission-dockerfile -t rmanualtransmission. 

تحقق من اكتمال إنشاء صورة rmanualtransmission بنجاح عن طريق تشغيل الأمر:

 docker images 

قم بتشغيل الحاوية باستخدام الأمر:

 docker run --name rmanualtransmission-container -dit rmanualtransmission 

تحقق من حالة الحاوية مع:

 docker logs rmanualtransmission-container 

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

احصل على عنوان IP الخاص بالحاوية عن طريق تشغيل الأمر:

 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' rmanualtransmission-container '172.17.0.3' 

يمكنك استخدام أو الحصول على ملف إعدادات خدمة الويب swagger.json R لمحاكاة النقل اليدوي باستخدام أوامر curl:

 apt-get -y install jq curl -s --header "Content-Type: application/json" --request POST --data '{"username":"admin","password":"Microsoft@2018"}' http://172.17.0.3:12800/login | jq -r '.access_token' <access token> curl -s --header "Content-Type: application/json" --header "Authorization: Bearer <access token>" --request POST --data '{"hp":120,"wt":2.8}' http://172.17.0.3:12800/api/ManualTransmissionService/1.0.0 {"success":true,"errorMessage":"","outputParameters":{"answer":0.64181252840938208},"outputFiles":{},"consoleOutput":"","changedFiles":[]} curl -s --header "Authorization: Bearer <access token>" --request GET http://172.17.0.3:12800/api/ManualTransmissionService/1.0.0/swagger.json -o swagger.json 

ملف swagger.json مناسب لإنشاء مكتبة عميل بأي لغة .

تشغيل خدمة ويب Python


فيما يلي مثال على إنشاء صورة باستخدام خدمة الويب Python لمحاكاة ناقل الحركة اليدوي الذي تم تكوينه مسبقًا بداخله.

  FROM ubuntu:16.04 RUN apt-get -y update \ && apt-get install -y apt-transport-https wget \ && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ xenial main" | tee /etc/apt/sources.list.d/azure-cli.list \ && wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O /tmp/prod.deb \ && dpkg -i /tmp/prod.deb \ && rm -f /tmp/prod.deb \ && apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893 \ && apt-get -y update \ && apt-get install -y microsoft-r-open-foreachiterators-3.4.3 \ && apt-get install -y microsoft-r-open-mkl-3.4.3 \ && apt-get install -y microsoft-r-open-mro-3.4.3 \ && apt-get install -y microsoft-mlserver-packages-r-9.3.0 \ && apt-get install -y microsoft-mlserver-python-9.3.0 \ && apt-get install -y microsoft-mlserver-packages-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mml-py-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-r-9.3.0 \ && apt-get install -y microsoft-mlserver-mlm-py-9.3.0 \ && apt-get install -y azure-cli=2.0.26-1~xenial \ && apt-get install -y dotnet-runtime-2.0.0 \ && apt-get install -y microsoft-mlserver-adminutil-9.3.0 \ && apt-get install -y microsoft-mlserver-config-rserve-9.3.0 \ && apt-get install -y microsoft-mlserver-computenode-9.3.0 \ && apt-get install -y microsoft-mlserver-webnode-9.3.0 \ && apt-get clean \ && /opt/microsoft/mlserver/9.3.0/bin/R/activate.sh RUN echo $'from microsoftml.datasets.datasets import DataSetMtCars \n\ import pandas as pd \n\ from revoscalepy import rx_lin_mod, rx_predict \n\ cars_model = rx_lin_mod(formula="am ~ hp + wt", data=DataSetMtCars().as_df()) \n\ mydata = pd.DataFrame({"hp":[120],"wt":[2.8]}) \n\ def manualTransmission(hp, wt): \n\ \timport pandas as pd \n\ \tfrom revoscalepy import rx_predict \n\ \tnewData = pd.DataFrame({"hp":[hp], "wt":[wt]}) \n\ \treturn rx_predict(cars_model, newData, type="response") \n\ \n\ from azureml.deploy import DeployClient \n\ from azureml.deploy.server import MLServer \n\ from azureml.common.configuration import Configuration \n\ \n\ HOST = "http://localhost:12800" \n\ context = ("admin", "Microsoft@2018") \n\ client = DeployClient(HOST, use=MLServer, auth=context) \n\ service_name = "ManualTransmissionService" \n\ service_version = "1.0.0" \n\ service = client.service(service_name).version(service_version).code_fn(manualTransmission).inputs(hp=float, wt=float).outputs(answer=pd.DataFrame).models(cars_model=cars_model).description("Man ual Transmission Service").deploy() \n\ res = service.manualTransmission(120, 2.8) \n\ print(res.output("answer"))' > /tmp/ManualTransmission.py RUN echo $'#!/bin/bash \n\ set -e \n\ az ml admin bootstrap --admin-password "Microsoft@2018" --confirm-password "Microsoft@2018" \n\ mlserver-python /tmp/ManualTransmission.py \n\ exec "$@"' > bootstrap.sh RUN chmod +x bootstrap.sh EXPOSE 12800 ENTRYPOINT ["/bootstrap.sh"] CMD ["bash"] 

قم بإنشاء صورة نقل حراري باستخدام ملف عامل الميناء أعلاه:

 docker build -f py-manualtransmission-dockerfile -t pymanualtransmission. 

تحقق من اكتمال عملية إنشاء صورة pymanualtransmission بنجاح عن طريق تشغيل الأمر:

 docker images 

قم بتشغيل الحاوية باستخدام الأمر:

 docker run --name pymanualtransmission-container -dit pymanualtransmission 

تحقق من حالة الحاوية مع:

 docker logs pymanualtransmission-container 

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

احصل على عنوان IP الخاص بالحاوية عن طريق تشغيل الأمر:

 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pymanualtransmission-container '172.17.0.3' 

يمكنك الحصول على ملف swagger.json لإعداد خدمة ويب Python لمحاكاة النقل اليدوي باستخدام أوامر curl:

 apt-get -y install jq curl -s --header "Content-Type: application/json" --request POST --data '{"username":"admin","password":"Microsoft@2018"}' http://172.17.0.3:12800/login | jq -r '.access_token' <access token> curl -s --header "Content-Type: application/json" --header "Authorization: Bearer <access token>" --request POST --data '{"hp":120,"wt":2.8}' http://172.17.0.3:12800/api/ManualTransmissionService/1.0.0 {"success":true,"errorMessage":"","outputParameters":{"answer":0.64181252840938208},"outputFiles":{},"consoleOutput":"","changedFiles":[]} curl -s --header "Authorization: Bearer <access token>" --request GET http://172.17.0.3:12800/api/ManualTransmissionService/1.0.0/swagger.json -o swagger.json 

ملف swagger.json مناسب لإنشاء مكتبة عميل بأي لغة .

ملاحظة يمكنك أيضًا تغيير إعدادات موقع appsettings.json على الويب باستخدام ملف docker السحري وتمكين مصادقة LDAP / AAD .

ملحقات


يمكن إرسال صور عامل الميناء المحلية التي تم إنشاؤها إلى Azure Container Registry (ACR ).

قم بإنشاء مجموعة في Azure Kubernetes Service (AKS) باستخدام صور من ACR يمكن أن تتدرج تلقائيًا إلى كلا الجانبين باستخدام حوامل Autoscale.

الروابط


Source: https://habr.com/ru/post/ar420159/


All Articles