BentoML/BentoML · 上手攻略
- 仓库:bentoml/BentoML
- 链接:https://github.com/bentoml/BentoML
- 分类:ai(llm-infra)
- 作者:Jay
- 更新:2026-07-10
一、是什么
BentoML 是一个 Python 库,用于构建和部署 AI 模型推理服务。它将任意 AI/ML 模型的推理代码,通过几行装饰器注解,自动变成可扩展的 HTTP API,并支持 Docker 镜像打包、模型版本管理、动态批处理、多模型编排等生产级特性。
核心理念:"Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more!"
与同类框架的核心区别: - vLLM / Text Generation Inference(TGI):专注 LLM 推理引擎调优,是底层推理 Runtime - Ray Serve:通用分布式 Serving 框架,BentoML 在其上封装了更友好的 Python-first 抽象 - BentoML:端到端,从 Python 函数到生产部署,中间件、镜像、扩缩容开箱即用
二、解决什么问题
- 模型部署复杂:将模型推理脚本变成 HTTP API 通常要写 FastAPI + 手动批处理 + Docker;BentoML 一个
@bentoml.service搞定 - 依赖管理地狱:不同模型依赖不同 Python 版本/包;BentoML 用
bentoml.images.Image声明式管理,生成可复现的 Docker 镜像 - GPU 利用率低:动态 batching、多模型 pipeline、模型并行,BentoML 内置开箱即用
- 模型版本混乱:Model Store 统一管理所有模型版本,一键回滚
- 从本地到生产gap:本地
bentoml serve,生产bentoml build && bentoml containerize,同一套代码
三、快速安装
pip install -U bentoml
# 本地运行需要 PyTorch / Transformers(按需)
pip install torch transformers
⚠️ Python ≥ 3.9
四、核心用法
4.1 定义 Service
# service.py
import bentoml
from bentoml import service
@bentoml.service(
image=bentoml.images.Image(python_version="3.11").python_packages("torch", "transformers"),
)
class Summarization:
def __init__(self):
import torch
from transformers import pipeline
device = "cuda" if torch.cuda.is_available() else "cpu"
self.pipeline = pipeline('summarization', device=device)
@bentoml.api(batchable=True)
def summarize(self, texts: list[str]) -> list[str]:
results = self.pipeline(texts)
return [item['summary_text'] for item in results]
关键点:
- @bentoml.service:声明服务及其运行环境镜像
- bentoml.images.Image:声明 Python 版本和依赖包
- @bentoml.api:将方法暴露为 HTTP 端点
- batchable=True:启用动态批处理,提升吞吐
4.2 本地运行
bentoml serve
# 默认监听 http://localhost:3000
4.3 调用服务
import bentoml
with bentoml.SyncHTTPClient('http://localhost:3000') as client:
result: str = client.summarize([bentoml.__doc__])[0]
print(result)
4.4 构建 & 部署
# 打包成 Bento(标准化部署单元)
bentoml build
# 生成 Docker 镜像
bentoml containerize summarization:latest
# 运行容器
docker run --rm -p 3000:3000 summarization:latest
4.5 部署到 BentoCloud
# 登录
bentoml cloud login
# 从当前目录部署
bentoml deploy
4.6 高级:多模型编排(Model Composition)
import bentoml
@bentoml.service()
class MultiModalPipeline:
def __init__(self):
from transformers import pipeline
self.captioner = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base")
self.summarizer = pipeline("summarization")
@bentoml.api(batchable=True)
def image_to_summary(self, image_bytes: bytes) -> str:
caption = self.captioner(image_bytes)[0]['generated_text']
summary = self.summarizer(caption)[0]['summary_text']
return summary
4.7 高级:GPU 推理
@bentoml.service(
resources={"gpu": 1, "memory": "4Gi"},
image=bentoml.images.Image(python_version="3.11").python_packages("torch>=2.0"),
)
class LLMService:
...
4.8 并行 & 扩缩容
# 并行 worker 数(默认自动)
BENTOML_NUM_WORKERS=4 bentoml serve
# 指标 & 可观测性
bentoml evaluate # 本地压测
五、典型适用场景
- LLM 推理服务:配合 vLLM / Text Generation Inference 做 LLM serving,或直接用 Transformers 跑小模型
- 多模型 Pipeline:图像 caption → summarization → translation 串联
- AI 功能即服务:给团队提供图像识别、语音合成、embedding 等微服务
- 模型 A/B 测试:同一 service 多个版本,自动流量分配
- 批量推理 Job:异步任务队列,适合离线大批量推理
六、坑与注意
- 镜像构建时间:第一次
bentoml build需要拉基础镜像 + 安装依赖,可能耗时较长(10-20 分钟);后续构建会 cache - batchable 条件:
batchable=True的函数必须接受list[xxx]并返回list[xxx];非 batchable 函数不会合并请求 - GPU 显存:多模型共跑 GPU 时记得通过
resources={"gpu": 1}限制,避免 OOM - 依赖冲突:不同 service 尽量使用相同的基础镜像版本;复杂依赖链建议在
.pyproject.toml或requirements.txt中固定版本 - 本地调试:生产用 Docker 镜像,本地用
bentoml serve,两者行为应一致(注意环境变量差异) - Cold Start:BentoCloud serverless 模式有冷启动延迟;对延迟敏感场景用 dedicated deployment
- 匿名遥测:BentoML 默认收集匿名使用统计,可通过
--do-not-track或BENTOML_DO_NOT_TRACK=True关闭
七、与同类对比
| 特性 | BentoML | FastAPI + uvicorn | Ray Serve | vLLM / TGI |
|---|---|---|---|---|
| 上手难度 | 低(装饰器) | 低 | 中 | 中 |
| 多模型编排 | ✅ | 需手动 | ✅ | ❌(单模型) |
| 动态批处理 | ✅ 开箱即用 | 需自己写 | 需配置 | ✅ |
| Docker 打包 | ✅ 自动生成 | 需自己写 | 需自己写 | 需自己写 |
| 模型版本管理 | ✅ Model Store | ❌ | ❌ | ❌ |
| GPU 调度 | ✅ | ❌ | ✅ | ✅ |
| 云原生部署 | BentoCloud / K8s | 自行对接 | K8s / Ray cluster | K8s |
| 适用场景 | 通用 AI serving | 简单 API | 分布式 serving | LLM 推理优化 |
结论:需要快速将模型推理代码变成生产 HTTP API,选 BentoML;追求极致 LLM 推理吞吐,用 vLLM 或 TGI;需要通用分布式 Serving,选 Ray Serve。
八、一句话推荐结论
BentoML 是 AI 模型服务化最 Pythonic 的方案,一套装饰器走天下,从本地调试到 Docker 部署到云端扩缩容,无需关心基础设施细节,是团队 AI 能力快速上线的最佳选择。
来源: - GitHub README(https://github.com/bentoml/BentoML) - BentoML 官方文档(https://docs.bentoml.com)
⚠️ 注:本文档撰写时基于最新公开版本(v1.3.x+),pip 安装默认即为最新版;生产部署前请核验版本号。