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

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

更多资讯推荐

机器学习转化为生产力,警惕这4个常见陷阱!

几乎每个人都想在他们的业务中引入机器学习,但是这些人也遇到了一个大问题:让模型可持续发展十分困难,尤其是在云架构的基础上。medium上一位博主也指出了这个问题,并提出了将机器学习模型投入生产的4个常见陷阱。

大数据文摘 ·  21h前
500亿参数,支持103种语言:谷歌推出「全球文字翻译」模型

由于缺乏平行数据,小语种的翻译一直是一大难题。来自谷歌的研究者提出了一种能够翻译 103 种语言的大规模多语言神经机器翻译模型,在数据丰富和匮乏的语种翻译中都实现了显著的性能提升。

机器之心 ·  2天前
机器学习免费跑分神器:集成各大数据集,连接GitHub就能用

搞机器学习的小伙伴们,免不了要在各种数据集上,给AI模型跑分。现在,Papers with Code (那个以论文搜代码的神器) 团队,推出了自动跑分服务,名叫sotabench,以跑遍所有开源模型为己任。

栗子 鱼羊 ·  2天前
大数据为什么不够聪明?机器要如何走向强人工智能

大数据为什么不够聪明?比概率语言更强大的思考工具是什么?科幻电影中的强人工智能到底怎样实现?如何让智能机器像人一样思考?搞清楚因果关系才能拨云见日。

明日情报 ·  2天前
2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

2019年,机器学习框架之争进入了新阶段:PyTorch与TensorFlow成为最后两大玩家,PyTorch占据学术界领军地位,TensorFlow在工业界力量依然强大,两个框架都在向对方借鉴,但是都不太理想。

大数据文摘 ·  2天前
机器学习帮你预测电池寿命:精确了解电池还能充几次

电池寿命的确定,是移动硬件发展的重要一环,但是由于电池电化学反应的不确定性以及不同的使用环境和习惯,电池寿命变成了一门玄学。不过柏林的三位小伙伴,利用Tensorflow,在原有的预测体系基础上。更近一步,完成了电池的全寿命预测。

靓科技解读 ·  3天前
PyTorch横扫顶会,TensorFlow退守业界:机器学习框架一年变天

机器学习框架的世界,局势变化过于迅猛,稍不注意就会被抢了地盘。一年前,TensorFlow还是各大顶会论文选择的主流框架,如今顶会几乎成了PyTorch的天下。

鱼羊 栗子 ·  3天前
Nature发文:深度学习系统为什么这么好骗?

今天的人工智能系统经常会出现莫名其妙的 bug。最新一期《自然》杂志上的这篇文章向我们介绍了深度学习为什么如此容易出错,以及解决这些问题的研究方向。

机器之心 ·  3天前
Copyright©2005-2019 51CTO.COM 版权所有 未经许可 请勿转载