在大模型推理场景中,调度目标通常不只是把 Pod 调度到有资源的节点上。
一个完整的推理实例往往包含多个 Role,例如 Prefill、Decode;每个 Role 又可能包含多个副本和多个 Pod。除了资源是否满足,还要考虑:多个服务副本是否应该分散到不同故障域;通信频繁的 Role 是否应该部署得更近;同一 Role 的多个实例是否应该分散,避免共享同一故障点。
Kthena 基于 Volcano 的 PodGroup、SubGroup 和 HyperNode 拓扑能力,在 ModelServing 层提供这类调度表达。
ModelServing 的调度单元
ModelServing 和 Volcano 调度对象之间的对应关系:

- 一个 ServingGroup 副本对应一个 Volcano PodGroup;
- 一个 Role 对应一个 SubGroupPolicy;
- 一个 Role 副本对应一个 SubJob;
- 一个 SubJob 可以包含多个 Pod,例如一个 entry Pod 和多个 worker Pod。
networkTopology 和 topologyAffinity 解决的问题不同
networkTopology 解决的是一个调度单元自身的聚合范围。
例如:
networkTopology:
groupPolicy:
mode: hard
highestTierName: communication-domain
表示一个 ServingGroup 的 Pod 必须收敛在同一个 communication-domain 范围内。
而 topologyAffinity 描述的是多个调度单元之间的关系:是否应该位于同一个拓扑域。
两者可以同时生效。

ServingGroup 反亲和
对于一个多副本 ModelServing:
可以要求不同 ServingGroup 分布在不同 communication-domain:
topologyAffinity:
servingGroupAntiAffinity:
required:
- topologyTierName: communication-domain
主要解决的是服务实例级故障隔离:
- 单个 communication-domain 故障不会同时影响所有服务副本;
- 避免多个 ServingGroup 集中在同一个高层故障域。
在 Volcano 层,这类关系最终作用于 PodGroup。
Role 亲和
对于 PD 分离场景,经常希望 Prefill 和 Decode 距离尽可能近。
例如:
roleAffinity:
required:
- roles: [prefill, decode]
topologyTierName: rack
语义是:Prefill 和 Decode 对应的 SubJobs 位于同一个 rack。
这种方式适合表达通信 locality,而不需要在 ModelServing API 中暴露具体的 Role instance ID。
SubGroup / Role 反亲和
Role 反亲和主要用于副本分散和故障隔离。
同 Role 内反亲和
roleAntiAffinity:
required:
- roles: [prefill]
topologyTierName: node
表示不同 Prefill SubJob 不能落在同一个 node domain。
跨 Role 反亲和
- roles: [prefill, decode]
topologyTierName: node
表示 Prefill SubJob 和 Decode SubJob 不能共享 Node。
如果希望所有 Prefill、Decode 实例都分别占用不同 Node,需要同时配置:
roleAntiAffinity:
required:
- roles: [prefill]
topologyTierName: node
- roles: [decode]
topologyTierName: node
- roles: [prefill, decode]
topologyTierName: node
一个完整的组合场景

最终表达的是三层调度关系

不同 ServingGroup 分开:降低服务级故障影响范围。
同一个 ServingGroup 内:Prefill + Decode → 同一 Rack,保证 P/D 通信 locality。
Role 实例:P0、P1、D0、D1 → 不同 Node,既保证通信距离,又兼顾实例隔离。

ModelServing 的拓扑亲和能力,本质上是在普通 Pod 调度之上增加了 Group-Level 的调度语义。
结合 Volcano HyperNode,可以在 communication-domain、rack、node 等不同拓扑层级同时表达这些约束。
对于 PD 分离、多副本推理等场景,这样的调度模型比单纯依赖 Pod affinity / anti-affinity 更贴近实际工作负载结构。