大数跨境
0
0

基于 SGlang RBG + Mooncake 打造生产级云原生大模型推理平台

基于 SGlang RBG + Mooncake 打造生产级云原生大模型推理平台 AI前线
2025-12-12
2
导读:大语言模型(LLM)推理服务正迅速成为企业级应用的核心基础设施。

作者 | 玖宇(SGLang 社区 & 阿里云),杨彦波(SGLang 社区 & 科大讯飞),孙伟祥(SGLang 社区 & 小红书),宋阳 (SGLang 社区 & 小红书),雨杨 (Mooncake & 阿里云)

大语言模型(LLM)推理服务正成为企业级应用的核心基础设施,其生产落地的关键在于性能、稳定性与成本的平衡。当前,LLM 推理架构正从单体向分布式演进,主流路径包括 Prefill-Decode(PD)分离、Attention-FFN(AF)分离及 KVCache 外置。其中,KVCache 显存占用在长上下文或高并发场景下常超 70%,仅依赖 GPU HBM 和 CPU DRAM 已难满足需求。

Mooncake 作为业界主流的分布式 KVCache 存储引擎,通过专用缓存集群为 SGLang 等推理框架提供高吞吐、低延迟服务。然而,在生产环境中管理 Mooncake 仍面临两大挑战:一是部署运维复杂,Prefill/Decode 与缓存节点需深度协同,传统 Kubernetes Workload 难以表达多角色强耦合语义;二是滚动升级易导致缓存丢失,引发 P99 延迟毛刺与吞吐断崖。

为此,RoleBasedGroup(RBG)应运而生。作为面向 AI 推理的 Kubernetes 原生 API,RBG 将 Mooncake 缓存与 SGLang 推理节点视为同一服务的不同角色,统一编排部署、升级与弹性伸缩。借助原地升级与拓扑感知能力,RBG 可最大限度避免缓存丢失,保障计算与缓存策略一致性,实现高性能与高稳定性的兼顾。

Mooncake:面向大模型推理的分布式 KVCache 存储引擎

项目地址

Mooncake 是 SGLang HiCache 的高性能分布式 L3 存储后端,基于 RDMA 实现跨机 KVCache 共享,突破单机缓存容量瓶颈。

核心组件

  • Master Service:管理集群存储池、元数据与节点生命周期
  • Store Service:提供分布式缓存存储,支持多副本、条带化传输与热点负载均衡

核心特性

  • RDMA 加速 + 零拷贝机制,实现高带宽、低延迟访问
  • 智能预取与 GPU 直传,最大化 I/O 效率
  • 支持 PD 分离架构,提升大规模集群 Token 吞吐量

快速预览

# 启动 Master
mooncake_master --http_metadata_server_port=9080
# 启动 Store 服务(配置 RDMA 设备与内存池)
python -m mooncake.mooncake_store_service --config=config.json
# 启动 SGLang(启用 Mooncake 后端)
python -m sglang.launch_server \
  --enable-hierarchical-cache \
  --hicache-storage-backend mooncake \
  --model-path <model_path>

RoleBasedGroup (RBG):面向大模型推理的弹性角色编排引擎

项目地址

核心问题:大模型推理生产落地的五大挑战

  1. 快速架构迭代:分离式架构(如 PD 解耦、多级路由)演进迅速,传统平台难以适配。
  2. 性能敏感:TTFT、TPOT 对 GPU 拓扑(NVLink/PCIe)、RDMA 亲和性高度敏感,调度不当将显著增加延迟。
  3. 组件强依赖:Prefill 与 Decode 存在 1:1 或 N:1 绑定关系,版本升级需原子性同步,否则易引发请求失败。
  4. 运维效率低:缺乏多角色统一视角,日均约 5% 时间消耗于手动协调,造成资源浪费。
  5. 资源潮汐显著与利用率不足:线上流量峰谷差超 10 倍,静态配置下 GPU 平均利用率长期低于 30%。

根本矛盾:传统微服务面向无状态、弱拓扑场景,而大模型推理是强状态、拓扑感知、极致性能的有状态应用。

RBG 设计理念:角色即一等公民,角色协同即核心场景

RBG 源自 SGLang 社区,由小红书、算秩未来、科大讯飞、阿里云和南京大学联合贡献。其核心目标是以“角色(Role)”为调度编排原子单元,构建契合 LLM 推理特性的管理范式。

RBG 将一次推理服务视为拓扑化、有状态、可协同的“角色有机体”,提出 SCOPE 核心能力框架:

  • S – Stable:面向拓扑感知的确定性运维
  • C – Coordination:跨角色协同策略引擎
  • O – Orchestration:有编排语义的角色与服务发现
  • P – Performance:拓扑感知的高性能调度
  • E – Extensible:面向未来的声明式抽象

SCOPE 核心能力解析

Stable(稳定):面向拓扑感知的确定性运维

通过为每个 Pod 注入全局唯一 RoleID,并遵循“最小替换域”原则,确保运维操作在原有 GPU-NVLink 域、NUMA 节点等硬件拓扑范围内完成,避免因拓扑漂移导致性能抖动。

roles:
- name: prefill
  replicas: 3
  rolloutStrategy:
    rollingUpdate:
      type: InplaceIfPossible
      maxUnavailable: 1

Coordination(协同):跨角色协同策略引擎

RBG 内置声明式协同机制,精确定义角色间依赖关系:

  • 部署协同:如 Prefill 与 Decode 成对调度、成组就绪;
  • 升级协同:支持“比例协议”式升级,确保多角色版本一致性;
  • 故障协同:预定义联动策略,触发自动补救或迁移;
  • 伸缩协同:按角色配比成组调整实例,保持吞吐与延迟稳定。

该能力将复杂分布式服务作为统一生命周期整体管理,大幅降低运维复杂度。

# 示例:PD 分离架构中 Prefill 和 Decode 角色协作升级
coordination:
- name: prefill-decode-co-update
  type: RollingUpdate
  roles:
  - prefill
  - decode
  strategy:
    maxUnavailable: 5%
    maxSkew: 1% # 升级过程中新版本比例最大偏差
    partition: 20%
roles:
- name: prefill
  replicas: 200
  template: ...
- name: decode
  replicas: 100
  template: ...

Orchestration(编排):编排化的角色与服务发现

RBG 显式定义角色依赖与启动顺序,提供拓扑自感知的内建服务发现,将各角色 IP、属性、关系等信息注入环境变量或配置文件。推理引擎(如 SGLang、vLLM)可直接读取本地配置获取拓扑视图,无需依赖 etcd、Consul 等外部系统,显著降低集成复杂度。

Performance(性能):拓扑感知的高性能调度

引入拓扑感知装箱策略,支持多维度优化:

  • GPU 拓扑优先级(GPU-NVLink > PCIe > RDMA > VPC);
  • 角色间亲和与反亲和约束;
  • 同角色实例布局均衡;
  • 短路读优化。

上述策略保障 TTFT、TPOT 等关键指标在大规模部署中保持最优。

Extensible(可扩展):面向变化的部署抽象

通过声明式 API(RBG、RBGs、EngineRuntimeProfile 等)与插件机制,将“角色关系定义”与“部署/模型管理/弹性策略”解耦。当社区推出新架构时,无需修改 RBG 核心代码,仅需通过 YAML 定义新角色模板即可快速落地,显著缩短新架构投产周期。

# 示例:PD 分离架构角色定义
roles:
- name: prefill
  replicas: 2
  engineRuntimes:
  - profileName: custom-engine-runtime
  template: ...
- name: decode
  replicas: 1
  engineRuntimes:
  - profileName: custom-engine-runtime
  template: ...

RBG 通过 Kubernetes 原生 API 为大模型推理服务提供稳定、协同、可编排、高性能、可演进的统一承载层,是现代 LLM 推理工作负载的新型部署与运维抽象。

基于 RBG 部署 PD 分离架构 + Mooncake 推理服务

部署架构

通过 RBG 可部署高可用、弹性的 SGLang PD 分离推理系统,核心角色包括:

  • SGLang Router:统一请求入口,根据负载、上下文长度等智能调度至 Prefill 或 Decode 节点。
  • Prefill Serving Backend:处理提示词前向计算,生成初始 KVCache,计算密集型,显存带宽敏感。
  • Decode Serving Backend:执行 token 自回归生成,依赖 KVCache,对缓存访问延迟极为敏感。
  • Mooncake Master/Store:独立 KVCache 外置存储角色,提供高吞吐、低延迟分布式缓存服务,突破单机容量限制,支持跨请求复用与细粒度淘汰策略(如 LRU + 高水位驱逐)。

上述角色通过 RBG 的多角色协同能力紧密集成。EngineRuntime 作为 Sidecar 注入引擎 Pod,实现服务注册、动态 LoRA 加载、流量控制与可观测性集成。

通过 RBG 部署 Mooncake + SGLang PD 分离推理服务

准备好镜像后,使用以下 YAML 部署支持 KVCache 卸载的 SGLang PD 分离推理服务:

https://github.com/sgl-project/rbg/blob/main/examples/mooncake/pd-disaggregated-with-mooncake.yaml

环境变量说明详见:https://github.com/kvcache-ai/Mooncake/blob/main/doc/zh/mooncake-store.md

查看部署结果

kubectl get pods -l rolebasedgroup.workloads.x-k8s.io/name=sglang-pd-with-mooncake-demo
sglang-pd-with-mooncake-demo-router-0           1/1   Running   0     71s
sglang-pd-with-mooncake-demo-prefill-0          1/1   Running   0     3m42s
sglang-pd-with-mooncake-demo-decode-0           1/1   Running   0     3m42s
sglang-pd-with-mooncake-demo-mooncake-master-0  1/1   Running   0     4m2s
sglang-pd-with-mooncake-demo-mooncake-store-bh9xs 1/1   Running   0     3m42s
sglang-pd-with-mooncake-demo-mooncake-store-dsrv4 1/1   Running   0     3m42s
sglang-pd-with-mooncake-demo-mooncake-store-tqjvt 1/1   Running   0     3m42s

查看 Mooncake Store 实例网络与位置信息

kubectl get pods sglang-pd-with-mooncake-demo-mooncake-store-dsrv4 -o jsonpath='{.spec.nodeName}'
kubectl get pods sglang-pd-with-mooncake-demo-mooncake-store-dsrv4 -o jsonpath='{.status.podIP}'

Benchmark 测试结果:多级缓存加速显著

多轮对话场景测试表明,多级缓存架构对 KVCache 命中率与推理性能提升至关重要:

  • Baseline(仅 GPU 显存):命中率低,平均 TTFT 5.91s,P90 12.16s,InputToken 吞吐 6576.85 token/s
  • L2 DRAM HiCache:命中率 40.62%,平均 TTFT 降至 3.77s(↓36.2%),P90 10.88s,InputToken 吞吐 10054.21 token/s(↑52.89%)
  • L3 Mooncake 缓存:命中率进一步提升,平均 TTFT 2.58s(↓56.3%),P90 6.97s(↓42.7%),InputToken 吞吐 15022.80 token/s(↑49.41%)

多轮对话测试场景下服务整体吞吐指标

多轮对话测试场景下 KVCache 命中率及对应 TTFT 指标

测试细节详见附录 8.2

通过原地升级能力实现 Mooncake 版本平滑升级

Mooncake 与 SGLang Serving Backend 的 transfer-engine 需保持版本一致,因此推理引擎升级时 Mooncake 必须同步更新。但由于 Mooncake 数据通常驻留内存,传统滚动升级会导致缓存丢失,迫使活跃会话重新执行 Prefill 计算,引发 P99 延迟毛刺、吞吐断崖和服务抖动。

解决方案:Mooncake 缓存本地持久化 + RBG 原地升级

  • 缓存本地持久化:Mooncake 支持将 KVCache 元数据与热数据快照持久化至节点共享内存或 NVMe,进程重启后可快速恢复状态,避免 Prefill 重计算。
  • RBG 原地升级:通过 RBG 控制升级过程,避免重建 Pod,原地替换容器镜像并复用本地存储,保留已持久化缓存数据,实现“无缝”切换。

两者结合,使 Serving Backend 与 Mooncake 联合升级时 KVCache 状态得以延续,活跃会话无需回退到 Prefill 阶段,有效规避延迟与吞吐波动,保障端到端稳定性。

RBG 不仅解决多角色协同部署难题,更通过原地升级将“有状态缓存服务平滑演进”转化为标准化、自动化运维能力,真正实现“升级无感、服务不抖”的生产级目标。

以 v0.5.5 升级至 v0.5.6 为例:

kubectl patch rolebasedgroup sglang-pd-with-mooncake-demo \
  --type='json' \
  -p='[{"op":"replace","path":"/spec/roles/1/template/spec/containers/0/image","value":"lmsysorg/sglang:v0.5.6"}]'

查看 Pod 状态可见,Mooncake Store 角色仅发生容器重启:

kubectl get pods -l rolebasedgroup.workloads.x-k8s.io/name=sglang-pd-with-mooncake-demo -owide
NAME                                                READY   STATUS    RESTARTS   AGE
sglang-pd-with-mooncake-demo-decode-0               1/1     Running   0          7m4s
sglang-pd-with-mooncake-demo-mooncake-master-0      1/1     Running   0          7m24s
sglang-pd-with-mooncake-demo-mooncake-store-bh9xs   1/1     Running   1          7m4s
sglang-pd-with-mooncake-demo-mooncake-store-dsrv4   1/1     Running   1          7m4s
sglang-pd-with-mooncake-demo-mooncake-store-tqjvt   1/1     Running   1          7m4s
sglang-pd-with-mooncake-demo-prefill-0              1/1     Running   0          7m4s
sglang-pd-with-mooncake-demo-router-0               1/1     Running   0          4m33s

通过事件确认重启原因:

kubectl describe pods sglang-pd-with-mooncake-demo-mooncake-store-dsrv4
Events:
  Type    Reason            Age   From               Message
  ----    ------            ----  ----               -------
  Normal  Scheduled         27m   default-scheduler  Successfully assigned ...
  Normal  AllocIPSucceed    27m   terway-daemon      Alloc IP 10.134.25.238/16 took 584.019653ms
  Normal  Created           27m   kubelet            Created container: store
  Normal  Pulled            27m   kubelet            Container image "lmsysorg/sglang:v0.5.5" already present on machine
  Normal  Started           27m   kubelet            Started container store
  Normal  Killing           21m   kubelet            Container store definition changed, will be restarted

检查升级后 Pod 的节点与 IP 信息未变,结合缓存持久化能力,可确保 KVCache 状态完整恢复。

总结和展望

  • RBG 重新定义 LLM 推理编排范式:将多角色协同与拓扑感知调度作为核心,不仅解决分布式部署复杂性,更通过原地升级攻克“有状态缓存服务平滑演进”难题,实现升级无感、服务不抖。
  • Mooncake 解锁 KVCache 无限可能:作为 L3 缓存层,显著提升命中率,平均 TTFT 降低 56.3%,P90 延迟改善 42.7%,GPU 利用率从不足 30% 提升至可持续弹性水平,平衡性能与成本。
  • 分级缓存架构是长上下文推理必由之路:从 GPU HBM → DRAM → Mooncake 的三级缓存体系已在 Benchmark 中验证有效性,尤其适用于多轮对话、RAG、AI Agent 等机器驱动场景,缓存复用带来的边际成本递减效应将持续放大。

RBG + Mooncake 的实践表明,唯有将高性能系统设计与云原生运维能力深度融合,才能推动大模型推理从“能用”走向“好用”,从“实验室”迈向“生产级”。期待与社区共同推进这一范式,为下一代 AI 基础设施奠定坚实基础。

  • 小红书:孙伟祥、宋阳、熊峰
  • 科大讯飞:杨彦波
  • 趋境科技:杨珂
  • Mooncake:马腾、蔡尚铭
  • 阿里云:一斋、柏存、东伝

附录

8.1 镜像构建

本文示例可直接使用 SGLang 官方镜像 lmsysorg/sglang:v0.5.5(需包含 mooncake-transfer-engine >= 0.3.7)。定制需求可参考:https://github.com/sgl-project/rbg/blob/main/examples/mooncake/Dockerfile.mooncake

8.2 Benchmark 测试

8.2.1 环境配置
8.2.2 测试方法

使用 HiCache 多轮对话压测工具模拟 KVCache 可重用场景,对比开启 L3 Mooncake + L2 HiCache、仅开启 L2 HiCache 及不开启 HiCache 的推理服务在吞吐与 SLO 上的表现。

测试命令
python3 benchmark/hicache/bench_multiturn.py \
--model-path /models/Qwen3-235B/Qwen3-235B-A22B \
--dataset-path ShareGPT_V3_unfiltered_cleaned_split.json \
--disable-random-sample \
--output-length 1 \
--request-length 2048 \
--num-clients 150 \
--num-rounds 10 \
--max-parallel 4 \
--request-rate 16 \
--ready-queue-policy random \
--disable-auto-run \
--enable-round-barrier
【声明】内容源于网络
0
0
AI前线
面向AI爱好者、开发者和科学家,提供大模型最新资讯、AI技术分享干货、一线业界实践案例,助你全面拥抱AIGC。
内容 7982
粉丝 0
AI前线 面向AI爱好者、开发者和科学家,提供大模型最新资讯、AI技术分享干货、一线业界实践案例,助你全面拥抱AIGC。
总阅读42.7k
粉丝0
内容8.0k