Weng, Q., Yang, L., Yu, Y., Wang, W., Tang, X., Yang, G., & Zhang,
L. (2023). Beware of Fragmentation: Scheduling {GPU-Sharing} Workloads
with Fragmentation Gradient Descent. In2023 USENIX Annual Technical Conference (USENIX ATC 23)(pp. 995-1008).
对于碎片率的基本建模
假设一个节点为,单个任务为,碎片化值设为,总的工作流为,任务权重有,则有
单个节点F_n的三种计算情况
资源不足
如果节点没有足够的资源(例如,CPU或GPU不足),那么所有未分配的GPU都被认为是碎片化的。这种情况下,碎片化量计算公式为:
这里为GPU剩余容量,为节点GPU总量
资源充足
如果节点有足够的资源运行任务mmm,但某些GPU部分未分配,且这些未分配部分不足以运行任务,这些部分的GPU资源也会被认为是碎片化的。此时,碎片化计算为:
这里的是指示函数,当条件成立时返回1,否则返回0。是任务请求的GPU资源
剩余容量时,不等式右式必然为1,式子恒为0,也就是认为当合理分配时,不会产生碎片量
仅CPU
如果任务不请求GPU(例如仅请求CPU),则节点上的所有未分配GPU都被认为是碎片化的,计算方式同第一种情况。在这里我们忽略这种情况。
定义碎片化率
节点定义:
集群定义:
FGD算法
- 遍历节点,计算碎片化量
- 跳过不可用节点
- 假设任务被分配后的碎片化量
- 计算增量
算法流程
输入: 集群 ,任务 ,目标工作负载
输出: 分配的节点
- 初始化节点得分集合 ,输出
- 并行遍历节点
3. 如果节点 资源不足或不满足任务要求,则跳过该节点
4. 假设任务 被分配到节点 上
5. 计算碎片化增量
6. 将 添加到节点得分集合 中 - 如果
8. 选择 最小的节点 ,分配任务 到节点
说些什么吧!