多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

BentoML 部署打包指南:从定义运行时环境到构建 Bento 与容器化发布

BentoML 部署打包指南:从定义运行时环境到构建 Bento 与容器化发布 模型推理服务人工智能后端大模型MLOpsLLMOps【免费下载链接】BentoMLThe easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more!项目地址https://gitcode.com/gh_mirrors/be/BentoML点击查看免费下载本文面向希望在任意 Docker 兼容环境中复现、部署 AI/ML 服务的开发者完整讲解 BentoML 的标准化打包格式Bento如何通过bentoml.images.Image与bentoml.service定义运行时环境如何用bentoml build构建可复现的 Bento 产物以及如何用bentoml containerize生成 Docker 镜像并本地运行。读完本文你将掌握一套从源码到可部署镜像的完整打包流水线并理解其底层实现原理。什么是 BentoBentoML 的标准化打包格式BentoML 为打包 AI/ML 服务提供了一种标准化格式称为Bento。一个 Bento 封装了运行 AI 服务所需的全部组件包括源代码服务定义如service.py及其业务逻辑Python 依赖运行所需的第三方包及其锁定版本模型产物model artifacts训练好的模型文件与元数据运行时配置Python 版本、基础镜像、环境变量、启动命令等。这种打包即标准化的设计确保了同一个 AI 服务在不同环境本地、CI、Kubernetes、BentoCloud 等中保持一致性与可复现性——这正是生产级部署的核心诉求。Bento 架构如下图所示从仓库源码看Bento 的构建由 build_config.py 中的BentoBuildConfig负责驱动bentoml build命令在 bentos.py 中通过build_bentofile完成从构建上下文到 Bento 产物的转换。整个构建流程围绕代码 依赖 模型 配置四要素展开这与上文架构图一一对应。定义运行时环境Image 与 bentoml.service构建 Bento 之前你需要先定义其运行时环境。BentoML 通过bentoml.images.Image描述基础镜像、Python 版本、系统包与 Python 依赖并通过bentoml.service装饰器中的image与envs参数将其应用到 Service 上。最小示例service.py以下示例定义了一个名为Summarization的服务使用 Python 3.11并声明torch、transformers两个 Python 依赖import bentoml my_image bentoml.images.Image(python_version3.11) \ .python_packages(torch, transformers) bentoml.service( imagemy_image, envs[ {name: HF_TOKEN}, # 可省略 value在部署时再设置 {name: DB_HOST, value: localhost} ] ) class Summarization: ...关键环境字段说明字段说明默认值python_version指定使用的 Python 版本格式如3.11构建环境中当前运行的 Python 版本见 images.py 中DEFAULT_PYTHON_VERSION f{sys.version_info.major}.{sys.version_info.minor}python_packages列出所需 Python 包支持链式调用chain call无requirements_file(requirements.txt)通过 requirements 文件批量声明依赖等价于将文件内容逐行加入python_requirements无python_packages与requirements_file的底层实现位于 images.py 与 images.py两者都会把依赖写入python_requirements并置_after_pip_install True后续由freeze()统一生成requirements.txt。envs声明运行时环境变量在bentoml.service装饰器中除image外还可通过envs参数指定所需环境变量。每个条目是一个字典支持仅声明名称省略 value如{name: HF_TOKEN}值在部署时再注入——适合存放 token、密钥等敏感信息声明名称与默认值如{name: DB_HOST, value: localhost}为本地运行提供默认配置。envs的底层类型为ServiceEnvConfig在 factory.py 中通过convert_envs转换为BentoEnvSchema。该 Schema 在 build_config.py 中定义除name、value外还支持stage字段取值为all、build、runtime默认all用于区分环境变量生效的阶段——构建阶段如私有镜像源凭据与运行时阶段。更多可定制字段如需进一步定制构建Image还提供以下链式方法均定义在 images.pysystem_packages(...)按发行版包管理器安装系统级依赖requirements_file(path)/pyproject_toml(path)从文件导入依赖run(cmd)/run_script(script)在镜像构建时执行命令或脚本build_include(...)额外纳入构建上下文的文件或目录distro与base_image选择发行版默认debian或完全自定义基础镜像。构建 Bentobentoml build在service.py所在目录下执行bentoml build构建行为说明默认情况下该命令会打包执行目录下的所有文件。如需排除特定文件或目录可在目录中定义.bentoignore文件语法与.gitignore一致BentoML 使用pathspec解析忽略规则见 build_config.py。构建完成后每个 Bento 会被自动分配一个唯一版本号。该版本基于构建上下文内容计算生成保证同一份代码产出的 Bento 可复现、可追溯。若只想构建而不部署到 BentoCloud应使用bentoml build若希望构建后直接部署到 BentoCloud则应使用bentoml deploy详见 cloud-deployment。从源码看bentoml build命令定义于 bentos.py其完整签名包含以下常用选项选项作用-f / --bentofile指定 bentofile 配置文件默认bentofile.yaml-n / --name覆盖 Bento 名称--version覆盖 Bento 版本号--labels附加标签keyvalue格式-o / --output输出格式default或tagtag模式只打印__tag__:tag便于脚本消费--push构建后推送到 BentoCloud需先执行bentoml cloud login--containerize构建后直接容器化等价于追加执行bentoml containerize tag--platform指定构建目标平台构建成功后命令会打印后续可执行步骤包括bentoml deploy、bentoml containerize与bentoml push。查看已构建的 Bentobentoml listbentoml list该命令列出本地 Bento Store 中所有可用的 Bento也可追加名称筛选某一 Bento 的全部版本例如bentoml list Summarization。其实现位于 bentos.py底层通过BentoStore.list读取本地存储。容器化 Bentobentoml containerize构建完成后可借助 Docker 将 Bento 容器化。只需执行bentoml containerize summarization:latestBento 标签tag采用name:version格式其中latest会自动指向最近构建的版本。默认生成的 Docker 镜像 tag 与 Bento tag 相同例如summarization:lkpxx2u5o24wpxjr。可用-t / --image-tag指定自定义镜像 tag甚至可为镜像名加上仓库主机名前缀以便推送例如bentoml containerize summarization:latest -t myrepo.com:username/summarization。可通过--backend选择 OCI 构建后端默认docker仓库注册的可用后端为docker、buildx、buildah、podman、nerdctl、buildctl见 container/init.py。底层会优先启用 BuildKit如需关闭可设置DOCKER_BUILDKIT0。Apple Silicon 的兼容性处理对于搭载 Apple siliconM 系列芯片的 Mac部分 Python 库可能存在兼容性问题可通过--platform指定构建/运行平台bentoml containerize --platformlinux/amd64 summarization:latest这与bentoml build --platform的行为一致仓库源码在非 Linux x86_64 环境下会自动以DEFAULT_LOCK_PLATFORM锁定 PyPI 包版本见 images.py确保依赖解析面向目标平台。查看生成的 Docker 镜像$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE summarization lkpxx2u5o24wpxjr 79a06b402644 2 minutes ago 6.66GB注意镜像体积较大上例约 6.66GB属正常现象因为镜像内包含完整的 Python 运行时、依赖包与模型产物。在本地运行容器化的模型服务拿到镜像后即可在任何 Docker 兼容环境中运行docker run -it --rm -p 3000:3000 summarization:lkpxx2u5o24wpxjr serve参数说明-it以交互模式运行便于观察日志--rm容器退出后自动清理-p 3000:3000将容器内 3000 端口映射到宿主机BentoML 服务默认监听 3000 端口serve传入的启动命令指示镜像以服务模式启动镜像入口点封装在 container/frontend/dockerfile 生成的entrypoint.sh中。运行后即可通过http://localhost:3000访问服务 API。由此同一个 Bento 镜像可被推到任何 Docker 兼容环境本地、云主机、Kubernetes运行实现一次打包、随处部署。总结与完整流程回顾一条完整的打包即部署流水线如下定义运行时环境在service.py中用bentoml.images.Image声明 Python 版本与依赖用bentoml.service(image..., envs...)绑定到服务构建 Bento在service.py目录执行bentoml build得到带唯一版本号的 Bento可用bentoml list查看容器化执行bentoml containerize bento_tag生成同 tag 的 Docker 镜像运行与分发docker run在本地启动服务或将镜像推送到任意 Docker 兼容环境。整个过程以 Bento 这一标准化格式为中枢配合Image的声明式环境定义与envs的环境变量注入让 AI 服务的构建、交付与运行保持高度一致性和可复现性。若你的目标是直接部署到 BentoCloud则可跳过手动构建参考 cloud-deployment 使用bentoml deploy一步到位。赞分享模型推理服务人工智能后端大模型MLOpsLLMOps【免费下载链接】BentoMLThe easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more!项目地址https://gitcode.com/gh_mirrors/be/BentoML点击查看免费下载相关推荐BentoML Bento 构建选项Build Options完整指南从 bentofile.yaml 到可部署 Bento 的运行时规格配置BentoML Bento 构建选项Build Options完整指南从 bentofile.yaml 到可部署 Bento 的运行时规格配置 Bento模型推理服务人工智能后端大模型MLOpsLLMOpsZenML 集成 BentoML Model Deployer 实战从 Bento 构建到本地 HTTP 与容器化模型部署ZenML 集成 BentoML Model Deployer 实战从 Bento 构建到本地 HTTP 与容器化模型部署 本文以 ZenML 官方文档《BeMLOps机器学习后端工作流自动化AI AgentMDCX容器化部署实战从零构建高效应用运行环境MDCX容器化部署实战从零构建高效应用运行环境 在现代化应用部署中容器化技术已成为提升效率的关键手段。MDCX Docker项目通过精心设计的容器镜像为技DevOps容器编排上一篇3分钟掌握DeepL Chrome翻译插件免费开源工具让外文网页阅读零障碍下一篇Midday 大批量附件导出到 Xero 需要多长时间怎么估算并避开每日 5000 次调用上限创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表