跳到主要内容

4 篇博文 含有标签「backpressure」

查看所有标签

推理服务提供商拒绝发送的背压信号

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的重试逻辑在遇到 429 时会退避。当延迟上升时,你的队列深度告警会触发。在这两个信号之间,存在一个供应商负载区间,此时正确的做法是“减速 20%”——而供应商唯一会告诉你的是那个姗姗来迟的二进制限流信号。对于智能体集群协作来说,最有用的信号恰恰是没有任何推理 API 真正公开的那个。

429 是墓碑,而不是警告。当你收到它时,供应商已经认定你的流量过载,你已经浪费了一次请求的 Token 计数,而且——如果你与其他消费者共享租户——他们可能也收到了。有趣的故障模式不是 429 本身;而是它发生前的几秒钟,那时全世界的客户端都在“一切正常”和“你被切断”之间盲目飞行。

速率限制层级崩溃:当你的智能体循环产生自我 DoS 时

· 阅读需 14 分钟
Tian Pan
Software Engineer

错误报告显示服务很慢。仪表板显示服务很健康。每分钟 Token 使用量处于层级上限的 62%,稳稳处于绿色安全范围内。然后你打开追踪(traces)查看形态:一个用户请求生成了一个规划步骤,该步骤发出了 11 个并行工具调用,其中 4 个是搜索扇出,每个都触发了子智能体,而这些子智能体又分别并行调用了 3 个工具——那个单一的“请求”现在正同时从 47 个不同的工作线程猛击你自己的 Token 桶。产品的其他 99 名用户被堵在它后面,收到了他们本不该得到的 429 错误。你的智能体正在对自己发起 DoS 攻击,而速率限制器(rate limiter)正在忠实执行你给它的指令。

这就是速率限制层级崩塌。你购买了为 HTTP API 设计的边界防御系统,在那样的系统中,一个请求等于一个工作单元;然后你把它连接到一个请求意味着深度未知且分支因子无界的树形系统前端。单一桶模型不仅无法提供保护,而且它的失败是隐形的,因为你的聚合数据从未突破任何限制。损害发生在尾部、相关的爆发中,以及那些恰好在时间上紧邻重度请求的专注用户身上。

LLM 流水线中的背压:排队论在基于 Token 的服务中的应用

· 阅读需 13 分钟
Tian Pan
Software Engineer

凌晨 3 点的重试风暴通常以同样的方式开始:提供商的一次短暂抖动导致少数请求超过了速率限制,你的客户端库对此进行了重试,而这些重试落在了尚未恢复的端点上,导致更多请求失败;在 90 秒内,你的队列深度迅速飙升,而你的提供商仪表板显示你已经用满了 100% 的每分钟 Token 配额(TPM),由此产生的积压工作甚至可以用五位数的美元来衡量。事后分析会将其归结为“惊群效应(thundering herd)”。但诚实的回答是,你在一个容量多变的下游服务之上构建了一个固定吞吐量的重试策略,却忘记了排队论对此早有定论。

大多数知名的服务韧性模式是为那些吞吐量像一堵墙一样固定的下游服务设计的:例如带有连接池的数据库,或者具有已知并发限制的微服务。但 LLM 提供商并非如此。你的有效吞吐量是一个动态目标,受到你的服务层级、所选模型、Prompt 大小、响应大小、一天中的时间,以及同一提供商的其他用户是否正在微调前沿模型的影响。将它视为一根固定的管道,是我今年看到的多数 LLM 故障的根本原因。

Agent 流水线中的背压:当 AI 生成工作的速度快于执行速度

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个基于流行开源技术栈构建的多 Agent 研究工具陷入了递归循环,运行了 11 天才被发现。账单:47,000 美元。两个 Agent 一直在不停地互相对话,消耗着 token,而团队却以为系统在正常工作。这就是 Agent 流水线没有背压时会发生的事情。

问题是结构性的。当编排 Agent 将任务分解为子任务并生成子 Agent 来处理每一个任务,而这些子 Agent 又可以自行生成更多子 Agent 或在多个工具调用之间扇出时,你就会得到指数级的工作生成。流水线产生工作的速度超过了它能执行、完成甚至核算的速度。这与响应式系统、流式架构和网络协议几十年前解决的问题完全相同——同样的解决方案同样适用。