HiCache:如何适配CP、PP、投机解码与PD分离?

资讯 AI 行业观察 全文 5099 字 · 约 13 分钟读完 配图 10 张 分类智能体存储

Agentic应用会反复向模型提交超长且高度相似的历史上下文。HiCache在Radix cache基础上把KV复用扩展到主机内存与外部存储,并进一步适配CP、PP、Speculative decoding和P/D分离等生产级推理架构。

所属频道 算力与芯片智能体与 Agent

Agentic负载里,请求反复带上的历史上下文往往很长,而且大部分内容不变。Radix cache能在GPU显存中复用前缀KV,HiCache把这种复用延伸到主机内存和外部存储。到了生产环境,缓存系统还得同时适配多种并行与分布式推理机制,涵盖Context Parallelism、Pipeline Parallelism、Speculative decoding以及prefill-decode disaggregation。

HiCache在这些场景里的核心设计可以这样梳理:Context Parallelism下维持统一的逻辑前缀;Pipeline Parallelism中让各stage做出相同的缓存决策;Speculative decoding中恢复draft模型状态;用统一KV布局跨并行配置共享缓存;P/D分离场景只传输缺失的KV。

生产实践中,科大讯飞Iflytek Astron MaaS团队把Pipeline Parallelism、prefill-decode disaggregation和MTP结合起来,服务GLM-5.1/5.2 CodingPlan工作负载。请求的输入token通常在30K到200K之间,少数能到100万token。没开HiCache时,缓存命中率大约30%,用户等待时间偏长;接入带外部存储的HiCache后,命中率升到95%,median TTFT降到3秒以内。

Context Parallelism × HiCache:基于页面的KV分片

Context Parallelism会把prefill计算分散到多个rank上,可KV cache若仍在各rank各存一份,显存就白白浪费了。HiCache的做法是按page对KV做sharding,重复副本被去掉,每个请求的逻辑视图仍然统一。

统一逻辑Radix tree与页面归属

CP场景下,每个rank都维护同一棵逻辑Radix tree,logical page ID也保持一致。拿两个rank举例,偶数page分给rank 0,奇数page分给rank 1。这样一来,A/B/C这三个前缀页的KV即使实际落在不同GPU上,任意rank命中A/B/C,认出的仍是同一组逻辑缓存页。

面对N个shard rank、page大小为p个token、逻辑槽位为x的情况,HiCache用简单算术映射来定位KV:q = floor(x / p)它表示logical cache page ID,r = q mod N它表示owner rank,l = floor(q / N) * p + (x mod p)它表示owner本地row。这套映射不用逐页查表。

请求复用A/B/C并接着追加page D时,allocator会顺着前缀的owner序列往下排:0、1、0之后轮到1。树结构把这种ownership rotation记下来,不兼容的页面轮转不会被混进同一前缀。

A logical radix tree shared by two CP ranks: logical page IDs map to rank 0 or rank 1 by q mod 2, and extending the A/B/C prefix allocates page D on rank 1.

图1:两个CP rank共享同一逻辑Radix tree,logical page ID决定页面owner,扩展A/B/C前缀时D被分配到rank 1。

逐层读取分片KV:每层一次gather

KV分片之后,单个rank的本地cache只存着完整上下文的一部分。attention要读到完整前缀,每个rank就得在处理某一层之前,把自己手里的pages通过all-gather贡献出来,写进该层的临时buffer。

比如rank 0贡献A和C,rank 1贡献B和padding page。gather完的buffer按owner分组,attention借助page-table mapping按逻辑顺序A、B、C读取,物理上不用重排。系统用两个临时scratch buffer在层间轮换:当前层做attention计算时,下一层的gather可以同时跑,assembled KV多出来的显存就压在两个layer buffer以内。

在支持的配置上,gather走GPU copy engines,不用NCCL SM kernels,跟模型计算抢SM资源的情况少了。换句话说,前缀命中省掉了重复的prefill计算,但分布式KV gather这笔开销仍然要付。

Each rank contributes its owned pages plus padding to a per-layer all-gather; both ranks build the same owner-ordered scratch buffer, and two scratch slots let the next layer's gather overlap with current-layer attention.

图2:每个rank贡献本层所拥有的pages,all-gather生成相同的owner-ordered scratch buffer;双scratch slot让下一层gather与当前层attention重叠。

HiCache集成:先恢复各自shard,再执行gather

HiCache在GPU与host memory之间搬KV时,页面归属关系同样得保住。不然恢复出来的page可能落到错误的rank上,下次gather就没人贡献对应的KV。还是上面那三页,rank 0备份并恢复A和C,rank 1备份并恢复B;GPU物理地址就算变了,owner关系照样不变。

cache tree和transfer queues用的还是逻辑索引。真正拷贝时,每个rank挑出属于自己的source-destination page pairs,再翻译成本地地址。执行顺序是这样:先在transfer stream里恢复本地pages,然后gather stream等该层的restore-completion event,最后attention等gather buffer完成。

Rank 0 backs up and reloads A and C, rank 1 backs up and reloads B; on each rank the transfer, gather, and compute streams run in the order restore, gather, attention.

图3:HiCache备份与恢复时保持页面owner不变;每个rank按restore、gather、attention顺序推进。

生产流量下的性能结果

评测跑的是GLM-5.2-NVFP4,TP4/CP4、EAGLE MTP、static memory fraction 0.9。每个deployment里有2个prefill engine,每个engine跑在4张NVIDIA GB300 GPU上。对照组的做法是在GPU上复制KV,并在host memory里对MLA KV做去重;HiCache组则用CP-sharded KV。两组的每engine目标host-cache预算都是960GB:baseline是1个去重池,HiCache是4个shard rank各240GB。

3小时生产流量窗口里,每种配置处理约24.5K个带cache-tier归因的请求,平均输入长度136K至137K token,总输入量只差1.8%。结果是CP-sharded HiCache把L1命中率从42.83%拉高到83.31%,L2命中率从50.27%掉到9.62%,总命中率维持在约93%。同一时间,平均prefill排队时间从14.64秒降到6.42秒,forward时间从3.15秒降到2.16秒。

Token hit rates and prefill-stage means: CP-sharded KV with HiCache raises the L1 hit rate from 42.83% to 83.31%, lowers the L2 hit rate from 50.27% to 9.62%, keeps the combined rate near 93%, and cuts mean prefill queue time from 14.64 s to 6.42 s and forward time from 3.15 s to 2.16 s.

图4:CP-sharded HiCache明显抬高GPU侧L1命中率,prefill排队和forward耗时随之下降。

Pipeline Parallelism:各stage的缓存决策要一致

Pipeline Parallelism里,模型层被切到不同stage上。HiCache的规矩是:所有stage走同一套逻辑缓存操作序列,但KV tensor只留在各stage本地。请求在不同时间步穿过pipeline时,各stage执行的cache hit、restore、lock、unlock和eviction逻辑一模一样,对应的KV数据并不跨stage搬。

Four pipeline stages process request 4 at successive time steps t0 to t3, each following the same logical cache operation sequence while keeping KV tensors local to the stage.

图5:4个pipeline stage在连续时间步处理同一个请求,各stage做相同的逻辑缓存操作,KV保持本地。

麻烦在于异步传输的完成时间未必一致。假如PP0只消费A,PP1却消费A和B,各stage的lock状态和eviction资格就会分叉,缓存一致性最终出问题。HiCache的办法是pp_sync同步消费长度:比如PP0选定n = 1并通过pp_sync往后传递,PP1就也只消费A,把B继续留在队列里;PP2则等本地A就绪再消费。

Failure case: PP0 consumes A while PP1 consumes A and B, so locks and eviction eligibility diverge. Fix: PP0 picks n = 1 and passes it through pp_sync; PP1 consumes A and keeps B queued, and PP2 waits for its local A before consuming it.

图6:不同PP stage一旦消费不同前缀,lock和eviction状态就会分叉;pp_sync强制各stage消费同一长度。

另外,后台线程会统计各rank的最小hit长度和已完成长度,再发布ACK,比如先发ACK(4)再发布ACK(6)。PP0消费ACK(4)之后就不再等,PP1靠pp_sync跟着PP0消费同一个ACK,而把ACK(6)这些缓存状态会继续留在队列里。异步restore时,pipeline各stage的缓存状态因此能保持一致。

Background threads compute the minimum hit and completed lengths across ranks and publish ACK(4) then ACK(6); PP0 consumes ACK(4) and stops waiting, and PP1 follows PP0 through pp_sync, consuming the same ACK(4) and leaving ACK(6) queued.

图7:后台线程发布ACK,PP stage据此消费一致的确认长度,缓存决策不会漂移。pp_sync

Speculative decoding:draft模型状态也要一起恢复

在Speculative decoding或MTP中,系统要的不只是target model的KV cache,draft model相关状态同样缺不得。HiCache因此得在恢复target cache的同时,把draft模型所需的cache state一并恢复。

布局上有两种做法。一种是packed integration:draft layers直接追加到target KV和indexer host pools后面,形成一个统一池。另一种是sidecar integration:draft用独立pool,但继承target KV的索引关系。两种方式都能把host slots 7、12、19恢复到GPU slots 42、8、27,差别只在draft状态怎么组织和寻址。

Two layouts for draft cache state: packed integration appends draft layers to the target KV and indexer host pools, while sidecar integration keeps separate draft pools that inherit indices from target KV; both restore host slots 7, 12, and 19 into GPU slots 42, 8, and 27.

图8:draft cache state可采用packed或sidecar布局,二者都能随target cache一起恢复。

统一KV布局:跨并行配置共享缓存

生产环境里,不同worker用的TP/PP配置可能各不相同。HiCache的做法是统一KV layout,把外部存储中的KV组织成可被兼容并行配置读取的对象,部署形态一变就cache失效的情况因此减少。

举个例子,TP4/PP2 writer会把每个rank的一段KV写成8个共享L3对象;换成TP2/PP1 reader读取时,一次能组装4个chunk。扩展后的对象把heads 4–5在layers 30–59的K和V组织为连续range,只要并行切分方式兼容,同一份存储KV就能复用。

A TP4/PP2 writer stores one chunk per rank into eight shared L3 objects, which a TP2/PP1 reader assembles four chunks at a time; the expanded object holds K and V for heads 4–5 across layers 30–59 as one contiguous range.

图9:统一KV layout支持TP4/PP2写入、TP2/PP1读取,在兼容配置间共享外部KV对象。

Prefill-decode disaggregation:只传输缺失KV

在P/D分离架构中,prefill worker管prefill KV的计算,decode worker负责后续生成。decode侧如果已经持有部分前缀,HiCache会优先复用decode本地缓存,GPU resident cache和host cache都算在内,prefill侧只需通过P/D链路传输缺失的后缀。

拿12K-token prompt来说,可以拆成三个4K span:A已经在decode GPU上,B能从decode host pool恢复,只有缺失的C需要从prefill worker跨P/D链路传输。网络传输因此减少,prefill到decode的交接延迟也跟着降低。

A 12K-token prompt split into three 4K spans: A is resident on the decode GPU, B is restored from the decode host pool, and only the missing suffix C crosses the P/D link from the prefill worker.

图10:P/D分离下,decode侧优先复用本地前缀,prefill只传输缺失KV后缀。

调试:用rank_consensus_checker定位不一致

多并行系统里,最难排查的往往不是单个rank失败,而是不同rank对缓存状态的判断对不上。HiCache提供rank_consensus_checker来定位这类问题,包括hit length不一致、restore完成状态不一致、lock/unlock顺序不一致、eviction资格分叉,以及PP ACK消费不一致等。

总体来看,HiCache把单机Radix cache扩展为面向生产分布式推理的多层缓存系统:KV在GPU、host memory和外部存储之间迁移,同时保持CP、PP、Speculative decoding和P/D分离下的逻辑一致性。对长上下文Agentic应用来说,这种能力直接转化为更高命中率、更低TTFT和更稳定的服务成本。

本文由本站编辑组整理与排版,内容基于公开信息核实后归纳发布,与文中提及的产品、公司无隶属关系。我们持续跟踪 AI 领域的模型、产品与行业动态,力求信息准确、表述清晰;文中涉及的名称、价格与功能细节可能随官方调整而变化,请以官方最新说明为准。如发现疏漏或表述有误,欢迎通过站内渠道反馈指正。

相关推荐 按相关度与热度排序

全部资讯 →
  1. Dropbox 3.5亿美元收购Tigris Data,为DBX Agent Cloud补存储底座

    Dropbox宣布以3.5亿美元收购数据基础设施初创公司Tigris Data,该交易旨在支撑其全新存储平台DBX Agent Cloud的开发。这一平台面向构建AI模型与智能体的开发者,标志着Dropbox从云存储服务商向AI基础设施提供商的战略转型。本文梳理交易细节、技术背景与行业影响。

    来源 AI 行业观察
  2. 谷歌Gemini 4 Argon跑11小时:ADK代码库长会话开销降40%

    谷歌介绍了 Gemini 4 Argon 的一次 11 小时无人值守运行为谷歌 Agent Development Kit(ADK) 代码库产出了两项最终被采纳的优化方案,使长会话中的内存会话准备开销降低约 40%,冷启动包导入时间缩短 21%。 谷歌工程师的目标之一是了解“模型如何处理已有的代码库”,他们说这比创建“

    来源 AI 行业观察
  3. 英伟达AI内存策略:HBM容量仅增3%,Agent吞吐量每美元最高涨30倍

    美东时间11月5日周四,英伟达发布公司博客文章,详解其AI内存全栈协同设计策略,强调随着大模型参数规模、上下文长度和智能体(Agent)应用持续扩张,AI基础设施的内存压力正在加剧,单纯增加GPU内存容量已不足以解决问题。英伟达提出,通过协同设计GPU、CPU、网络、存储和软件,并结合模型权重量化、KV Cache压缩

    来源 腾讯网
  4. 曙光云OneBox发布:国产全栈智能体平台落地政企

    【TechWeb】11月5日消息,在乌镇举行的2026年“互联网之光”博览会上,曙光云正式发布OneBox智能体协作平台,并获“新光”产品荣誉。 相比消费级智能体强调“对话与生成”,OneBox把重点放在政企场景中的安全、权限、审计与交付,实现政企环境中把AI真正用起来。 在随后举行的产品沟通会上,曙光云副总裁徐良、总

    来源 AI 行业观察
  5. 腾讯轻量云开源LoopForge:云端自进化研发平台落地20+业务

    导 读 单机 Coding Agent 已经能飞快写出代码,但一旦走进真实研发团队,合盖断流、多人上下文割裂、自由 Vibe Coding 质量失控、日常盯单耗时以及同类问题反复踩坑,很快就会把团队卡在“单兵提效、全局内耗”的瓶颈里。为此,腾讯轻量云团队打造并开源了云端自进化 AI 研发平台 LoopForge——集

    来源 AI 行业观察
  6. OpenAI收购Pierre:Codex将整合代码存储与审查工具

    IT之家 11 月 5 日消息,OpenAI 当地时间本月 4 日宣布将收购企业 Pierre。该公司开发了 Code Storage 大规模分布式存储系统,此外还有 Trees、Diffs 功能库以及 Highlights 实时更新高亮工具。 Pierre 的 Trees 让开发者能快速浏览和定位项目文件,Diffs

    来源 AI 行业观察
  7. FurMark 2 更新至 2.11.0.4:首次支持 RTX Spark 等新 GPU

    IT之家 11 月 5 日消息,GPU 压力测试软件 FurMark 2 近日迎来了最新版本 2.11.0.4,这是其近一年来的首次更新。 最新版本的 FurMark 2 已可在 NVIDIA RTX Spark 超级芯片等一系列新 GPU 设备上进行测试,优化时间管理,在 Windows 上合并了 GPU 核心热点与

    来源 AI 行业观察
  8. Karpo做城市生活AI:从心情出发,帮用户把念头变成安排

    谁能更早承接用户尚未明确的需求,谁就更有机会成为新的消费入口。 一笔消费,究竟从什么时候开始?很多人会觉得,是下单付款的那一刻。但只要回想一次最近的外出,就会发现它的起点其实早得多。 订下一家餐厅之前,可能经历过想见朋友、想庆祝、想换个环境等不同念头;同样一句今晚想出去,最终可能对应一顿饭、一场演出,...

    来源 腾讯网
  9. 美光路线图:放弃4F²,2027年量产1δ DRAM

    上个月,美光科技公布了未来几年的DRAM和NAND闪存发展路线图,透露了其计划采用晶圆键合技术、新型材料以缩小NAND闪存单元尺寸、高数值孔径EUV光刻技术,并详细介绍了其向3D DRAM迈进的步伐。 或许美光此次计划中最引人注目的部分在于,随着人工智能开发者对针对其独特处理器架构和特定工作负载优化的内存和存储解决方案

    来源 AI 行业观察
  10. Cat Wu 加盟 OpenAI:Claude Code 产品负责人转任核心产品管理

    IT之家 11 月 5 日消息,前 Anthropic Claude Code 产品负责人 Cat Wu 今日宣布加入 OpenAI,担任核心产品(Core Products)产品管理负责人。 她将参与 OpenAI 核心产品及智能体相关工作,与企业产品负责人 Nick Turley、消费级产品负责人 Ashley A

    来源 AI 行业观察
向下滚动自动加载更多