BentoML 使用介绍:功能、价格与上手指南
BentoML 是开源模型部署框架,支持将训练好的模型打包为可复现的 Bento,并一键部署为 API 服务。本文介绍其核心功能、BentoCloud 价格、与 FastAPI/TorchServe 的差异,并给出安装、定义服务、构建与部署的完整步骤,帮助 AI 工程师快速上手。
BentoML 是面向 AI 工程师的开源模型部署框架,目标是把训练好的模型快速变成可复现、可扩展的在线 API。它通过标准化的 Bento 打包格式,把模型、依赖、推理代码和配置封装在一起,让部署不再依赖临时脚本。
BentoML 是什么
BentoML 提供从模型保存、服务定义、构建打包到部署上线的完整工作流。核心概念是 Bento:一个包含模型文件、Python 依赖、服务代码和配置的目录。你可以把 Bento 部署到本地、Docker、Kubernetes 或 BentoCloud。
核心功能
- 多框架支持:兼容 PyTorch、TensorFlow、Scikit-learn、XGBoost、Hugging Face 等。
- 服务定义:用 Python 类定义 API,支持同步、异步和流式响应。
- 自动打包:生成 Bento 和 Docker 镜像,锁定依赖版本。
- 自适应批处理:自动合并请求,提高 GPU 利用率。
- 模型注册与版本:管理模型版本和元数据。
- 可观测性:内置日志、指标和追踪接口。
价格方案
BentoML 本身是开源项目,可免费使用。商业产品 BentoCloud 提供托管部署,常见方案如下:
| 方案 | 价格 | 适用场景 |
|---|---|---|
| 开源版 | 免费 | 本地开发、自建集群 |
| 开发者版 | 按需付费 | 小规模测试 |
| 团队版 | 约 $500/月起 | 生产环境、协作 |
| 企业版 | 定制 | 安全合规、私有部署 |
具体价格以官网为准。若已有 Kubernetes,可先用开源版自建,成本更低。
与 FastAPI、TorchServe 对比
| 工具 | 优势 | 局限 |
|---|---|---|
| BentoML | 打包标准化、多框架、部署简单 | 学习曲线略高 |
| FastAPI | 灵活、生态大 | 需手动管理依赖和模型 |
| TorchServe | PyTorch 官方 | 仅限 PyTorch |
上手指南
1. 安装
pip install bentoml
2. 保存模型
以 Scikit-learn 为例:
import bentoml
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
bentoml.sklearn.save_model("iris_clf", model)
3. 定义服务
创建 service.py:
import bentoml
import numpy as np
from bentoml.io import NumpyNdarray
runner = bentoml.sklearn.get("iris_clf:latest").to_runner()
svc = bentoml.Service("iris_classifier", runners=[runner])
@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
def predict(input_data):
return runner.predict.run(input_data)
4. 本地运行
bentoml serve service:svc --reload
访问 http://localhost:3000 测试接口。
5. 构建 Bento
bentoml build
6. 容器化部署
bentoml containerize iris_classifier:latest
然后运行 Docker 镜像即可。
最佳实践
- 锁定依赖版本,避免环境漂移。
- 使用自适应批处理提升 GPU 利用率。
- 为生产服务配置健康检查和日志。
- 用 BentoCloud 或 Kubernetes 做水平扩展。
结论
BentoML 适合需要快速、标准化部署 AI 模型的团队。开源版免费且功能完整,BentoCloud 提供托管方案。通过 Bento 打包和 Python 服务定义,你可以在几分钟内把模型变成 API。建议先从本地服务开始,再逐步迁移到生产环境。