如果是Azure机器学习的新手,建议先阅读微软提供的官方文档,了解Azure机器学习的基础概念。本文将通过一个简单的案例,指导如何在Azure云中部署机器学习模型。
在机器学习的生命周期中,可能已经探索了数据准备、模型训练和测试等阶段,但是否考虑过将模型部署到某个地方,以便他人也能使用模型解决相同的问题?如果尚未考虑,那么现在是学习机器学习生命周期中至关重要的部分——模型部署的最佳时机。简而言之,部署模型意味着将其添加到生产环境中,以便最终用户可以利用该服务解决他们的问题。如今,许多公司依赖这些部署模型的输出来在其领域做出关键决策。像微软Azure这样的云平台,承诺为客户提供可靠和高效的服务。
本文将介绍以下步骤来部署模型:
- 注册机器学习模型
- 部署模型
- 访问端点进行预测
所有这些步骤将在文章的后续部分中详细解释和实现。建议拥有Azure订阅来亲自实践这些步骤。如果是学生,可以使用大学电子邮件创建学生账户。Azure将为提供一年的100个积分。如果不是学生,只是想探索Azure,那么应该选择免费试用,在注册凭证后,将有30天的时间访问几乎所有的Azure服务。
在本文中,使用了Iris-Setosa数据集,并在本地系统上训练了一个SVM模型。训练模型后,将其保存为pickle文件格式。这里只使用了单个特征来训练模型(重点不是获得高性能模型,而是更多地关注部署。在用例中,尝试带来最佳的部署模型)。
import pandas as pd
import sklearn
from sklearn.svm import SVC
import pickle
import joblib
from sklearn.model_selection import train_test_split
dataset = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", header = None, names= colnames )
dataset = dataset.replace({"class": {"Iris-setosa":1,"Iris-versicolor":2, "Iris-virginica":3}})
X = dataset.drop(['class'], axis=1)[:,0]
y = dataset['class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
filename= 'final_mod_v1.pkl'
joblib.dump(classifier,open(filename, 'wb'))
模型注册有助于记录机器学习工作区中所有训练过的模型。机器学习模型可以通过UI或使用脚本进行注册。这里,将通过UI注册模型。由于已经创建了一个工作区,所以不再创建新的。如果想从本地系统创建工作区,可以使用以下脚本。不久后,资源组中将创建一个新的工作区。
from azureml.core import Workspace
ws = Workspace.create(name='sample', subscription_id='**********', resource_group='sample_group', create_resource_group=True, location='location')
在注册模型之前,需要准备:
- 评分脚本
- 包含模型使用的包的YAML文件
评分脚本在部署的模型和使用它的客户端之间扮演中间角色。当客户端发送输入数据时,评分脚本将接收数据并将其传递给模型。它将返回模型的输出给客户端。脚本主要包含两个函数。
- init函数
- run函数
init函数帮助加载模型,而run函数在客户端传递的输入数据上运行模型。
import json
import numpy as np
import os
import pickle
import joblib
from sklearn.svm import SVC
from azureml.core import Model
def init():
global model
model_name = 'classifier'
path = Model.get_model_path(model_name)
model = joblib.load(path)
def run(data):
try:
data = json.loads(data)
result = model.predict(data['data'])
return {'data' : result.tolist() , 'message' : "Successfully classified Iris"}
except Exception as e:
error = str(e)
return {'data' : error , 'message' : 'Failed to classify iris'}
将上述脚本保存为.py文件。
对于创建YAML文件,提供了一个样本模板。可以编辑该文件以添加必要的包。现在让注册模型。首先,通过Azure门户打开机器学习工作区,并启动机器学习工作室。
对于模型注册,从左侧边栏选择“模型”,然后选择“创建”选项。
对于当前问题,使用了Scikit learn来构建模型。如果需要,可以在模型注册中进行模型版本控制。具有多个版本的相同模型将在模型注册中分别显示。最后,从本地系统上传训练过的模型。
点击注册后,可以看到模型在模型注册中。
2.部署模型
从模型注册中选择模型,点击部署并选择部署到Web服务。
选择“部署到Web服务”选项后,需要上传创建的评分脚本以及包含包依赖项的YAML文件。
部署模型后,转到端点部分。模型部署可能需要大约6-10分钟。如果在部署模型时出现错误,可以检查部署日志以了解更多信息。
3.使用REST端点