核心问题: 多智能体LLM应用(如编码、搜索、模拟)的执行通常组织在同步的轮次中,其中一个中央调度器收集所有智能体的输出,然后重新分发组合后的上下文。这种被称为“All-Gather”的通信模式会产生巨大的KV Cache冗余。因为每个智能体的提示符都包含相同的共享输出块,但由于各自私有历史长度不同,这些共享块在不同智能体的提示符中处于不同的绝对位置,导致现有的重用方法无法有效利用这种冗余。这使得GPU内存成为扩展并发智能体数量的主要瓶颈,因为每个智能体都必须在GPU内存中维护一个近乎相同的、独立的KV Cache副本。
研究目标: 论文的核心挑战是,在固定的GPU内存预算下,最大化可以并发运行的智能体数量。为了解决这个问题,研究目标是设计一个能够识别并利用All-Gather模式中跨智能体冗余的系统,从而同时减少计算开销和内存占用。
创新点 (TokenDance系统):
TokenDance是一个通过利用All-Gather模式进行集体KV Cache共享来扩展并发智能体数量的系统。它将优化单元从单个请求提升到整个多智能体轮次,其核心创新包括:
通过这些创新,TokenDance显著降低了每个额外智能体带来的计算和存储成本,使得在相同硬件上能够支持更多的并发智能体。实验表明,在满足服务等级目标(SLO)的前提下,TokenDance支持的并发智能体数量是vLLM(带前缀缓存)的2.7倍,将每个智能体的KV Cache存储减少了高达17.5倍,并在预填充(prefill)阶段实现了比按请求进行位置无关缓存快1.9倍的速度。
图 1. All-Gather提示结构。所有智能体都接收到相同的输出块 ($O^t$),但由于每个提示都有自己的私有历史 ($H^t$) 并且可能使用不同的块顺序,这些块出现在不同的位置。这种结构出现在任何遵循All-Gather模式的多智能体应用中。
图 2. 在单张A100-80GB GPU上运行Qwen2.5-14B时,多智能体工作负载与独立工作负载之间的扩展差距。两种工作负载发出相同总数的子请求(250个),但多智能体工作负载几乎耗尽了KV Cache池,因为每个智能体在不同轮次间都保留了共享上下文的自己的副本,而独立请求在完成后会释放内存。
图 3. 使用PIC重用后KV Cache的高度相似性。由于所有智能体都重用相同的共享块,它们的KV Cache仅在私有重新计算的位置上有所不同。
All-Gather模式的形式化定义。如第一节所述,All-Gather模式将多智能体执行组织在同步的轮次中,其中调度器收集所有智能体的输出并重新分发组合后的上下文。对于一个有N个智能体的系统,每个智能体i在轮次t之前维持一个私有历史$H_i^t$,其中包含其系统提示和先前的交互。在轮次t中,每个智能体i产生一个输出块$O_i^t$。该轮次的共享输出集是:
$$O^{t}=\{O_{1}^{t},O_{2}^{t},...,O_{N}^{t}\}$$那么,智能体i在轮次t+1的提示$P_i^{t+1}$是:
$$P_{i}^{t+1}=H_{i}^{t} \| \Pi_{i}\left(O^{t}\right)$$其中$\Pi_i$是调度器为智能体i定义的共享输出块的布局。该轮次中的每个提示都包含相同的共享输出块和一个私有历史,并且由于私有历史的长度不同,共享块在不同请求之间出现在不同的绝对位置。
KV Cache重用方法的分类。LLM服务是受内存限制的:系统存储KV Cache以避免为先前的token重新计算注意力键(key)和值(value),而管理这些缓存是扩展系统容量的主要挑战。现有的重用方法分为两类。
前缀缓存(Prefix caching)。被vLLM【12,Efficient memory management for large language model serving with pagedattention,2023,SOSP】和SGLang【40,Sglang: Efficient execution of structured language model programs,2024,NeurIPS】等系统使用,仅当新请求与已存储序列共享完全相同的token前缀时才重用缓存的张量。这对于共享通用系统提示的请求效果很好,但一旦每个智能体的私有历史导致前缀发散,该方法便会失效。
位置无关缓存(Position-independent caching, PIC)。PIC方法【10,EPIC: Efficient position-independent caching for serving large language models,2024,arXiv】、【34,Kvlink: Accelerating large language models via efficient kv cache reuse,2025,arXiv】、【35,Cacheblend: Fast large language model serving for rag with cached knowledge fusion,2025,EuroSys】、【36,Kvcomm: Online cross-context kv-cache communication for efficient llm-based multi-agent systems,2025,arXiv】通过恢复任意偏移位置的共享块来消除这一限制。其关键思想是校正位置编码的差异:PIC方法首先应用RoPE旋转以将缓存的Key与新请求中的目标位置对齐,然后计算旋转后的缓存值与新计算的值之间的Key差异,以识别重要位置——即两者差异显著的token位置。只有这些重要位置会被选择性地重新计算,而其余位置则直接重用旋转后的缓存值。这在牺牲少量计算(用于旋转和重算)和在未经重算的位置上引入微小精度权衡的代价下,实现了超越前缀的共享。
现有系统无法利用All-Gather模式的冗余。All-Gather模式产生了一种特定组合的冗余,而现有的服务系统未能利用它。我们将先前的工作分为两类,并解释为何每一类都存在不足。
智能体感知、以计算为中心的调度器。Parrot【17,Parrot: Efficient serving of {LLM-based} applications with semantic variable,2024,OSDI】、Autellix【22,Autellix: An efficient serving engine for llm agents as general programs,2025,arXiv】和Teola【31,Teola: Towards end-to-end optimization of llm-based applications,2024,arXiv】将应用级别的依赖图注入到服务后端,以优先处理关键请求并减少队头阻塞。ScaleSim【25,ScaleSim: Serving Large-Scale Multi-Agent Simulation with Invocation Distance-Based Memory Management,2026,arXiv】则估计未来的调用距离来指导模拟工作负载中的预取。这些系统决定了每个请求的运行时间,但它们不控制生成的KV Cache的计算或存储方式。底层的内存分配器仍然将每个智能体的缓存视为独立对象。因此,一连串非关键的智能体可能会驱逐一个关键智能体的缓存,而与调度无关。这些系统都无法检测到All-Gather轮次中的N个请求共享相同的输出块,因此重用的工作量和存储足迹都没有减少。
以KV-Cache为中心、智能体无关的引擎。vLLM【12,Efficient memory management for large language model serving with pagedattention,2023,SOSP】和SGLang【40,Sglang: Efficient execution of structured language model programs,2024,NeurIPS】通过前缀匹配来重用缓存的张量,但一旦私有历史从位置零开始发散,这种方法就会失效。CacheBlend【35,Cacheblend: Fast large language model serving for rag with cached knowledge fusion,2025,EuroSys】和EPIC【10,EPIC: Efficient position-independent caching for serving large language models,2024,arXiv】通过在任意偏移处重用KV Cache块来解除这种位置限制,但它们仍然独立分析每个请求:N个智能体会对同一组共享块触发N次独立的重用过程。Mooncake【30,Mooncake: A kvcache-centric disaggregated architecture for llm serving,2024,TOS】和CacheGen【19,Cachegen: Kv cache compression and streaming for fast large language model serving,2024,SIGCOMM】通过解耦和压缩来扩展缓存池,但它们的策略是由全局内存压力驱动,而非轮次结构。Tokencake【2,Tokencake: A KV-Cache-centric Serving Framework for LLM-based MultiAgent Applications,2025,arXiv】在以KV-Cache为中心的后端之上增加了智能体感知的调度,主动卸载停滞的智能体并为关键智能体保留内存。在所有这些系统中,最终结果是相同的:每个智能体都持有一个密集的、独立的KV Cache副本,即使在同一轮次中超过90%的缓存块在智能体之间是相同的,也没有存储被释放。
对比:按请求重用 vs. 集体式重用。图4将这种按请求处理的方法(上)与TokenDance引入的集体式替代方案(下)进行了对比。
图 4. 按请求的PIC重用(上)与TokenDance的集体式重用(下)。现有的PIC方法独立处理每个智能体的共享块,重复RoPE旋转和重要位置选择N次。TokenDance将N个请求分组,并为整个轮次执行一次这些操作。
TokenDance的设计原则。TokenDance通过解决冗余的重用计算和冗余的KV Cache存储问题,扩展了本地GPU在All-Gather系统中能够支持的活跃智能体数量。其关键设计原则是将优化的单位从单个请求提升到All-Gather轮次:轮次中所有智能体共有的操作只执行一次并共享,而只对每个智能体之间的差异进行单独处理。
TokenDance的三个核心组件。图5展示了实现这一原则的三个组件。
- 轮次感知提示接口 (Round-aware prompt interface, §4.1):通过插入分隔符token来保留每个提示的逻辑块结构,使得运行时能够识别出即使出现在不同绝对位置的共享块。
- 集体KV Cache重用算法 (Collective KV Cache reuse, §4.2):利用该结构,在一次传递中为一组兼容的请求执行重用,将重用开销从每个请求支付一次降低到每个轮次支付一次。
- 差异感知存储方案 (Diff-aware storage, §4.3):将同级缓存编码为与共享主副本之间的稀疏差异。
- 融合式恢复路径 (Fused restore path, §4.4):在GPU传输过程中应用这些差异,以避免单独的重建步骤。
这些组件共同减少了每个新增智能体所带来的计算工作和存储成本,使得相同的硬件能够在相同的服务水平下支持更多的智能体。
图 5. TokenDance概览。一个轮次感知的提示接口保留了块边界,以便运行时可以识别共享内容;集体KV Cache重用将重用成本摊销到轮次中的所有智能体;带有融合式恢复的差异感知存储将每个智能体的KV Cache压缩为仅包含智能体间的差异。
设计动机与解决的低效问题。TokenDance的设计始于All-Gather应用结构与服务系统之间的不匹配。多智能体应用以轮次为单位进行通信,但服务系统接收到的是一个扁平的token流,丢失了私有块和共享块之间的逻辑边界,并将每个请求视为独立的。这种不匹配造成了三个复合的低效问题:首先,运行时无法识别跨请求的共享块,因为基于位置的索引将内容身份与绝对偏移混淆了。其次,位置无关的重用方法对轮次中的每个请求重复进行相同的分析,尽管所有请求都使用相同的共享块。第三,即使在重用之后,得到的KV Cache也几乎是相同的,但系统仍然为每个请求存储一个完整的密集副本。累积的结果是每个智能体的KV Cache成本被放大,这直接限制了并发智能体的数量。
TokenDance的设计规则。TokenDance通过两条设计规则来解决这些低效问题。首先,它保持轮次结构对运行时可见,直到运行时能够利用它。其次,它为每个请求保留一个正确的缓存状态,同时共享在整个轮次中真正公共的工作和状态。第一条规则引出了轮次感知的接口(§4.1)和集体KV Cache重用(§4.2)。第二条规则引出了差异感知存储和融合式差异恢复(§4.4)。
接口的目标与作用。如果运行时只接收到一个扁平的token流,它就无法利用All-Gather模式。TokenDance提供了一个轮次感知的提示接口,该接口保留了每个提示的逻辑块结构,因此运行时即使在共享块出现在不同请求的不同绝对位置时也能识别它们。
应用集成方式。任何遵循All-Gather模式的多智能体框架都可以通过最小的代码更改来采用此接口。如果应用程序不遵循该模式,TokenDance会回退到标准的单请求路径,不会有性能损失。
具体实现:分隔符token。应用程序在相邻的逻辑块之间组装每个智能体的提示,并插入一个保留的分隔符token <TTSEP>。图6展示了一个轮次中三个智能体的示例。每个提示包含一个私有历史块和一组相同的共享输出块,中间用分隔符token隔开。这些被分隔的块明确了请求之间可重用的关系:私有历史、每个共享的智能体更新以及轮次任务在分词后都是可单独识别的。
图 6. TokenDance轮次感知提示接口示例。每个提示由一个私有历史块和一组共享输出块组成,中间用保留的分隔符token(<TTSEP>)隔开。
从固定大小分块哈希到分段哈希。一旦块边界可见,运行时就从固定大小的块哈希切换到基于段的哈希。每个共享更新都由其自身的内容段来索引,而不是由其在长提示中的绝对位置来索引。因此,两个包含相同共享更新的请求会将该更新映射到同一个缓存对象,即使它们的私有历史长度不同。这是将All-Gather模式转化为服务优化的第一步:运行时现在知道了哪些块是共享的,并且可以在块级别而不是前缀级别上进行重用推理。
问题:重复的重用工作。一旦轮次结构可见,下一个问题就是重复的重用工作。现有的位置无关缓存(PIC)方法【10,EPIC: Efficient position-independent caching for serving large language models,2024,arXiv】、【34,Kvlink: Accelerating large language models via efficient kv cache reuse,2025,arXiv】、【35,Cacheblend: Fast large language model serving for rag with cached knowledge fusion,2025,EuroSys】、【36,Kvcomm: Online cross-context kv-cache communication for efficient llm-based multi-agent systems,2025,arXiv】可以恢复前缀之外的共享,但它们仍然独立处理每个请求。在一个有N个智能体的轮次中,运行时会对同一组共享块执行N次独立的重用过程。每次过程都应用RoPE、计算键差异并选择重要位置——所有这些操作在不同请求之间产生几乎相同的结果,因为共享块的内容是相同的。这种按请求的冗余与All-Gather模式不匹配,在该模式下,共享的轮次更新对轮次中的每个请求都是公共的。
解决方案:集体KV Cache重用。TokenDance通过集体KV Cache重用解决了这种冗余,如图7所示。KV Collector不是独立处理每个请求,而是将一个轮次中的N个请求分组,并执行一次共享的RoPE旋转和一次共享的重要位置选择过程,然后仅更新每个请求缓存中不同的位置。图7将此集体路径(T3)与完全重计算(T1)和按请求的PIC重用(T2)进行了对比。
分组兼容请求。KV Collector从同一个All-Gather轮次中收集提示范围兼容的请求,以便进行集体处理。兼容性要求请求具有相同的主动提示长度、对缓存层可见的相同缓存范围,以及在执行引擎中不重叠的槽位映射。这些是确保逐层同步处理的执行约束;不满足这些约束的请求会回退到单独的分组或单请求路径。
分层集体式重用。对于每个兼容的组,运行时以锁步方式驱动分层检索和模型执行。在每一层,KV Collector将组中所有请求的Q和K张量连接成一个组合张量,并应用单个批处理的RoPE调用。在配置的检查层上,运行时通过一次批处理的差异计算,将旋转后的Key与整个组的缓存Key进行比较。这个过程同时为每个请求识别出重要位置——即缓存值与新计算值显著偏离的token位置。然后,运行时仅刷新每个请求缓存的K和V张量中的那些重要位置。后续层直接重用在检查层上识别的重要位置集,而无需重复差异计算。
摊销重用开销。因此,昂贵的操作——RoPE旋转和键差异分析——是为整个组执行一次,而不是为每个请求执行一次。只有最终的缓存更新是请求特定的,因为每个请求的私有历史在需要刷新的位置上会产生不同的值。在以请求为中心的路径中,重用分析的开销随智能体数量线性增长。而在TokenDance中,该组每层支付一次共享的RoPE和一次共享的差异分析,只有每个位置的刷新成本随智能体数量扩展。随着一个轮次中智能体数量的增加,这种摊销减少了每轮的总重用工作量。这种减少是扩展增益的计算方面。
图 7. 一个三智能体All-Gather轮次的集体KV Cache重用。左:每个智能体的提示包含一个私有部分和顺序不同的相同共享块。右:vLLM从头计算所有三个(T1);按请求的PIC独立处理每个请求(T2);TokenDance将它们分组并在组内共享RoPE和重要位置选择工作(T3),每轮只支付一次重用开销。
与底层PIC方法解耦。这种集体摊销与底层的逐位置恢复方法是解耦的。当前的原型使用CacheBlend【35,Cacheblend: Fast large language model serving for rag with cached knowledge fusion,2025,EuroSys】的选择性重计算作为默认后端,但任何接受一组token位置并返回校正后的K/V张量的PIC方法都可以通过适配器接口作为插件替换。
重用计划输出。集体KV Cache重用还会产生元数据,供后续的差异感知存储使用。重用路径记录了组成员关系、累积的每个请求的偏差分数,以及被选为Master的请求。Master在语义上并无特殊之处,它仅仅是其恢复结果最接近组共同结构的请求,通常是与共享块总偏差最低的那个。选择一个好的Master可以最小化差异感知存储必须为其余请求保留的稀疏校正的大小。因此,重用计划充当了本小节的计算优化与下一小节的存储优化之间的桥梁。
问题:冗余的存储。集体KV Cache重用消除了冗余计算,但并未消除冗余存储。在一个轮次的重用完成后,系统仍然为每个请求持有一个密集的KV Cache。这是浪费的,因为一个All-Gather轮次中的请求共享了大部分逻辑块,仅在私有历史和少量位置敏感的更新上有所不同。如果系统完整存储每个恢复的结果,它仅仅是将冗余从预填充计算转移到了内存容量上。
存储开销增长问题。这个问题对于多智能体服务尤为严重,因为轮次会重复,且智能体状态在轮次间保持活跃。在一个有N个智能体运行R个轮次的系统中,为每个智能体每轮存储一个完整的缓存会导致内存消耗以$O(N \times R)$的速度增长。如果系统存储大量近乎重复的KV Cache,内存压力会迅速上升,活跃智能体的数量也会下降。因此,存储必须利用重用所利用的相同All-Gather结构:一个轮次中的请求在结构上是相似的,仅在一部分可预测的位置上有所不同。
Master-Mirror布局。TokenDance使用Master-Mirror布局来压缩每轮的缓存族,如图8所示。差异感知存储保留一个密集的缓存作为Master,并将每个剩余的缓存存储为Mirror,其中只包含与该Master的差异。适配器将集体KV Cache重用产生的重用计划转发到存储路径,因此存储已经知道哪个请求应该成为Master,以及每个Mirror中哪些位置是不同的。当没有明确的重用计划可用时——例如,当一个请求在已识别的All-γather轮次之外到达时——后端会回退到使用token相似性启发式方法,在现有缓存条目中寻找一个可重用的Master。
图 8. 采用Master-Mirror布局的差异感知存储。左:重用后,三个智能体的KV Cache仅在10-20%的位置上有所不同。右:差异感知存储存储一个完整的主(Master)缓存,并将每个剩余的缓存编码为稀疏差异(Diff 2, Diff 3)。在恢复时,系统根据主缓存及其差异即时重建每个镜像(Mirror)。
块稀疏Diff表示。Mirror的校正被存储为块稀疏的K/V差异。恢复后的缓存之间的差异集中在一部分token位置上,这些位置的值因为私有上下文或位置相关的RoPE旋转而发生了变化。这些不同的位置倾向于聚集在与私有历史段或共享块之间边界区域相对应的连续块中。块粒度的表示能够以比细粒度逐元素差异低得多的元数据成本来捕捉这种聚集性。它也自然地与现代服务引擎使用的基于块的内存管理以及第4.4节中描述的与tile对齐的恢复流程相吻合。
延迟物化。在读取时,存储层不会急切地重建一个密集的Mirror张量。相反,它返回一个轻量级的Mirror对象,该对象保留了对Master的引用和稀疏差异的元数据。这为调用者保留了一个标准的逻辑KV Cache抽象,同时将物化推迟到运行时实际需要数据时。Mirror只占用完整缓存的10-20%,因此系统可以立即节省内存,而无需在执行时才支付恢复成本。
适用性分析。这种布局的优势取决于提示中有多少是共享的与私有的。All-Gather模式是一个天然的契合点,因为前一轮的共享输出块在提示中占主导地位,只有私有历史和轮次任务是每个智能体独有的。如果请求的差异更大——例如,在一个系统中,每个智能体接收到共享输出的一个显著不同的子集——那么Mirror的校正会变大,存储效益也会减弱。我们将在第6.4节中量化这种关系。
问题:朴素恢复方法的高昂代价。只有当恢复过程在关键路径上保持廉价时,压缩才是有用的。一个朴素的Mirror恢复方法会加载完整的Master,将其复制到一个新的缓冲区中,然后覆盖不同的块——这为系统从未保留的对象增加了一次额外的密集“写后读”往返。
解决方案:融合式稀疏校正。TokenDance通过在已经将缓存的KV数据移动到分页GPU内存的逐层传输路径内部应用稀疏校正来消除这种开销。算法1展示了该过程。两个GPU缓冲区以乒乓方式交替工作:一个从存储中接收Master块,而另一个则进行原地校正和写回。在每一层,该路径会应用块稀疏差异(第7行),恢复RoPE位置(第9行),并将结果写入分页KV Cache内存(第10行)——所有这些都在普通缓存加载已执行的同一次传递中完成。从不物化单独的密集Mirror。
块级调度细节。每层唯一的额外工作是第7行的校正,其成本与不同块的数量成正比——通常是总数的10-20%。图9展示了块级别的分派。与Master相同的块直接进入注意力计算。携带差异的块在送入FlashAttention之前在SM内存中进行校正。块稀疏格式使得这种“跳过或校正”的决策可以按块进行,而无需扫描整个缓存,并且块大小与注意力tile的大小对齐,因此校正后的块不需要额外的重塑。
当前实现与未来扩展。当前的原型将差异融合到注意力计算之前的传输流水线中,而不是在注意力tile加载器内部。这已经消除了密集的重建步骤,并减少了关键路径上的额外内存流量。更深层次的融合——在注意力tile从HBM加载到共享内存时应用差异——是一个自然的扩展。
总结:解决内存扩展问题。总而言之,差异感知存储和融合式恢复解决了扩展问题的内存方面。存储减少了每个额外智能体对内存足迹的贡献。融合式恢复确保了这种压缩在在线执行期间保持可用,而不仅仅是在静止状态。这就是TokenDance如何将All-Gather模式中固有的结构相似性转化为本地GPU上更高的活跃智能体容量。
算法1 一个Mirror请求的融合式差异恢复
图 9. 块粒度上的融合式差异恢复。标记为“有差异”的块在进行注意力计算前在SM内存中被校正;没有差异的块则绕过校正路径。
总体实现概述。TokenDance是在LMCache和vLLM之上实现的。我们增加了大约3000行Python代码和500行CUDA/C++代码,分布在四个部分:轮次感知的段索引、集体KV Cache重用、差异感知存储和融合式稀疏恢复。
轮次感知的段索引实现。应用程序如第4.1节所述,在逻辑块之间插入<TTSEP>分隔符。在运行时方面,我们将固定大小的块哈希表替换为基于段的哈希表,该哈希表在分隔符边界处拆分提示,并独立索引每个段。
集体KV Cache重用实现。vLLM V1适配器在每个调度器步骤中扫描请求,并将每个组分派到第4.2节中描述的集体路径。在内部,KV Collector为每个请求创建一个计算生成器和一个检索生成器,并跨层以锁步方式驱动它们。
差异感知存储实现。我们添加了一个差异感知的后端,它包装了常规的LMCache存储后端。当有重用计划可用时,存储路径会直接使用它来选择Master并识别Mirror的位置。当没有重用计划可用时,后端会回退到token相似性启发式。Master块被原样写入。每个Mirror块被序列化为块稀疏的K/V差异:后端记录被触及的块索引以及这些块的K/V校正值。当K和V平面都触及相同的块时,实现会共享块索引列表以减少元数据大小。在读取时,后端返回一个轻量级的mirror对象而不是一个密集的张量,将物化推迟到恢复路径。
融合式稀疏恢复实现。我们扩展了GPU连接器的逐层乒乓传输路径以识别mirror对象。连接器将Master块加载到其临时缓冲区,合并当前层的稀疏差异元数据,并在RoPE恢复和分页内存写回之前,原地调用一个配对的K/V差异内核。CUDA扩展提供了两个内核:一个用于单个KV平面,另一个用于同时更新K和V。当稀疏元数据对齐良好时,使用配对内核;否则连接器会回退到密集恢复。如第4.4节所讨论的,融合目前发生在注意力计算之前的传输流水线中,而不是在注意力tile加载器内部。
硬件配置:
模型架构:
数据集/工作负载:
软件配置与基线系统:
评估指标:
实验内容: 评估在相同的延迟或QPS目标下,TokenDance与基线系统相比能支持多少智能体。实验通过扫描智能体数量(1到10)和QPS(1到16),记录每个配置点的轮次延迟。
实验结果 (图10):
结论: TokenDance通过利用All-Gather模式,显著增加了并发活跃智能体的数量,并且这种优势随着智能体数量和模型规模的增加而扩大。
图 10. 在两个工作负载(GenerativeAgents, AgentSociety)和两个模型(Qwen2.5-7B, Qwen2.5-14B)上的扩展能力概览。左图:在QPS=10时,轮次延迟与智能体数量的关系;虚线标记了1500毫秒的SLO。右图:在每个QPS水平下,保持在SLO以下的最大智能体数量。TokenDance(橙色)在整个QPS范围内始终比所有基线支持更多的智能体。
实验内容: 隔离计算端的贡献,测量集体KV Cache重用对预填充吞吐量的影响。实验重放一个GenerativeAgents轮次,改变智能体数量(3, 5, 10, 15, 20)和QPS,并测量TokenDance相对于串行PIC(每个请求独立处理)的加速比。
实验结果 (图11):
结论: 集体KV Cache重用有效地摊销了RoPE和重要位置选择的成本。TokenDance下,重用分析的开销随智能体数量呈次线性增长,而请求中心的方法是线性增长。这种次线性扩展是系统能支持更多智能体的计算端原因。
图 11. 在GenerativeAgents工作负载上,集体KV Cache重用相对于串行(按请求)PIC恢复在不同智能体数量(3, 5, 10, 15, 20)和QPS水平下的加速比。峰值加速比2.57倍出现在10个智能体和QPS=1时。所有配置在整个QPS范围内都超过1.0倍,证实了集体重用始终是有益的。
实验内容: 隔离内存端的贡献,通过分析恢复后缓存之间的冗余度,并测量Master-Mirror布局的存储节省效果。
实验结果 (图12):
结论: Master-Mirror存储显著降低了每个智能体轮次的KV Cache成本,有效地消除了模型大小对每个智能体存储成本的影响。这种内存减少是TokenDance能够支持更多智能体的关键机制。
图 12. 在一个GenerativeAgents轮次中,跨智能体恢复的KV Cache的冗余度特征。左:压缩率(完整缓存大小除以Master加diff的大小)。右:一个Mirror与其Master之间不同的32-token块的平均数量。14B模型实现了更高的压缩率,因为每个token的缓存张量更大,而不同块的数量保持相似。
实验内容: 评估融合式检索路径是否在在线服务期间保持了存储增益,比较了融合式差异恢复与朴素的密集恢复(复制Master再覆盖差异)的延迟。
实验结果 (图13):
- 延迟降低: 融合式恢复始终比密集恢复更快。例如,在10个智能体和QPS=1时,融合式恢复将延迟从0.59ms降低到0.43ms,减少了27%。
- 加速比: 融合式恢复相对于密集恢复的加速比在1.3倍到2.6倍之间。
- 开销: 对于单个智能体,融合式恢复的成本(0.13-0.18ms)与几百毫秒的总轮次延迟相比可以忽略不计。
结论: 融合式差异恢复路径有效地避免了在关键路径上物化一个完整的密集副本,其延迟低于密集恢复,从而确保了存储压缩带来的增益能在在线服务中得以保留。
图 13. 在GenerativeAgents上使用Qwen2.5-7B对Mirror状态重建的延迟分析。左图:密集重建(虚线)和融合式差异检索(实线)在不同智能体数量和QPS水平下的绝对恢复延迟。右图:融合式检索相对于密集恢复的加速比。通过避免单独的密集物化步骤,融合式检索始终将恢复延迟降低了1.3-2.6倍。
实验内容: 验证TokenDance的优化是否改变了模型输出。在贪心解码(temperature=0)下,比较TokenDance和vLLM(带前缀缓存)在8个场景中的输出,记录首次出现输出分歧前的模拟轮次数。
实验结果 (图14):
- 一致性: TokenDance的集体路径和Master-Mirror存储在设计上会产生与底层PIC方法(本实验中使用CacheBlend)逐个请求应用时完全相同的数值结果。
- 输出对比: 在8个场景中,有3个场景的输出与vLLM完全相同。其余5个场景的差异在3.3%到11.9%之间。
- 差异来源: 这些差异归因于底层PIC方法(CacheBlend)的选择性重计算引入的微小数值扰动,这些扰动在贪心解码下可能导致某个token的选择发生改变,并级联影响后续轮次。
结论: TokenDance本身没有引入额外的准确性下降。其输出与所依赖的PIC后端一致,任何与非PIC基线的差异都源于该PIC方法本身。
图 14. 在来自GenerativeAgents(ID 1-4)和AgentSociety(ID 5-8)的八个场景中的准确性评估。每个条形图显示了在TokenDance和vLLM(前缀缓存,temperature=0)之间首次出现输出分歧之前完成的模拟轮次数。相对差异Δ标注在每对上方。工作负载ID映射:1=见面问候,2=情人节派对,3=选举讨论,4=赢得选举,5=信息爆发,6=登陆前活动,7=飓风,8=经济稳定。三个场景显示零分歧;其余差异归因于底层的PIC方法,而非TokenDance。
LLM服务系统。vLLM【12,Efficient memory management for large language model serving with pagedattention,2023,SOSP】、SGLang【40,Sglang: Efficient execution of structured language model programs,2024,NeurIPS】、Orca【38,Orca: A distributed serving system for {Transformer-Based} generative models,2022,OSDI】和Sarathi-Serve【1,Taming {Throughput-Latency} tradeoff in {LLM} inference with {Sarathi-Serve},2024,OSDI】改进了LLM推理的批处理、调度和内存管理。这些系统优化单个请求的执行,但没有利用TokenDance所针对的轮次级KV Cache冗余。
以请求为中心的KV Cache重用。SGLang【40】和vLLM【12】中的前缀缓存仅在请求共享精确前缀时重用缓存状态。PromptCache【7,Prompt Cache: Modular Attention Reuse for Low-Latency Inference,2024,MLSys】通过标记重用缓存模块,DroidSpeak【18,DroidSpeak: KV Cache Sharing for Cross-LLM Communication and Multi-LLM Serving,2025,arXiv】在不同LLM间共享KV Cache。EPIC【10,EPIC: Efficient position-independent caching for serving large language models,2024,arXiv】、KVLink【34,Kvlink: Accelerating large language models via efficient kv cache reuse,2025,arXiv】和KVComm【36,Kvcomm: Online cross-context kv-cache communication for efficient llm-based multi-agent systems,2025,arXiv】通过位置校正恢复任意位置的重用,而CacheBlend【35,Cacheblend: Fast large language model serving for rag with cached knowledge fusion,2025,EuroSys】进一步增加了选择性重计算以恢复重要位置的准确性。所有这些方法都是一次处理一个请求。TokenDance的不同之处在于将智能体轮次作为重用单元:它在轮次中的所有智能体之间共享重用工作,并压缩这种集体执行产生的KV Cache集合。
KV Cache压缩与移动。HCache【5,Fast state restoration in llm serving with hcache,2025,EuroSys】、InfiniGen【13,{InfiniGen}: Efficient generative inference of large language models with dynamic {KV} cache management,2024,OSDI】、CacheGen【19,Cachegen: Kv cache compression and streaming for fast large language model serving,2024,SIGCOMM】、MoonCake【30,Mooncake: A kvcache-centric disaggregated architecture for llm serving,2024,TOS】和CachedAttention【4,Cost-Efficient Large Language Model Serving for Multi-turn Conversations with CachedAttention,2024,arXiv】通过重计算、卸载、压缩或解耦来降低长上下文服务的成本。这些方法针对单个缓存。TokenDance则利用来自同一轮次的同级缓存之间的相似性。Master-Mirror布局和融合式差异路径是围绕跨缓存冗余设计的,而不仅仅是单个缓存的压缩。
KV Cache驱逐与量化。H2O【39,H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models,2023,NeurIPS】和ScissorHands【20,Scissorhands: exploiting the persistence of importance hypothesis for LLM KV cache compression at test time,2023,NIPS】通过驱逐注意力分数低的token来减少KV Cache内存,而StreamingLLM【33,Efficient Streaming Language Models with Attention Sinks,2024,arXiv】和FastGen【6,Model Tells You What to Discard: Adaptive KV Cache Compression for LLMs,2024,arXiv】只保留一个固定窗口加上几个重要token用于长序列服务。KIVI【21,KIVI: a tuningfree asymmetric 2bit quantization for KV cache,2024,ICML】和KVQuant【9,KVQuant: Towards 10 Million Context Length LLM Inference with KV Cache Quantization,2024,NeurIPS】采取不同路径,将缓存值量化到2-3位,几乎没有精度损失。这些方法缩小了单个缓存,但没有解决跨缓存冗余问题。TokenDance是正交的:它首先移除同级缓存之间的重复数据,然后可以在此基础上应用单缓存压缩。
注意力核与稀疏后端。FlashAttention【3,Flashattention: Fast and memory-efficient exact attention with io-awareness,2022,NeurIPS】表明注意力性能严重依赖于数据移动。FlashInfer【37,Flashinfer: Efficient and customizable attention engine for llm inference serving,2025,MLSys】提供了高效的可变长度和块稀疏注意力后端。我们的融合式差异核遵循相同的数据移动逻辑。它将稀疏差异块与注意力tile对齐,以便在没有额外密集重建步骤的情况下使用压缩缓存。
多智能体LLM系统。Parrot【17,Parrot: Efficient serving of {LLM-based} applications with semantic variable,2024,OSDI】、Autellix【22,Autellix: An efficient serving engine for llm agents as general programs,2025,arXiv】、Teola【31,Teola: Towards end-to-end optimization of llm-based applications,2024,arXiv】、ScaleSim【25,ScaleSim: Serving Large-Scale Multi-Agent Simulation with Invocation Distance-Based Memory Management,2026,arXiv】和Tokencake【2,Tokencake: A KV-Cache-centric Serving Framework for LLM-based MultiAgent Applications,2025,arXiv】为智能体应用优化了调度、预取或执行顺序。LRAgent【11,LRAgent: Efficient KV Cache Sharing for Multi-LoRA LLM Agents,2026,arXiv】通过将缓存分解为共享和适配器特定部分,在多LoRA智能体间共享KV Cache。GenerativeAgents【26,Generative agents: Interactive simulacra of human behavior,2023,UIST】、AgentSociety【27,Agentsociety: Large-scale simulation of llm-driven generative agents advances understanding of human behaviors and society,2025,-】、OpenClaw【24,OpenClaw: Your own personal AI assistant. Any OS. Any Platform. The lobster way,2026,-】和MoltBook【23,moltbook: The front page of the agent internet,2026,-】表明许多真实的智能体工作负载在带有共享调度器的明确轮次中运行。这些系统定义或调度智能体应用;TokenDance为它们共有的重复“收集-再分发”模式优化了KV Cache层。
论文总结:
本文提出了TokenDance,一个通过集体KV Cache共享来扩展多智能体LLM服务的系统。其设计基于两个核心观察:当前对智能体轮次的重用方法效率低下,并且即使在轮次级KV Cache重用后,生成的KV Cache仍然高度可压缩。TokenDance将这些观察转化为一个渐进式设计,包括集体KV Cache重用、Master-Mirror存储和融合式差异恢复。在代表性的多智能体工作负载上,与带前缀缓存的vLLM相比,它将端到端延迟降低了高达2.3倍,KV Cache存储减少了94%。
未来展望:
更广泛地说,本文认为通信结构应成为LLM服务中的一个头等概念。All-Gather模式是一个自然的起点,因为它已经出现在许多智能体工作负载中。随着智能体系统的不断多样化,其他重复出现的通信模式可能会暴露出类似的机会。一个能感知通信模式的服务堆栈对于使未来的多智能体平台在规模上高效运行至关重要。