用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】

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

更多资讯推荐

破解机器学习的误区——常见机器学习神话究竟从何而来?

Forrester Research最近发布了一份名为“ 粉碎机器学习的七个神话”的报告。在其中,作者警告说:“不幸的是,一些对机器学习项目做出重要决策的企业领导者,普遍存在机器学习的误解。”

CDA数据分析师 ·  1天前
令人兴奋的 2020 年人工智能和机器学习趋势

在本文中,我们将讨论几个顶级的人工智能和机器学习趋势,将塑造新年:2020。 我们还将介绍面部识别技术及其在2020年的应用。

飞羽译 ·  2天前
2020之最:最实用的机器学习工具有哪些?

就如同制作米其林菜肴,拥有井井有条的厨房固然重要,但可选择的东西太多也着实让人烦恼,建立良好的机器学习(ML)应用程序也是如此。

读芯术 ·  2天前
用机器学习备忘单解决艰巨问题,你行吗?

在本文中,我们将介绍如何使用备忘单简化机器学习方法,你可以使用该备忘单选择适合解决问题的正确算法。

读芯术 ·  2020-03-28 14:36:36
“阿凡达”式脑-脑接口性能提升 2-3 个数量级

脑-脑接口这一概念,看过科幻电影《阿凡达》的人可能有点印象。在电影中,地球上的人可以通过脑对脑的直接信息传递,远程控制潘多拉星上经基因改造的蓝色类人生物 Na'vi 族。

付静 ·  2020-03-26 10:42:31
探究谷歌用于构建量子机器学习模型的新框架:TensorFlow Quantum

TensorFlow Quantum让数据科学家可以构建在量子架构上运行的机器学习模型。TensorFlow Quantum的核心概念是将量子算法和机器学习程序交织在TensorFlow编程模型中。谷歌称这种方法为量子机器学习,能够利用其最近的一些量子计算框架(比如谷歌Cirq)来实现它。

布加迪 ·  2020-03-26 08:00:00
算法之外:人工智能和机器学习对组织的影响

如今,数字科学对于企业来说,显得愈发地“诱人”。但是若要正确地看待数字科学,我们亟需了解下面一个问题:数字科学到底能为我们的业务发展做什么,不能为我们的业务发展做什么。

IMD商学院 ·  2020-03-24 15:15:54
韩松、朱俊彦等人提出GAN压缩法:算力消耗不到1/9,现已开源

近日,来自麻省理工学院(MIT)、Adobe、上海交通大学的研究者提出了一种用于压缩条件 GAN 的通用方法。这一新技术在保持视觉保真度的同时,将 pix2pix,CycleGAN 和 GauGAN 等广泛使用的条件 GAN 模型的计算量减少到 1/9~1/21。

Muyang Li等 ·  2020-03-23 15:10:49
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载