Layanan Web Docking dalam R dan Python

Halo, Habr! Containerisasi adalah pendekatan untuk pengembangan perangkat lunak di mana aplikasi atau layanan, dependensinya dan konfigurasinya (file manifest penyebaran abstrak) dikemas bersama menjadi gambar wadah. Di artikel ini, kita akan melihat cara membuat gambar buruh pelabuhan dan menggunakannya untuk menjalankan R, shell Python, dan banyak lagi. Bergabunglah sekarang!



Aplikasi kemas dapat diuji sebagai modul dan digunakan sebagai contoh wadah dalam sistem operasi (OS) dari node saat ini. Docker adalah proyek sumber terbuka untuk mengotomatiskan penyebaran aplikasi dalam bentuk portabel, wadah mandiri yang dapat bekerja di cloud atau di tempat. Lihat di sini untuk informasi lebih lanjut.

Microsoft Machine Learning Server adalah platform perusahaan yang fleksibel untuk analisis data yang dapat diskalakan, membuat aplikasi cerdas, dan menemukan informasi bernilai bisnis dengan dukungan penuh untuk Python dan R. Istilah " operasionalisasi " berarti penyebaran model dan kode dalam bahasa R dan Python di Microsoft Machine Learning Server dalam bentuk layanan web dan penggunaan selanjutnya dari layanan ini dalam aplikasi klien untuk meningkatkan efisiensi perusahaan.

Pada artikel ini, kita akan melihat cara membuat gambar buruh pelabuhan yang mengandung Machine Learning Server 9.3 menggunakan file Docker, dan bagaimana menggunakannya untuk melakukan operasi berikut:

  1. Jalankan shell R.
  2. Startup shell Python.
  3. Luncurkan Jupyter Notebook.
  4. Luncurkan konfigurasi OneBox.
  5. Memulai layanan web R.
  6. Memulai layanan web Python.

Komponen yang Diperlukan


Semua mesin virtual Linux dengan perangkat lunak docker community edition (CE) diinstal. Dalam mempersiapkan artikel ini, saya menggunakan Ubuntu 16.04 VM dan menginstal docker CE .

Langkah 1


Pertama, kita akan membuat gambar yang disebut mlserver dengan Machine Learning Server 9.3 diinstal menggunakan file buruh pelabuhan berikut:

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 

Gunakan perintah pembangunan buruh pelabuhan untuk membuat gambar mlserver menggunakan file buruh pelabuhan di atas:

 docker build -f mlserver-dockerfile -t mlserver. 

Verifikasi bahwa pembuatan gambar mlserver berhasil diselesaikan dengan menjalankan perintah berikut:

 docker images 

Peluncuran R Shell


 docker run -it mlserver R 



Peluncuran shell python


 docker run -it mlserver mlserver-python 



Luncurkan 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 

Menjalankan perintah di atas memberi tautan dengan membukanya di peramban, Anda dapat menggunakan Jupyter Notebooks.



Luncurkan OneBox Configuration


Microsoft Learning Server dapat dikonfigurasikan setelah instalasi untuk digunakan sebagai server penempatan dan layanan host analitik web untuk operasionalisasi .

  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"] 

Buat gambar mlserver-onebox menggunakan file buruh pelabuhan di atas:

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

Verifikasi bahwa pembuatan gambar mlserver-onebox berhasil diselesaikan dengan menjalankan perintah berikut:

 docker images 

Luncurkan wadah onebox dengan perintah:

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

Periksa kondisi wadah dengan:

 docker logs mlserver-onebox-container 

Setelah memverifikasi dengan perintah di atas bahwa tes diagnostik berhasil, Anda dapat menggunakan wadah ini sebagai satu-kotak (data log Docker harus berisi baris berikut: "Semua Tes Diagnostik telah lulus".).

Dapatkan alamat IP wadah dengan menjalankan perintah:

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

Dan gunakan sebagai satu kotak:

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

Memulai layanan web R.


Kami juga dapat membuat gambar dengan layanan web yang telah dikonfigurasikan sehingga siap digunakan segera setelah kami menggunakan wadah. Berikut adalah contoh membuat gambar dengan layanan web R untuk mensimulasikan Transmisi Manual , yang telah dikonfigurasikan sebelumnya di dalamnya.

  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"] 

Buat gambar pengiriman manual secara manual menggunakan file buruh pelabuhan di atas:

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

Verifikasi bahwa pembuatan gambar pengiriman rmanual berhasil diselesaikan dengan menjalankan perintah:

 docker images 

Luncurkan wadah menggunakan perintah:

 docker run --name rmanualtransmission-container -dit rmanualtransmission 

Periksa kondisi wadah dengan:

 docker logs rmanualtransmission-container 

Setelah memverifikasi bahwa tes diagnostik berhasil dan layanan web diterbitkan, Anda dapat mulai menggunakannya.

Dapatkan alamat IP wadah dengan menjalankan perintah:

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

Anda dapat menggunakan atau mendapatkan file pengaturan layanan web swagger.json R untuk mensimulasikan transfer manual menggunakan perintah 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 

File swagger.json cocok untuk membuat perpustakaan klien dalam bahasa apa pun .

Menjalankan Layanan Web Python


Berikut ini adalah contoh membuat gambar dengan layanan web Python untuk mensimulasikan Transmisi Manual pra-konfigurasi di dalamnya.

  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"] 

Buat gambar pengiriman pymanualtransmisi menggunakan file buruh pelabuhan di atas:

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

Verifikasi bahwa pembuatan gambar transmisi pymanual berhasil diselesaikan dengan menjalankan perintah:

 docker images 

Luncurkan wadah menggunakan perintah:

 docker run --name pymanualtransmission-container -dit pymanualtransmission 

Periksa kondisi wadah dengan:

 docker logs pymanualtransmission-container 

Setelah memverifikasi bahwa tes diagnostik berhasil dan layanan web diterbitkan, Anda dapat mulai menggunakannya.

Dapatkan alamat IP wadah dengan menjalankan perintah:

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

Anda bisa mendapatkan file swagger.json untuk menyiapkan layanan web Python untuk mensimulasikan transfer manual menggunakan perintah 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 

File swagger.json cocok untuk membuat perpustakaan klien dalam bahasa apa pun .

CATATAN Anda juga dapat mengubah pengaturan situs web appsettings.json menggunakan file docker ajaib dan mengaktifkan otentikasi LDAP / AAD .

Ekstensi


Gambar buruh pelabuhan lokal yang dibuat dapat dikirim ke Azure Container Registry (ACR ).

Buat cluster di Azure Kubernetes Service (AKS) menggunakan gambar dari ACR yang dapat secara otomatis skala ke kedua sisi menggunakan pod skala otomatis .

LINK


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


All Articles