所有文章 > AI驱动 > bentoml:把你的机器学习模型变成专业级API服务!

bentoml:把你的机器学习模型变成专业级API服务!

bentoml:把你的机器学习模型变成专业级API服务!

大家好,我是阿图!今天要给大家介绍一个超级实用的Python库 – bentoml。如果你学过机器学习,一定遇到过这个烦恼:训练好的模型要怎么部署?怎么让别人也能用上我的模型?bentoml就是来解决这个问题的!它能帮你轻松把模型打包成标准化的服务,还能自动生成API文档,简直不要太方便!

bentoml是什么?

bentoml就像是一个神奇的包装工具,它能把你的机器学习模型打包成一个标准化的服务。打个比方:你做了一道美味的菜(模型),bentoml就是那个能把菜打包成外卖的小哥,让所有人都能方便地品尝到你的美食(使用你的模型)。

首先,让我们安装bentoml:

pip install bentoml

一个简单的示例

我们先用一个简单的scikit-learn模型来演示:

import bentoml
import numpy as np
from sklearn.ensemble import RandomForestClassifier

# 训练一个简单的模型
model = RandomForestClassifier()
X = np.random.randn(100, 4)
y = np.random.randint(0, 2, 100)
model.fit(X, y)

# 保存模型到bentoml
bentoml.sklearn.save_model(
"iris_classifier",
model,
signatures={
"predict": {"batchable": True}
}
)

创建Service类

接下来,我们创建一个服务类来包装我们的模型:

import bentoml
import numpy as np
from bentoml.io import NumpyNdarray

# 加载保存的模型
iris_clf_runner = bentoml.sklearn.get("iris_classifier:latest").to_runner()

# 创建服务
svc = bentoml.Service("iris_classifier", runners=[iris_clf_runner])

# 创建API端点
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
async def predict(input_array: np.ndarray) -> np.ndarray:
result = await iris_clf_runner.predict.async_run(input_array)
return result

部署和使用

写好Service后,我们可以把它保存成service.py,然后用命令行启动服务:

bentoml serve service:svc

接下来就可以用curl或者Python请求这个服务了:

import requests
import numpy as np

# 准备测试数据
test_data = np.random.randn(1, 4)

# 发送请求
response = requests.post(
"http://localhost:3000/predict",
json=test_data.tolist()
)

print(response.json())

高级功能展示

bentoml还支持很多高级功能,比如模型版本管理和API文档自动生成:

import bentoml
from bentoml.io import JSON, NumpyNdarray
from pydantic import BaseModel

class IrisInput(BaseModel):
sepal_length: float
sepal_width: float
petal_length: float
petal_width: float

svc = bentoml.Service(
"iris_classifier_advanced",
runners=[iris_clf_runner]
)

@svc.api(
input=JSON(pydantic_model=IrisInput),
output=JSON(),
description="预测鸢尾花品种"
)
async def predict_species(input_data: IrisInput):
input_array = np.array([[
input_data.sepal_length,
input_data.sepal_width,
input_data.petal_length,
input_data.petal_width
]])
result = await iris_clf_runner.predict.async_run(input_array)
return {"predicted_species": int(result[0])}

小贴士

  1. 1. bentoml默认使用3000端口,可以通过--port参数修改
  2. 2. 生产环境部署时记得配置CORS和认证
  3. 3. 可以用bentoml models list查看所有保存的模型
  4. 4. 在bentoml.Service中可以设置多个runners,实现模型ensemble

实战小练习

试试看:把你之前训练的任意一个机器学习模型用bentoml包装成服务,并尝试用不同的方式(curl、Python requests、Swagger UI)来调用它。

提示:访问http://localhost:3000/docs可以看到自动生成的API文档和在线测试界面。

小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问阿图哦。bentoml真的是机器学习部署的神器,掌握了它,你的模型就能轻松上线啦!祝大家学习愉快,Python学习节节高!

本文章转载微信公众号@月光下的阿图

#你可能也喜欢这些API文章!