郑州外贸网站建设商家,网站中的分享怎么做,99作文网官网,mip改造wordpress文章目录前言一、数据集二、训练 Scikit-learn 模型三、基于MLSever构建Scikit-learn服务四、测试模型五、训练 XGBoost 模型六、服务多个模型七、测试多个模型的准确性总结参考前言
在过去我们训练模型#xff0c;往往通过编写flask代码或者容器化我们的模型并在docker中运行…
文章目录前言一、数据集二、训练 Scikit-learn 模型三、基于MLSever构建Scikit-learn服务四、测试模型五、训练 XGBoost 模型六、服务多个模型七、测试多个模型的准确性总结参考前言
在过去我们训练模型往往通过编写flask代码或者容器化我们的模型并在docker中运行。这篇文章中我们将分享如何基于mlserver来搭建Web服务。mlserver是基于 python的推理服务器可以通过简单的代码实现python web服务但是它的真正优点在于它是一个为生产环境设计的高性能服务器。 一、数据集
本博客通过使用几个图像模型作为示例介绍如何使用 MLServer我们要使用的数据集是Fashion MNIST 数据集。它包含 70,000 张灰度 28x28 像素的服装图像分为 10 个不同的类别上衣、连衣裙、外套、裤子等。
二、训练 Scikit-learn 模型
首先我们使用scikit-learn框架训练支持向量机 (SVM) 模型。然后我们将模型保存到一个名为Fashion-MNIST.joblib文件中。
import pandas as pd
from sklearn import svm
import time
import joblib#Load Training Data
train pd.read_csv(../../data/fashion-mnist_train.csv, header0)
y_train train[label]
X_train train.drop([label], axis1)
classifier svm.SVC(kernelpoly, degree4, gamma0.1)#Train Model
start time.time()
classifier.fit(X_train.values, y_train.values)
end time.time()
exec_time end-start
print(fExecution time: {exec_time} seconds)#Save Model
joblib.dump(classifier, Fashion-MNIST.joblib)注意SVM 算法不是特别适合大型数据集因为它具有二次性质。根据使用的硬件本示例中的模型将需要几分钟时间进行训练。
三、基于MLSever构建Scikit-learn服务
好的所以我们现在有一个保存的模型文件Fashion-MNIST.joblib。让我们来看看我们如何使用 MLServer 来提供服务…
首先我们需要安装 MLServer。 pip install mlserver 额外的运行时是可选的但在服务模型时让生活变得非常轻松我们也会安装 Scikit-Learn 和 XGBoost 的 pip install mlserver-sklearn mlserver-xgboost 你可以在此处找到有关所有推理运行时的详细信息完成后我们需要做的就是添加两个配置文件
settings.json- 这包含服务器本身的配置。model-settings.json- 顾名思义此文件包含我们要运行的模型的配置。对于我们的settings.json文件只需定义一个参数就足够了
{debug: true
}该model-settings.json文件需要更多信息因为它需要了解我们尝试服务的模型
{name: fashion-sklearn,implementation: mlserver_sklearn.SKLearnModel,parameters: {uri: ./Fashion_MNIST.joblib,version: v1}
}name参数为 MLServer 提供了一个唯一标识符这在为多个模型提供服务时特别有用我们稍后会谈到。定义implementation要使用的预建服务器如果有它与用于训练模型的机器学习框架紧密耦合。在我们的例子中我们使用 scikit-learn 训练了模型因此我们将使用 MLServer 的 scikit-learn 实现。对于模型parameters我们只需要提供模型文件的位置以及版本号。
就是这样两个小配置文件我们准备好使用以下命令为我们的模型提供服务 mlserver start . 我们现在已经在本地服务器上运行了我们的模型。它现在已准备好接受通过 HTTP 和 gRPC分别为默认端口8080和8081的请求。
四、测试模型
现在我们的模型已经启动并运行了。让我们发送一些请求以查看它的运行情况。
要对我们的模型进行预测我们需要向以下 URL 发送 POST 请求 http://localhost:8080/v2/models/MODEL_NAME/versions//infer 这意味着要访问我们之前训练的 scikit-learn 模型我们需要用fashion-sklearn替换MODEL_NAME用 v1替换VERSION。
下面的代码显示了如何导入测试数据向模型服务器发出请求然后将结果与实际标签进行比较
import pandas as pd
import requests#Import test data, grab the first row and corresponding label
test pd.read_csv(../../data/fashion-mnist_test.csv, header0)
y_test test[label][0:1]
X_test test.drop([label],axis1)[0:1]#Prediction request parameters
inference_request {inputs: [{name: predict,shape: X_test.shape,datatype: FP64,data: X_test.values.tolist()}]
}
endpoint http://localhost:8080/v2/models/fashion-sklearn/versions/v1/infer#Make request and print response
response requests.post(endpoint, jsoninference_request)
print(response.text)
print(y_test.values)
运行test.py上面的代码时我们从 MLServer 得到以下响应
{model_name: fashion-sklearn,model_version: v1,id: 31c3fa70-2e56-49b1-bcec-294452dbe73c,parameters: null,outputs: [{name: predict,shape: [1],datatype: INT64,parameters: null,data: [0]}]
}
你会注意到 MLServer 已生成一个请求 ID并自动添加了有关用于满足我们请求的模型和版本的元数据。一旦我们的模型投入生产捕获这种元数据就非常重要它允许我们记录每个请求以用于审计和故障排除目的。
你可能还会注意到 MLServer已返回一个数组outputs。在我们的请求中我们只发送了一行数据但MLServer也处理批量请求并将它们一起返回。你甚至可以使用一种称为自适应批处理的技术来优化在生产环境中处理多个请求的方式。
在我们上面的示例中可以找到模型的预测其中outputs[0].data显示模型已将此样本标记为类别0值 0 对应于类别t-shirt/top。该样本的真实标签也是0所以模型得到了正确的预测
五、训练 XGBoost 模型
现在我们已经了解了如何使用 MLServer 创建和提供单个模型让我们来看看我们如何处理在不同框架中训练的多个模型。
我们将使用相同的 Fashion MNIST 数据集但这次我们将训练XGBoost模型。 import pandas as pd
import xgboost as xgb
import time#Load Training Data
train pd.read_csv(../../data/fashion-mnist_train.csv, header0)
y_train train[label]
X_train train.drop([label], axis1)
dtrain xgb.DMatrix(X_train.values, labely_train.values)#Train Model
params {max_depth: 5,eta: 0.3,verbosity: 1,objective: multi:softmax,num_class : 10
}
num_round 50start time.time()
bstmodel xgb.train(params, dtrain, num_round, evals[(dtrain, label)], verbose_eval10)
end time.time()
exec_time end-start
print(fExecution time: {exec_time} seconds)#Save Model
bstmodel.save_model(Fashion_MNIST.json)上面用于训练 XGBoost 模型的代码与我们之前用于训练 scikit-learn 模型的代码类似但这次我们的模型以 XGBoost 兼容格式保存为Fashion_MNIST.json。
六、服务多个模型
MLServer 的一个很酷的事情是它支持多模型服务。这意味着您不必为要部署的每个 ML 模型创建或运行新服务器。使用我们上面构建的模型我们将使用此功能同时为它们提供服务。
当 MLServer 启动时它将在目录和任何子目录中搜索model-settings.json文件。如果您有多个model-settings.json文件那么它会自动为所有文件提供服务。
settings.json注意您仍然只需要根目录中的一个服务器配置文件
这是我的目录结构的细分以供参考
.
├── data
│ ├── fashion-mnist_test.csv
│ └── fashion-mnist_train.csv
├── models
│ ├── sklearn
│ │ ├── Fashion_MNIST.joblib
│ │ ├── model-settings.json
│ │ ├── test.py
│ │ └── train.py
│ └── xgboost
│ ├── Fashion_MNIST.json
│ ├── model-settings.json
│ ├── test.py
│ └── train.py
├── README.md
├── settings.json
└── test_models.py
请注意有两个model-settings.json文件 - 一个用于 scikit-learn 模型一个用于 XGBoost 模型。
我们现在可以运行mlserver start .它将开始处理两个模型的请求。
[mlserver] INFO - Loaded model fashion-sklearn succesfully.
[mlserver] INFO - Loaded model fashion-xgboost succesfully.七、测试多个模型的准确性
现在这两个模型都在 MLServer 上启动并运行我们可以使用测试集中的样本来验证我们每个模型的准确性。
以下代码向每个模型发送一个批处理请求包含完整的测试集然后将收到的预测与真实标签进行比较。在整个测试集上执行此操作可以衡量每个模型的准确性。 import pandas as pd
import requests
import json#Import the test data and split the data from the labels
test pd.read_csv(./data/fashion-mnist_test.csv, header0)
y_test test[label]
X_test test.drop([label],axis1)#Build the inference request
inference_request {inputs: [{name: predict,shape: X_test.shape,datatype: FP64,data: X_test.values.tolist()}]
}#Send the prediction request to the relevant model, compare responses to training labels and calculate accuracy
def infer(model_name, version):endpoint fhttp://localhost:8080/v2/models/{model_name}/versions/{version}/inferresponse requests.post(endpoint, jsoninference_request)#calculate accuracycorrect 0for i, prediction in enumerate(json.loads(response.text)[outputs][0][data]):if y_test[i] prediction:correct 1accuracy correct / len(y_test)print(fModel Accuracy for {model_name}: {accuracy})infer(fashion-xgboost, v1)
infer(fashion-sklearn, v1)
结果表明XGBoost 模型略优于 SVM scikit-learn 模型 Model Accuracy for fashion-xgboost: 0.8953 Model Accuracy for fashion-sklearn: 0.864 总结
希望现在你已经了解使用MLServer为模型提供服务是多么容易。
参考
https://dev.to/ukcloudman/serving-python-machine-learning-models-with-ease-37kh