跳到主要内容

下午 3 点和凌晨 3 点的同一个 Prompt 并不是同一个 Prompt:LLM 评估中的昼夜漂移

· 阅读需 13 分钟
Tian Pan
Software Engineer

评估套件在凌晨 2 点运行。流量很低。缓存是冷的,但队列是空的。供应商的连续批处理程序有空闲插槽,并将以接近其 TTFT(首 Token 延迟)底线的水平处理每个请求。延迟分布很紧凑,评测模型分数稳定,仪表盘显示一片绿色。团队发布上线。

六个小时后,太平洋时间上午 8 点,同样的 Prompt 在美国早高峰期间进入生产环境。p95 延迟是评估报告的 2.4 倍。相当一部分请求从一个供应商那里收到了 529 错误,并回退到另一个供应商的较小路由层级。流式传输的节奏更加断断续续。评测模型(当天晚上对生产环境追踪样本进行重新运行)给出的中位数得分比凌晨 2 点给出的相同 Prompt 的得分低了半分。代码库没有变化。Prompt 没有变化。只是挂钟时间变了。

必须意识到的架构真相是:LLM 调用不是其输入 Token 的纯函数。它是一个随机分布式系统调用,其输入包括挂钟时间、供应商集群的负载、Prompt 缓存的状态、当前解码批次的大小,以及供应商负载均衡器在你的请求到达的那一毫秒所做出的路由决策。在凌晨 2 点运行评估的团队,是在一种用户永远无法体验到的条件下校准仪器。

为什么挂钟时间是一个输入

枚举这些机制是有帮助的,因为一旦它们被命名,昼夜效应就不再显得神秘。至少有四个机制。

连续批处理改变了负载下的计算逻辑。 现代推理服务器不会一次只运行一个请求。它们使用连续批处理(continuous batching),将来自多个请求的 Token 插入到同一个前向传播中,并在每个请求完成时在 Token 级别将其移除。Anyscale 对该技术的研究表明,与静态批处理相比,吞吐量有数量级的差异,但这种吞吐量的提升带来了一个评估套件很少建模的属性:处理你的 Token 的前向传播批次大小取决于当时正在处理的其他 Token。在凌晨 2 点,批次很小;在上午 10 点,批次很大。矩阵乘法更大,内核选择可能不同,在某些硬件上,浮点累加顺序会发生变化——这意味着你在独立请求中计算出的相同 Logit 可能会产生足够大的差异,从而在边界附近改变 top-k 的决策。

浮点运算不符合结合律。 Thinking Machines 对 LLM 推理非确定性的分析使这一点变得具体:即使在 temperature 为 0 时,相同的输入也可能产生不同的输出,因为在不同负载条件下运行的内核以不同的顺序减少浮点总和,而在 IEEE-754 标准中,(a + b) + c 并不总是等于 a + (b + c)。大多数时候,这种差异是不可见的。但在边界 Token 上——即在 Softmax 中两个候选 Token 差之毫厘的情况下——这种差异就会显现。边界 Token 翻转的速率与批次大小相关,批次大小与负载相关,而负载又与一天中的时间相关。

Prompt 缓存具有“温度”。 供应商缓存长共享前缀(系统提示词、检索到的上下文、少样本示例),这样他们就不必为每个请求重新计算。在前缀是“热”的情况下到达的请求支付一种延迟成本;在前缀被逐出时到达的请求支付另一种成本。逐出是由总缓存压力驱动的,而总缓存压力由邻近流量驱动,而这——再次强调——是具有昼夜规律的。在凌晨 2 点,你的评估套件是唯一使用该前缀的租户;由于重复使用,缓存保持为“热”。在高峰时段,你正在与其他人竞争缓存容量,你的前缀被冷启动重新计算的频率比你的评估所建议的要高。

供应商在负载下会悄悄地重新路由。 供应商不会公布具体发生的时间,但过载错误模式已有详尽记录:在 2026 年,OpenAI 和 Anthropic 都有明显的峰值时段容量压力,且 429 / 529 曲线具有强烈的昼夜特征。不太明显、且对评估来说更危险的是在过载错误之前发生的路由回退:原本会命中主集群的请求被转移到了具有不同硬件、可能具有不同量化、可能具有不同投机解码配置的备份池中。输出仍然符合发票上模型名称的规格,但不一定与主集群产生的输出完全一致。而在凌晨 2 点在主集群上进行评估的团队,并没有可追溯的记录来证明其生产环境请求中的一部分正由微妙不同的系统处理。

为什么凌晨 2 点评估是行业默认标准

没有人主动选择这样做。这是逐渐形成的。

CI 在夜间运行,是因为在过去的世界里,CI 一直是在那个时间运行的,当时衡量的指标是单元测试的通过/失败,而成本相关的维度是“我们是否在早会前腾出了构建服务器集群”。对于确定性系统来说,这是一个合理的计划。但对于一个行为随他人硬件负载而变化的随机分布式系统来说,这是一个错误的计划。

供应商方面的激励措施加剧了这种情况。非高峰时段的批处理 API 提供了大幅折扣——Anthropic 的批处理层级优惠 50%,OpenAI 的也类似,而且窗口期明确设定在低负载时段。一个试图完成季度成本目标的团队会将评估移至折扣窗口,而不会仔细思考这对代表性意味着什么,因为预算中的细目写着“评估”,而捕获后果的细目写着“生产质量回退”,它们存在于由不同人负责的不同仪表盘上。

还有人为因素:评估工程师希望在早上看到结果。凌晨 2 点运行意味着稳定的条件、没有高峰时段频率限制带来的波动,以及早会上整洁的仪表盘。每一个个体动机都指向了错误的时间。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates