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 函数到生产部署,中间件、镜像、扩缩容开箱即用


二、解决什么问题

  1. 模型部署复杂:将模型推理脚本变成 HTTP API 通常要写 FastAPI + 手动批处理 + Docker;BentoML 一个 @bentoml.service 搞定
  2. 依赖管理地狱:不同模型依赖不同 Python 版本/包;BentoML 用 bentoml.images.Image 声明式管理,生成可复现的 Docker 镜像
  3. GPU 利用率低:动态 batching、多模型 pipeline、模型并行,BentoML 内置开箱即用
  4. 模型版本混乱:Model Store 统一管理所有模型版本,一键回滚
  5. 从本地到生产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  # 本地压测

五、典型适用场景

  1. LLM 推理服务:配合 vLLM / Text Generation Inference 做 LLM serving,或直接用 Transformers 跑小模型
  2. 多模型 Pipeline:图像 caption → summarization → translation 串联
  3. AI 功能即服务:给团队提供图像识别、语音合成、embedding 等微服务
  4. 模型 A/B 测试:同一 service 多个版本,自动流量分配
  5. 批量推理 Job:异步任务队列,适合离线大批量推理

六、坑与注意

  1. 镜像构建时间:第一次 bentoml build 需要拉基础镜像 + 安装依赖,可能耗时较长(10-20 分钟);后续构建会 cache
  2. batchable 条件batchable=True 的函数必须接受 list[xxx] 并返回 list[xxx];非 batchable 函数不会合并请求
  3. GPU 显存:多模型共跑 GPU 时记得通过 resources={"gpu": 1} 限制,避免 OOM
  4. 依赖冲突:不同 service 尽量使用相同的基础镜像版本;复杂依赖链建议在 .pyproject.tomlrequirements.txt 中固定版本
  5. 本地调试:生产用 Docker 镜像,本地用 bentoml serve,两者行为应一致(注意环境变量差异)
  6. Cold Start:BentoCloud serverless 模式有冷启动延迟;对延迟敏感场景用 dedicated deployment
  7. 匿名遥测:BentoML 默认收集匿名使用统计,可通过 --do-not-trackBENTOML_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 安装默认即为最新版;生产部署前请核验版本号。