模型推理服务人工智能后端大模型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点击查看免费下载金丝雀Canary部署是 AI 服务上线最稳妥的灰度发布方式。本文基于 BentoCloud 的金丝雀部署能力系统讲解如何在 BentoML 生态中同时运行多个 Bento 版本、按 HTTP Header、查询参数或随机比例分流流量、在 Playground 中独立验证每个版本、用 Monitoring 观察实时性能并最终将稳定版本平滑提升至 100% 流量。同时结合仓库源码schemasv2.py、deployment.py剖析金丝雀配置的数据结构与底层流转机制让读者既能照做又能理解原理。为什么需要金丝雀部署将 AI 服务新版本直接全量上线存在明显风险如果立即把所有流量切到新 Deployment一旦出现回归regression所有用户会同时受到影响。没有渐进式发布机制时即便是轻微的问题也可能演变成大规模故障并且让回滚变得更加困难。金丝雀部署的核心思想是新旧版本并存、按比例引流、逐步放量。在 BentoCloud 上金丝雀部署可以为你带来以下能力同时部署多个 Bento 版本让新旧版本共存于同一个 Deployment 中提供多种流量路由策略实现细粒度的流量控制按比例在两个版本之间逐渐转移流量例如 90% 打到稳定版、10% 打到金丝雀版支持快速回滚把对生产环境的影响降到最低实时监控各版本线上性能指标用数据决定何时全量发布。从源码结构看金丝雀配置被建模为 Deployment 目标target体系的一部分主目标main对应稳定版本金丝雀目标canary则携带路由规则与各版本权重。DeploymentTargetsSchema中main与canary并列见 schemasv2.pyDeploymentRevisionSchema以targets列表记录每次修订涉及的全部版本目标这正是“一个 Deployment 承载多个 Bento 版本”的底层数据结构支撑。在控制台创建金丝雀 DeploymentBentoCloud 控制台提供了一条完整的可视化操作路径适合快速上手。步骤 1开启 Canary 模式在Configuration配置页面创建或更新 Deployment 时展开Advanced Options高级选项打开Canary模式开关。开启后Deployment 便从“单一版本”进入“多版本并行”状态后续所有路由与权重配置均在此模式下生效。步骤 2选择流量路由策略BentoCloud 提供三种路由策略分别适用于不同的灰度场景1. 按 HTTP Header 分流Split traffic by header对指定的 HTTP Header 做哈希计算将流量稳定地路由到同一版本。由于同一用户携带的 Header 值恒定哈希结果也恒定因此非常适合粘性会话sticky sessions或按用户维度路由的场景。例如按X-User-ID分流curl -H X-User-ID: user123 ...2. 按查询参数分流Split traffic by query parameter对 URL 中的查询参数做哈希计算来决定路由归属。适合按渠道、功能开关feature flag等维度灰度。例如按feature参数分流curl http://your-endpoint-url/predict?featuretest ...3. 随机分流Random完全按照设定的百分比将流量随机分配给各个版本。适合不依赖用户特征、只关心整体比例的 A/B 验证场景。在源码中这三种策略被建模为DeploymentRoutingSchema的route_type字段其取值被严格限定为字面量random、header、query三者之一而route_by则指定被哈希的 Header 键或查询参数键见 schemasv2.py。这一枚举约束从数据层保证了路由策略的合法性与可校验性。步骤 3选择 Bento 版本并分配流量比例选择要参与灰度的 Bento 版本并为每个版本分配流量百分比。例如Bento v110%Bento v230%剩余 60% 流量自动流向主 Bento 版本main注意所有版本的流量分配总和不得超过 100%。默认情况下金丝雀 Deployment 会镜像主 Deployment 的配置包括实例类型instance type、自动扩缩容autoscaling设置和副本数replica counts。如果需要为每个金丝雀版本定制不同的实例规格或扩缩容策略请改用下文介绍的 BentoML CLI 或 Python API 方式以获得更细粒度的控制。步骤 4在 Playground 独立测试各版本配置保存后进入Playground选项卡可以通过**版本选择器version selector**分别对每个版本发起请求验证新版本功能是否符合预期而无需影响线上主版本流量。步骤 5用 Monitoring 观察各版本性能在Monitoring选项卡中可以查看金丝雀 Deployment 内每个 Bento 版本的实时性能指标包括但不限于请求量、延迟、错误率等。这些指标是决定“继续放量”还是“立即回滚”的数据依据。步骤 6确认稳定后全量切换当某个版本在监控期表现稳定、性能达标后直接编辑该 Deployment将该版本的流量占比提升至100%即可完成一次完整的金丝雀发布。由于金丝雀与主版本始终处于同一 Deployment 内全量切换本质上只是修改权重整个操作可以在数秒内完成风险远低于独立重建 Deployment。用配置文件自定义金丝雀 Deployment当需要为每个金丝雀版本配置不同的实例类型、扩缩容策略或环境变量时可以通过独立的配置文件结合 BentoML CLI 或 Python SDK 完成部署。前置条件通过 CLI 或 Python SDK 使用金丝雀 Deployment 需要BentoML 1.4.17 及以上版本。完整配置示例与逐字段解析以下是一个金丝雀 Deployment 配置文件的完整示例对应config-file.yamlname: summarization-blel bento: summarization:xq4dggshm25lecvj access_authorization: false services: Summarization: instance_type: cpu.2 scaling: min_replicas: 1 max_replicas: 1 policy: scale_up_stabilization_window: 0 scale_down_stabilization_window: 600 config_overrides: traffic: timeout: 30 external_queue: false deployment_strategy: RollingUpdate canary: route_type: query route_by: feature versions: a: bento: summarization:t226bcshm2bqicvj weight: 20 services: Summarization: instance_type: cpu.1 envs: - name: VAR_NAME value: var_value scaling: min_replicas: 1 max_replicas: 2 b: bento: summarization:zgk7uja3goq62usu weight: 30 services: Summarization: instance_type: cpu.4 envs: - name: VAR_NAME value: var_value scaling: min_replicas: 1 max_replicas: 3各字段含义说明层级字段含义顶层nameDeployment 名称顶层bento主版本main使用的 Bento格式为仓库名:版本号顶层access_authorization是否启用访问鉴权false表示关闭servicesinstance_type主版本服务实例规格如cpu.2servicesscaling.min_replicas/max_replicas主版本最小/最大副本数servicesscaling.policy扩缩容稳定窗口scale_up_stabilization_window: 0表示扩容即时响应scale_down_stabilization_window: 600表示缩容需等待 600 秒稳定期避免抖动servicesconfig_overrides.traffic服务流量配置覆盖timeout: 30为请求超时秒external_queue: false表示不启用外部队列servicesdeployment_strategy部署策略RollingUpdate表示滚动更新canaryroute_type路由类型此处为query按查询参数可选random/header/querycanaryroute_by被哈希分流的键此处为查询参数featurecanary.versions名称金丝雀版本标识示例中为a、b可自定义canary.versionsbento该金丝雀版本使用的 Bento 标识canary.versionsweight该版本获得的流量权重百分比示例中a为 20、b为 30canary.versionsservices该金丝雀版本的服务配置覆盖可与主版本不同canary.versionsservices.envs为该版本注入的环境变量key-value 列表canary.versionsscaling该版本独立的副本数范围示例中a允许扩到 2 个副本、b允许扩到 3 个在这个示例中主版本拿到剩余流量100% − 20% − 30% 50%。由此可以看出金丝雀的权重体系天然支持“多版本不止一个金丝雀 主版本兜底”的结构非常适合多版本并行对比的场景。提示在 BentoCloud 的Configuration页面创建或更新 Deployment 时页面会展示当前配置对应的完整 YAML/Python 等价代码可以据此核对配置文件与 UI 操作的等价关系。通过 BentoML CLI 部署bentoml deploy -f config-file.yamlbentoml deploy命令支持从 YAML 配置文件创建 Deployment也可通过参数直接创建其命令入口定义于 deployment.py会调用create_deployment完成创建并支持--no-wait跳过等待、--timeout控制就绪等待时长。除创建外同一命令族还提供bentoml deployment update按配置或参数更新已有 Deployment、bentoml deployment apply以配置为准应用期望状态等运维命令可用于后续调整金丝雀版本的权重或实例规格。通过 Python API 部署import bentoml bentoml.deployment.create(config_fileconfig-file.yaml)bentoml.deployment模块封装了创建、更新、删除、启停、查询等完整生命周期操作传入config_file时CLI 与 Python API 走的是同一条配置解析链路因此两种方式在语义上完全等价可按团队习惯选择。金丝雀配置的底层数据模型理解金丝雀配置的源码结构有助于排查问题与二次开发。在 schemasv2.py 中金丝雀相关 Schema 呈清晰的分层关系DeploymentConfigSchemaL50-L59顶层部署配置除services、envs、secrets、access_authorization外直接包含可选字段canaryDeploymentCanaryTargetSchemaL62-L68金丝雀版本可覆盖的基础配置包括envs、secrets、servicesDeploymentVersionSchemaL71-L76在目标配置之上增加bento版本标识与weight流量权重DeploymentRoutingSchemaL79-L86承载route_typerandom/header/query与route_by哈希键DeploymentCanarySchemaL89-L95组合路由规则与versions字典版本名 →DeploymentVersionSchema。在运行时服务端会以DeploymentManifestSchema.routing含route_type、route_by、weights形式下发路由规则。客户端在 deployment.py 的_refetch_targets中从latest_revision.targets中区分出main目标与其余金丝雀目标并把每个金丝雀目标装配为带bento、weight的DeploymentVersionSchema——weight正是来自 manifest 中按目标名索引的weights字典见 deployment.py。这也解释了为什么“总和不得超过 100%”会成为配置校验的硬性约束。从灰度到全量的最佳实践结合上文流程与源码结构一套稳妥的金丝雀发布节奏可以归纳为小流量验证先给新版本 5%10% 的权重重点观察 Playground 中的功能正确性与 Monitoring 中的错误率、延迟指标渐进放量在指标稳定后逐步提升权重如 20% → 50% → 100%每一档保持足够的观察窗口快速回滚一旦发现异常直接把问题版本权重降为 0 或将主版本权重恢复为 100%由于金丝雀与主版本同处一个 Deployment回滚即是改权重可以做到分钟级甚至秒级生效用户维度的精细化需要按用户分流时选择header策略如X-User-ID需要按功能开关分流时选择query策略如feature既不关心用户维度时再选择random。这套方法论与仓库中DeploymentTargetsSchemamain canary的结构设计一一对应主版本永远是流量兜底与回滚锚点金丝雀版本负责承担增量风险两者通过统一的权重与路由机制协同最终让“灰度发布 AI 服务”这件事变得可配置、可观测、可回退。本文所涉操作基于当前仓库文档 canary-deployments.rst 整理配置文件方式需要 BentoML 1.4.17 及以上版本具体以你所使用的 BentoCloud 环境为准。赞分享模型推理服务人工智能后端大模型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点击查看免费下载相关推荐RedwoodJS灰度发布实战指南金丝雀部署与流量控制完整教程 RedwoodJS灰度发布实战指南金丝雀部署与流量控制完整教程 RedwoodJS作为现代化的全栈React框架为企业级应用提供了强大的部署能力。本文后端前端Web框架开发工具《大营销平台》抽奖活动场景需求设计功能解耦、每日免费抽奖与活动账户额度管理《大营销平台》抽奖活动场景需求设计功能解耦、每日免费抽奖与活动账户额度管理 本文是《大营销平台系统设计实现》需求文档第 2 节的深度解读。大营销平台第 1 阶文档教程后端InGate迁移实战如何无缝过渡到Kubernetes官方Gateway APIInGate迁移实战如何无缝过渡到Kubernetes官方Gateway API 随着Kubernetes生态的不断发展官方Gateway API已成为In上一篇GoCV图像识别模型评估准确率、召回率与F1分数下一篇marshmallow缓存策略减少重复数据转换的性能开销创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
NodeGui QProgressBar 实战指南:用 JavaScript 创建与操控原生进度条控件 桌面应用跨平台 【免费下载链接】nodegui A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org 项目地址: https://git… · 2026/9/25 3:27:07
MikroORM 迁移(Migrations)实战指南:从 Schema Diff 到生产环境部署 后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/25 3:27:07
基于Spring Boot+Vue的数码产品对比平台:全栈开发与数据建模实战 二手手机怎么选才不会踩坑?笔记本标压和低压处理器到底差多少?这些问题的答案,本质上都指向同一个东西:可靠的参数数据与直观的横向对比。我最近用 Java、Spring Boot 和 Vue 落地了一个数码产品对比平台,正好把全栈开… · 2026/9/25 3:57:40
Neo4j 5.26 Windows实战:安装配置、CSV导入与多跳查询 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:57:40
PX4 集成 CUAV C-RTK:厘米级 RTK GNSS 模块的接线、配置与固件数据链路 嵌入式物联网机器人自动驾驶智能硬件 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 点击查看 免费下载 CUAV C-RTK 是一款面向大众市场的 RTK(实时动态)GNSS 模块&… · 2026/9/25 3:57:34
ModLens 输出结构完全指南:如何解析 OCR、版面与语义 JSON,把图片证据变成可引用数据 ModLens 输出结构完全指南:如何解析 OCR、版面与语义 JSON,把图片证据变成可引用数据 【免费下载链接】modlens The first vision plugin for DeepSeek Harness, and the vision bridge for every text-only coding agent. Paste an image, get structur… · 2026/9/25 3:57:34
openGauss数据库实验全攻略:从环境搭建到课设答辩 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:57:34
网上订餐系统毕设实战:Spring Boot+Vue全栈开发与答辩指南 做毕设选这个题目,我先说个结论:网上订餐系统这个选题,放在Spring Boot Vue这套组合里,是当前性价比最高的方向之一。原因很简单,它不属于那种冷门小众的偏题,业务流程完整、角色划分清晰、技术栈主流&… · 2026/9/25 3:57:34
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37