跳到主要内容

预算提醒与限制

预算策略允许您通过设定定期时间窗口(日、周或月)内的支出阈值(美元)来控制 AI 网关的开支。当超出阈值时,策略将执行以下两种操作之一:

  • 警报 (Alert) — 发送 Webhook 通知。请求继续正常处理。
  • 拒绝 (Reject) — 使用 HTTP 429 阻止后续请求。导致支出超过预算的那个请求会被允许完成;拒绝操作适用于在超过阈值之后到达的请求。

支出会在每个新时间窗口开始时自动重置。启用工作区 (Workspaces) 功能后,预算策略可以限定在特定工作区范围内,以便按工作区跟踪支出。

管理预算策略

在 MLflow UI 中导航至 AI Gateway > Budgets 以查看和管理您的预算策略。

Budget policies list

创建预算策略

点击 Create budget policy 打开创建对话框。指定预算金额(美元)、重置周期以及超出阈值时采取的操作。

Create budget policy dialog

警报 Webhook

ALERT 策略的阈值被超出时,网关会发送一个包含违规详情的 Webhook。警报在每个窗口内仅触发一次,同一窗口内的后续请求不会触发额外的 Webhook。

Webhook 端点可以直接在 Budgets 页面的 Budget alert webhooks 部分进行配置。

Webhook 有效负载包含:

json
{
"budget_policy_id": "bp-abc123",
"budget_unit": "USD",
"budget_amount": 500.0,
"current_spend": 523.40,
"duration_unit": "MONTHS",
"duration_value": 1,
"target_scope": "GLOBAL",
"workspace": "default",
"window_start": 1704067200000
}

拒绝行为

REJECT 策略的阈值被超出时,网关将阻止所有后续指向 AI 网关端点的请求,并返回 HTTP 429 响应。

text
HTTP/1.1 429 Too Many Requests

{
"detail": "Budget limit exceeded for policy 'bp-abc123'. Limit: $500.00 USD per 1 month. Request rejected."
}

时间窗口

预算窗口是固定的时间间隔:

  • 每日 — 每天 UTC 时间午夜重置
  • 每周 — 每 7 天重置一次(周日)
  • 每月 — 每个月 1 号重置

累计支出在每个新窗口开始时重置为零。

授权

当跟踪服务器启用 身份验证 时,只有管理员用户可以创建、更新或删除预算策略。

预算跟踪策略

网关使用 预算跟踪器 (budget tracker) 在每次请求时累积支出并评估预算策略。有两种策略可选:localredis

Local (本地)

优点

  • 无外部依赖 — 完全在进程内运行。
  • 延迟最低;每个请求无需网络往返。
  • 累计支出通过启动时的跟踪回填 (trace backfill) 在重启后得以保留。

缺点

  • 预算状态在工作进程或副本之间共享。每个进程独立跟踪支出,因此所有进程的总支出可能会超过配置的限额。
  • 如果跟踪回填被禁用或不可用,支出将在重启时重置为零。
bash
# No extra environment variables required
mlflow server --host 0.0.0.0 --port 5000

Redis

优点

  • 预算状态在所有网关工作进程和副本之间共享 — 全局强制执行限额。
  • 原子操作保证了窗口初始化和成本累积过程中不会出现竞争条件。

缺点

  • 需要一个可从每个网关进程访问的 Redis 实例。
  • 由于 Redis 往返,会增加少量的单次请求延迟。
  • 需要额外依赖:pip install redis
环境变量默认值描述
MLFLOW_GATEWAY_BUDGET_REDIS_URLRedis 连接 URL。设置此变量将激活 redis 策略。示例:redis://:6379/0 (明文), rediss://host:6380/0 (TLS), redis://:password@host:6379/0 (带验证)。
bash
export MLFLOW_GATEWAY_BUDGET_REDIS_URL=redis://:6379/0
mlflow server --host 0.0.0.0 --port 5000

策略刷新间隔

两种策略都会定期从数据库重新获取预算策略。间隔由 MLFLOW_GATEWAY_BUDGET_REFRESH_INTERVAL 控制(默认:600 秒)。减小该值可更快地获取策略更改;增大该值可减轻数据库负载。

bash
export MLFLOW_GATEWAY_BUDGET_REFRESH_INTERVAL=30
mlflow server --host 0.0.0.0 --port 5000