用Azure ML Service构建和部署机器学习模型

编译作者: 布加迪 2019-01-23 11:12:42

用Azure ML Service构建和部署机器学习模型

【51CTO.com快译】我们在本教程中将构建和部署一个机器模型,以便利用Stackoverflow数据集预测工资。 看完本文后,你能够调用充分利用REST的Web服务来获得预测结果。

由于目的是演示工作流程,我们将使用一个简单的双列数据集进行试验,该数据集包含多年的工作经验和薪水。想了解数据集的详细信息,参阅我之前介绍线性回归的那篇文章

先决条件

1.Python和Scikit-learn方面的基础知识

2.有效的微软Azure订阅

3.Anaconda或Miniconda

配置开发环境

使用Azure ML SDK配置一个虚拟环境。 运行以下命令以安装Python SDK,并启动Jupyter Notebook。从Jupyter启动一个新的Python 3内核。

  1. $ conda create -n aml -y Python=3.6  
  2. $ conda activate aml  
  3. $ conda install nb_conda  
  4. $ pip install azureml-sdk[notebooks]  
  5. $ jupyter notebook  

初始化Azure ML环境

先导入所有必要的Python模块,包括标准的Scikit-learn模块和Azure ML模块。

  1. import datetime  
  2. import numpy as np  
  3. import pandas as pd  
  4. from sklearn.model_selection import train_test_split  
  5. from sklearn.linear_model import LinearRegression  
  6. from sklearn.externals import joblib  
  7. import azureml.core  
  8. from azureml.core import Workspace  
  9. from azureml.core.model import Model 
  10. from azureml.core import Experiment  
  11. from azureml.core.webservice import Webservice  
  12. from azureml.core.image import ContainerImage  
  13. from azureml.core.webservice import AciWebservice  
  14. from azureml.core.conda_dependencies import CondaDependencies  

我们需要创建一个Azure ML Workspace,该工作区充当我们这次试验的逻辑边界。Workspace创建用于存储数据集的Storage Account、存储秘密信息的Key Vault、维护映像中心的Container Registry以及记录度量指标的Application Insights。

别忘了把占位符换成你的订阅ID。

  1. ws = Workspace.create(name='salary' 
  2. subscription_id='' 
  3. resource_group='mi2' 
  4. create_resource_group=True 
  5. location='southeastasia'  
  6.  

几分钟后,我们会看到Workspace里面创建的资源。

现在我们可以创建一个Experiment开始记录度量指标。由于我们没有许多参数要记录,于是获取训练过程的启始时间。

  1. exp = Experiment(workspace=ws, name='salexp' 
  2. run = exp.start_logging()  
  3. run.log("Experiment start time", str(datetime.datetime.now()))  

训练和测试Scikit-learn ML模块

现在我们将进而借助Scikit-learn训练和测试模型。

  1. sal = pd.read_csv('data/sal.csv',header=0, index_col=None)  
  2. X = sal[['x']]  
  3. y = sal['y' 
  4. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=10)  
  5. lm = LinearRegression()  
  6. lm.fit(X_train,y_train)  

经过训练的模型将被序列化成输出目录中的pickle文件。Azure ML将输出目录的内容自动拷贝到云端。

  1. filename = 'outputs/sal_model.pkl'  
  2. joblib.dump(lm, filename)  

不妨记录训练作业的斜率、截距和结束时间,从而完成试验。

  1. run.log('Intercept :', lm.intercept_)  
  2. run.log('Slope :', lm.coef_[0])  
  3. run.log("Experiment end time", str(datetime.datetime.now()))  
  4. run.complete()  

我们可以通过Azure Dashboard来跟踪度量指标和执行时间。

注册和加载经过训练的模型

每当我们冻结模型,它可以用独特的版本向Azure ML注册。这让我们能够在加载时在不同的模型之间轻松切换。

不妨将SDK指向PKL文件的位置,注册来自上述训练作业的工资模型。我们还将一些额外的元数据以标签这种形式添加到模型中。

  1. model = Model.register(model_path = "outputs/sal_model.pkl" 
  2. model_name = "sal_model" 
  3. tags = {"key""1"},  
  4. description = "Salary Prediction" 
  5. workspace = ws)  

检查Workspace的Models部分,确保我们的模型已注册。

是时候将模型打包成容器映像(到时作为Web服务来公开)并部署的时候了。

为了创建容器映像,我们需要将模型所需的环境告诉Azure ML。然而,我们传递一段Python脚本,该脚本含有基于入站数据点来预测数值的代码。

Azure ML API为两者提供了便利的方法。不妨先创建环境文件salenv.yaml,该文件告诉运行时环境在容器映像中添加Scikit-learn。

  1. salenv = CondaDependencies()  
  2. salenv.add_conda_package("scikit-learn" 
  3. with open("salenv.yml","w"as f:  
  4. f.write(salenv.serialize_to_string())  
  5. with open("salenv.yml","r"as f:  
  6. print(f.read())  

下列代码片段从Jupyter Notebook来执行时,创建一个名为score.py的文件,该文件含有模型的推理逻辑。

  1. %%writefile score.py  
  2. import json  
  3. import numpy as np  
  4. import os  
  5. import pickle  
  6. from sklearn.externals import joblib  
  7. from sklearn.linear_model import LogisticRegression  
  8. from azureml.core.model import Model  
  9. def init():  
  10. global model  
  11. # retrieve the path to the model file using the model name  
  12. model_path = Model.get_model_path('sal_model' 
  13. model = joblib.load(model_path)  
  14. def run(raw_data):  
  15. data = np.array(json.loads(raw_data)['data'])  
  16. # make prediction  
  17. y_hat = model.predict(data)  
  18. return json.dumps(y_hat.tolist())  

现在将推理文件和环境配置传递给映像,从而将各点连起来。

  1. %%time  
  2. image_config = ContainerImage.image_configuration(execution_script="score.py" 
  3. runtime="python"
  4. conda_file="salenv.yml" 

这最终会创建将出现在Workspace的Images部分中的容器映像。

我们都已准备创建定义目标环境的部署配置,并将它作为托管在Azure Container Instance的Web服务来运行。我们还决定选择AKS或物联网边缘环境作为部署目标。

  1. aciconfig = AciWebservice.deploy_configuration(cpu_cores=1,  
  2. memory_gb=1,  
  3. tags={"data""Salary""method" : "sklearn"},  
  4. description='Predict Stackoverflow Salary' 
  5. service = Webservice.deploy_from_model(workspace=ws,  
  6. name='salary-svc' 
  7. deployment_config=aciconfig,  
  8. models=[model],  
  9. image_config=image_config)  
  10. service.wait_for_deployment(show_output=True

Azure Resource Group现在有一个为模型运行推理的Azure Container Instance。

我们可以从下面这个方法获得推理服务的URL:

  1. print(service.scoring_uri) 

现在通过cURL来调用Web服务。我们可以从同一个Jupyter Notebook来做到这一点。

你可以从Github代码库来访问数据集和Jupyter Notebook。

这种方法的独特之处在于,我们可以从在Jupyter Notebook里面运行的Python内核来执行所有任务。开发人员可以利用代码完成训练和部署ML模型所需的各项任务。这正是使用诸如ML Service之类的ML PaaS具有的好处。

原文标题:Build and Deploy a Machine Learning Model with Azure ML Service,作者:Janakiram MSV

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

机器学习 机器模型 预测工资
上一篇:研究发现 越来越多的欧洲人对机器人持怀疑态度 下一篇:机器学习常见算法分类汇总大全
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

机器人过程自动化的10个秘密

RPA(机器人过程自动化)承诺简化工作流程,将遗留系统粘合在一起,并授权业务用户解决自己的问题。但是,在大赢家的潜伏之下,潜伏着值得解决的问题。

佚名 ·  1天前
人工智能也会中毒,那人脸支付还安全吗?

机器学习系统在训练阶段,建立起一套复杂的数学计算,将输入数据与结果联系起来,它们非常擅长特定的任务,在某些情况下,甚至可以超越人类。

佚名 ·  1天前
北大、字节跳动等利用增量学习提出超像素分割模型LNSNet

图像分割是计算机视觉的基本任务之一,在自动驾驶、安防安保、智能诊疗等任务中都有着重要应用。

朱磊、佘琪 ·  1天前
MIT博士毕业,「太极」作者胡渊鸣回国创业,专注图形编程

今年 3 月完成博士学业后,胡渊鸣选择回国创业,成立了太极图形 (Taichi Graphics)公司,自己担任联合创始人兼 CEO。

杜伟 ·  1天前
我们可以将最佳实践抽象为实际的设计模式吗?机器学习

人工智能专家老吕 ·  2天前
开闸蓄水,企业机器学习井喷

机器学习(ML)正在推动人工智能(AI)应用爆炸式增长,帮助软件理解不确定和不可预测的现实世界。那么在企业服务领域,当前的机器学习繁荣靠的是什么?未来又将在哪些方面发挥更多的作用?

赵满满 ·  2天前
机器学习的5个常见痛点及解决方法

机器学习对于人类来说是有益的技术。尽管机器学习仍有一些内容需要重新审视和研究,但不可否认,它使人们的工作和生活变得更好。虽然机器学习的概念很难理解,但随着时间的推移,专家可以用一种更简单的方式表达。

HERO ·  2天前
数据能否为当今的企业建立竞争优势?

对于世界各地的企业来说,数据是一个巨大的竞争优势和增长源泉。

Cassie ·  2天前
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载