跳到主要内容
返回时间线
NVIDIA Technical Blog来源发表:

NVIDIA 发布开源工具 Topograph,把集群网络拓扑转成 Kubernetes 标签与 Slurm 配置,让调度器按物理邻近性放置 GPU 工作负载

核心概要

NVIDIA 推出开源工具 Topograph,它通过 provider 从云 API 或本地网络系统发现集群拓扑并归一化为统一模型,再由 engine 输出为 Kubernetes 节点标签、NFD 资源、Slinky ConfigMap、Slurm 拓扑配置或拓扑 JSON,使 Kubernetes、Slurm、Slinky 上的调度器能够基于当前拓扑做邻近性放置,并支持 KAI Scheduler、Kueue 的拓扑感知 gang 调度。

AI-generated editorial illustration: Topology-Aware Workload Scheduling with NVIDIA Topograph

深度剖析

Topograph 用 provider 与 engine 两层抽象把异构拓扑来源统一起来:provider 从云 API 或本地系统发现拓扑并归一化为规范模型,engine 再翻译成各工作负载管理器期望的格式,包括 Kubernetes 节点标签、NFD 资源、Slinky ConfigMap、Slurm 配置和面向实例的拓扑 JSON。 此前调度器只能基于人工维护的拓扑快照工作,而 Topograph 把发现、归一化与格式转换拆成可替换的两层,使同一份拓扑视图能同时服务 Kubernetes、Slurm 与 Slinky 三类环境。 文中以组件清单(API Server、Node Observer、Node Data Broker、Provider、Engine)和 provider 到 engine 的支持矩阵说明该结构,矩阵标注为反映 2026 年 9 月 16 日的上游 main 状态。

Topograph 通过按需与事件触发两种方式保持拓扑视图新鲜:API 暴露 /v1/generate、/v1/topology、/v1/lookup、/healthz、/metrics 五个端点,Node Observer 监听节点或 Pod 变化并请求重新生成,重复的相同请求会重置尾部计时器并只处理一次,聚合延迟典型值为 15 秒。 把拓扑刷新从人工快照变成由集群事件驱动的自动再生成,并针对集群事件突发做了请求去重,减少冗余工作。 文中给出端点语义(提交返回 HTTP 202、处理中返回 202、完成返回 200)与聚合延迟的典型值,属于工具文档层面的说明。

在 Kubernetes 上,Topograph 用可变深度的 fabric 标签族(fabric.topograph.run/tier-0 为最靠近节点的叶子交换机,层级向外递增)和两级 accelerator 标签(domain 与可选 sub-domain)表达局部性,这些标签可直接作为 Pod 亲和性的 topologyKey,也可被 KAI Scheduler 组织成层级拓扑用于 gang 调度。 默认 Kubernetes 调度器不发现物理互连层级,Topograph 以节点标签补齐这一信息,使原生亲和性与拓扑感知调度器都能消费;KAI 示例中 required 注解把 gang 限制在单个 tier-1 域内,preferred 注解在可行时把 Pod 集中到 tier-0 域。 文中给出标签命名规则、验证命令、亲和性权重示例(90 与 70)以及 KAI Topology 与 Job 注解的完整 YAML,属于可复现的配置示例。

在 Slurm 与 Slinky 侧,Topograph 生成 tree、block 与 Slurm 25.05 引入的按分区 YAML 配置,可选 reconfigure 参数在写文件后执行 scontrol reconfigure;Slinky engine 把 Kubernetes 节点映射到 slurmd Pod 并写入 ConfigMap,dra provider 则读取已有的 nvidia.com/gpu.clique 标签用于 MNNVL 的 block 拓扑。 把同一份拓扑模型延伸到 Slurm 原生部署与在 Kubernetes 上运行 Slurm 的 Slinky 两种形态,并覆盖 MNNVL 这一较窄场景。 文中给出 Debian/RPM 构建目标、配置文件路径、请求与轮询命令、tree/block/多拓扑 JSON 示例,以及 strigger 脚本只响应节点上下线而不检测交换机改线的说明。

启示与展望

该工具面向在 Kubernetes、Slurm 或 Slinky 上运行分布式 GPU 工作负载的集群运营者与平台团队,适用于云托管与本地两类环境:云侧通过 provider 读取云 API,本地侧使用 InfiniBand provider 配合 ibnetdiscover,或用 NetQ 管理 Spectrum-X 与 MNNVL 域。使用前提包括 Kubernetes 1.27 或更高、Helm 3.10+ 或 4.x、kubectl 权限与受支持的 provider;拓扑感知 gang 调度可选配 KAI Scheduler 或 Kueue TAS。NFD engine 需要开启默认关闭的 alpha NodeFeatureGroupAPI 特性门控,且其输出面向消费 NodeFeatureGroup 对象的下游组件,不能替代 Kubernetes topologyKey 标签。文中还提供 kwok-nodes 与 Kind/KWOK 辅助工具,用模拟的节点与交换机层级在没有生产硬件时进行测试。

文中明确提示 Topograph 反映的是被报告的拓扑而非期望拓扑,标签只在生成运行时刷新,fabric 变化的可见性取决于 provider 及其触发事件;支持矩阵标注为反映 2026 年 9 月 16 日的上游 main,并说明需求可能随 Topograph 版本、环境与 provider 配置而变化。Kubernetes 1.36 通过 KEP-5732 引入的拓扑感知工作负载调度仍为 alpha,上游 beta 工作在进行中,文中建议查阅增强跟踪器而非依赖某个未来版本。用于节点状态刷新的 strigger 脚本只响应节点上下线,不检测任意交换机改线与全部库存变化。此外,文中未给出吞吐、成本或每瓦 token 数的量化测量,因此这些收益方向属于工具设计意图而非本文实测结论。

来源