2月26日,Mooncake的论文获得「计算机存储顶会 FAST 2025」Best Paper,这也是国内连续第三年拿到FAST Best Paper。同时,Mooncake 团队宣布和 vLLM 团队已经合作制定了一个多阶段路线图。这次整合将为 vLLM 引入 P/D(Prefill/Decode)分解和全局 KVCache 设计。

Mooncake:

GitHub - kvcache-ai/Mooncake: Mooncake is the serving platform for Kimi, a leading LLM service provi​github.com/kvcache-ai/Mooncake

大模型训练/推理 高性能优化

原始论文发表于 2024年,论文地址:Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving

分离式部署的动机是什么?

大模型推理分成 prefill 和 decode 两个阶段,prefill 阶段是计算密集型,decode 阶段是访存密集型且受限于显存,两者的资源利用率不一致。decode 阶段在显存满足的情况下应给与更多的 tokens,来提高资源利用率,分离式部署就可以很好的满足这点需求。

通过分离式部署,prefill 和 decode 可以采取对各自有利的分布式配置、可以采取对各自有利的 GPU 架构,来利用有限的 GPU 资源最大化吞吐。

但是分离式部署,需要将 prefill 的 kv cache 传输到 decode,引入了通信开销;常用的解决办法有如下几点:

  • prefill 阶段按 chunk 或者 layer 来传递,计算完一个就传递一个
  • kv cache 量化,采样 int 4 或者 int8,在精度达标的情况下,减少了通信量

分离式部署一般需要做什么?

  1. 针对 prefill instance,尽可能提高 kv cache 命中率,来减少重复计算
  2. prefill 按 chunk/layer 计算,【计算】和【传递 kv cache 给 decode 】流式并行
  3. decode 加载 kv cache,并且将请求添加到 continuous batching 进行处理

chunked pipeline parallelism

针对每个请求,都会被划分为 chunks,同一请求的不同 chunk 在不同的节点上面进行计算,这样多个请求就可以并行起来,从而减少 TTFT。

prefill 阶段的优化目标

prefill 阶段需要尽可能提高 kv cache 命中率,减少重复计算。这就会涉及到针对常用的 kv blocks 需要被拷贝到 prefill 节点,不常用的 kv blocks 需要释放掉。在常见的分离式部署框架中,一般由 KV Router 模块来管理。

decode 阶段的优化目标

decode 阶段需要集合尽可能多的 tokens 到一个 batch 来进行推理,从而提高 MFU(Model Flops Utilization),这就会涉及到显存的问题,可能显存会不够用,同时还不能过多的影响 TBT(Time Between Tokens)。TBT 是用户能比较直接感受到的一个指标,TBT 过高,用户体验会较差。

Mooncake 是为了解决什么?

Mooncake 主要是遇到了 GPU 资源紧张,在实际应用场景,有限的资源情况下,如果处理过载调度(overload-oriented scheduling)的问题。

Mooncake 提出了哪些方案?

Mooncake 提出了一种 early rejection 机制,通过预测将来的负载来提前拒绝某些请求,从而减少计算资源浪费。因为实际高峰场景中会遇到某个请求完成 prefill 计算后,decoding 阶段并没有资源槽来做,还不如提前结束反馈给客户端,避免资源的进一步拥堵。

(1). KVCache Pool

Mooncake 的 KVCache 缓存池是在 CPU 上的。上面的流程图解释的比较清晰,先看命中了哪些 prefix cache,然后 prefill instance 进行加载,再计算 incremental cache blocks,然后将 prefix cache blocks + incremental cache blocks 传输到 decode 节点上。

(2). Inference Workflow

上图是一个完整推理的流程图,可以发现 mooncake 使用了 prefill computation 和 kv cache load and store 并行来减少传输 overhead。由于 kv cache 主要以 CPU 作为中介存储点,decode 阶段也是计算和加载异步执行,边加载边计算。

kv cache 放在 CPU 上因为线上并发比较高,GPU 显存有限,而 CPU 存储空间大。实际场景 CPU 内存也是不够用的,还需要用到硬盘,涉及到 kv cache offload 相关的进一步调度。

(3). KVCache-centric Scheduling

Mooncake 关于 KVCache 调度逻辑见上图。

针对 prefill instance 的选择,会考虑 prefix cache 命中长度和 KVCache blocks 重复使用的分布情况。新进来一个请求时,input tokens 会被切分成几个 blocks,针对每个 block 计算一个 hash key,然后将这些 block keys 与每个 prefill instance cache keys 去匹配,来识别 prefix match length(prefix_len)。

调度器会根据每个请求的长度和 prefix_len 来估计 prefill 需要执行的时间(使用离线测试集制作的预测模型),然后加上预计需要的等待时间(队列里面所有请求的 prefill 时长之和),就是这个请求的预估 TTFT。

由于大模型结构的一致性,prefill 时间还是比较好预估的,难预估的是 transfer 时间,因为 transfer 是异步的。

总结

Mooncake 这篇论文核心是为了解决 GPU 资源有限且请求文本较长的场景,提出的 early-rejection 方案可以参考一下。具体实际应用场景下的大模型推理分布式部署,还需要结合业务情况来具体优化,但是常见的优化手段,如 kv cache 量化、P 到 D 按 layer 传输、prefix cache 命中率提升这些都是必须的。另外包括异构场景下,P 和 D 不同的分布式配置,会引入什么问题,又会有哪些优化,论文并没有涉及。

发布于 2025-05-12 21:46

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97442.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97442.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97442.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中不太常见的语法-总结

简介 读源码时,或者看同事写的代码,经常看到一些不太常见的语法,这里做一个总结 不太常见的语法 成员变量的默认值 案例: public class Person2 {private String name "张三";private Integer age;public String getNa…

Easytier异地组网与移动光猫GS220-s

Easytier异地组网与Nginx反向代理_--relay-network-whitelis easytier-CSDN博客 上一篇文章介绍了Easytier实现异地组网,基于Windows应用,本篇将探讨如何将Easytier写入光猫GS220-s中,实现更方便的家庭组网。 一、Telnet移动光猫GS220-s 1…

卫星信号和无线信号的设备厂商

以下是一些与卫星信号相关的公司:中国卫通集团股份有限公司:中国航天科技集团有限公司从事卫星运营服务业的核心专业子公司,是中国唯一拥有通信卫星资源且自主可控的卫星通信运营企业。运营管理着多颗在轨民商用通信广播卫星,覆盖…

HyperPlonk 的硬件友好性

1. 引言 在工业界广泛使用的 Plonk SNARK 协议高度依赖 NTT 来完成计算。HyperPlonk 是 Plonk 的一个变种,它试图通过用 Sumcheck 替代 NTT(以及其它改进)来提升并行性。Ingonyama团队认为: Sumcheck 在 HyperPlonk 中所谓的并行…

Visual Studio内置环境变量有哪些

在 Visual Studio 中,内置变量(也称为宏)可以用于在项目配置中指定特定的路径、环境变量或其他值。这些变量可以在项目的属性页面中使用,也可以在代码中使用。以下是一些常用的内置变量及其用途: 常用内置变量 $(Solut…

大模型入门学习微调实战:基于PyTorch和Hugging Face电影评价情感分析模型微调全流程(附完整代码)手把手教你做

深入浅出:如何训练一个属于你的大模型? “一个强大的大模型,究竟是如何训练出来的?” 本文将基于行业共识,为您详细拆解大模型的完整训练流程,并提供一个基于开源模型和数据集的实战代码示例,…

零、2025 年软件设计师考试大纲

一、考试说明 1.考试目标 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成…

uniapp npm安装形式 全局分享和按钮分享设置

全局分享方法新建一个shareUtil.ts方法import { storageConfig } from /config/storageConfig; export default {data() {return {miniShareOptions: {title: 标题,path: /pages/tabbar/index?inviteCode,summary: 描述,imageUrl: /userPages/static/img/invitation_h_bg.png,…

【数据结构】树和二叉树——树和森林

目录树和二叉树树和森林树的存储结构双亲表示法孩子表示法孩子兄弟表示法森林与二叉树的转换树和森林的遍历树的先根遍历树的后根遍历树的层次遍历森林的先序遍历森林的中序遍历树的应用求树的深度输出树中所有从根到叶子的路径的算法建树的存储结构的算法哈夫曼树与哈夫曼编码…

【小宁学习日记5 PCB】电路定理

目录 一、先搞懂:原理图的 “构成密码” (1)连接线:别被 “直线” 骗了! (2)结点:红色小圆点才是 “真・连接” (3)网络标签:“无形的连线” …

ans1语法的一个例子nt5inf.cat

第二部分:语法第一部分:头部语法第一部分A:0x30 类型位0x10SEQUENCE and SEQUENCE OF10语法第一部分B:83 长度3个字节,如果为1个字节,第一部分B则没有。语法第一部分C:长度 0x09 …

三电平逆变器SVPWM控制(无解耦功能)与谐波分析

三电平逆变器的空间矢量脉宽调制(SVPWM)控制方法,重点分析在不使用解耦控制的情况下实现5%谐波含量的技术方案。我们将使用MATLAB/Simulink进行建模和仿真分析。 一、三电平逆变器基本原理 三电平逆变器相比传统两电平逆变器具有以下优势: 输出电压波形质…

模拟实现C++中的string类型:从底层理解字符串操作

string前言核心成员变量设计构造函数与析构函数默认构造函数从C风格字符串构造填充构造拷贝构造函数迭代器范围构造析构函数基本操作实现迭代器支持容量管理元素访问字符串修改操作拼接操作插入与删除字符串查找操作运算符重载总结每文推荐前言 在C中,std::string是…

pdf转ofd之移花接木

文章目录1.pdf转ofd的方法1.1 spire.pdf.free1.2 ofdrw2.移花接木3.总结1.pdf转ofd的方法 1.1 spire.pdf.free 这个是一个半开源的类库,免费版本的在转换的时候会有一个10的限制,所以不推荐使用,具体教程网上都有,这里只是分享有…

用【Coze】实现文案提取+创作

在AI技术飞速发展的当下,打造专属智能应用成为不少人的向往。今天,就带大家走进字节跳动的扣子Coze平台,看看如何借助它搭建智能体,还会介绍AI工作流,以及详细的Coze搭建步骤,开启你的AI创作之旅&#xff5…

buuctf——web刷题第5页

第五页 目录 [EIS 2019]EzPOP [WMCTF2020]Make PHP Great Again 2.0 [BSidesCF 2020]Hurdles [安洵杯 2019]iamthinking [GWCTF 2019]mypassword [HFCTF2020]BabyUpload [NewStarCTF 2023 公开赛道]include 0。0 [SWPU2019]Web4 [PASECA2019]honey_shop [Black Watc…

果蔬采摘机器人:自动驾驶融合视觉识别,精准定位,高效作业

在智慧农业的快速发展中,果蔬采摘机器人以其自动驾驶技术与视觉识别技术的完美融合,正逐步成为农业生产中的重要力量。这些机器人不仅实现了对果蔬的精准定位,还显著提高了采摘效率,展现了强大的技术优势。一、自动驾驶技术的引领…

2025年职业发展关键证书分析:提升专业能力的路径选择

在当今职场环境中,专业能力的提升已成为职业发展的重要方面。各类专业证书作为系统学习与能力验证的方式,受到越来越多职场人士的关注。本文基于当前行业发展趋势,分析8个在不同领域具有代表性的专业资格认证,为职场人士提供参考信…

【Qt】QCryptographicHash 设置密钥(Key)

QCryptographicHash 本身不能设置密钥(Key)。 它是一个用于计算非密钥型加密哈希的函数,其设计目的和 HMAC 或加密算法完全不同。 下面我详细解释为什么,以及如何正确地实现你可能想要的功能。 1. QCryptographicHash 的核心功能&…

2025板材十大品牌客观评估报告—客观分析(三方验证权威数据)

随着消费者环保意识提升,板材作为家装基础材料的性能指标受到广泛关注。中国林产工业协会数据显示,2025年国内环保板材市场规模约860亿元,但行业标准执行不一,消费者面临信息不对称问题。本报告严格依据可验证的第三方数据&#x…