GPU 集群资源碎片化治理:Kubernetes 调度器的深度优化
在大规模 GPU 集群运营中,资源碎片化是导致利用率低下的首要元凶。当任务请求 4 张 GPU 但集群中空闲卡分散在不同节点时,传统调度器可能判定资源不足而拒绝调度。
碎片化的三种形态
节点内碎片(Intra-node Fragmentation):一个 8 GPU 节点上,3 个 2-GPU 任务运行后剩余 2 张卡,但这 2 张卡分别位于不同的 NVLink 域,无法满足需要 NVLink 高速互联的 2-GPU 任务。
跨节点碎片(Inter-node Fragmentation):集群共有 100 张空闲 GPU,分散在 30 个节点上——每个节点仅空闲 2-4 张卡。一个需要 8 张连续 GPU 的训练任务无法调度,尽管总空闲资源远超需求。
时间碎片(Temporal Fragmentation):不同任务的运行时间参差不齐。当短期推理任务和长期训练任务混部时,短期任务结束后释放的 GPU 可能很快被其他短期任务占用,长期任务始终无法凑齐足够的连续资源。
Best-Fit-Decreasing 装箱优化
借鉴经典装箱问题(Bin Packing)的解法,Wise2C 调度器采用 BFD(Best-Fit-Decreasing)策略:将待调度任务按 GPU 需求量从大到小排序,优先调度大任务,将其放置到「剩余容量最匹配」的节点上(Best-Fit),而非第一个有空位的节点(First-Fit)。这显著减少了调度后的碎片产生。
实测中,BFD 策略在 256 卡集群上相比 Kubernetes 默认调度器,碎片率降低了 45%,任务平均调度等待时间缩短 38%。
GPU 虚拟化:MIG 与 vGPU
对于推理场景,一张 A100 80GB 的完整 GPU 对于小模型推理来说严重浪费。NVIDIA Multi-Instance GPU(MIG)技术允许将一张 A100 切分为最多 7 个独立的 GPU 实例,每个实例拥有独立的显存和计算引擎,硬件级别隔离。Wise2C 调度器感知 MIG 配置,支持动态创建/销毁 MIG 实例,将闲置的整卡按需切分为小实例供推理任务使用,训练任务到来时再合并回整卡。
对于不支持 MIG 的 GPU 型号(如 V100、A10),则通过时分复用(Time-Sharing)和 MPS(Multi-Process Service)实现软件级别的虚拟化共享。
Scheduler Extender 实现
所有上述优化均通过 Kubernetes Scheduler Extender 和 Scheduling Framework Plugin 两种机制实现,无需修改 Kubernetes 核心代码,可与任何标准 K8s 发行版集成。Extender 通过 Webhook 介入调度流程的 Filter 和 Score 阶段,注入拓扑感知、碎片优化和 MIG 管理逻辑。