BentoML模型部署

522 阅读2分钟

一、简单过程

模型训练

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模型部署学习

问题集合

  1. 能否指定Bentoml模型保存路径?
  2. 如何增加Bentoml模型的并发能力?
  3. 如何做容器化
  4. 如何做服务托管