在R和Python中对接Web服务

哈Ha! 容器化是一种软件开发方法,其中,将应用程序或服务,其依赖项和配置(抽象部署清单文件)打包到一个容器映像中。 在本文中,我们将介绍如何创建一个docker映像,并使用它运行R,Python shell等。 立即加入!



容器化的应用程序可以作为模块进行测试,并且可以作为容器实例部署在当前节点的操作系统(OS)中。 Docker是一个开源项目,以可移植的自包含容器的形式自动化应用程序的部署,这些容器可以在云或本地环境中工作。 有关更多信息,请参见此处

Microsoft Machine Learning Server是一个灵活的企业平台,用于可扩展的数据分析,创建智能应用程序和查找对业务有价值的信息,并完全支持Python和R。术语“ 操作化 ”是指在Microsoft Machine Learning Server上以R和Python语言部署模型和代码。以Web服务的形式以及随后在客户端应用程序中使用这些服务来提高公司的效率。

在本文中,我们将研究如何使用Docker文件创建包含Machine Learning Server 9.3的docker映像,以及如何使用它执行以下操作:

  1. 运行R shell。
  2. Python Shell启动。
  3. 启动Jupyter Notebook。
  4. 启动OneBox配置。
  5. 启动Web服务R。
  6. 启动Python Web服务。

所需组件


安装了Docker社区版(CE)软件的任何Linux虚拟机。 在准备本文时,我部署了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命令使用上面的docker文件创建mlserver映像:

 docker build -f mlserver-dockerfile -t mlserver. 

通过运行以下命令来验证mlserver映像创建是否成功完成:

 docker images 

R Shell启动


 docker run -it mlserver R 



Python Shell启动


 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配置为用作部署服务器并托管用于操作的分析Web服务。

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

使用上面的docker文件创建mlserver-onebox映像:

 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 Web服务


我们还可以使用预配置的Web服务来创建映像,以便在部署容器后就可以立即使用它。 这是一个使用R Web服务创建图像以模拟“ 手动传输”的示例,该图像已在其中预先配置。

  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文件创建一个rmanualtransmission映像:

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

通过运行以下命令来验证rmanualtransmission映像的创建是否成功完成:

 docker images 

使用以下命令启动容器:

 docker run --name rmanualtransmission-container -dit rmanualtransmission 

使用以下方法检查容器的状况:

 docker logs rmanualtransmission-container 

在验证诊断测试成功并且发布了Web服务之后,您可以开始使用它。

通过运行以下命令获取容器的IP地址:

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

您可以使用或获取swagger.json R Web服务设置文件来模拟使用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 Web服务


以下是使用Python Web服务创建图像以模拟其中预先配置的手动变速器的示例。

  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文件创建pymanualtransmission映像:

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

通过运行以下命令验证pymanualtransmission映像创建是否成功完成:

 docker images 

使用以下命令启动容器:

 docker run --name pymanualtransmission-container -dit pymanualtransmission 

使用以下方法检查容器的状况:

 docker logs pymanualtransmission-container 

在验证诊断测试成功并且发布了Web服务之后,您可以开始使用它。

通过运行以下命令获取容器的IP地址:

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

您可以获取swagger.json文件来设置Python Web服务,以使用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文件适用于以任何语言创建客户端库

注意 您还可以使用魔术docker文件更改appsettings.json网站设置,并启用LDAP / AAD身份验证

扩展名


可以将创建的本地docker映像发送到Azure容器注册表(ACR )。

使用来自ACR的图像在Azure Kubernetes服务(AKS)中创建群集,该图像可以使用自动缩放窗格自动缩放到双方

友情链接


Source: https://habr.com/ru/post/zh-CN420159/


All Articles