pg电子游戏平台-pg电子最新网站入口

kimi论文自曝推理架构,80%流量都靠它承担-pg电子游戏平台

声明:本文来自于微信公众号 量子位 (id:qbitai),作者:克雷西 ,授权转载发布。

kimi论文自曝推理架构,80%流量都靠它承担

月之暗面和清华kvcache.ai团队的最新论文,首次揭秘了kimi背后的推理架构!

要知道kimi是国产大模型的当红炸子鸡,火到可以说从来没缺过流量,甚至还经常出现过载。

而随着论文的发布,这泼天的流量到底如何被kimi接住的问题,也有了答案。

kimi背后的推理架构名叫mooncake(月饼),主要特点是采取了分离式的设计方案

而且,mooncake在设计之时就考虑了可能出现的大流量场景,并针对这种情况专门研发。

在模拟场景下,mooncake最高能带来525%的吞吐量增长,实际场景中也能多处理75%请求

另据月之暗面工程副总裁许欣然的一篇知乎文章介绍,kimi有80%以上的流量,都是由该系统承接

从kv缓存出发,建造分布式系统

整个mooncake系统设计的核心,是围绕着kv缓存展开的。

(kv缓存用于存储键-值对(key-value pairs),主要优势在于可以简单高效地访问和检索数据,在大模型当中可以提高推理速度并减少计算资源消耗。)

之所以这样做,是因为团队预计kv缓存的容量会长期保持高位,因此围绕kv缓存进行优化十分必要。

从结构上看,mooncake由全局调度器(conductor)、prefill节点集群、decoding节点集群和分布式kvcache池几部分组成,另外还有rdma通信组件(messenger)。

其中全局调度器是用户请求到达系统后的第一站,它负责接收请求并根据kv缓存分布和负载情况,将请求调度到prefill和decoding节点

调度器在调度时需要综合考虑kv缓存的复用长度、负载均衡等因素,实现kv缓存复用的最大化。

具体到mooncake,它采用了一种启发式的自动热点迁移策略,可以在不需要精确预测未来访问的情况下自动复制热点kv缓存块。

同时,这种动态复制热点kv缓存块的方式,也是实现均衡负载的一种重要途径。

实验结果表明,与随机调度和负载均衡调度相比,mooncake的调度策略可以显著降低ttft(time to first token,首个token延迟),提高系统性能。

完成调度之后,任务会分别交由prefill和decoding节点进行运算。

prefill节点接收到调度器转发过来的请求后,会从kv缓存池中读取缓存,执行预计算并生成新的kv缓存。

对于长上下文请求,mooncake还会分块流水并行的方式,使用多个节点并行处理来降低延迟。

而decoding节点除了接收调度器发来的请求外,还会收到prefill阶段生成的kv缓存,节点会对这些缓存执行解码并生成最终结果。

这当中,大容量、高性能的kv缓存存储由缓存池提供;rdma通信组件则凭借其高带宽、低延迟的优势,负责在不同节点之间的kv缓存传输。

除了采取以kv缓存为中心的工作流程外,mooncake还有另一个重要特点——分离式的架构

采取分离式架构的重要因素之一,是在于prefill和decoding两个阶段的计算特性差异很大

具体来说,它们分别要对ttft和tbt(time between tokens,token间延迟)负责。

这就导致了两者在计算复杂度、内存访问方式、并行粒度和对延迟的敏感度上都存在差异:

所以,月之暗面团队对gpu集群也进行了相应的拆分,以便将它们分别部署在不同节点集群上,实现资源隔离和专门优化。

另外,mooncake中的kv缓存池也是分布式的,同时充分利用了gpu集群中空闲的cpu、dram和ssd资源,实现了大容量、高带宽的kv缓存存储和传输,同时也减少了闲置资源的浪费。

提前预测负载,及时拒绝超量请求

不过,即使mooncake采用了高效的分离架构,但实际环境中的超大流量,对系统仍然是一个考验。

对此,作者也提出了新的应对策略。

在过载场景下,调度的关键是决定是否接受新的请求。

由于mooncake采用的是分离式架构,可以采取早期拒绝策略,在prefill阶段就根据decoding节点的负载情况,提前拒绝请求。

mooncake使用ttft和tbt的slo(service level objective,服务等级目标)满足情况作为负载的度量指标。

具体的slo要求是ttft的90分位值(p90)不超过单个请求在空载条件下处理时间的10倍,tbt的p90值不超过5倍。

这种早期拒绝策略可以显著减少无效的prefill计算,提高资源利用率,但同时也带来了新的问题——prefill和decoding节点负载的波动,导致资源利用率下降、影响系统性能。

这是由于早期拒绝策略中,系统做出请求拒绝的决策时存在滞后性,如下图所示:

  • 在阶段1,prefill节点和decoding节点的负载都较低,此时调度器会持续接受新的请求,直到prefill节点的负载达到上限。

  • 进入阶段2后,rrefill节点处理的请求开始进入decoding节点,导致其负载快速上升。当decoding节点的负载超过阈值后调度器开始拒绝新的请求,但此时prefill节点的负载仍然很高。

  • 到了阶段3,由于调度器拒绝新请求,prefill节点的负载开始下降。但此前积压的请求正在decoding阶段处理,节点的负载仍然很高。

  • 最后是阶段4,decoding节点的负载开始下降,因为前面的请求都处理完成,而新的请求又被拒绝了。这时调度器再次开始接受新请求,prefill节点的负载又开始上升。

  • 之后,这个过程会周期性地重复,导致prefill和decoding节点的负载出现反相位的波动。

针对这一问题,月之暗面团队对这种简单的早期拒绝策略进行了修正,提出了基于预测的早期拒绝策略,从而降低节点负载的波动。

这种策略的核心思想是对一段时间后的decoding节点负载进行预测,并基于预测结果决定是否拒绝请求。

预测可以在请求级别和系统级别两个层面进行,请求级别的预测比较困难,因为要预测单个请求的执行时间;系统级别的预测相对容易一些,只需要预测整体的负载情况。

mooncake采用的是一种简化的系统级别预测方法,假设每个请求的执行时间服从某个固定分布,据此预测未来一段时间内的负载情况。

实验结果表明,这种基于预测的早期拒绝策略,可以有效缓解负载波动问题。

最终,端到端性能评估结果表明,mooncake的架构设计和优化策略,有效提高了推理服务性能,尤其在长上下文和真实场景下优势更加显著。

在arxiv summarization和l-eval数据集上,mooncake的吞吐量比baseline方法vllm分别提高了20%和40%。

在模拟数据集上,mooncake的吞吐量最高可达525%,在真实数据集上也可以比vllm多处理约75%的请求。

过载场景下的性能评估结果则显示,使用基于预测的早期拒绝策略时,拒绝的请求数量从baseline的4183个减少到了3589个,说明系统的请求处理能力得到了提高。

针对未来的发展,论文的另一位作者、清华大学计算机系助理教授章明星表示,从目前的趋势来看,大模型服务的负载会愈发的复杂和多元化,调度会越来越复杂,也会越来越重要。

而对于月之暗面的发展方向,则是由许欣然做了解答——分布式策略的实施,也意味着未来月之暗面的整个系统,将往“算力/$”和“带宽/$”两个方向独立发展,从而对硬件优化更加友好。

论文地址:

https://arxiv.org/pdf/2407.00079

github:

https://github.com/kvcache-ai/mooncake

参考链接:

[1]https://zhuanlan.zhihu.com/p/705910725

[2]https://zhuanlan.zhihu.com/p/706204757

相关文章
网站地图