BentoML
https://github.com/bentoml/BentoML
BentoML 是一个用于构建**「可靠、可扩展且经济高效的 AI 应用程序的」**框架。它配备了模型服务、应用程序打包和生产部署所需的一切。它旨在简化流程,使其更加易于管理和高效。
BentoML 是一个开源框架,可以将机器学习模型及其依赖项打包为称为 “BentoService” 的标准化格式。这种格式允许将模型无缝集成到各种部署平台和系统中。
特点
BentoML 具有如下特点。
-
可扩展性:BentoML 旨在处理大规模部署,从而更轻松地在高需求系统上提供模型服务。
-
集成:BentoML 提供与流行的部署平台、云服务和容器化工具的集成,使其能够适应不同的技术堆栈。
-
版本控制和管理:BentoML 促进了模型版本控制和管理,可以轻松地在不同模型版本之间切换并跟踪更改。
-
监控和日志记录:BentoML 包含对监控模型性能的内置支持,支持收集相关指标和日志以进行分析。
-
安全性和合规性:BentoML 支持安全模型服务,可以更轻松地实施必要的安全措施并遵守数据法规。
-
延迟和性能:BentoML 优化模型服务以提高性能,减少延迟并确保高效的实时推理。
-
模型再现性:BentoML 捕获模型服务所需的所有依赖项,确保开发和部署环境之间的再现性和一致性。
总体而言,BentoML 简化了打包、部署和管理 AI 模型的过程,使数据科学家和工程师能够专注于构建出色的模型,而不会因部署复杂性而陷入困境。
初体验
库的安装
可以直接使用 pip 安装。
pip install bentoml
为了有效地利用 BentoML,需要遵循两个关键流程。
- 模型打包
此过程包括将你的模型以及任何必要的依赖项封装到可部署的组件中。BentoML 提供了一种简单且标准化的方法来打包模型,从而实现轻松部署和服务。
- 模型服务
模型打包后,你可以使用 BentoML 进行部署和服务。
这涉及设置服务基础设施并公开 API 端点以与模型交互。BentoML 提供各种部署选项,例如容器化、无服务器部署或云平台部署,让你可以选择最适合你需求的方法。
模型打包
以下是如何使用 BentoML 打包 scikit-learn 模型的示例。
我们将使用 iris 数据集训练分类器模型。
from sklearn import svm, datasets
iris = datasets.load_iris()
X, y = iris.data, iris.target
iris_clf = svm.SVC()
iris_clf.fit(X, y)
import bentoml
bentoml.sklearn.save_model("iris_clf", iris_clf)
print ( f"Model saving: {saved_model} ")
在此示例中,我们使用 sklearn.datasets.load_iris() 加载 Iris 数据集。然后,我们使用 Iris 数据集中的特征 (X_train) 和标签 (y_train) 创建并训练 svm 模型。
最后,我们使用 bentoml.sklearn.save_model 来保存训练后的模型。
可以通过运行以下命令查看本地存储的所有模型。
bentoml models list
模型服务
准备好模型后,我们就可以开始创建模型服务了。
import numpy as np
import bentoml
from bentoml.io import NumpyNdarray
iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
svc = bentoml.Service("iris_demo", runners=[iris_clf_runner])
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def classify(input_series: np.ndarray) -> np.ndarray:
result = iris_clf_runner.run(input_series)
return result
@svc.api
装饰器用于定义 classify 函数的端点。
装饰器的参数input
指定classify
函数的输入应该是 NumPy ndarray,而output
参数指示函数的输出也应该是 NumPy ndarray。
总的来说,此代码定义了一个 API 端点,它接受 NumPy ndarray 作为输入,使用 iris_clf_runner 进行处理,并将结果预测作为 NumPy ndarray 返回。
现在让我们使用以下命令运行该服务:
bentoml serve app.py:svc --reload
通过运行此命令,BentoML 服务器将启动 app.py 文件中定义的指定服务。
svc 表示 app.py 中可用的服务。
–reload 表示在代码发生更改时自动重新加载服务器。
成功后会打印出类似如下内容。
到目前为止,我们的模型就部署好了,我们通过 curl 来访问对应的地址,看一下效果。
curl -X 'POST' 'http://0.0.0.0:3000/classify' -H 'accept: application/json' \-H 'Content-Type: application/json' -d '[[1,2,3,1]]'
或者通过在浏览器访问 http://0.0.0.0:3000/ 来进行尝试。
构建 docker 镜像
首先,我们需要创建一个 bentofile.yaml 文件,内容如下所示。
service: "app.py:svc"
include:
- "*.py"
python:
packages:
- numpy==1.23.5
- pandas==1.5.3
- scikit-learn==1.2.1
- pydantic==1.10.5
然后我们执行。
bentoml build
输出如下所示。
然后通过执行。
bentoml containerize iris_demo:lzkwsbdpf6n4bchj
命令,就可以把模型打包成 docker 镜像。
最后运行如下命令来启动 docker 服务。
docker run -p 3000:3000 iris_demo:lzkwsbdpf6n4bchj
总之,BentoML 是一个功能强大且用户友好的框架,旨在简化打包、服务和部署机器学习模型的过程。
它的多功能性和对各种部署选项的支持使其成为将模型集成到生产系统中的绝佳选择,减少了开发时间和工作量,同时提高了整体性能和效率。
来源————程序员小寒