AgentX v3:CUDA 护城河在 Agent 推理时代还能守住吗?

自2025年11月以来,长期情境、多回合代理工作负载迅速增长。它们现在主导了生产推理的流量。2026年4月,OpenAI的企业级代理支出超过了ChatGPT的支出。

主动性工作流程已经决定性地接过了接力棒。今天,我们宣布AgentX 1.0——全球首个完全开源、多回合代理编码推理基准测试,支持100万上下文,基于Apache 2.0发布。

我们的完整仪表盘请点击这里查看。

过去大多数性能测量基于固定序列长度的预填充和解码工作负载,但这是一种不准确的工作负载测量方式。现实是多回合、长上下文、高预填充重复使用,伴有子代理突发、KVCache卸载和大量工具调用。

因此,我们的目标是为行业打造衡量AI硬件和软件性能的正确方法。

我们已经花费了超过300万美元构建这个数据集。如今,我们什么都开源了。InferenceXv3实现了AgentX,这是一种新的现实场景,除了现有的“固定序列长度”场景(8k1k、1k1k、1k8k)之外。

它通过使用代理编码流量,取代之前单回合8k输入和1k输出令牌的流量,改进了基准场景。

完整矩阵运行于约2兆瓦的连续运算,跨越1000多块芯片,涵盖多种SKU,包括MI355X、GB300 NVL72、GB200 NVL72、B300、B200、MI325、MI300X、H200和RTX Pro服务器。Rubin将在本月晚些时候到货,TPU和Mi455X UALoE72则将在今年晚些时候到货。如果你觉得我们的免费开源作品有价值,请给你一个星。

看到NVIDIA和AMD在代理性工作负载上表现出色,真是太棒了。NVIDIA在许多前沿机型上表现非常好,而AMD在某些前沿机型上也表现不错,针对特定对比。

AgentX在最初几个月产出的最有价值的东西并不是最初的结果。关键在于基准已经产生了巨大的行业影响。超过70+个上游PR为了优化vLLM、SGLang、TensorRT-LLM、ATOM、AITER、Dynamo、LMCache和Mooncake等的实际生产代理工作负载,使用AgentX作为北极星基准代理。

这些优化改进大多可以转移到生产流量中。我们在文章后面会深入探讨这些优化。

开源是InferenceX的核心原则,因此我们打开的堆栈比大多数使用“开源”一词的人都要多。这包括开放前端,通过易于消耗的REST API提供公共数据库而这些是多个一级人工智能实验室的容量规划团队已经消耗的, 公开GitHub Actions CI来源,日志,以及对每个点进行准确性验证。

关键是,我们的基准测试配置主要跟踪recipes.vllm.ai以及SGLang 食谱对于上游图像,我们测量的是实际客户体验的性能,而不是仅仅测量 benchmax 的图像。

三到四周后,我们将发布一篇AgentX更新文章。内容将涵盖针对代理工作负载的进一步优化,以及AMD和英伟达的最新性能结果。需要理解的是,代理工作负载的特性正在快速更新。

InferenceX将继续迅速进行相关工作负载的基准测试。

InferenceX 百分之百致力于开源——没有我们开源合作伙伴的贡献和支持,这一切都不可能实现。我们要感谢以下为AgentX 1.0版本做出巨大贡献的人士:

  • Inferact/虚拟语言语言模型王罗杰、乔一帆、莫始明、马志强等众多作家
  • RedHat/llm-d:迈克尔·戈因,罗伯特·肖,泰勒·迈克尔·史密斯
  • Radix方舟/SGLang:张百洲、安宇薇、陆明义等
  • LMCache/TensorMesh:沈山缪
  • 维卡:卡兰·福克斯,《瓦尔布莱坞》
  • MoonCake 维护者:腾马,徐文洁,柯阳
  • AMD:托马斯·王、海肖、罗安迪、郑承格、方春、帕斯潘查尔、何比尔、德德珊、洪霞、方舟、雷吉尔伯特、王彦菲、王杜义、孙彭、金玲鹏、西蒙·丹尼尔森、郭晓虎、张海晨、刘昌、道格·莱尔、普瓦伊亚·帕兰加帕等众多成员,AMD上海发展中心
  • 英伟达: Xin Li、Anthony Casagrande、Kedar Potdar、Ankur Singh、Ishani Dhanani、Nick Comly、Nvidia上海TensorRT-LLM团队,以及许多其他人
  • Anthropic 工作人员,及时修复了多个使得实现 AgentX 的漏洞
  • GitHub:Austen Stone,感谢他帮助提升AgentX所用GitHub Actions的可靠性
  • 还有许多其他

此外,我们感谢所有支持我们开源InferenceX计划的人士,包括Meta、Microsoft、Oracle、OpenAI、MiniMax、Moonshot Kimi、阿里巴巴Qwen和智浦GLM。

代理工作负载简要概述

在高层次上,代理性工作负载由四个要素来描述:

  1. 多回合:一个会话包含许多用户/助手交互(数十甚至数百次),而聊天机器人场景中只有几次。多回合、长上下文、高预填充重复使用,包含子代理突发和大量工具调用。
  2. 详细背景:系统提示、工具定义以及大量回合让上下文迅速积累。
  3. 高前缀重复使用:由于对话是线性的,通常第N-1回合的输出会连接到第N回合,因此大多数上下文可以从KV缓存中提供,而不必重新计算(这取决于可用来存储KV张量的存储空间)。随着n的增长,缓存输入与未缓存输入的比例通常趋近于1。
  4. 副特工爆发:会话会启动多个短寿命的子代理,并获得新的上下文,从而创建突发式的KVCache模式。

结合上述特性,这些工作负载的基准测试与现有的固定序列长度基准测试本质上不同。即,代理推断本质上是系统问题.由于前缀重用极高,KV 张量必须高效地跨节点/秩传输(如 NIXL、MORI-IO、MOONCAKE)。

此外,不同的对话应根据适当前缀所在位置路由到不同的节点/等级,以最大化缓存命中率(如LLM-d、Dynamo、vLLM/SGLang路由器)。长时间的上下文对话会强调 KV 缓存的 HBM 容量,需要将 KV 张量卸载到不同内存层级(DRAM、SSD),这一过程需要高效执行(如 Mooncake Store、LMCache、vLLM 简单卸载、SGLang HiCache)。

这与固定序列长度、单回合工作负载形成对比,后者前缀重复使用无关紧要,推理性能主要反映基线芯片/内核性能。这并不是说InferenceX上大量的固定序列长度数据不重要。

事实上,剥离代理服务的复杂性清楚地显示了低层推理性能优化的进展。它还为AgentX结果提供了重要的基线。

为了尽可能真实地展示AgentX工作负载,我们收集了初步语料库393个内部半分析匿名克劳德代码追踪重播。为了匿名内容同时保持原始前缀重复使用模式,我们采用类似的方法Qwen-百莲数据集是最早的生产痕迹语料库之一。

然后我们用AIPerf根据不同级别并发客户端的原始请求计划重建跟踪。我们与Anthropic合作,发布了两个Claude代码功能,使AgentX数据集成为可能。

我们感谢Anthropic工作人员的帮助。

  1. https://github.com/anthropics/claude-code/issues/49207
  2. https://github.com/anthropics/claude-code/issues/66761

这段关于代理工作负载的简要介绍应为读者提供足够的背景,帮助理解下一节的结果。在后面的部分,我们将深入探讨方法论、回放束和数据集的技术层面。

代理编码推断性能

在分析推理编码性能方面,OpenAI、Anthropic、xAI 以及其他前沿实验室关注三点。他们考察了每美元与互动性(TPOT)的表现、TTFT(第一个代币的时间)以及整体端到端任务完成。

每兆瓦的性能也很重要,考虑到地面数据中心的电力是一个关键限制(金钱是社会建构,实验室似乎有无限供应,但在当今时代电力在物理上很难获得)。

我们的数据中心模型对电力需求和供电的季度积累进行了估计。

在本节中,我们将重点介绍前沿模型中一些整体的代理性表现主题。我们强烈建议读者将此作为参考自己调查结果.所有数据均为开源,社区有机会自行对现实世界推理表现的现状做出结论。

DeepSeek V4 Pro 0813

DeepSeek V4 Pro 0813 是中国一款极受欢迎的 Frontier 空重型号。它拥有约1.6万亿个参数,激活参数达490亿。

截至8月21日,下图显示了所有提交品的每个SKU最佳表现,并按总拥有成本(TCO)进行归一化。

ISL/OSL 的分布全部所有 DeepSeek v4 运行的请求如下:ISL p50=88k,p90=272k,p95=404k,p99=675k,OSL p50=413,p90=2.2k,p95=3.7k,p99=8.6k。

一般来说,重要的是要考虑每个用户每秒的两个令牌数(TPS——也称为互动性)和TTFT,因为这些往往是相互牺牲的.例如,在上图中,一些SKU在不错的交互性下实现了非常高的吞吐量,但TTFT却严重退化。

什么叫“可接受”的p90 TTFT因应用而异。对于大多数服务代理工作负载的生产系统,你可以预期p90 TTFT在200-5000毫秒之间。超过5到10分的数字都已经触及了“在线推断”的界限。

对于曲线的超高通量部分仍有实际应用,在这些领域延迟无关紧要,且系统峰值利用率是理想的(批处理,非常长期代理等等)。

在单节点性能方面,MI355X开源性能(vLLM)落后于厂商专用的ATOM(AMD相当于TensorRT LLM)。我们认为AMD在ATOM上快速突破前沿固然令人振奋,但我们鼓励他们更优先将这些改进上游到vLLM中。

AMD的分布式推理(DI)团队在过去六个月中在8k1k场景上取得了巨大进展。团队距离DI成为现实工作负载的可行解决方案还有一段路要走。

从每GPU吞吐量与交互性方面,我们观察到1xDEP8+1xDEP8的disagg配置在高吞吐量场景下性能提升有限,而在低延迟场景下表现反而更差。

更糟糕的是,中高交互配置吞吐量的提升被p90 TTFT的显著峰值所掩盖。其中一个原因是SGLang在并发64上方使用了-enable-prefill-delayer论证,这推迟了预补录取,以便DP等级能组成更完整的班级(最多可进行30次前传)。

此外,这些点数还将分块预填充规模从8,192增加到65,536。

在端对端延迟方面,ATOM MI355X 比 B200 vLLM 更强(但它不能比 B300 或 B200 SGLang 更强)。问题在于,除了阿里巴巴公司一个小型广告业务单元外,大多数中国或西方的人工智能实验室都不愿意在生产中使用ATOM,因为缺少大量功能。

baba 的主 Qwen LLM 组织在生产环境中不使用 ATOM。

在2026年8月21日之前,AMD强大的MI355XSGLang开发团队在端到端(e2e)性能上与B200 vLLM持平。

然而,B300 vLLM和B200 SGLang仍然击败了AMD的MI355X。

2026年8月21日之后,由于Inferact和Nvidia对vLLM的优化,Nvidia B200的每美元性能已超过MI355X。这场竞争非常激烈,我们很期待未来几周的性能优化。

我们很快会发布一篇关于AgentX更新的文章。

AMD已经公布了他们的DeepSeekv4 vLLM优化方案,并包含了许多令人兴奋的改进方案,以提升性能.

现在说说Nvidia。他们最具竞争力的解决方案是GB300 Dynamo TRTLM和GB200 Dynamo vLLM。这两种配置都依赖PD disagg以实现高吞吐量和合理的交互性。

此外,GB300配置采用宽EP(DEP32)译码实例,以实现前沿中部更高的吞吐量。

注意,2xDEP8+1xDEP12 GB200的TPS显著接近3xDEP8+1xDEP16 GB300点,相较于TTFT。同样,TTFT通常对工作量的“尖峰”更敏感。由于 GB300 点实现了更高的整体并发,因此会产生更多的子代理流量,从而导致更多的冷预填充。

我们可以在TTFT图表中看到这一点:

通过TCO标准化后,B300 vLLM与B200 vLLM的综合性能非常相似。主要区别在于B300能够“挤压”额外的吞吐量,因为它的重压机容量比B200提高了50%。

我们可以通过AgentX新推出的服务器度量可视化进一步可视化这种差异。

在384条并发代理跟踪负载下,B300 vLLM DEP8 搭配3TB DRAM通过vLLM简单卸载实现了91%的HBM缓存命中率,额外增加了1.36%的DRAM缓存命中率。

这是因为HBM KV 缓存工作集大小在这种配置下,大约有4300万个令牌,且任何时刻的运行令牌数量几乎都不超过这个数。

在B200并发196(其他参数保持不变)中,我们看到HBM缓存命中率仅为73%,且更依赖DRAM且卸载缓存命中率接近20%。我们观察到 HBM KV 缓存工作集大小为 2200 万个令牌,大约是 B300 的一半。

DRAM KV 卸载通常实现为写直缓存,意味着写入 HBM 缓存的每个前缀也会写入 DRAM 缓存。因此,当可卸载的DRAM容量远大于HBM KV缓存容量(1.5-3的整数)时,该方法最为有效。

H200 SGLang FP8 能够在低并发条件下支持 DeepSeek v4,甚至在性能/成本方面与 B200/MI355X SGLang 竞争。然而,由于缺乏 HBM,它无法在高通量场景中与新一代 SKU 竞争。

此外,依赖 DRAM KV 卸载在更高并发频率下,随着用户数量增加,延迟变得不合理。

总体而言,MI355X 与主要竞争对手 B200 和 B300 相比表现尚可。性能最接近于曲线中较低吞吐量/低延迟的部分,此时仅部署张量并行性和更基础的内核。

AMD需要优化MI355X上的DEP内核,以便在高吞吐量场景下更具竞争力,尤其是考虑到比B200有1.5倍的HBM。

Kimi K3 2.8万亿参数

Kimi K3是中国另一款前沿开放权重模型,拥有2.8万亿参数。这在参数数量上与Claude的Mythos/Fable5模型架构相近。我们用它作为开放权重代理模型架构。

Kimi K3型号体积大到连单台B200服务器都装不下,需要使用宽EP/宽TP或流水线并行处理才能安装所有权重。在vLLM上,推测解码/DSpark直到最近才与流水线并行性结合,因此Kimi K3上的B200性能非常糟糕,MI355X也让B200无法使用流水线并行的推测解码而扰。

MI355X vLLM 在 0 日开箱即用,适用于短上下文单回合工作负载,但对于长上下文多回合工作负载,MI355X AITER 和 Triton 内核在第一周就遭遇了严重的恐慌发作,上游 vLLM 在实际工作负载下完全无法使用 MI355X。

Hopper 在满足 Kimi K3 的 AgentX 工作负载时遇到了困难,因为 Kimi 是一个庞大的模型,而且 vLLM 维护者和 NVIDIA 并未专注于优化 Hopper for Kimi K3。

Hopper(SM90)需要为K3定制调优的内核,以及TP32/EP32调优的形状,以实现高交互性。

我们认为AMD通过ATOM快速推动K3性能提升是件好事。不过,我们鼓励AMD进一步优先将这些改进上游到vLLM中。ATOM 目前是 AMD 性能最好的引擎,但对于使用上游开源服务栈的客户来说,vLLM 仍然是更相关的比较对象。

在40到60秒的e2e延迟曲线上,MI355X ATOM在性能单价上甚至超过了GB300 NVL72 vLLM。

MiniMax M3

Nvidia在MiniMax M3 432B上完全碾压所有竞争对手。AMD在MiniMax上的软件性能非常糟糕,尤其是在高上下文长度时,因为AMD工程领导层只鼓励调优用于短上下文单回合工作负载,忽视长上下文多回合工作负载。

B300 TRT-LLM TP2 拥有 M3 的皇冠。由于 MV 缓存局部性成为路由约束,DP-注意点在 M3 上不为最优。这一点后面会有进一步解释。对于GB200在并发40时,TP4/EP4/DPA在>3倍p90 TTFT下获得的吞吐量是普通TP4的0.60倍。

在并发32时,缓存占比理论上的96.0%。每个DP等级拥有泳池的私人区域;30万代币会话重新落在错误排名会重新计算所有数据。M3 Frontier上没有带EP的译码配置,可能是因为并发不足以平衡所有专家的负载。

B200/B300在TCO归一化吞吐量上完全击败了机架级MiniMax M3的对应产品。在AgentX上,机架规模优势不如Dynamo路由器那么明显,因为它的工作会随着活跃前缀的数量和长度而扩展。

本文后面会讨论对此优化以及将吞吐量提升两位数百分比的若干修复方法。此外,没有针对宽EP、宽DCP或宽TP的良好内核。而且因为GB200/300的总得起成本(TCO)更高,所以没有宽EP/宽DCP,按TCO显示性能会更差。

话虽如此,我们也期待Nvidia对该SKU的机架级解决方案进行进一步优化。我们会在后续文章中重点介绍这些内容。

目前没有提交运行上下文并行,尽管ISL为31.7万披索。在4 KV磁头下,DCP即使在TP8下也限制在2个,且MSA索引器需要自己的上下文并行处理(打开vLLM PR),详见上下文并行(Context Parallelism)部分。

Nvidia所有帕累托最优点都包含超过20并发的KV卸载,但AMD的帕累托最优点都不使用KV卸载到DRAM的。AMD在其他型号上使用KV卸载的频率也低于Nvidia。

原因是 GPU 到 CPU 的 KVCache 卸载传输在 AMD vLLM 上效率极低。hipMemcpyBatchAsync API 直到 ROCm 7.14 才出现。没有hipMemcpyBatchAsync,vLLM的原生Simple CPUOffloading需要从CPU到GPU进行串行化的Memcpy,而不是批量处理成更大的消息大小。

值得一提的是,vLLM的性能在吞吐量与p90交互性方面与TRT-LLM非常接近。此外,vLLM在吞吐量方面优于p90 TTFT。

Qwen3.5 397B

Qwen3.5 397B 每隔几层使用 GatedDeltaNet 而不是原版关注。GatedDeltaNet 由麻省理工学院/英伟达研究院发明,理论上对状态存储的需求是恒定的,而非原版 Attention 的线性存储需求。

这意味着它相比同等的密集注意力模型,具有更低的存储需求。与像Nemotron灾难那样的端到端模型训练研究不同,Nvidia Research在基础研究方面非常出色,比如GDN和用于前沿模型的潜在MoE。

注意该模型的原生最大上下文长度是262k个token,因此我们使用截断数据集.这模拟了在较小模型上工作量,在多个合成中,最大上下文长度通常会达到,用户实际如何使用该模型。

Qwen3.5 397B在SGLang上是NVIDIA的强劲优势,在90 tok/s/用户的表现上提升了20多倍。目前AMD在Qwen 3.5 SGLang上没有任何竞争。

同样,我们观察到Nvidia过度优化交互性,牺牲了TTFT,尤其是在TRT-LLM的情况下。在上图中,所有Nvidia SGLang提交的p90 TTFT都远低于TRT-LLM。

与H100相比,Qwen3.5版的B300 FP4每美元性能提升了12倍。

GLM 5.3

GLM 5.3是在GLM5.2 744B基础上构建的,并增加了后续培训。这是一个前沿级模型。

在OSS SGLang性能方面,这又是Nvidia在真实代理推理性能上再次击败AMD的另一款车型。在每用户150 tok/s/用户的P90交互性下,Nvidia的成本效益高出多达5倍。

以目前AMD软件的150 tok/s/用户,Nvidia的性能优势如此巨大,即使竞争对手芯片硬件免费出售(但供应商当然仍需支付数据中心托管、电力及其他运营成本), 使用Nvidia时,每个代币的成本仍然会更便宜。

我们期待几周后发布的AgentX更新文章中AMD的性能优化,届时还将带来其他令人兴奋的成果。

从ATOM数据来看,AMD在某些p90端对端归一化交互性系列的表现上,按成本计算优于GB300、NVL72、SGLang甚至TRTLLM。AMD团队在这些成果上做得非常出色。

我们再次期待AMD将这些优化移植到SGLang。我们也期待NVIDIA在未来几周内快速优化GB300 NVL72。

我们花点时间介绍一个实验度量,称之为端对端(E2E)规范化交互性.从高层次来看,这个指标旨在评估用户在考虑TTFT和TPS时体验响应速度的速度。

它由OSL/端对端EL定义。代入E2EL等于TTFT加上OSL乘以TPOT(实际上只解码OSL - 1个代币),我们得到以下方程。

这实际上是互动性(1/TPOT部分)加上与TTFT成比例的额外惩罚。

请注意,该指标是实验性的,并非完美。例如,它会严重惩罚高TTFT,并未捕捉到某些优化(如PD拆分)的所有细节。所有针对AgentX v1.0的投稿都分别优化了常规交互性和TTFT。

我们将继续研究反映现代代理推断所有细微差别的新北极星指标。

AgentX 行业影响——代理工作负载优化

AgentX在最初几个月中最具影响力的结果不是产生开源数据集,而是50+ 上游 PR 的行业影响由 AgentX 合作伙伴创建,旨在利用 AgentX 作为北极星优化现实世界的代理工作负载。

AgentX的真实代理流量不仅基准测试原始预填充和解码内核,还测试从KV缓存生命周期、混合注意力缓存正确性、CPUKV卸载、传输进度、路由亲和力到增量代币化、请求序列化和调度器簿记的整个端到端令牌生成过程。

所有这些步骤对每一次生产代理部署都至关重要。

这只是我们持续使命的延续,帮助生态系统加速改进,实现软件的光速提升。一个很好的例子是SemiAnalysis与AMD软件开发团队多年的合作,我们持续提供反馈和意见,帮助现代化他们的软件开发原则。

这不仅推动了AMD的许多加速发展的变革,也对让AMD开源在代理工作负载方面更接近一流起到了关键作用。

分布式推理生态系统简要介绍

如前所述,代理推理本质上是一个系统范围的问题,而不仅仅是芯片/核层面的问题。此外,当有较大的因素时分布式系统处理数十万个代理请求时,请求的调度和管理变得不易,并且带来了实际的性能影响。

例如,子代理会发出突发式的KVCache模式,如果优化不当,会错误地驱逐主代理缓存。

下图在高层次上展示了该堆栈。在顶部,路由器(有时称为“前端”)将请求路由到不同的工作者。例如,如果服务器运行数据并行注意,每个DP等级都有独立的KV缓存。

为了不扰乱任何一个KV缓存,请求会根据不同的策略进行路由,例如:一致性哈希,其中同一会话/子代理中的请求通过其唯一ID路由。

对于大多数路由策略,每个路由器的实现没有显著差异。有些是独立的组成部分,例如vLLM 路由器以及LLM-D 路由器而其他则集成在发动机中,例如SGLang 模型网关以及ATOM 网格.

请求路由完成后,由推理引擎(如vLLM、SGLang等)的调度器处理。引擎负责实际执行推理并通过API返回结果。此外,每个引擎都有一个接口,用于将引擎内部的KV缓存连接到外部KV缓存管理器。

这使得一个“可插拔”生态系统成为可能,不同的KV缓存管理器可以集成到各种推理引擎中。

当前AgentX结果中使用的简单部署,经营月饼与vLLM在同一节点上。每个 vLLM 工作者嵌入一个 Mooncake Store 客户端,并将部分主机 DRAM 贡献到外部 KV 缓存池。

vLLM 通过 MooncakeStoreConnector 接口连接到该池,该接口将可重复使用的 KV 块加载到 GPU 内存中,并将新计算的块保存回主机内存。

Mooncake Store 管理外部缓存,包括放置和驱逐,而 Mooncake 传输引擎负责数据在 GPU 和 CPU 内存之间的实际移动。

不同的KV缓存管理器可能使用不同的传输引擎,在内存层级或机器之间物理移动字节,例如预填充和解码工作者之间。例如,月饼店就使用月饼转运引擎用于在GPU内存、主机DRAM和远程节点之间移动KV块。

部署可以利用Mooncake Store将可重复使用的KV块卸载到托管DRAM,同时利用NIXL直接将预填充GPU的请求特定KV传输到解码GPU。Mooncake TE 负责 Mooncake Store 路径的移动,而 NIXL 则在支持的情况下使用 UCX 和 GPUDirect RDMA 处理独立的预填充-解码路径。

因此,多个KV管理和传输路径可以共存于同一推理引擎中。

该生态系统由许多独立组件组成,包括推理引擎、路由器、KV缓存管理器、数据传输库和集群控制器。像Nvidia Dynamo、LLM-d和AMD Infera这样的平台,将这些组件的组合“打包”成完整的软件发行版。

他们发布兼容的容器镜像、连接器、部署清单和编排逻辑,使组件能够作为一个系统部署和运行。最终产物通常是一组协调的容器,而非单一的单一服务(例如:Dynamo、LLM-d 和 Infera 通常部署在 k8s 上,协调大型分布式系统)。

上下文并行性

长上下文有助于并行技术,而固定的8k提示无法强行应用,因为8k提示时需要拆除的内容很少,而TTFT本身就很短。此外,TP和DP注意力这类并行策略在较长上下文长度下并不最优,TP可能导致每个队列复制完整的KV。

虽然 Kill Bay 共享用于 DP 的注意力,但在较长上下文中可能会卡住,因为长上下文工作负载也会导致可能上下文长度的差异更大。

上下文并行是一种将查询标记在不同GPU间分割的并行技术。它有两种形式:PCP用于预填充上下文并行,DCP用于解码上下文并行。在PCP中,每个秩预填充其查询块(KV环传),由于预填充倾向于计算受限,这使FLOP并行化,从而更快的预填充,且不会在某一秩出现巨大提示符的预填充峰值。

对于DCP,每个等级扫描其KV碎片,然后部分注意力以闪存解码方式合并。由于译码受内存BW限制,并行KV读取可以实现更快的tok/s。

这种并行技术部分由英伟达研究院发明。英伟达研究在这类基础研究方面非常出色,而在端到端训练研究方面,他们用糟糕的Nemotron3 Ultra模型让美国颜面尽失,而这个模型目前甚至被很小的Qwen3.8 27B型号大幅击败。

DCP/PCP是CUDA护城河的一部分,因为AMD的DCP/PCP实现尚未优化。在vLLM 支持矩阵,所有AMD后端都不支持。

接下来几节提到的一些变化主要针对DCP/PCP。

vLLM 代理优化

我们与Inferact、Red Hat、NVIDIA和AMD的vLLM维护者合作,将AgentX的真实重录器视为北极星,最终修复的成果也被提升到上游,大部分优化高度可迁移到生产环境中。

以下是几个例子:

vLLM改进了混合注意力前缀缓存,使短暂的滑动窗口分配不会驱逐有用的长上下文检查点。选择性保留保持稀疏的重放边界,报告前缀缓存命中率超过95%,同时有14个并发请求,上下文多达100万个令牌。

同样的可达性政策被应用于月饼, 和不可访问的滑动窗口查询功能被移除.早期后续工作停止卸载无法重复使用的滑动窗块以及保留了前置前置的推测性前瞻块.

针对高并发代理的代理工作负载需要卸载。得益于前述AgentX的影响,vLLM上已有工作流旨在支持混合模型而非仅限于统一全注意力模型的CPU KV卸载。

这一区别很重要,因为统一模型每个令牌都有一个KV布局,连接器可以用单一块几何描述需要保存的内容。混合模型同时携带多个缓存组,每个组形状和寿命不同,且假设统一布局的连接器无法表达某个块属于哪个组。

因此,对于最需要长时间运行的模型来说,卸载功能不可用。将军SimpleCPU 连接器先来了,是ROCm 启用,当时为扩展至DeepSeek-V4混合体关注报告称,在重新计算前缀不再适合HBM时,输出吞吐量提升81.7%,平均端对端延迟降低46.6%。

月饼也获得了等效的混合内存分配支持.同样的布局问题在分解服务中再次出现,其中待定变更通过MoRI-IO传输Kimi-K3的conv+ssm重复态,同时转移注意力KV以实现1P1D预填充/解码分段;没有它,译码端从未初始化的递归状态开始。

递归状态时隙依赖于现有的远程块ID信道,因此拆分路由器无需针对特定型号做出更改,路径在MI355X上端到端运行,TP8每条线通过跨节点RDMA实现,两条线路均采用DSpark推测解码。

在建模真实工作负载时,vLLM维护者注意到卸载过程中成本转移到了存储路径,即写入过多且频繁。目前已有三项新修复解决了这个问题:
现在是一家商店跳过时,一笔相同的转账已经在进行中,因此共享前缀的并发会话只需支付一次费用,而不是每次一次。一家商店仅覆盖新生成的KV范围,因此延续历史的会话会写入delta,而不是每回合重写整个前缀。终于,一家商店不再存在这取决于相同的区块是否仍然存在于HBM中,因此当被驱逐时,已安排的工作不会被取消。

加载路径是单独调优的,因为查询是在每次调度决策时进行,而不仅仅是在数据实际移动时。制作过程调度器路径中的异步查询这样可以让连接器远离步进的关键路径,这样步级就不再需要等待CPU端缓存查询后才能接受工作。

紧凑零拷贝查找密钥,并行接收端加载, 和预制月饼琴键然后移除了剩余的CPU和传输开销。

长期的混合状态还强制执行了固定形状请求很少达到的正确性和会计修复。vLLM每个混合缓存组都发出缓存事件,Strides 正确分布式上下文存储, 和在分布式上下文和预填充下,正确计算查找前缀.相关上下文并行会计变更将缓存所有权与分片令牌范围对齐。

投机状态现在是通过合并的月饼群传播 和 通过 SimpleCPU 协调器,防止重复转动缓存默默地丢失 EAGLE 状态。

看看在 vLLM 中优化 Agentic 工作负载的 ROCm 方面,工作在缓存层以下继续进行,其中剩余成本是每层而不是每个请求。 一旦前缀存活并按时到达,剩下的就是解码步骤本身,每个会话运行数千次的解码步骤会为每个可避免的副本和每个不匹配的内核付出代价。

三个开放变更攻击该层:

  • 第二次改变 选择 AITER 稀疏 MLA 解码内核 代替通用路径,AgentX 输出吞吐量提高了 5.22%,并且令牌间延迟显着降低。
  • 第三个例子很好地说明了测量形状的重要性。 同伴变更 通过调整后的 AITER GEMM 进行全图注意力预测 在低并发的固定序列上达到了 2.3% 的增益。 这表明内核级更改可以在统一形状上显示出明显的增益,然后在代理跟踪上被跟踪引入的缓存和调度方差所淹没。 A 待更改 将形状敏感性转化为调度标准本身:它用 gfx950 上的混合 AITER/本机路径取代了 DeepSeek V4 C4A 选择器的 ROCm top-k 瓶颈,通过 AITER 路由短上下文和中上下文,并通过图形安全调整的本机后备路由长上下文。 它报告端到端选择器加速为 1.21 倍到 1.76 倍,在 84 形状矩阵上解码内核几何平均值为 1.2 倍到 2.9 倍。

SGLang 代理优化

AgentX 团队一直与 RadixArk、Meta、Nvidia 和 AMD 的 SGLang 维护人员密切合作,推动对使用 SGLang 运行的 Agentic 工作负载进行优化,从而大幅提高生产推理性能。 让我们更深入地讨论这些优化。

我们将首先从分配器方面解释 SGLang 的滑动窗口工作如何解决 vLLM 保留策略所解决的相同冲突。 窗口页面和前缀页面都是从一个池中提取的,而窗口是更贪婪的消费者:它不断地翻转,而前缀保持静止,因此,在压力下,瞬时分配取代了持久分配。

三种设计改进从不同角度解决了这个问题。 一 当页面离开窗口时主动释放与其等待驱逐压力来发现这些页面,不如让死窗状态停止争夺无法使用的页面。

又一个CAPS 计算锁定到单个窗口,限制了一次固定的飞行请求池中最多的部分。三分之一去除陈旧的全KV条目这些都超过了它们的用处。

主动释放有一个叉形盲区:从共享前缀分支的请求仍然可以保留可重用的全KV,而分支点的窗口状态已经释放,整个前缀会因缺少廉价部分而重新计算。

开放式作品在这些分支点保留了SWA状态,因此分叉继承了窗口,而不是重建它。

除此之外,ROCm 环缓存修复是正确性而非容量变化:环形缓冲区通过结构重复使用槽,重用仍被引用旧内容的槽会输出错误,而非输出缓慢。

这些都不会出现在单个8k提示中,窗口从未绕过前缀,池也从未被争夺。在多回合混合游戏中,这些变化决定了下一回合是否还能保持昂贵的全注意力历史。

HiCache 是 SGLang 首款树内卸载机制。它面临与vLLM连接器相同的混合问题,并通过不对称性解决了:卸载全注意力缓存,并在返回途中重建短滑动窗口尾部.只有昂贵的那半部分值得跨过公交车移动,而便宜的那部分重建速度比取回快。

关于AMD,分阶段写回这样可以防止移动阻挡发动机。递现态是剩余的间隙,因为它无法像窗口尾部那样从邻近的标记重建;FlashInfer GDN 检查点允许它参与前缀重用,并将吞吐量从 47,771 提升到 53,004 Tok/s/GPU,缓存命中率为 92.4%。

另外两项变化涉及可变长度流量对内核流水线的影响。AgentX 的真实会话往往达到持续变化的上下文长度,这与生产流量类似。一个专注于长度的朴素运行时会为几乎每个请求编译一个新内核。

SGLang 维护者通过通过解决了这个问题上下文长度作为运行时标量而是将其合并为一个编译,通过取消编译,提升了 AgentX 384 的并发输出吞吐量 26.75%,平均 TTFT 提升了 36.25%,这并不是通过消除更快的计算速度。

同样的精神,取消每步设备到主机的序列长度同步消除了仅因主机想知道设备已有长度而存在的解码气泡。

可变长度也会影响注意力核本身。在GB300上,混合上下文译码批处理需要支付尾部税:匹配的配置文件将9.8毫秒译码步的差量中8.4毫秒归于注意,最长的请求拖出持久内核的共享波。

开放式作品将 TRTLLM MHA 解码批次按 KV 长度排序分组,使短请求不再等待最长的请求。

解码也可以在调度器而不是内核中,使一级上去。在DP关注下,每个等级都加入同一个MoE集体,同时本地调度注意力工作,因此一个等级通过分块预填充续写流不断赢得预填充优先决策,而同行等级的运行批次则静待等待,这一点在AgentX运行中可见。

一个可配置的译码区间预填充后强制在预填充之间解码轮次;在AgentX DSv4 Pro上,输出吞吐量增长了141%,p99的令牌间延迟下降了97.3%,代价是中位TTFT从36.5秒上升到59秒,换取了首个令牌等待以实现流流平滑。

当请求没有可重用的历史记录,比如子代理的开头时,任何工作者都可以很好地使用,而负载均衡是唯一值得探讨的问题。当请求携带缓存前缀的MB时,发送给不持有该前缀的空闲工作者是成本高昂的选择,路由器需要知道该状态已经存在的位置。

SGLang 补充DP缓存亲和力,因此会话对持有其缓存的秩具有粘性。在这篇PR中,DP感知的预填充和解码路由两者都实现为使拆分部署的两半能够一致做出该决策,且缓存平衡作为路由信号所以好感度不会退化成一个热工。

路由器只能根据被告知操作,因此混合缓存事件也变成了Radix缓存感知以及滑动窗户感知.

推测解码受到特别关注,因为MTP会为每个请求添加一个更小的状态片段,必须在主缓存存活的所有情况下存活下来。SGLang在分解服务中的固定选秀窗口转移因此该状态完整穿越预填充至解码边界,为高并发在线解码增加了重叠调度,移除了无操作EAGLE重整化, 和避免在EAGLE预填充期间的主机同步.公开赛资源租赁调度工作以及数据并行图元数据修复继续保持同样的努力,即在请求可以撤回和恢复时,确保重叠安全,而不是简单地完成。

在研究具有异构预填充和解码拓扑的代理工作负载时,需要前缀感知的分期,这正是前缀缓存和拆分相互作用不佳的地方。当两端分片方式不完全相同时,KV 无法作为一个连续的流复制;它必须在传输网格上拆分,并在解码方预期的偏移处重新组装。

前缀命中会让这变得更难,而不是更容易,因为预填充工作者现在只发送未缓存的剩余部分,而解码方仍然期望缓存完整且位置正确。在预留缓冲区中支持 Radix-cache在那个网格上分缓存发送,并将它们分散到正确的解码偏移量。

然而,这也会导致正确性问题。一次127,500令牌共享前缀测试,从128个中正确2个转向128个,意味着缓存一直默默落在错误位置,吞吐量基准测试会认为这是一个快速、自信但错误的答案。

AgentX的对比还将每用户输出吞吐量中位数提升了9.6%,且GPU总吞吐量几乎保持不变。传输本身也带来了负重:译码端的预构建批次从未进入模型前进,但每个传输的提示仍被压缩并复制到CUDA输入张量中,而第一步译码仍会从继电器元数据重建该张量。

去掉那个未用的提示转移是AgentX GB300上单一最大胜利,推动了每用户输出吞吐量+18.0%和GPU解码吞吐量+12.7%。A后续将预填充DP-rank引导查询从解码调度器的关键路径中移开,重叠了在结果消耗时同步支付的HTTP往返,导致同一部署中每用户输出吞吐量增加了+1.36%。

开放作业沿同一煤层继续进行:UMBP 中的多池 DeepSeek-V4 支持,统一KV希稀疏状态继承了MoRI, 和当解码终止且无可见内容时,保留预填充拥有的令牌.HiSparse的工作应被视为长上下文中的容量和正确性助力,而非高并发时的吞吐量优势,目前尚未达到。

TensorRT-LLM 代理优化

接下来,我们将介绍TensorRT-LLM最近的几项优化。首先,我们来看TRTLLM针对重复聊天回合的独特前端优化,这种成本之所以存在,是因为工作负载是多回合的。

每一次对话都会重新发送整个历史,甚至更多内容,而天真的实现则重新标记了所有这些。代币化每千字节成本低廉,但当每回合同样的10万个代币被标记化时,这将是毁灭性的。

显而易见的解决办法是只对新后缀进行分词化,但这种错误很容易被忽略,因为字节对编码并不与位置无关。标记可以跨越连接合并,因此在边界处拆分文本并连接两个标记序列可以产生与整个字符串分组不同的序列,后者会悄然偏离前缀缓存构建的序列。

TRTLLM 实现边界感知增量分词化该方法通过找到渲染文本的通用前缀,回滚一个完整的令牌,使跨越连接的合并重新计算,并仅对修改后的后缀进行分词化。

在Qwen3.5的AgentX跟踪线上,它对所有1087个转换都实现了完整的标记化——这是经过测试而非假设的正确性声明——并将平均处理时间从185.1毫秒缩短到11.3毫秒。

固定的8k1k请求没有先前渲染的回合可重复使用,所以这些内容都不会出现。相关地,聊天模板渲染被移入输入处理池,因此长模板不再序列化其背后的主请求循环。

MiniMax-M3的工作聚焦于分解的KV运动,其中失败在于粒度。当预填充和解码在头部布局上不一致时,一个逻辑请求的 KV 不再是几个大而连续的区域,而是成千上万个小的跨音块,每个单元都变成自己的传输描述符。

移动的字节保持不变;每个描述符的开销才是爆炸性的,而且在那些重要的长提示词上爆炸得最糟糕!修正多池映射和分块NIXL反射路径通过一个有界限的可重复使用场地将这些片段融合,用数量级减少的描述来交换额外的舞台版本。

其AgentX诊断将请求关键的KV p99在并发5时从26.74秒缩短至125毫秒,并发40时从10.15秒降至288毫秒。

非阻塞上下文传输轮询即使排程卡顿,也能通过收割完成的转移来保护同一条路径。这打破了一个反馈循环,使完成的KV块被钉住,阻止新的接入。

摊位本身还有一个可移除原因:避免了 DeepSeek-V4 上下文稀疏注意力元数据中的隐式设备标量同步,消除了每步 18 次四字节设备读取,这些读写每次都强制 cudaStreamSynchronize,适用于 GB300 分解上下文工作者。

修复线程在主机端通过时作为纯 Python 整数,因此执行线程在 KV 传输和响应线程等待时,大部分步骤不再持有 GIL。

TensorRT-LLM 还将不规则的长上下文工作转移到更高效的执行路径上。MiniMax-M3 的上下文图生成器捕获稳定稀疏生产者,同时让依赖请求的注意力保持热切,AgentX测试中每用户输出吞吐量提升了12.58%。

一个空位原生KV事件制作变更减少了KV感知路由路径上的分配和转换工作。

AgentX 还暴露了仅在规模和持续时间下出现的内核选择和调度器生命周期故障。其中两个是关于选择哪个核心。MiniMax-M3为 MXFP8 自动调音增加了 CuTeDSL 选项,扩大候选集,并在低并发汇总点提升每GPU输出吞吐量约7%至10%。

相反方向,TensorRT-LLM禁用腐败分裂K的MoE战术在七次AgentX游戏中,游戏崩溃了五次,之后七次匹配中没有崩盘。快速且错误的策略比单纯慢的更糟糕,自动调音器会热情地选择它,除非它从池中移除。

选择并不是内核出错的唯一原因:MiniMax-M3 对短查询的传统稀疏注意力路径可能会让 SM100 内核获得一个非连续的、以头为主的块索引视图,结果被当作连续,从而选择错误的 KV 页面,输出错误或非有限。

尊重区块指数的进步对于q_len ≤,32 固定了索引,无需实体化张量或添加核,之后在 GB300 上匹配了五对完整的 AgentX,完成时没有任何服务错误且无非有限标记。

另外两个是终身错误,是长跑的典型失败,而非大跑。序列槽余量和一致的槽索引缓冲区尺寸处理临时重叠的情况,比如完成的请求和新获准的请求都需要一个时段,一个持续有稳定到达和离开流量的窗口,而固定批次根本不触发。

后来注意数据并行虚拟请求修复在大多数早期单元几分钟内失效的情况下,保留了九个Qwen3.5分解单元,这正是基准配置与能存活一次会话的差异。

两个开放式传输变更针对非常长且细分的提示,它们共同展示了修复如何制造下一个瓶颈。在默认配置中,译码工作者必须完成整个提示词的预填并传输,因此两个昂贵的阶段会连续运行,尽管第一个阶段是递增输出的。

流水线KV传输开始在每个已完成的预填充区块落地时发送,因此传输重叠预填充计算,只有最后一个区块在关键路径上。

这种变化让分块处理变得频繁,暴露出以前只发生一次的工作。后续只检索当前区块的块ID而不是每次都用整个提示的黑名单。对于一个128,000个令牌的提示,被拆分为1,024个令牌的块,这就是建立一个4,096条列表一次和为每个层组重建128次的区别。

一个按批次计成本且随总提示长度增长的成本,是一种消耗流水线刚获得收益的成本缩放形状。

AMD ATOM 代理优化

AMD的ATOM引擎最初仅为单回合工作负载设计,而非现实世界的代理多回合生产工作负载,因此核心ATOM引擎和内核需要大量修改,以支持长上下文多回合工作负载。

ATOM在支持代理工作负载方面,相对于目前vLLM/SGLang的水平还有很长的路要走。AgentX 被用作 ATOM 重构的现实北极星目标,以支持代理工作负载。

我们首先要讨论的ATOM实现的优化,是智能地对DeepSeek-V4分页滑动窗口注意力使用稀疏检查点保留。合并实现保持选定的窗口尾部存活,以便分支和重放请求能在有用的边界继续。

其测量结果清晰地区分了这两种效应:在同一AgentX线索中,第48个并发点,实际前缀命中率从5.6%上升到96.45%,滑动窗口门的损失率从91.35%降至0.16%。

第二个数字是第一个数字背后的机制。九成的前缀匹配因缺少窗口尾部而被发现后被丢弃,因此缓存并非缺失,而是被推翻。

之前的两个缓存管理器修复必须先完成,才能测量这些问题,这两个修复都值得作为缓存在未做任何操作时自我报告健康状态的例子。一阻止自由池命中破坏共享缓存条目;另一个,延迟输出定位在默认调度模式下恢复了前缀哈希,并将重复的长提示从零缓存标记改为重复使用每个完整前缀块。

另一个变化是前缀命中预填充保持在优化后的汇注意力核上而不是退回通用路径,这样缓存命中不会悄悄消耗部分保存内容。

混合模型还具有递归或压缩态,这与普通 KV 有一个决定性的不同点:它无法从周围的标记中重建。窗口尾部可以从邻近上下文重新计算,但重复状态是之前所有上下文的累积结果,因此如果被丢弃,唯一的回溯方式是重放该序列。

原子赋予该每个请求状态一个内容寻址检查点生命周期,允许生成的回合留下可重复使用的续回点,而无需为它们预留单独的保护缓存。

在一次测试中,一个请求重复使用了512个生成的令牌,并且只计算出一个两令牌后缀。

调音细节和功能一样重要。无条件发布检查点会对零命中流量消耗17.5%的吞吐量,这是每个从未返回会话所支付的价格,以帮助那些返回的会话。

按令牌间隔设置检查点避免了这种惩罚,固定的1k1k吞吐量也保持在测量噪声范围内,这也是相关的安全属性:一个旨在代理重用的功能不应对永远不会使用它的工作负载产生负担。

ATOM 与 AgentX 相关的 CPU 路径是从支持卸载的运算开始的。独立的LMCache卸载从CPU重新加载32,000令牌前缀约需0.32秒,而重新计算约需2.5秒,差距为8倍。

这使得在这些上下文长度下过公交车是值得的,且在短提示下是不成立的。

其余路径更多是关于所有权和指数的配置,而不是带宽。ATOM复制了vLLM多连接器该设计允许预填充工作者将 KV 发送给远程解码工作者,同时将相同的前缀保存到 CPU,而无需在双方用户完成前释放区块;两个独立读者同时读同一块块,这种情况是单转无法实现的情况。

将恢复后的块提升回GPU前缀索引解决了一个更微妙的浪费:没有它,CPU加载的前缀被使用后未注册为驻留,下一轮又会通过总线获取同一个热前缀,反复支付已在HBM缓存中的缓存。

后续工作固定异步存档排序、压缩KV几何结构、未对齐切换和远程请求计费共同消除了两轮、2638次请求验证中的重载损坏。这个bug只会出现在同一个方块被多次保存、驱逐和恢复时。

分布式路径会在不同的代码库中重复,这种模式在SGLang和Dynamo中已经可见:路由必须知道状态所在。ATOM的路由器ATOMesh是SGLang路由器的一个分支,去除了大部分功能。

不幸的是,ATOMesh 需要 SGLang 的缓存感知路由功能,因此该功能不得不重新添加。ATOM为缓存感知路由器获得了KV生命周期事件,因此路由器能够知道状态所在位置。

它还增加了多节点预填充和解码路由,以及会话粘性数据并行路由。粘性政策是一个值得明确说明的双向妥协:对话会回到拥有其状态的健康员工,但闲置任务会过期,以避免粘性永久破坏已消失会话的集群平衡。

拆分时必须移动模型实际保留的东西,这并不总是一个统一的缓存。DeepSeek-V4传输其混合的FP8和BF16缓存布局中的两个缓冲区,以及EAGLE分解移动草稿模型的独立KV缓存除了目标缓存外,TensorRT-LLM 和 SGLang 也都必须解决同样的第二缓存问题。

远程KV进气与背压通过阻止解码端接受超过其安全恢复能力的暂停转账来闭合循环,这也是分解处理无法完成的工作。

在ATOM上,初级保健医生报告平均TTFT低35%至43%在64,000个令牌输入时,总吞吐量提升可达约49%,这一增益随输入长度增长,而非批处理大小。

要让它在实际操作中可用,就必须与会话依赖的其他所有内容一起作曲,所以DCP是兼容前缀缓存、分块预填充和FP8 KV然后扩展至MTP.无法与前缀缓存共存的并行性,将以一个长上下文的胜利换取另一个。

单一GPU内部也存在同样的并行性稀缺:一个批次1的MLA解码没有头维度或查询维度可扩展,只有KV步行,硬编码的16个分拆预算在gfx950的256个CU中的16个上运行。

A仍然开放的变革停止覆盖内核自身的分裂推导,因此 Aiter 将路径切割成机器拥有的簇数量。

分块管道并行预填充 从内存方面解决同样的问题,用流式层阶段切换替换重复的张量并行集合。 高负载下的 GLM-5.2 结果是本节中最完整的:输出吞吐量翻倍,第一个令牌的中值时间从 28.6 秒下降到 8.7 秒,每个预填充 GPU 持有的 KV 块数量是原来的 3.68 倍。 最后一个数字是首先要阅读的数字,因为每个预填充 GPU 的容量决定了在部署达到 HBM 悬崖之前可以运行多少个长会话。

ROCm AITER 代理优化

ATOM/AMD vLLM/AMD SGLang 的长上下文执行依赖于匹配较低级别的 AITER 内核,因为引擎层的并行策略只有在内核能够表达的情况下才是真实的。 预填充上下文并行进程组 提供预填充上下文并行性所需的额外查询分片维度,并扩大融合内核行索引以支持超过 131,000 个标记的提示。 解码上下文并行性 (DCP) 在现有的张量并行 GPU 上对 KV 进行分片,因此可以适应更长的序列或更大的批次,而无需在每个等级上复制整个缓存。

大型缓存还暴露了短固定请求基本上永远无法达到的一类故障:地址宽度。 32 位偏移量完全足够,直到单个缓存池跨越边界,此时算术回绕并且内核寻址错误的行而不会引发任何错误。 添加了 ATER 运行时 64 位调度,用于 4 GB 以上的批量预填充, 64 位 MLA 偏移量超过 2 GB, 和 贯穿 DeepSeek-V4 统一缓存路径的 64 位寻址,最后一个防止静默读取和写入大约 1.5 亿行的池中的错误行。

DeepSeek-V4解码也有所收获 用于 64 头和 128 头 MTP 封装的持久 MLA 内核。这两个头计数是普通解码和推测性验证实际产生的,因此这为引擎提供了用于其常见形状的专用长上下文路径,而不是将它们视为为短上下文编写的内核的偶然变体。 它与上面的 vLLM AITER 稀疏 MLA 选择相同:在长上下文中,通用路径不是一个适度的妥协,它是错误的内核。

Dynamo 代理工作负载优化

Nvidia 提交的大部分内容都使用 Dynamo 推理编排和路由器系统。 Dynamo 的 AgentX 系列表明,一旦引擎内核改进,分布式服务层可能会成为瓶颈。 路由器的工作量与实时前缀的数量和长度成正比,而不是与生成的令牌数量成正比,因此许多长的、重叠的、长期存在的会话的工作负载以固定形状流量永远不会做的方式加载它。 第一系列 PR 降低了每个路由决策的成本: 查找热路径上的工作更少, 无冗余后缀失效,最后 批量KV匹配、注册、所有权和终端解引用,其报告在并发数为 512 时,中值输出吞吐量增益为 22.2%。批处理在这里提供帮助的原因与它在引擎中提供帮助的原因相同:每个项目的开销在该项目中占主导地位。

第二系列的 PR 改变了所有权的表示方式,这是下面更难的问题。 每个缓存块都需要归因于依赖它的请求,因此它在仍在使用时不会被释放,并且在每个人都完成后不会被固定。 由于数千个并发会话共享重叠的前缀,簿记本身就变得非常重要。 迪纳摩搬迁自 共享区块链 到 竞技场级别的所有权很重要 最后到 后端特定请求租约,每一步都会粗化被跟踪的单元。 租用设计将 vLLM 后端的 AgentX 重播时间减少了 23.7%,将 SGLang 的重播时间减少了 22.0%,同时降低了峰值内存,这表明以前的表示是问题所在,而不是流量。

进一步的路由器配置文件消除了相同形状的成本,其中定期扫描或完全重新计算只是因为活动状态曾经很小而可以接受。 分桶到期修剪 替换了与所跟踪的所有内容成比例的扫描,并将高流失 AgentX 吞吐量提高了 13.7%。 仅 Delta 后缀清理 仅处理更改的内容,并吸收同一窗口中存储和删除事件数量的约 28 倍。 压缩提示路径 将前端 CPU 减少了 35.3%,并显着缩短了第一个令牌的尾部时间,这一点很重要,因为此工作负载中的提示很长且大部分是重复的。 现在是过载状态 增量跟踪 而不是重新计算。

路线的改变是一次深思熟虑的交易,而不是纯粹的胜利。 迪纳摩现在可以 在其路由分数中记录活动解码请求,因此已经致力于长时间运行解码的工作人员看起来比其队列深度本身所暗示的更昂贵。 在报告的调整点中,以较小的吞吐量成本改善了 AgentX 延迟中值,这种选择仅在请求长时间占用工作线程时才变得可见。 一个 开放后续行动 交换到新的代理路由器预设中的软件包会进一步向同一方向推送,将前缀重叠记入 2,将预填充负载缩放为 4,并将主动解码请求加权为 64。在该调整点,交易停止消耗吞吐量:在 8xH200 AgentX 运行中,预设将固定窗口完成输出吞吐量比默认成本函数提高了 8.26%,将运行级别 p95 到第一个令牌的时间缩短了 43.1% 和 p95令牌间延迟减少了 22.6%,并完成了多一条完整的轨迹。

接下来优化了请求平面,因为代理跟踪不会发送一个请求和一个响应。 它发送许多带有基本相同提示的相关请求,并将每个令牌作为其自己的帧返回,因此序列化和复制是按回合和每个令牌付费的,而不是一次。 切换到 MessagePack 请求负载 在 AgentX 测试中,吞吐量提高了 8.1%,获得第一个令牌的平均时间缩短了 9.7%,并且 直接 Python 转码完全移除了中间值树。

接下来发生的一系列变更,都是去除复制,而不是加速复制:不是复制MessagePack 事件载荷,不是复制接收 ZeroMQ 帧,且未全额支付令牌间延迟指标开销在每一个代币上。

聊天直播热线路径因同样原因缩短了。单独来看,这些作品并不特别;乘以每个并发会话的流令牌,决定前端每秒能承受多少请求。

高并发剖析发现了与数据移动无关的成本。静态日志过滤器移除了共享的 span-matcher 锁,将争用点而非卷问题,并将报告的前端吞吐量从 932 条提升至 1,133 条每秒。

更简单的位置基桶在32个工作者运行中,模拟器峰值内存减少了5.51 GiB。公开变革每个响应都冲刷一次去标记化指标而不是在每个流式数据块上更新累计计数器,而是将匹配诊断配置文件中的前端CPU时间大约减半。

最后一个是该类别中最明显的例子:工具配置每次调用便宜,而每个代币只买一次,却是毁灭性的。

LMCache代理优化

LMCache 是一个开源的 KV 缓存层,位于像 vLLM 这样的推理引擎下,存储通过前缀哈希键分的可重复使用的 KV 块,跨越 CPU DRAM、本地 NVMe 和远程后端(Mooncake、Redis、S3)。

LMCache 可以作为 vLLM 原生卸载连接器的替代方案。

LMCache的多进程路径因代理缓存移动的体积和形状而改变,起点是一次失败,这不是减速而是停止。当上下文超过10万的请求在开始前保留了所有块的全部负载时,池会被所有等待且无进展的请求耗尽。

分块外部缓存加载而是每个区块的储备,所以负载交织排水。在并发32时,验证完成了120个请求,旧路径在28个后陷入死锁,并发48个请求继续运行,KV池已满98.5%。

其他改动减少了移动量和运行时间干扰的频率。仅存储DeepSeek-V4混合组中有用的部分,切割每个令牌的存储空间几乎是20倍,现在是滑动窗口预取只加载活窗口而不是永远不会被读取的窗口状态,而是vLLM应用到卸载时应用的同一可达性参数,而是从存储端接近。

每个对象组只需一次本地传输调用然后移除了在分阶段副本和内核启动间重复的 Python 锁切换,这些切换开销与片段数量成正比,而非字节数。

目前LMCache有两项特别针对AgentX的变更,但仍然开放。混合锁账修复阻止一个请求释放另一个请求对共享滑动窗口或递归状态块的读取锁。

多个请求必须共享相同的区块,账务必须是按区块计算而非每个持有者,且驱逐必须实际开始。持续运行 Kimi-K3 并使用 DRAM 卸载,这三者都得到了满足,导致了数万次警告、代代损坏,最终在驱逐开始后出现了 GPU 崩溃。

除非进行长时间的共享、记忆压力的跑步,否则它就会处于休眠状态。

LMCache 的并行工作使上述所有功能都能在 AMD Instinct 硬件上实现。CacheBlend 的非前缀重用依赖于 flashinfer,而 flashinfer 仅支持 CUDA,因此一个Triton块稀疏注意力后端重新实现了所需的三个核心:块稀疏关注(带有CSR索引和对数和-exp输出)、因果预填充和-exp输出混合。

当检测到ROCm或闪烁推断丢失时,它会自动路由到他们。ROCm Dockerfile镜像CUDA构建和轻量化图像。AMD hipFile 后端通过通过 ctypes 绑定 ROCm 的 hipFile,并在 torch.version.hip 上调度,扩展了仅通过 NVIDIA cuFile 进入存储的 GDS L1 平板文件层;cuFile 路径保持不变。

分配是剩余的空白。CUDA用户安装了预装轮盘;AMD用户从源头构建了它。我们与AMD合作发布了一份预制的GFX942和GFX950方向盘这就结束了。

它安装到上游镜像中,并通过了MI350X上所有56 KV传输内核测试,并且发布到GitHub版本而非PyPI,因此普通的pip install和lmcache保持CUDA构建状态。

一句话的后续将绑定挂载的仓库标记为 git 安全目录,只有在 CI 中失败,因为容器作为 root 运行者拥有的检查和版本内检setup.py拒绝阅读。

DCP感知CPU卸载解决了两个功能之间的简单不兼容问题,而长上下文使这两个功能共同成为必须的。启用解码上下文并行时,每个排只包含KV的一步,因此任何排能保存的内容都不是可用的前缀;Fix在保存前收集跨状碎片,加载后重新分配。

没有它,启用上下文并行性会默默禁用CPU缓存,恰好是驱动这两种功能的长前缀。其验证记录了超过3万次CPU命中事件,单次请求加载达到数十万个令牌。

月饼代理优化

Mooncake 服务于 Moonshot 的 Kimi 生产流量以及许多实验室的生产流量,是分散的 vLLM 和 SGLang 配置下的传输引擎。直到最近,Mooncake 的 AMD 支持还未达到 RDMA 注册和可安装软件包的水平。

在Nvidia上注册RDMA的GPU内存要么使用nvidia-peermem内核模块,要么导出dmabuf文件描述符。AMD没有Nvidia-peermem的对应产品,所以GPU直接RDMA根本没有路径,部署只能通过主机DRAM分阶段进行KV。

HIP dmabuf注册分支增加了现有CUDA dmabuf路径的镜像,通过ROCm导出而非CUDA句柄调用,并且优先解析真实分配基底,因为缓存分配器会在较大分配中偏移量封装张量。

主机内存仍然会直接注册。

无法安装的支持就不算支持。Mooncake 发布了 CUDA 和 MUSA 轮子,但没有发布 ROCm 包,因此 AMD 用户在每个镜像中从源代码构建了引擎。

ROCm轮、CI和释放路径同时向PyPI发布了mooncake-transfer-engine-rocm。AMD工程师Andy Luo的这个工作流程是因为他注意到在用AgentX对代理工作负载进行“狗粮”时,在ROCm中从源头构建MoonCake并不是一种一流的模式。

传输引擎没有设备内核,也不依赖火炬,因此一个架构无关的轮子覆盖了 gfx942 和 gfx950,且 ROCm 运行时在加载时受限而非供应商,这意味着同一轮子在上游的 vLLM ROCm 镜像和 SGLang ROCm 镜像中都能不作修改地工作。

该系统被验证为完整的交叉产品:MI300X 和 MI355X,分别在 vllm/vllm-openai-rocm 和 lmsysorg/sglang 下运行主二进制文件和 HIP 缓冲区传输测试并进行数据验证。

拉取请求在 Python 3.10 到 3.13 中添加了一个标签触发的发布。公开后续增加了自托管的双节点MI350X外部预填充和解码层因此,ROCm的拆分路径是在真实硬件上执行的,而不仅仅是编译。

这些PR结合起来,意味着AMD的AgentX运行现在可以将已发布的伪影安装传输引擎和KV缓存层到库存上游镜像中,并直接在GPU内存和织体之间移动KV。

其他优化

上述变更针对长上下文成本:必须存续的前缀、必须保持正确的混合缓存、必须跟上速度的传输。但有一大堆从零日起的启用和正确性漏洞,导致请求的破坏和百万令牌会话一样严重。

MiniMax-M3测试了ROCm的工作是否能累积到零日准备度,并直接进行了比较:AMD首个公开的拆分配方MI355X FP4于1月比英伟达晚几个月到达InferenceX,而M3 FP4细分则在零日完成。

这比DeepSeek-R1时期有所改进,当时的校准验证需要数月时间。三个vLLM修复停在了那条零日路径上,每一个都是正确性失败,而非性能故障。

拆分最先被阻止了。NixlConnector的握手表明,SPLIT区域block_len随预填充与解码TP的比例成比例,但block_len遵循每级KV磁头。M3 有 4 KV 磁头,因此 TP4 预填充配合 TP8 译码,GQA 限制为每排两侧各一个磁头,且在断言要求为两倍时长度相等。

握手被拒绝,没有移动任何KV,解码从头重新生成,gsm8k得分为0。根据实际头部比进行验证修复了这个问题。

另外两条是分站台式。M3的稀疏注意力后端会为每个E4M3配置读取字节支持的FP8缓存float8_e4m3fn。但gfx942的平台dtype是e4m3fnuz,两种编码不同。

因此,K和V在核子消耗前被改变了。预填充和解码封装器也省略了 FNUZ 类型,使其 FP8 校验中出现。使用平台 dtype 来实现缓存视图修复了两半。

另外,M3 作为独立的 NVIDIA 和 AMD 模型文件发布,只有 NVIDIA 版本实现了 EAGLE3 接口,因此推测性解码在 ROCm 引擎初始化时因模型不支持错误而中止。

将AMD模型推向平等恢复了它,MI355X gsm8k 与非 EAGLE3 的 MI355X 运行和 B200 都匹配。

上述 TensorRT-LLM 部分涵盖了长上下文特异性的 M3 工作:分解 KV 传输中的描述符爆炸、上下文图捕获、稀疏块步幅、自动调谐候选,以及必须从池中移除的腐败的分裂 K MoE 战术。

本地AgentX矩阵结合了会话感知或KV感知路由、长且可变的对话历史、MTP、混合关注、聚合和拆分服务,以及跨越HBM容量悬崖的并发扫描。

它包括通过 vLLM SimpleCPU、Mooncake、LMCache 和 SGLang HiCache 进行 GPU 驻留比较和 CPU DRAM 卸载。这种组合激活了上游的工作。

旧的固定序列矩阵通常会创建一个提示符,执行一个预填充,解码一个固定续写,然后丢弃请求。因此,它无法衡量跨回合缓存存活、重复令牌化、会话亲和性、缓存事件流量、卸载流失、调度器停滞期间的传输进度,或长期所有权记账。

允许的优化策略将 CPU KV 卸载视为可选。厂商可能会使用vLLM连接器、LMCache、SGLang HiCache、Mooncake、Dynamo KVBM或其他CPU的DRAM连接器,或者在延迟和吞吐量更好时禁用卸载。

NVMe 卸载是延迟的。CPU DRAM 必须根据所用 GPU 的比例扩展,包括非标准化 DRAM 系统的 3 TB 上限。标准化DRAM系统没有硬性上限,但保持相同的比例原则。

本地生成器目前对每个运行器应用3TB上限,因此尚未实现标准化DRAM例外。

净新优化面不仅仅是更长的注意力。它是对不断增长的会话状态的保存、移动、路由、重建和反复处理。AgentX使这些成本足够大,能够驱动vLLM、SGLang、TensorRT-LLM、ATOM、AITER、Dynamo和LMCache等平台的通用上游变更。

直接搜索NIXL和Mooncake未发现额外的带AgentX标签的运行时PR,因此它们的相关影响仍通过上述引擎连接器的变化体现。

AgentX 方法论深度解析

AgentX 是开源现实世界长上下文多回合代理追踪重放的巨大转变,我们在自有数据集中收集了价值超过300万美元的代币痕迹,这些数据集包含来自 Claude Code、OpenAI Codex 等的真实世界流量。

除了数据集外,我们还开发了一套全面的方法,以公平重现交通模式。目标是尽可能忠于自然流量,同时公平对待GPU资源需求。

我们将深入探讨代理痕迹数据集、重放方法论以及代理行为的整体。这本书推荐给希望更好地理解代理工作负载整体结构以及如何利用其在底层调度请求的读者阅读。

价值300万美元的代理流量追踪收集器

在最初设计AgentX时,我们的北极目标是让基准尽可能真实地体现在KV工作负载形状和重复使用模式方面。我们开始尝试重放一些现有数据集,比如 SWE-bench、Qwen-Bailian 以及 HuggingFace 上的其他随机 Claude Code 痕迹。

当时,这些数据集并未显著使用子代理、100万上下文、合成、动态工作流程,或许多新近定义代理迹的特征。在SemiAnalysis,大多数团队成员都是AI高级用户,使用代理处理各种任务,包括编码、分析师研究、Excel建模、社交媒体运营等。

因此,我们决定在内部捕捉最可实现且最真实的痕迹。

为了收集大量痕迹,我们创建了一个代理,拦截发送给 Claude / Codex 的 HTTP 请求。然后,想要上传追踪的用户只需在 Claude / Codex 设置中更改基础 URL 以指向代理。

截至撰写本文时,我们已收集超过8000次会话,340万次请求和6100亿个代币。这些资金加起来超过300万美元。我们开源了这些会话的一个代表性子集,用于AgentX v1.0基准测试.

虽然代理约束看起来可能复杂,但它们最终是编排一系列HTTP请求。每个请求包含系统指令、工具定义和累积的会话历史的组合。随着会话的推进,这些历史会不断增长并反复返回模型,形成AgentX设计用来重现的长上下文和高前缀重用。

我们的代理会记录这些请求和响应的发生。它还提取元数据/HTTP头,如时间戳、会话ID和子代理ID,从而恢复结构对话的顺序(请求排序、并发分支以及每个会话的大致父子结构)。

这些元数据使我们能够重放这些痕迹,大致上是原始Anthropic API服务器会看到它们的状态。

为了保护员工隐私,回放数据集中没有原始提示、源代码、工具参数或工具结果。相反,我们对每个请求的内容进行代币化,然后将其分组为64个令牌块,最终用会话范围的链式哈希取代每个块。

因此,匹配提示词前缀会产生匹配的哈希前缀而不揭示其内容(这篇论文会详细讲解这个策略)。在重放过程中,这些哈希块可以被替换为例如编码数据集中的令牌。

因此,我们保留了原始工作负载的近似上下文增长和对话KV重用模式。

值得注意的是,这个过程必然不完美,主要是因为使用Frontier模型提供商的API时,最终LLM服务器实际看到的大部分内容是隐藏的。例如,SOTA 模型的思考/推理内容现在被加密成 HTTP 请求,并用确定性哈希取代,试图阻止蒸馏攻击。

不过,看起来但这次并没有像大型实验室计划的那样顺利......

此外,虽然我们能接触到所有原始文件内容对于用户/助手消息、系统提示、工具使用等,API提供者会在服务器端应用额外的聊天模板,这些功能不透明。

我们也无法观察Anthropic专有的标记器或服务器端工具引入的上下文。图像和文档的线路表示与模型处理的令牌数量之间也没有直接对应关系。

我们使用确定性占位符和经验校准的模型特定填充,以重建提示长度,以最佳估计服务器实际看到的内容。

我们不能完美捕捉并重放克劳德代码/法典的痕迹真的见过由于信息不完整,由Anthropic / OpenAI服务器推测,但我们可以相当接近。下图显示了哈希令牌(经过近似/处理后)与所有请求长度和模型下的真实API提供者令牌数的比例。

总之,由于信息不完整,要以完全相同的方式收集真实的克劳德代码痕迹并不容易。然而,我们拥有足够的上下文,能够以极高保真度收集和重放追踪,以匹配原始的流量模式、时序、前缀缓存和DAG模式。

AgentX 300万美元数据集

用于AgentX v1.0的数据集可在拥抱脸.它是前文提到的8.3k会话代理语料库中的393个会话子集。此外,我们还进行了一些后处理来清理异常,例如:

  • 移除 Claude Code 安全监控(自动模式)请求和标题生成请求,因为这些请求是 Claude Code 专属的,不一定代表一般代理流量
  • 移除重构输入长度超过990k令牌的请求(我们的近似值过高)
  • 删除重复请求(有时代理会收到相同的请求,如果连接被断开)

此外,每个对话都采用了由Callan Fox提出的WEKA追踪格式KV-缓存-测试器项目。我们选择这种格式来存储痕迹信息,主要是因为我们与Callan密切合作开发基准测试,发现它在存储每次会话痕迹时非常直观。

总的来说,轨迹格式相当任意,我们的代理数据集可以映射到其他格式,比如月饼.

应用这些数据后,我们得到以下数据集。注意,并非所有的X轴都相同。

ISL/OSL和转间延迟(在代理工作中,主要为工具使用所耗时间)的分布相对对数正态。中位数ISL为142,000个代币,中位数OSL为444个。

中位数转弯间延迟(或称“工具使用时间”)为3.84秒。只有~10%的转间延迟超过1分钟。这些很可能是由背带等待人类实际反应的空隙组成的。

值得一提的是,这些请求分布会根据所用的线束不同而有所不同,因为注入的上下文数量和类型不同(例如,Pi 在线束注入上下文方面被认为是极简主义,而 Claude Code 则相反。此外,ISL/OSL的分布还取决于模型,不同模型的分词器可以产生更多或更少的代币。然而,鉴于全球大量代理编码流量通过Claude代码,我们认为这相当具有代表性。

数据集还包含175个至少有一名子智能的会谈(占所有会谈的~44%)。数据集中共有1,697次代理部署,中位数为每会谈4次。子代理的中位墙时钟时间(从第一次请求开始到最后请求结束)为2.27分钟。

该分布同样遵循相对对数正态分布。

该数据集包含最多100万个上下文,旨在测试较新的前沿开放权重模型。此外,我们有一个截断的256k上下文长度数据集我们会用最大上下文长度不超过256k的模型重玩。

代理流量追踪重播器

我们没有从零开始构建重放解决方案,而是决定与AIPerf,Nvidia 推出的一款厂商无关的 HTTP 重放工具,被业内众多用户采用,包括 tenstorrent、AWS、AMD 等。

虽然我们的意图是将AgentX的功能集成到上游仓库中,但我们维护了一个独立的仓库分叉更加中立供应商,让我们能够控制允许更多第三方的贡献。

再次感谢AIPerf团队,特别是Anthony Casagrande,为构建一个现实且具代表性的代理基准所做的帮助和奉献。

代理会话自然被描述为有向无环图(DAG)。每个请求都是一个节点,边意味着其首端请求必须在其尾端请求完成后才能发出。每个边也带有延迟,规定满足该条件后等待的时间。

最简单的会话是完全线性的,没有子代理,也没有并行请求,每个请求只依赖于一个前驱。图表会退化成一条线,边唯一编码的是跨匝延迟(即工具使用时间或“思考”时间),这是客户的本地工作量,而非模型的。

在能动迹中,子代理也可以生成。子代理是独立的请求流,具有自己的上下文,通常用于执行特定任务。多个子代理可以并行运行以完成更多的聚合工作,在某些情况下子代理也可以与主代理并行运行。

主代理随后等待子代理组完成,然后将他们的输出重新整合到主代理的上下文中(虽然这并非永远在这种情况下,这是最常见的模式)。

这种行为导致上述线性请求链变成DAG,某些请求相互依赖。当识别出属于某一子代理的请求组时,AIPerf 会找到最近的主代理前驱,并将其指定为“生成”请求。

同样,“加入”请求由子代理组持续时间结束后由后续主代理请求识别。

在下面的例子中,子代理组由一个子代理(001)组成,执行两个请求。主代理的开场请求完成后,第一个请求会立即发出。当该请求完成时,2.2秒的轮间延迟作为工具使用墙时钟时间,随后发送第二个请求。

主代理的第二个请求是子代理001的连接点。当两者条件满足后,主特工首次响应至少17秒,警报才会熄灭以及001号潜艇的第二次请求已完成。

一个小限制是HTTP时间戳揭示时间,但不总是因果关系。在下面的例子中,如果子代理001在主代理请求2记录开始前7秒完成,我们无法判断这7秒是子代理返回后完成的工作,还是已经独立进行的工作。

因此,AIPerf保持了两个约束:请求2等待其记录的主路径延迟和子代理001的完成。这会重现观察到的时序和工作负载拓扑,但不会再现线束内部隐藏的依赖关系。

这些都是我们希望在后续版本中改进的。

单个请求也可以生成多个子代理。在下面的例子中,子代理001和002都将生成父节点识别为主代理请求1,然后在主代理请求2处加入。

AIPerf 还可以识别“辅助”请求,即与流中其他请求不共享上下文的一次性请求。这些会从主代理分支出来,永远不会再加入。实际上,这些请求类似于Claude Code的“总结本次会话”请求,与对话上下文无关。

另一个很好的例子是Claude Code的“顺便说一句”功能。

下面的例子将所有内容汇聚在一起。这就是你在实际数据集中会看到的那种痕迹片段。我们有五条并行流,各自留下一个主代理请求,按它们加入的主代理请求划分为组。

子代理001和002分别在20秒和23秒结束,因此之后的第一个主代理请求(25秒)就是他们的加入。子特工003和004在同一间隙生成,但持续时间更长,分别为46秒和50秒,因此它们在52秒时加入。

AIPerf 通过对子代理(生成请求、加入请求)逐一密钥,这意味着这四个流会合并成两个分支,尽管它们都离开了同一个节点。该分支采用其第一个成员的名称,因此连接边被标记为子代理001和子代理003。

这也是主智能体首次与其自身子智能重叠的情况。请求在25秒时发出,而003和004仍在运行:主代理仅在加入它的组被阻挡,而非所有在飞行中的子代理。

辅助链连接到最近一次的主代理请求,这里是52秒时的请求,而非开启会话的请求。因此,该节点同时做两件事——接收第二个子代理组的加入,并生成一次性的。

当然,辅助请求从未重新加入。

进一步深入探讨AgentX。

帕累托边疆扫荡

在 AgentX 工作负载中,为了生成帕累托前沿,我们会对单个部署进行并发 Claude Code 会话数量的扫描。由于每次对话都有真实的转弯间延迟和次代理使用情况,我们得到的交通模式更尖锐、更真实。

下面的示例是对运行 MiniMax M3 的 B200 TP4 vLLM 服务器重放 40 个并发客户端的例子。

最后一个值得讨论的点是,评估代理性工作负载时需要考虑哪些指标。我们认为交互性(TPS - 每秒代币数)和首次代币时间(TTFT)依然重要,这些是评估SLO的行业标准。

查看AgentX结果时,是极其重要将TPS和TTFT同时考虑,因为存在推理优化,可以以牺牲另一方为代价提升其中一方。

我们目前正在努力定义一个新的指标,能够有意义地结合TPS和TTFT。这还应考虑到,在代理工作负载中,人们通常更关心端到端的速度,其中任务而是完成速度,而不是他们收到代币或TTFT的速度。

最后值得一提的是,端到端延迟在当前形式下意义已减弱,因为端到端延迟与OSL成正比。因此,P90 端对端延迟受到最长输出序列长度10%尾端的严重影响。

虽然整体比较某些配置的整体性能仍然有益,但我们建议考虑TPS和TTFT的组合。

热身、时机、决定论与对话重用

AgentX的目标是对已经处于稳态的系统进行基准测试。对于代理工作负载,这意味着分析应从某些上下文轨迹已经缓存的点开始。为了模拟稳态,也希望并非所有对话都从0回合开始,否则可能导致”雷鸣之牛“效果。

热身分为两个阶段。首先,AIPerf使用固定的随机种子,在每段对话的25%到75%之间选择一个墙时钟点。此时,它会识别所有活跃请求流,包括主代理和活跃子代理,并在每个流选定点之前发送最近的请求。

这些启动请求会重建该点的对话状态,并一起发送。AIPerf会等到他们耗尽后再继续。

第二阶段,每个回放通道前进10个请求,以增加KV缓存的生成机会。所有预热请求都省略了回合间延迟,最大输出长度为一枚令牌,大大缩短了预热时间。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论