ValueError: gammavariate: alpha and beta must be > 0.0` before any deployment is selected. Because `pick_best` samples every pool model’s cell for the classified `request_type`, **one poisoned

使用 LiteLLM AdaptiveRouter 并开启 Postgres 状态持久化时,如果数据库里存在 alpha=0 或 beta=0 的脏状态行,Thompson 采样会在路由选择前抛异常,导致该 request_type 下的所有请求返回 HTTP 500。优先排查 LiteLLM_Ad

快速结论:使用 LiteLLM AdaptiveRouter 并开启 Postgres 状态持久化时,如果数据库里存在 alpha=0beta=0 的脏状态行,Thompson 采样会在路由选择前抛异常,导致该 request_type 下的所有请求返回 HTTP 500。优先排查 LiteLLM_AdaptiveRouterState 表中是否存在零值行,而不是先怀疑网络或上游模型。

适用环境:litellm v1.95.0;LiteLLM proxy + Postgres 持久化;Kubernetes 部署(3 副本、共享 Postgres 状态)。Issue 未提供操作系统、Python、CUDA、显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 中提出的合并 cold-start 先验与 epsilon 下限均为建议修复,相关 PR #29398 在 v1.95.0 时“appears unmerged”;最终该 Issue 被作为重复项关闭,指向 #41579,后者说明 #29397 已由 PR #39955 在 v1.102.0 修复。

注意事项:仅重启 Pod 无法修复,因为被污染的状态行会持久化在 Postgres 中并在每次启动时重新加载;手工修改数据库属于未经 Issue 验证的操作,存在风险。升级到修复版本前,请先确认对应版本是否包含 #39955 所引入的修复。

问题场景

用户在 LiteLLM 中以 model=adaptive-router 方式调用自适应路由,并启用了 Postgres 状态持久化(多副本 K8s 部署)。当自适应路由状态表 LiteLLM_AdaptiveRouterState 中存在 alpha=0beta=0 的记录后,只要请求被分类到对应的 request_type,路由就会在部署选择阶段之前崩溃并返回 HTTP 500。

Issue 中的生产证据:17 行状态中有 13 行 alpha=0,时间戳集中在 Z.AI 配额耗尽窗口(2026-08-22 至 08-26);Prometheus 指标 litellm_deployment_success_responses_total{model="adaptive-router"} 连续 3 周为 0,累计 1841 次失败。

报错原文

ValueError: gammavariate: alpha and beta must be > 0.0

# thompson_sample 内部调用
sample = random.betavariate(alpha, beta)  # crashes when alpha <= 0 or beta <= 0

# 最小触发
import random; random.betavariate(0.0, 1.0)  # ValueError

原因分析

Issue 指出这是两个相互耦合的缺陷,从 v1.86.2 到 v1.95.0 在 main 分支上均未改变:

  1. 读取侧无校验:load_state_from_dblitellm/router_strategy/adaptive_router/adaptive_router.py,约第 141 行)直接把数据库行当作绝对后验写回单元:BanditCell(alpha=row.alpha, beta=row.beta)。而写入侧 AdaptiveRouterUpdateQueue.flush_state_to_db 通过 Prisma {"increment": ...} 写入的是累计增量(用于避免多 Pod 互相覆盖)。读取时把增量当绝对值,就丢弃了 initial_cell 保证的冷启动先验(beta ≥ 0.5)。结果:只记录成功的单元持久化为 beta=0,只记录失败的单元持久化为 alpha=0,重载后先验丢失。
  2. 采样侧无 epsilon 下限:thompson_samplelitellm/router_strategy/adaptive_router/bandit.py,约第 81 行)直接调用 random.betavariate(alpha, beta),任何 alpha=0beta=0 都会抛出 ValueError: gammavariate: alpha and beta must be > 0.0。由于 pick_best 会为该 request_type 采样池中每个模型的单元,一个被污染的单元就会让该 request_type 的所有请求 500

该崩溃发生在路由之前,不会选中任何部署,因此没有学习信号,也就不会自愈;状态被污染后仅靠重启无法恢复。上述两个缺陷属于 Issue 作者的明确分析,可视为可能原因,但最终该 Issue 被作为 #41579 的重复项关闭,未在本 Issue 内完成修复验证。

环境排查

  • 确认 litellm 版本是否为 v1.95.0(Issue 中的生产环境版本);同时确认是否已升级到包含 #39955 的 v1.102.0 及以后版本。
  • 确认是否使用 LiteLLM proxy + Postgres 状态持久化,以及是否多副本共享同一 Postgres 状态(Issue 为 K8s 3 副本)。
  • 检查 LiteLLM_AdaptiveRouterState 表中 alphabetatotal_samplesrequest_typemodel_name 字段,重点找 alpha=0beta=0 的行。
  • 检查 Prometheus 中 litellm_deployment_success_responses_total{model="adaptive-router"} 是否长时间为 0。
  • 确认某个 request_type 是否整体失败、其他 request_type 是否仍成功,以验证“单一污染单元影响整个 request_type”的特征。
  • Issue 未提供操作系统、Python、CUDA、显卡、依赖版本信息,这些项无需补写,只需按实际部署自行记录。

解决步骤

  1. 先确认是否为同一问题:按 request_type 查询 LiteLLM_AdaptiveRouterState,确认是否存在 alpha=0beta=0 的行;对照现象是一个 request_type 全部 500、其他类型正常。
  2. 若怀疑是数据污染所致,可参照 Issue 的复现方式做最小验证:向表中插入一行 alpha=5.0, beta=0.0 的记录,重启后发起匹配该 request_type 的请求,观察是否出现同样的 gammavariate 报错。此操作会污染真实状态表,仅应在可清理的测试环境中进行。
  3. 确认部署版本与修复状态:Issue 建议的修复为(a)load_state_from_db 将持久化增量合并到冷启动先验上而非直接覆盖,(b)thompson_sample 增加 epsilon 下限(alpha = max(alpha, 1e-10)beta 同理)作为纵深防御。Related PR #29398 在 v1.95.0 时 appears unmerged。
  4. 本 Issue 被关闭为 #41579 的重复项,#41579 覆盖了相同缺陷(含 update_queue.py 的写入侧下限),并说明 #29397 为 closed、由 PR #39955 在 v1.102.0 修复。因此优先升级到包含该修复的版本,并以 #41579 与 #39955 为准。
  5. 若暂时无法升级,可优先尝试清理或修正已被污染的状态行(例如删除坏行让冷启动先验重新生效),但这属于推测性缓解,Issue 中并未验证,执行前务必备份数据库。

验证方法

清理或修复状态后,重启 Pod,发送原本失败的 request_type 请求,确认不再出现 ValueError: gammavariate: alpha and beta must be > 0.0,且 HTTP 500 消失、请求能正常选中部署。同时观察 litellm_deployment_success_responses_total{model="adaptive-router"} 是否从 0 恢复增长,并复查 LiteLLM_AdaptiveRouterState 中不再有 alpha=0beta=0 的行。

参考来源

BerriAI/litellm #41598

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24030

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注