网络层 开放阅读

拓扑感知调度

Topology-aware Scheduling

概念 ID
topology-aware-scheduling
更新时间
2026-05-29
来源数量
待补

拓扑感知调度

3 秒看懂

拓扑感知调度(Topology-aware Scheduling)是一种根据计算节点间的物理/逻辑连接关系(拓扑)来智能放置任务的调度策略。在 AI 大模型分布式训练这类重通信场景中,如果不考虑节点之间的“远近距离”,任务就可能被分散到不同机架甚至不同交换机下,导致网络跳数多、延迟高,拉长训练时间。拓扑感知调度会把相互通信密集的任务调度到同一机架、同一交换机、甚至同一台机器内 NVLink 直连的 GPU 上,让通信“抄近路”,显著缩短作业完成时间。

3 分钟产业解释

在 Kubernetes 集群上跑多卡 AI 训练或大规模数据分析作业时,Pod 之间通常有巨大的网络通信需求(例如 AllReduce 集合通信或参数同步)。原生 Kubernetes 调度器默认根据节点的资源可用情况和 Pod 请求进行负载均衡(如 LeastAllocated 策略),这往往会导致 Pod 分散到不同节点,反而增加了高通信需求 Pod 之间的网络距离,拉高时延,致使训练作业“久而不快”

拓扑感知调度通过以下思路解决此问题:

  • 感知物理拓扑:识别节点的分布层级——同一 NUMA 节点、同一 GPU 直连域(NVLink)、同一机架(Rack)、同一交换机(Tor)等。
  • 量化通信代价:将不同物理连接方式映射为可比较的“通信分数”,例如 NVLink 直连分数高(通信优秀),跨 PCIe 或以太网分数低。
  • 调度决策优化:基于分数做成组调度、最佳匹配、反碎片等策略,将一组需要高通信带宽的 Pod 放到一起。

阿里云 ACK 的“拓扑感知调度”功能和开源项目 HAMi 的 NVIDIA GPU 拓扑感知调度,都是产业落地的代表。前者在 Kubernetes 层面提供了在多拓扑域中自动重试的 Gang 调度能力,解决原生亲和调度“一次失败就卡住”的痛点。后者则深入到单节点内,通过 NVML 动态探测 GPU 间的 NVLink/PCIe 拓扑,将物理连接数字化,让调度器做出最优的 GPU 组合选择,兼顾短期性能和长期集群资源健康度。

15 分钟专家深入

要理解拓扑感知调度的全貌,需要从两个层次拆解:

  1. 节点内 GPU 拓扑感知(单机多卡场景)

    • 感知对象:GPU 与 GPU 之间是通过 NVLink 直连、NVSwitch 全互联,还是仅通过 PCIe 总线连接。
    • 目标:将多卡训练任务的一组 GPU 分配在 NVLink 带宽最高、延迟最低的组合上。例如,8 卡 A100 节点中,某些卡两两之间是 NVLink 直连,有些需经过 PCIe Switch 转发,后者通信效率会大幅下降。
    • 实现方式:设备插件(Device Plugin)通过 NVIDIA NVML 库实时探测 GPU 对之间的链接类型,然后转化为标准化的“拓扑通信分数”,调度器基于此分数做匹配。
  2. 多节点网络拓扑感知(跨机器分布式场景)

    • 感知对象:节点在集群网络中的位置——同一机架、同一聚合交换机、跨层级路由器等。
    • 目标:将同属一个分布式训练作业的所有节点尽可能放在网络跳数最少、带宽最大的子域内。
    • 实现方式:利用 Kubernetes 节点标签(如 topology.kubernetes.io/zonerackswitch)以及自定义拓扑域,通过 Gang 调度保证所有 Pod 同时绑定,并在多个可用拓扑域中重试。

关键技术武器

  • Gang Scheduling:要求一个作业的所有 Pod 必须一起获得资源后才开始运行,避免“部分 Pod 先调度到理想位置,其他 Pod 因资源不足而 Pending,重试时却无法切换到另一个可用拓扑域”的问题。
  • 动态拓扑打分:不再依赖静态标签,而是由 Device Plugin 持续将动态探测的拓扑信息转化为分数,以反映真实的物理连接优劣。
  • 双模式防碎片策略:对多卡并行任务采用“最佳匹配”(寻找通信分数最高的 GPU 集合),对单卡独立任务则采用“最小破坏”(优先使用对邻近 GPU 通信破坏最小的空闲卡),防止将可构成高带宽组合的 GPU 群拆散,维护集群的长期调度能力。

因此,拓扑感知调度 = 拓扑数字化 + 成组约束 + 分数决策 + 防碎片


技术原理

本部分以 HAMi(开源方案)针对 NVIDIA GPU 的拓扑感知调度 为核心示例,阐释从数据采集到调度决策的完整机制。

整体流程:先量化,再决策

┌──────────────────────────────────────────────┐
│               阶段一:拓扑注册                    │
│   Node内 Device Plugin → NVML 探测 → 通信分数     │
└──────────────────┬───────────────────────────┘
                   │ 上报(Device 扩展资源 + 分数矩阵)
                   ▼
┌──────────────────────────────────────────────┐
│               阶段二:调度决策                    │
│  Scheduler → 过滤可用节点 → 根据分数选最优 GPU 组合│
└──────────────────────────────────────────────┘

阶段一:拓扑注册——将物理连接数字化

  • 信息探测:每个 GPU 节点上的 Device Plugin 利用 NVIDIA NVML 库,遍历所有 GPU 设备对 (GPU_i, GPU_j),获取它们之间的直连类型(NVLink 或 PCIe),并检测是否经过 NVSwitch。
  • 建模与打分
    • 在内存中构造 GPU 连接图谱。
    • 依据预设评分规则将连接类型转换为数值,例如(来源:[HAMi 解析]):SingleNVLINKLink100 分,PCIeLink10 分(示例性定性表述,实际分数取决于具体实现)。
    • 最终形成节点内每对 GPU 的“通信分数矩阵”,上报给 Kubernetes 调度器。

阶段二:调度决策——在拓扑维度上做组合优化

  • 调度器 Fit 函数扩展:HAMi 内置了两套防碎片调度策略,根据请求类型自动选择:

    • 多卡并行任务(如 4/8 卡训练):启用“最佳匹配”策略。调度器会计算请求 GPU 数量下所有可能组合的总通信分数(例如所有选中卡两两之间分数之和),选择总分最高的组合。这样确保任务被分配到的 GPU 之间物理连接最优。
    • 单卡独立任务:启用“最小破坏”策略。优先使用那些与已占用 GPU 之间通信分数较低的空闲卡,避免把可用于未来多卡最优组合的“好卡”提前用掉,降低集群拓扑资源的碎片化。
  • Gang 调度协同(阿里云 ACK 等平台):
    当作业包含多个 Pod 且需跨节点时,通过 PodGroup 标签声明一组 Pod 必须同时调度。若第一次选择的拓扑域无法满足所有 Pod,调度器不会将部分 Pod 置于 Pending 不去重试,而是在多个不同的拓扑域(可用区、机架)中循环重试,直到找到能够容纳整个作业的位置。

    配置示例(简化自阿里云帮助中心):

    labels:
      pod-group.scheduling.sigs.k8s.io/name: "tf-smoke-gpu"
      pod-group.scheduling.sigs.k8s.io/min-available: "3"  # 与Pod数一致
    annotations:
      alibabacloud.com/topology-aware-core: "..."   # 拓扑约束定义
    

关键参数域

  • 拓扑域(Topology Domain):定义一组在拓扑上被认为“近”的节点集合,如 kubernetes.io/hostnamefailure-domain.beta.kubernetes.io/zone、自定义 rack 等。
  • 通信分数(Communication Score):反映设备对之间通信效率的无量纲数值,由具体实现定义映射规则。分数越高表示带宽越大、延迟越低。
  • 最大偏斜(MaxSkew):定义 Pod 在拓扑域间分布的不均匀度上限,值越小分布越均衡;若目标为将 Pod 全部集中在最小拓扑域,应使用亲和调度或 Gang 调度,而不依赖偏斜控制。

注意:此处给出的“100 分”“10 分”等数值参考了开源资料中的示例,各厂商、各版本的具体规则可能不同,仅用于说明分数化思路。


技术演进史

早期:仅靠亲和/反亲和,缺乏拓扑弹性

  • Kubernetes 原生 nodeAffinity / podAffinity 可以将 Pod 吸引到具有特定标签的节点或拓扑域,但存在两大痛点:
    1. 重试僵化:一旦第一个 Pod 落地,如果该拓扑域资源不足以容纳整个作业,部分 Pod 将永远 Pending,调度器不会自动切换到其它满足条件的拓扑域。
    2. 粒度不足:通常只能亲和到“可用区”级别,无法进一步细化到机架或 NUMA 节点。

2019‑2021:引入 Topology Manager 和 GPU 拓扑萌芽

  • Kubernetes Topology Manager 试图在 CPU、内存、设备(如 SR‑IOV 网卡)之间进行 NUMA 对齐,但初期对 GPU 集群的成熟度有限。
  • NVIDIA 推出 NVLink/NVSwitch 硬件,驱动社区开始关注 GPU 间的通信拓扑,但调度仍多为静态、手工配置。

2021‑至今:阿里云 ACK、HAMi 等方案成熟

  • 阿里云 ACK 拓扑感知调度 + Gang 调度:通过 pod-group 和拓扑约束 Annotation,支持 Pod 在多个拓扑域中自动重试,解决了“亲和失败即死”的问题。
  • HAMi v2.7.0 发布面向 NVIDIA GPU 的拓扑感知调度(2024‑2025 前后,源自资料时间推断):首次将动态探测‑打分‑最佳匹配/最小破坏链路完整实现,并作为开源项目被超过 120 家企业/机构采用。

当前,行业正在向 “全栈拓扑感知” 演进:即从单机内 GPU 拓扑到跨机网络结构(RDMA、IB、RoCE)均纳入统一的调度分值体系,并结合拥塞控制、集体通信库协同,实现端到端的通信优化。


技术路线对比

下表对不感知拓扑的默认调度、基于静态标签的拓扑亲和,以及两种典型拓扑感知调度方案进行对比:

方案调度粒度动态性防碎片能力多拓扑域重试网络层级支持关键实现
K8s 默认调度(资源负载均衡)节点级
静态拓扑亲和(NodeAffinity)常用区/机架(标签)差(标签固定)否(仅一次机会)可手写标签K8s 原生 nodeAffinity
阿里云 ACK 拓扑感知调度 + Gang可用区/机架,可自定义 alibabacloud.com/topology-aware-*中等(标签可更新,但非实时探测)一般(自动切换拓扑域)机架/交换机扩展调度器 + PodGroup
HAMi NVIDIA GPU 拓扑感知调度单 GPU 对级别(NVLink vs PCIe)(NVML 动态探测,实时改分)(最佳匹配+最小破坏)不直接管理跨节点拓扑域,可与上层调度配合仅节点内 GPU 拓扑Device Plugin + 自定义 Fit

路线选择要点

  • 若仅需简单的跨机架亲和,原生 nodeAffinity + podAffinity 即可,但要注意重试缺陷。
  • 若集群跨节点通信带宽对训练至关重要,且容忍部分 Pod Pending 需要自动恢复,考虑 ACK 式的 Gang + 拓扑域重试方案。
  • 若集群内单节点有多张 GPU,且训练任务常为多卡并行,强烈建议部署类似 HAMi 的节点内拓扑感知调度,以避免 GPU 组合中的“短板效应”。

上下游

上游

  • 硬件拓扑:GPU(NVLink、NVSwitch 代际)、高性能网卡(InfiniBand、RoCE)、交换机层级(ToR、Spine、Core)。
  • 资源管理系统:Kubernetes(调度器、Device Plugin 框架)、Slurm(传统 HPC)等。
  • 拓扑信息导出:NVIDIA NVML、Kubernetes Topology Manager、厂商自定义节点标签/Annotation。

下游

  • 分布式训练框架:PyTorch DDP、DeepSpeed、Megatron‑LM 等。它们通过 NCCL 通讯库调用底层拓扑优化过的 GPU 集合,调度结果直接决定 AllReduce 实际带宽。
  • 作业执行效率:更优的亲和摆放可减少单次迭代的通信时间占比,提升可扩展性和 GPU 利用率。
  • 集群运营成本:通过提高算力利用效率和减少长尾作业,降低单位训练成本。

关键指标

  • 有效通信带宽:训练作业实际达到的互联带宽与理论峰值的比例。拓扑感知调度应使其趋近于 1。
  • 作业完成时间(Job Completion Time, JCT):启用拓扑感知后,通常可减少 10%–30% 的通信尾延时影响(定性估计,具体取决于场景)。
  • 拓扑碎片率:因不当分配导致后续多卡任务无法找到最优 GPU 组合的概率。HAMi 等最小破坏策略旨在降低此值。
  • 重试成功率:Gang 调度在首次拓扑域失败后,于其他域成功调度的概率。阿里云方案实现了跨域重试,有效提升了成功率。
  • 调度延迟:增加拓扑打分和组合优化带来的额外调度计算时间,通常设计目标是远小于作业生命周期,毫秒级可接受。

供需与市场数据

由于检索资料未提供具体市场规模,以下为定性分析:

  • 需求端:大模型(参数规模 > 10B)训练普遍需要数百至数千 GPU,通信开销可占总训练时间的 30% 以上。云服务商和自建集群的企业对“拓扑感知调度”的诉求极为强烈,因为它是提升算力效率、降低成本的关键杠杆之一。
  • 供给端:开源社区(HAMi 已有 120+ 企业采用)与头部云厂商(阿里云、火山引擎、华为云等均有类似功能)形成供给。NVIDIA 自身也在通过 NVML 和 NCCL 提供硬件侧的配合。
  • 趋势:随着 AI 训练集群从千卡向万卡级别扩展,网络拓扑感知调度将逐步从“可选优化”变为“标配能力”,并可能与拥塞控制、集体通信库更深耦合。

代表公司与资本映射

  • 阿里云:ACK 容器服务提供拓扑感知调度与 Gang 调度,为公共云和专有云用户降低 AI 训练成本。
  • HAMi 社区:活跃开源项目,由 15+ 国家 350+ 贡献者维护,超过 120 家机构采用(来源:CSDN 博客)。无直接上市/融资映射,但其生态价值体现在被广泛集成。
  • NVIDIA:通过硬件拓扑、NVML 和 NCCL 库为上层调度提供必要的数据,自身不直接做 K8s 调度器,但通过合作伙伴生态影响行业。
  • 其他云服务商:各主流云厂商均有类似功能或计划,但具体命名和实现细节各异。

资本映射方面,暂无直接以“拓扑感知调度”为单一业务的公司上市或获得专门融资,其价值多内嵌于云计算或 AI 平台型公司中。


投资逻辑

  • 效率即成本:大模型训练动辄千万美元,任何节约通信时间的软件优化都会直接转化为显性成本的节省。拓扑感知调度作为“软件定义算力”的典型,投入产出比高。
  • 云厂商竞争壁垒:谁能提供开箱即用的智能拓扑调度、更低的算力成本,谁就更可能赢得 AI 训练托管的大客户。这是一个重要的产品竞争力指标。
  • 生态受益:与 GPU 硬件、高速网络方案深度绑定的调度优化,会增强相关硬件(如 NVLink 交换机、InfiniBand 适配器)在集群采购中的必要性,利好 NVIDIA、Mellanox(NVIDIA 网络部门)等。
  • 风险提示:调度策略与具体硬件代际强相关,硬件拓扑变化可能导致原有规则失效,需持续投入适配;开源方案(如 HAMi)的成熟可能降低商业工具的独有优势。

常见误读纠偏

误读 1:拓扑感知调度就是简单的 podAffinity,上个标签就好。
事实:原生 podAffinity 无法在多个拓扑域间自动重试,一旦第一次放置失败就无法自动切换到另一个同样满足条件的机架,且粒度粗。真正的拓扑感知调度结合了动态打分、Gang 调度重试和碎片预防,远不止贴标签。

误读 2:只要解决单节点内 GPU 拓扑就够了,跨节点网络无所谓。
事实:分布式训练中 AllReduce 大量数据跨节点传输,忽略机架/交换机拓扑可能导致流经 higher‑level 交换机,带宽骤降。多层次拓扑感知(节点内 + 跨节点)才能全面优化。两者需协同。

误读 3:调度分数是固定不变的,一次设置终生有效。
事实:HAMi 的方案证明,拓扑分数可以由 Device Plugin 动态探测并实时更新,以适应硬件变化或脏标签。静态打分无法应对 GPU 故障或动态切换连接模式。


学习路径

  1. Kubernetes 调度框架基础:理解调度队列、Filter/Score 扩展点、Device Plugin 机制、Topology Manager。
  2. GPU 互联技术:学习 NVLink、NVSwitch、PCIe 的基本原理与带宽差异,以及 NCCL 通信库对拓扑的感知方式。
  3. 分布式训练通信模式:掌握 AllReduce、All‑to‑All、ReduceScatter 等原语,以及它们在 Ring、Tree、Collnet 等算法下的流量特征。
  4. 实践案例:动手部署 HAMi 或体验阿里云 ACK 的拓扑感知调度 Demo,观察调度结果对 NCCL 带宽的影响。
  5. 深入前沿:研读 Volta、Ampere、Hopper 等架构的白皮书中关于 NVLink 代际变化的章节,以及 SIG‑scheduling 社区的拓扑相关 KEP 提案。

一句话总结

拓扑感知调度把集群的物理连接信息端到端数字化,并注入调度决策,让 AI 训练的每个数据包都跑在最短、最快的路径上,以此将高昂的通信成本压到最低。


延伸阅读与来源

本文涉及的定量示例(如分数值)均源自检索资料的描述,用于体现原理,不代表特定版本的精确数值。具体实现细节请以各项目最新源码和官方文档为准。

source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型