Kthena × Mooncake:在昇腾集群解锁高效的分布式推理与 KVCache 复用
随着大模型向长上下文(Long-Context)和复杂推理任务演进,Prefill-Decode(预填充-解码,简称 PD)分离架构已成为提升集群整体吞吐量的标准实践。然而,在分布式架构下,将庞大的 KVCache 从 Prefill 节点跨网络传输至 Decode 节点,往往会带来显著的通信开销,成为制约系统性能的新瓶颈。

业界优秀的开源 LLM 推理增强系统 Mooncake 凭借其对 KVCache 的全局池化管理与跨节点复用能力,有效解决了这一难题。作为一款云原生环境下的分布式推理负载编排引擎,Kthena 在 v0.4.0 版本中已全面支持基于 vLLM 和 Mooncake 的 PD 分离部署,并深度针对华为昇腾(Ascend)NPU 集群进行了硬件级优化。
▍解决 KVCache 传输痛点:Mooncake 的核心价值
在传统的 PD 分离方案中,每次请求都需要在节点间进行点对点的 KVCache 搬运。而 Kthena 引入 Mooncake 后,系统具备了以下关键能力:
-
全局 KVCache 池化:将集群中分布在各个节点(特别是高算力的昇腾节点)的内存与显存统一管理,构建分布式的 KVCache 存储池。 -
跨节点复用:对于具有相同前缀(Prefix)的请求,Mooncake 可以直接复用已生成的 KVCache,显著降低重复的 Prefill 计算开销。 -
降低 TTFT(Time to First Token,首Token延迟):通过高效的底层传输与缓存命中,长上下文场景下有效降低首Token延迟。
▍Kthena 中的分布式编排与昇腾硬件加速
在 Kubernetes 环境中手动配置复杂的 PD 分离与 Mooncake 组件是一项繁琐的工作。Kthena 将这种复杂的分布式拓扑抽象为声明式的 API,并与华为昇腾硬件底座深度融合:
1. 精细化的节点调度与资源分配
Kthena 允许用户根据 Prefill 和 Decode 的不同计算特征进行资源编排:
-
Prefill 阶段(计算密集型):自动调度至具备高计算吞吐量的昇腾节点,利用 NPU 的并行张量运算能力快速生成初始 KVCache。 -
Decode 阶段(显存/内存密集型):调度至配备大容量内存的昇腾节点,专注于自回归的 Token 生成。
2. 基于 HCCL 的底层通信优化
在 KVCache 的实际传输链路上,Kthena 结合了华为集合通信库(HCCL)。通过 NPU 专用的网络接口和通信协议,系统能够在支持 NPU 的节点之间实现更低延迟的数据交换,确保 Mooncake 的高速缓存读取不受底层网络限制。
▍实战:在集群中启用分离推理
通过以下步骤,您可以快速在配备昇腾 NPU 的 K8s 集群中部署基于 Mooncake Connector的分离式deepseek-v4推理服务。
1. 部署 ModelServing(编排工作负载)
首先,创建 ModelServing 资源[1]以拉起预填充和解码的具体工作负载。该配置定义了预填充角色和解码角色,并分配了针对 NPU 优化的容器及硬件资源。
kubectl apply -f https://raw.githubusercontent.com/volcano-sh/kthena/main/examples/models/deepseek-v4-flash/modelserving.yaml
2. 创建推理路由策略ModelServer(配置网络拓扑)
接下来,创建 ModelRoute和ModelServer 资源[2]。这一步负责创建模型路由规则和KV Connector感知,包含感知Prefill、Decode不同角色的工作负载,以及传输层的流量策略。
cat <<EOF | kubectl apply -f -
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelRoute
metadata:
name: deepseek-v4
namespace: default
spec:
modelName: "deepseek_v4"
rules:
- name: "default"
targetModels:
- modelServerName: "deepseekv4-pd"
---
apiVersion: networking.serving.volcano.sh/v1alpha1
kind: ModelServer
metadata:
name: deepseekv4-pd
namespace: default
spec:
inferenceEngine: vLLM
model: "deepseek_v4"
workloadPort:
port: 7100
protocol: http
workloadSelector:
matchLabels:
modelserving.volcano.sh/name: deepseekv4-pd
pdGroup:
groupKey: "modelserving.volcano.sh/group-name"
prefillLabels:
modelserving.volcano.sh/role: prefill
decodeLabels:
modelserving.volcano.sh/role: decode
trafficPolicy:
timeout: "300s"
retry:
attempts: 3
retryInterval: "150ms"
kvConnector:
type: mooncake
EOF
3. 验证部署与测试
完成上述三个 CRD 的部署后,PD分离推理即搭建完成。您可以通过调用 Chat API 来测试预填充和解码服务是否正常通信:
curl --location 'http://${ENDPOINT}/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "deepseek_v4",
"messages": [
{
"role": "user",
"content": "Where is the capital of China?"
}
],
"stream": false
}'
(注:请将 ${ENDPOINT} 替换为您的实际Kthena Router入口的IP 地址和端口。)
如果收到正确的响应文本,即表明预填充服务已成功将生成的 KV 缓存通过底层通信层传输给解码服务,分离推理架构正在按预期高效工作。
▍结语
随着各类推理框架对 PD 分离和 KVCache 优化的持续跟进,分布式推理架构的落地标准正在不断提高。Kthena 通过集成 Mooncake 并结合昇腾 NPU 的硬件级优化,为开发者提供了一个开箱即用的分布式推理负载编排解决方案,旨在以客观的工程指标提升 LLM 在生产环境中的实际运行效率。
了解完整的部署指南与架构细节,欢迎访问 Kthena [3]官方文档或访问 GitHub 仓库 (volcano-sh/kthena[4])。
相关链接:
[1] Deepseek-v4部署脚本 modelserving: https://github.com/volcano-sh/kthena/blob/main/examples/models/deepseek-v4-flash/modelserving.yaml
[2] Deepseek-v4部署脚本 router: https://github.com/volcano-sh/kthena/blob/main/examples/models/deepseek-v4-flash/router.yaml
[3] Kthena官网: https://kthena.volcano.sh/
[4] volcano-sh/kthena GitHub: https://github.com/volcano-sh/kthena

关注魔方公众号,获取更多前沿资讯
添加社区小助手k8s2222,进入Kthena技术交流群
- 点赞
- 收藏
- 关注作者
评论(0)