GPU集群基础:GPU架构、集群组成与资源管理基本概念

2.1 GPU核心架构:从SM到CUDA Core

要理解GPU集群的资源碎片化,首先必须清楚单个GPU内部的硬件组织方式。NVIDIA数据中心GPU(如A100、H100)采用SM(Streaming Multiprocessor,流式多处理器)作为基本计算单元。以A100为例,一颗GA100芯片包含108个SM,每个SM内部又划分为4个处理块,每个处理块包含16个FP32 CUDA Core、8个FP64 Core、16个INT32 Core以及4个Tensor Core。这种“GPU → GPC → SM → 处理块 → CUDA Core”的层级关系,决定了线程调度和显存访问的基本粒度。

关键硬件层级(A100为例):

  • CUDA Core:执行FP32/INT32算术运算的最小单元,1个时钟周期可完成1次运算。
  • SM(流式多处理器):包含CUDA Core、Tensor Core、共享内存(Shared Memory)、寄存器文件和调度器,是线程块(Thread Block)驻留和执行的物理场所。
  • GPC(图形处理簇):由多个SM组成,通过L2缓存切片与显存控制器相连。
  • 显存(HBM2e/HBM3):A100拥有40GB/80GB HBM2e,带宽高达2TB/s以上,是数据驻留和交换的主存储区域。

从资源管理的视角看,SM的数量决定了并行吞吐上限,而显存容量和带宽决定了数据驻留能力。当我们在集群层面讨论“卡”的分配时,实际上是在分配整张GPU的SM计算资源和显存资源。碎片化问题在单卡内部同样存在——例如一个仅需2GB显存的小任务,如果被分配到80GB的H100上,剩余78GB显存无法被其他任务利用,这就是“卡内碎片”的雏形。

GPU硬件层级与资源分配粒度 GPU 芯片 (A100) GPC 0 SM 0 16×FP32 Core 8×FP64 Core 16×INT32 4×Tensor 共享内存 164KB SM 1 16×FP32 Core 8×FP64 Core 16×INT32 4×Tensor 共享内存 164KB ··· HBM2e 显存控制器 (40GB/80GB, 带宽 ~2TB/s) GPC 1 ~ GPC 7 SM 2 ~ SM 106 每个SM包含 64 CUDA Core 4 Tensor Core 164KB 共享内存 资源分配粒度 整卡分配:独占全部SM+显存 MIG切片:1/2、1/4、1/8 GPU 显存隔离:按GB分配 HBM2e 显存控制器 (40GB/80GB, 带宽 ~2TB/s) 注:A100共108个SM,此处仅示意前2个SM的详细内部结构;实际资源调度以SM和显存为最小分配单位 ⚠ 小任务占2GB显存 → 剩余78GB无法被其他任务利用 → 卡内碎片

2.2 集群组成:从单卡到大规模算力池

GPU集群的物理组成可以划分为四个层次:计算节点(服务器)→ 机架(Rack)→ Pod/超节点 → 集群。每个计算节点通常插有4~8张GPU卡(如DGX A100为8卡),通过PCIe Gen4/Gen5或NVLink-C2C互联。节点之间通过高速网络(InfiniBand或RoCE)连接,形成无阻塞或低阻塞的通信拓扑。

层次 典型规模 互联方式 带宽/延迟 资源管理视角
GPU内部 108 SM / 卡 NVLink 内部总线 SM↔SM: 极高带宽 SM调度、显存分配
单节点(8卡) 8 GPU NVLink + NVSwitch 600GB/s(NVLink 3.0) 节点内GPU亲和性调度
机架(Rack) 4~8 节点 InfiniBand HDR/NDR 200~400Gb/s 机架内拓扑感知
Pod/超节点 32~64 节点 Fat-Tree / Dragonfly 跨机架延迟 ~1-2μs 分区调度、网络隔离
集群 数百~数千节点 多层网络架构 跨Pod延迟 ~5-10μs 全局资源池、配额管理

在集群资源管理系统中,GPU被视为可分配的计算资源单元,通常以“卡”为最小粒度进行调度。但现代调度器(如Kubernetes + Device Plugin、Slurm + GPU插件)已经支持更细粒度的分配:MIG(Multi-Instance GPU)可以将A100/H100切分为最多7个实例,每个实例拥有独立的SM和显存切片;显存虚拟化则允许按GB粒度分配显存,但计算资源仍共享。

2.3 资源管理基本概念:分配、隔离与碎片

资源管理的核心目标是将物理GPU资源抽象为可调度、可隔离、可回收的逻辑资源池。以下是必须掌握的关键概念:

  • 资源抽象:将GPU的SM数、显存容量、显存带宽、NVLink带宽等物理属性抽象为可量化的资源指标。例如,一个“GPU资源单元”可以定义为“1卡 + 40GB显存 + 全部SM”。
  • 资源分配:调度器根据任务需求(如“需要2卡,每卡16GB显存”)从资源池中寻找满足条件的空闲GPU或GPU切片,并建立独占或共享的绑定关系。
  • 资源隔离:确保多个任务之间互不干扰。硬件层面依赖MIG、PCIe ACS、显存保护;软件层面依赖CUDA Context隔离、显存分配器隔离、cgroup限制。
  • 资源碎片:当资源池中的空闲资源无法满足任何等待任务的完整需求时,这些零散资源即为碎片。碎片分为卡间碎片(多卡任务无法找到连续空闲卡)和卡内碎片(单卡剩余显存或SM不足)。
  • 资源配额(Quota):为不同团队或项目设定的资源使用上限,配额管理不当会加剧碎片化——例如某团队配额剩余2卡但任务需要4卡,这2卡对其他团队不可见。

核心公式:碎片率 = 1 −(可被任务利用的空闲资源 / 总空闲资源)。当碎片率超过30%时,集群的有效吞吐会显著下降,即使GPU平均利用率看似很高。

2.4 典型场景:多租户集群中的资源分配冲突

假设一个集群拥有32台8卡A100节点(共256卡),运行着三个团队的任务:

团队A:8个训练任务,每个需要4卡 + 40GB显存/卡
团队B:16个推理任务,每个需要1卡 + 8GB显存/卡
团队C:4个实验任务,每个需要2卡 + 80GB显存/卡(需整卡)

如果调度器采用“整卡分配”策略,团队B的16个推理任务会占用16张整卡,每张卡仅使用8GB/80GB显存,造成72GB × 16 = 1.15TB显存浪费。如果采用MIG切片,可以将每张A100切分为1个40GB实例 + 4个10GB实例,但MIG切片数量有限(最多7个),且切片边界固定,无法灵活匹配8GB需求。

更复杂的情况是拓扑约束:团队A的4卡任务要求4张卡位于同一节点(NVLink互联),如果节点上已有2张卡被团队B的推理任务占用,剩余6张卡虽然总数足够,但无法满足“4卡同节点”的约束,导致这6张卡成为“拓扑碎片”。

常见误区:仅关注GPU利用率的百分比,而忽略碎片化。例如集群GPU利用率达到85%,但实际只有60%的显存被有效使用,且大量任务在排队等待“恰好合适”的资源组合。利用率高 ≠ 碎片少,必须同时监控“可调度率”和“资源匹配率”。

2.5 资源管理工具链与调度策略

当前主流的GPU集群资源管理工具包括:

  • Slurm + GPU插件:支持整卡分配、MIG感知调度、节点拓扑约束(--gpus-per-node、--constraint)。
  • Kubernetes + NVIDIA Device Plugin:将GPU作为可扩展资源(nvidia.com/gpu),支持MIG实例暴露、显存配额(通过nvidia.com/gpu.memory)。
  • Volcano / Ray:面向AI作业的调度器,支持gang scheduling(同时调度一组GPU)和队列优先级。
  • NVIDIA DCGM(数据中心GPU管理器):提供细粒度的GPU监控指标,包括SM利用率、显存利用率、温度、功耗,用于碎片检测。

调度策略上,最佳适配(Best-Fit)算法优先选择剩余资源最少的GPU,以减少碎片;最差适配(Worst-Fit)则相反,优先选择资源最多的GPU,以保持大块连续空闲。实际生产环境通常采用混合策略:对延迟敏感的推理任务使用MIG隔离,对训练任务使用整卡或NVLink域感知调度。

2.6 复盘:资源碎片化的早期信号

在集群运维中,以下指标异常往往预示着碎片化正在加剧:

指标 正常范围 碎片化信号 建议动作
GPU平均利用率 70-90% >90% 但任务排队严重 检查资源匹配率
显存平均利用率 60-85% <50% 且GPU利用率高 启用MIG或显存超分
任务排队时间 <5分钟 超过30分钟 分析等待资源的具体需求
节点内GPU分配离散度 均匀分布 部分节点满载、部分节点空闲 调整拓扑感知策略
资源预留/超卖比例 预留<20% 预留超过40% 回收闲置预留资源