2. GPU集群基础
在深入讨论大规模GPU集群的任务调度策略之前,必须先建立对底层硬件与工作负载特性的清晰认知。调度器本质上是在“资源”与“任务”之间做匹配决策,如果对资源拓扑和任务行为缺乏准确建模,任何调度算法都难以发挥实效。本章从GPU架构的物理特性出发,梳理集群的组成层次,并归纳典型任务类型及其对调度器的约束。
2.1 GPU架构核心概念:从SM到NVLink
现代数据中心使用的GPU(以NVIDIA A100/H100、AMD MI250/MI300为代表)并非一个简单的“大核”,而是一个由多级并行单元构成的复杂处理器。理解以下概念是理解资源分配粒度的前提:
- SM(Streaming Multiprocessor)/ CU(Compute Unit): GPU的基本计算单元。每个SM包含若干CUDA核心(或流处理器)、共享内存(Shared Memory)、寄存器文件和调度器。一个GPU通常包含数十至上百个SM。
- 显存(HBM/HBM2e/HBM3): 高带宽显存,与GPU封装在一起。带宽远高于传统DDR,但容量有限(通常40GB~80GB)。显存容量和带宽是任务能否驻留GPU的关键约束。
- NVLink / NVSwitch: NVIDIA专有的高速互连技术。NVLink提供GPU之间的点对点直连(带宽可达900GB/s),NVSwitch则实现多GPU全互联拓扑。AMD对应使用Infinity Fabric。
- PCIe: 通用I/O总线,连接GPU与CPU、网卡。带宽远低于NVLink,是跨节点通信的瓶颈之一。
调度视角: 调度器必须感知“GPU实例”的粒度。现代GPU支持MIG(Multi-Instance GPU)或CU(Compute Unit)切片,可将物理GPU划分为多个逻辑实例。这意味着调度的最小单位不再是“整卡”,而是“计算切片 + 显存切片”的组合。若调度器不支持该粒度,将导致大量小任务独占整卡,浪费资源。
下图展示了单节点内GPU与CPU、网卡、NVSwitch之间的典型连接关系,这是调度器进行“拓扑亲和性”判断的基础。
2.2 集群组成层次:从单机到Pod再到分区
一个生产级GPU集群通常按以下层次组织,调度器需要管理每一层的资源视图:
| 层次 | 典型规模 | 关键资源属性 | 调度关注点 |
|---|---|---|---|
| GPU(卡) | 1 | SM数、显存容量、MIG切片 | 任务是否可共享、显存是否足够 |
| 节点(服务器) | 4~8 GPU | CPU核数、内存、NVLink域、PCIe拓扑 | 同节点GPU间通信带宽高,优先放置 |
| 机架(Rack) | 8~20节点 | TOR交换机带宽、电源上限 | 避免热点机架,考虑散热与电力 |
| Pod / 分区 | 数百至数千GPU | 网络拓扑(Fat-Tree、Torus)、故障域 | 大任务跨分区通信延迟显著增加 |
调度器在分配GPU时,需要维护一张资源拓扑树:根节点是整个集群,子节点是分区,再往下是机架、节点、GPU。每次分配请求都从叶子节点向上搜索,寻找满足“显存 + 计算切片 + 网络带宽”约束的最小可用子树。
2.3 任务类型与资源需求特征
不同任务对GPU资源的使用模式差异极大,调度策略必须区分对待。以下是数据中心最常见的三类任务:
2.3.1 单卡训练 / 推理任务
这类任务只需要1张GPU(或1个MIG切片),显存需求从几GB到几十GB不等。典型场景包括:
- BERT-base微调(显存约8GB)
- ResNet-50图像分类训练(显存约12GB)
- 在线推理服务(延迟敏感,需要稳定占用)
调度特征: 资源碎片化是主要矛盾。调度器应优先将小任务填充到已部分占用的节点上,避免产生“显存碎片”导致整卡闲置。
2.3.2 多卡数据并行(DP)任务
任务需要2~8张GPU,每张GPU持有完整模型副本,但处理不同批次数据。每步训练需要梯度同步(AllReduce)。
# 典型DP任务资源请求示例(K8s风格)
resources:
requests:
nvidia.com/gpu: 4
memory: 128Gi
limits:
nvidia.com/gpu: 4
# 调度器需保证4张GPU位于同一节点或同一NVSwitch域内
调度特征: 通信开销与GPU间距离强相关。同节点内NVLink带宽可达900GB/s,跨节点RoCE仅50GB/s。调度器应尽量将DP任务的所有GPU放置在同一节点;若节点不足,则优先放置在同一机架内。
2.3.3 大规模模型并行(MP / PP / TP)任务
当模型参数量超过单卡显存(如GPT-3 175B、Llama-3 70B),必须将模型切分到多张GPU上。常见并行策略包括:
- 张量并行(TP): 将单个算子切分到多卡,通信频率极高(每层多次AllReduce),要求GPU间带宽最大,通常限制在同一节点内。
- 流水线并行(PP): 按层切分,通信频率较低(每个micro-batch一次),可跨节点。
- 数据并行(DP): 上述两种并行之外,再叠加数据并行以扩大批量。
调度器必须感知“并行策略”。例如,一个需要8卡TP的任务,如果调度器将其分配到两个节点各4卡,训练性能可能下降5~10倍,因为TP通信走PCIe/网络而非NVLink。因此,调度器需要支持“GPU集合”的原子分配——要么全部满足,要么全部拒绝。
2.4 案例:一个典型的8卡训练任务调度决策
假设集群中有两个可用节点:
- 节点A:8张A100 80GB,NVLink全互联,空闲
- 节点B:8张A100 80GB,但其中4张已被其他任务占用
一个请求“8卡TP=8”的训练任务到达。调度器执行以下逻辑:
- 过滤: 节点B剩余4张,不满足8卡连续需求,直接排除。
- 打分: 节点A满足全部条件,且无跨节点通信,得分最高。
- 绑定: 将任务绑定到节点A的8张GPU,并记录NVLink域ID。
若节点A也被占用,调度器需考虑将TP=8拆分为TP=4×2(跨节点),但这需要用户显式声明支持,否则应排队等待。
2.5 常见误区与复盘
误区1:只按“GPU数量”调度,忽略显存。 某些任务显存需求为70GB,而节点上剩余2张GPU各剩40GB,调度器若只看数量会错误分配,导致任务OOM。必须同时校验显存、SM切片、带宽三类资源。
误区2:忽略MIG切片的隔离性。 将两个任务分配到同一物理GPU的不同MIG切片上,虽然计算资源隔离,但L2缓存和显存带宽仍可能互相干扰。对于延迟敏感任务,应避免MIG共享。
误区3:将“节点内”等同于“NVLink域内”。 部分服务器(如HGX A100 4-GPU)只有4卡NVLink全互联,另外4卡走PCIe。调度器若未读取NVLink拓扑,可能将TP=8任务分配到同一节点但跨PCIe,性能骤降。
复盘建议: 生产环境调度器应维护一张“GPU拓扑矩阵”,记录每对GPU之间的通信带宽等级(NVLink=3,PCIe=2,跨节点=1)。在任务调度时,计算“通信代价 = 任务通信量 × 带宽等级倒数”,并作为打分项之一。这能有效避免上述误区。