一、简单过程
模型训练
from sklearn import svm, datasets
# Load training data
iris = datasets.load_iris()
X, y = iris.data, iris.target
# Model Training
clf = svm.SVC()
clf.fit(X, y)
模型保存
import bentoml
bentoml.sklearn.save_model("iris_clf", clf)
> Model(tag="iris_clf:thqyrdhl52ubgasc", path="/root/bentoml/models/iris_clf/thqyrdhl52ubgasc/")
模型加载
loaded_model = bentoml.sklearn.load_model("iris_clf:latest")
loaded_model.predict([[5.9, 3.0, 5.1, 1.8]])
推理实例化Runner
在BentML中,建议在服务中运行ML模型推理的方式是通过Runner,这使BentML在如何调度推理计算、如何批处理推理请求和利用可用硬件资源方面具有更大的灵活性。保存的模型可以作为Runner实例加载,如下所示:
# 创建Runner实例:
iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
# “Runner.init_local”仅用于调试和测试。确保在部署到生产环境之前将其移除。
iris_clf_runner.init_local()
# 这将产生与加载模型相同的结果:
iris_clf_runner.predict.run([[5.9, 3.0, 5.1, 1.8]])
构建推理服务
将以下代码写入service.py文件中
import numpy as np
import bentoml
from bentoml.io import NumpyNdarray
# Runner实例化
iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
# 定义服务名称并加载Runner实例
svc = bentoml.Service("iris_classifier", runners=[iris_clf_runner])
# 与FastAPI一致,通过装饰器绑定路由与视图
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def classify(input_series: np.ndarray) -> np.ndarray:
return iris_clf_runner.predict.run(input_series)
Bento概念: 机器学习的Dockerfile
Bento是BentML中的部署格式,它整合了运行生产部署服务所需的所有源代码、模型文件、配置文件和依赖项规范。可以把它看作是为机器学习模型设计的Dockerfile。
要开始构建Bento,请在项目目录下创建一个bentofile.yaml:
service: "service.py:svc"
labels:
owner: bentoml-team
project: gallery
include:
- "*.py"
python:
packages:
- scikit-learn
- pandas
二、CLI命令行
# 打印模型元信息详情
bentoml models get iris_clf:latest
name: iris_clf
version: thqyrdhl52ubgasc
module: bentoml.sklearn
labels: {}
options: {}
metadata: {}
context:
framework_name: sklearn
framework_versions:
scikit-learn: 1.2.2
bentoml_version: 1.0.19
python_version: 3.10.11
signatures:
predict:
batchable: false
api_version: v1
creation_time: '2023-05-06T09:15:53.480596+00:00'
# 打印模型列表
bentoml models list
Tag Module Size Creation Time
iris_clf:thqyrdhl52ubgasc bentoml.sklearn 5.98 KiB 2023-05-06 09:15:53
# 本地化启动服务
bentoml serve service.py:svc --reload
# 基于`bentofile.yaml`容器化启动服务
bentoml build
bentoml containerize iris_classifier:latest
三、基础镜像
docker pull bentoml/bento-server:1.0.0a7-python3.9-debian-cudnn
后续问题BentoML模型部署学习
问题集合
- 能否指定Bentoml模型保存路径?
- 如何增加Bentoml模型的并发能力?
- 如何做容器化
- 如何做服务托管