
共享GPU时分复用 显存隔离模式协议支持单独申请不足一卡的显存、编解码、GPU核心。线上实际只用了显存gpu-mem-ratiogpu-coregpu-encodegpu-decodegpu-memMIG模式Nvidia的卡支持MIG直接在硬件层面将GPU切分为多个独立实例每个都拥有独立的显存和算力。调度器也支持直接声明MIG规格。但是MIG和普通的共享GPU并不共存GPU堆叠调度优先使用已经被部分占用的GPU其次使用同一台Node上已经有GPU任务运行的Node最后再使用完全空闲的GPU Node其目的是为了尽量保留空闲的GPU Node单机拓扑感知调度PCIe拓扑感知拓扑层级PCIe Switch机尾CPU SocketGPU RDMA联合调度同时使用GPU和RDMA网卡的任务调度器会尽量把他们分配在拓扑上相近的位置拓扑层级类似PCIe拓扑GPU拓扑感知调度NVLink感知调度环带宽计算为什么要计算环带宽分布式训练中最常用的梯度同步算法Ring AllReduce所有参与训练的GPU组成一个逻辑上的环梯度会沿着环传递。整个环的通信速度会取决于最慢的一条边木桶效应输入输入是Device CRD上的单Node的GPU带宽矩阵会用一个矩阵描述GPU两两之间的通信带宽计算过程计算GPU拓扑的过程并不在调度链路里同步完成而是通过Reconcile Device完成。同一种GPU组合能组成不同的环关系算法递归的计算一台Node上所有GPU子集的排列的最大环带宽计算时用bitmap标识子集内的GPU同一个子集的不同顺序的bitmap相同。对同一个bitmap只保留最大的环带宽。递归计算完毕后按卡数分组卡数内部按照bitmap的最大带宽降序排列有了这个map[卡数][bitmap][]GPU组合之后只要知道申请的卡数即可快速找到环带宽最大的GPU组合环带宽用在哪最主要的就是Gang调度的分布式训练worker因为分布式训练任务关心GPU之间的通信带宽。不需要GPU通信的任务不需要考虑这些主要走的是GPU堆叠这个路径