助力深度学习!阿里开源可插拔 GPU 共享调度工具( 八 )



2. 扩展调度
GPU Share Scheduler Extender 可以在分配 gpu-mem 给 Pod 的同时将分配信息以 annotation 的形式保留在 Pod spec 中 , 并且在过滤时刻根据此信息判断每张卡是否包含足够可用的 gpu-mem 分配 。

2.1 Kubernetes 默认调度器在进行完所有过滤(filter)行为后会通过 http 方式调用 GPU Share Scheduler Extender的filter 方法 这是由于默认调度器计算 Extended Resource 时 , 只能判断资源总量是否有满足需求的空闲资源 , 无法具体判断单张卡上是否满足需求;所以就需要由 GPU Share Scheduler Extender 检查单张卡上是否含有可用资源 。 以下图为例 , 在由 3 个包含两块 GPU 卡的节点组成的 Kubernetes 集群中 , 当用户申请gpu-mem=8138时 , 默认调度器会扫描所有节点 , 发现 N1 所剩的资源为 (16276 * 2 - 16276 -12207 = 4069 )不满足资源需求 , N1 节点被过滤掉 。 而 N2 和 N3 节点所剩资源都为 8138MiB , 从整体调度的角度看 , 都符合默认调度器的条件;此时默认调度器会委托 GPU Share Scheduler Extender 进行二次过滤 , 在二次过滤中 , GPU Share Scheduler Extender 需要判断单张卡是否满足调度需求 , 在查看 N2 节点时发现该节点虽然有 8138MiB 可用资源 , 但是落到每张卡上看 , GPU0 和分别 GPU1 只有 4069MiB 的可用资源 , 无法满足单卡 8138MiB 的诉求 。 而 N3 节点虽然也是总共有 8138MiB 可用资源 , 但是这些可用资源都属于 GPU0 , 满足单卡可调度的需求 。 由此 , 通过 GPU Share Scheduler Extender 的筛选就可以实现精准的条件筛选 。

推荐阅读