Volcano社区网络拓扑感知调度解析:优化AI大模型训练性能
📝摘要:Volcano云原生批量计算社区在业界率先提出网络拓扑感知调度(Network Topology Aware Scheduling)策略,通过统一的网络拓扑API和智能调度策略,解决大规模数据中心AI训练任务的网络通信性能问题,同时引入了基于节点标签(Label)的 超节点HyperNode 自动发现机制。该功能为用户提供了一种通用且灵活的方式来描述网络拓扑,将复杂的拓扑管理工作转变为简单的节点标签管理,确保在复杂工作负载管理中的实用性和易用性,为AI时代的基础设施提供关键调度支撑。

Volcano (https://volcano.sh)是业界首个云原生批量计算引擎,也是 CNCF 首个和唯一的批量计算项目。作为云原生批量计算领域的事实标准,Volcano已经在AI、大数据及高性能计算 (HPC) 等多种场景中获得广泛应用,吸引了来自30多个国家的800多名贡献者,累计代码提交数万次。Volcano已在国内外60+企业进行了生产落地,赢得了用户的广泛赞誉,为业界提供了云原生批量计算的卓越实践标准与解决方案。本文解析Volcano社区的网络拓扑感知调度能力。
早在2025年1月Volcano社区发布的 v1.11版本 中,社区聚焦AI与大数据的核心需求,推出网络拓扑感知调度、多集群AI作业调度等重磅特性,显著提升AI训练与推理任务的性能。同时,在离线混部与动态资源超卖及负载感知重调度功能进一步优化资源利用率,确保在线业务的高可用性。此外,弹性层级队列为大数据场景提供了更灵活的调度策略。
网络拓扑感知调度:优化AI大模型训练性能
在AI大模型训练场景中,模型并行(Model Parallelism)将模型分割到多个节点上,训练过程中这些节点需要频繁进行大量数据交互。此时,节点间的网络传输性能往往成为训练的瓶颈,显著影响训练效率。数据中心的网络类型多样,如InfiniBand (IB)、RoCE、NVSwitch等,且网络拓扑复杂,通常包含多层交换机。两个节点间跨的交换机越少,通信延迟越低,吞吐量越高。因此,用户希望将工作负载调度到具有最高吞吐量和最低延迟的最佳性能域,尽可能减少跨交换机的通信,以加速数据交换,提升训练效率。
为此,Volcano提出了网络拓扑感知调度(Network Topology Aware Scheduling)策略,通过统一的网络拓扑API和智能调度策略,解决大规模数据中心AI训练任务的网络通信性能问题。
▍统一的网络拓扑API:精准表达网络结构
为了屏蔽数据中心网络类型的差异,Volcano定义了新的CRD HyperNode来表示网络拓扑,提供了标准化的API接口。与传统的通过节点标签(label)表示网络拓扑的方式相比,HyperNode具有以下优势:
- 语义统一:HyperNode提供了标准化的网络拓扑描述方式,避免了标签方式的语义不一致问题。
- 层级结构:HyperNode支持树状层级结构,能够更精确地表达实际的网络拓扑。
- 易于管理:集群管理员可以手动创建HyperNode,或通过网络拓扑自动发现工具维护HyperNode。
一个HyperNode表示一个网络拓扑性能域,通常映射到一个交换机。多个HyperNode通过层级连接,形成树状结构。例如,下图展示了由多个HyperNode构成的网络拓扑:

- 叶子HyperNode(s0、s1、s2、s3):子节点为集群中的真实节点。
- 非叶子HyperNode(s4、s5、s6):子节点为其他HyperNode。
在这种结构中,节点间的通信效率取决于它们之间的HyperNode层级跨度。例如:
- node0和node1同属于s0,通信效率最高。
- node1和node2需要跨两层HyperNode(s0→s4→s1),通信效率较低。
- node0和node4需要跨三层HyperNode(s0→s4→s6),通信效率最差。
💬 HyperNode配置示例
以下是一个叶子 HyperNode 和非叶子 HyperNode 的配置示例:
💬 叶子HyperNode示例:
apiVersion: topology.volcano.sh/v1alpha1
kind: HyperNode
metadata:
name: s0
spec:
tier: 1 # HyperNode层级,层级越低通信效率越高
members: # 子节点列表
- type: Node # 子节点类型为Node
selector:
exactMatch: # 精确匹配
name: node-0
- type: Node
selector:
regexMatch: # 正则匹配
pattern: node-[01]
💬 非叶子HyperNode示例:
apiVersion: topology.volcano.sh/v1alpha1
kind: HyperNode
metadata:
name: s6
spec:
tier: 3 # HyperNode层级
members: # 子节点列表
- type: HyperNode # 子节点类型为HyperNode
selector:
exactMatch: # 精确匹配
name: s4
- type: HyperNode
selector:
exactMatch:
name: s5
▍ 基于网络拓扑的感知调度策略
Volcano Job和PodGroup可以通过 networkTopology 字段设置作业的拓扑约束,支持以下配置:
- mode:支持 hard 和 soft 两种模式。
- hard:硬约束,作业内的任务必须部署在同一个HyperNode内。
- soft:软约束,尽可能将作业部署在同一个HyperNode下。
- highestTierAllowed:与hard 模式配合使用,表示作业允许跨到哪层HyperNode部署。
例如,以下配置表示作业只能部署在2层及以下的HyperNode内(如s4或s5),否则作业将处于Pending状态:
spec:
networkTopology:
mode: hard
highestTierAllowed: 2
通过这种调度策略,用户可以精确控制作业的网络拓扑约束,确保作业在满足条件的最佳性能域运行,从而显著提升训练效率。
网络拓扑感知调度 (Alpha Release)
在 Volcano v1.12 中, 网络拓扑感知调度功能达到 Alpha 发布状态。此功能旨在优化大规模训练和推理场景(如模型并行训练、Leader-Worker 推理)中 AI 任务的部署。它通过将任务调度到同一网络拓扑性能域内,减少跨交换机通信,从而显著提升任务效率。Volcano 使用 超节点HyperNode CRD 来抽象和表示异构硬件网络拓扑,并支持层级结构以方便管理。
v1.12 版本集成了以下关键特性:
- Volcano超节点 HyperNode 自动发现 (HyperNode Auto-Discovery): Volcano 提供了集群网络拓扑的自动发现能力。用户可配置发现类型,系统将自动创建和维护反映集群真实网络拓扑的层级 HyperNode。目前支持 InfiniBand (IB) 网络下通过 UFM (Unified Fabric Manager) 接口获取网络拓扑信息,并自动更新 HyperNode。未来计划支持 RoCE 等更多网络协议。
- Volcano超节点 HyperNode 优选策略 (Prioritized HyperNode Selection): 引入了基于节点级别和 HyperNode 级别的打分策略,累加后作为 HyperNode 的最终得分。
节点级别 (Node-level): 建议配置 BinPack 插件以优先填满 HyperNode,减少资源碎片。
超节点HyperNode 级别 (HyperNode-level): 优先选择层级更低的 HyperNode 以获得更优性能,因其涉及的跨交换机次数较少;对于相同层级的 HyperNode,包含更多任务的 HyperNode 得分更高,旨在减少 HyperNode 级别的资源碎片。
- 支持通过 Label Selector 匹配节点 (Support for Label Selector Node Matching): HyperNode 叶子节点与集群中的物理节点关联,支持以下三种匹配策略:
精确匹配 (Exact Match): 直接匹配节点名称。
正则匹配 (Regex Match): 通过正则表达式匹配节点名称。
标签匹配 (Label Match): 通过标准 Label Selector 匹配节点。
Volcano v1.13 提供更灵活的网络拓扑发现机制
Volcano v1.13 提供更灵活的网络拓扑发现机制,并增强对主流AI计算框架的兼容性。继v1.12 版本中正式推出了网络拓扑感知调度能力,并率先实现了基于 InfiniBand (IB) 网络的 UFM 自动发现机制后,v1.13版本引入了基于节点标签(Label)的 超节点HyperNode 自动发现机制。该功能为用户提供了一种通用且灵活的方式来描述网络拓扑,将复杂的拓扑管理工作转变为简单的节点标签管理。
该机制允许用户在 volcano-controller-configmap 中定义拓扑层级与节点标签的对应关系。Volcano 控制器会周期性地扫描集群中的所有节点,并根据其标签自动完成以下工作:
- 自动构建拓扑:根据节点上的一组标签,从上至下(例如:机架 -> 交换机 -> 节点)自动构建出多层 HyperNode 拓扑结构。
- 动态维护:当节点的标签发生变化,或节点被添加、移除时,控制器会自动更新 HyperNode 的成员和结构,确保拓扑信息始终与集群状态保持一致。
- 支持多种拓扑类型:允许用户同时定义多种独立的网络拓扑,以适应不同的硬件集群(如 GPU 集群、NPU 集群等)或不同的网络分区。
💬 配置示例:
# volcano-controller-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: volcano-controller-configmap
namespace: volcano-system
data:
volcano-controller.conf: |
networkTopologyDiscovery:
- source: label
enabled: true
interval: 10m # 发现周期
config:
networkTopologyTypes:
# 定义一个名为 topology-A 的拓扑类型
topology-A:
# 定义拓扑层级,顺序从上到下
- nodeLabel: "volcano.sh/hypercluster"# 顶层 HyperNode
- nodeLabel: "volcano.sh/hypernode" # 中间层 HyperNode
- nodeLabel: "kubernetes.io/hostname"# 底层物理节点
通过在 Volcano 控制器的 ConfigMap 中添加 label 源即可启用此功能。以下配置定义了一个名为 topology-A 的三层拓扑结构:
- 顶层 (Tier 2) :由 volcano.sh/hypercluster 标签定义。
- 中间层 (Tier 1) :由 volcano.sh/hypernode 标签定义。
- 底层 :物理节点,由 Kubernetes 内置的 kubernetes.io/hostname 标签标识。
当一个节点被打上如下标签时,它将被自动识别并归入 cluster-s4 -> node-group-s0 的拓扑路径下:
# 节点 node-0 的标签
labels:
kubernetes.io/hostname: node-0
volcano.sh/hypernode: node-group-s0
volcano.sh/hypercluster: cluster-s4
基于label的网络拓扑自动发现功能具有出色的通用性与灵活性,不依赖于特定的网络硬件(如 IB),因此适用于各类异构集群,并允许用户通过标签灵活定义任意深度的层级结构。它将复杂的拓扑维护工作转变为简单的节点标签管理,实现了自动化,从而显著降低运维成本和出错风险。此外,该机制能够动态适应集群节点和标签的变化,无需人工干预即可实时保持拓扑信息的准确性。
📌 使用文档请参考:
HyperNode Auto Discovery:https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_hypernode_auto_discovery.md
相关PR:https://github.com/volcano-sh/volcano/pull/4629
▍将网络拓扑感知调度能力扩展至 Kubernetes 标准工作负载
在Volcano v1.13 版本中,Volcano 的网络拓扑感知调度能力不再局限于 Volcano Job。现在,也可以为 Kubernetes 的标准工作负载(如 Deployment、StatefulSet 等)配置网络拓扑约束。
该功能通过 Pod 模板中的注解(Annotation)实现。当为 Deployment 或 StatefulSet 的 Pod 模板添加网络拓扑相关的注解后,Volcano 的 podgroup-controller 会自动为这些 Pod 创建一个PodGroup,并将注解中定义的网络拓扑约束继承到 PodGroup 的规约(Spec)中,从而在调度时应用相应的网络亲和性策略。
可以通过以下两个注解来配置网络拓扑感知调度:
| Annotation Key | 描述 | 示例值 |
| topology.volcano.sh/network-topology-mode | 定义网络拓扑约束的模式。hard 表示强制约束,Pod 必须满足拓扑要求才能被调度;soft 表示软约束,调度器会尽量满足,但不强制。默认为 hard。 | "hard" |
| topology.volcano.sh/network-topology-highest-tier | 指定允许调度的最高网络层级。例如,设置为 "2" 表示 Pod 可以被调度到 2层及以下的HyperNode上,但不能调度到更高层级的HyperNode。 | "2" |
💬 Deployment 配置示例
以下示例展示了如何为一个 Deployment 配置网络拓扑感知调度。调度器将把该 Deployment 的 Pod 调度到网络层级不超过 2 的节点上:
apiVersion: apps/v1
kind: Deployment
metadata:
name: network-aware-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
annotations:
# 设置网络拓扑为硬约束
topology.volcano.sh/network-topology-mode: "hard"
# 设置允许调度的最高网络层级为 2
topology.volcano.sh/network-topology-highest-tier: "2"
spec:
# 必须指定调度器为 volcano
schedulerName: volcano
containers:
- name: main-container
image: nginx:latest
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "1"
memory: "1Gi"
Volcano 社区网络拓扑感知调度能力大大提升了 Volcano 在复杂工作负载管理中的实用性和易用性,为AI时代的基础设施提供关键调度支撑。更多 Volcano 社区网络拓扑感知调度能力,可以访问🔗社区地址:https://github.com/volcano-sh/volcano

更多云原生技术动向
关注容器魔方
- 点赞
- 收藏
- 关注作者
评论(0)