Skip to main content

背景介绍

具体参考:Volcano跨队列资源抢占驱逐改进设计

测试环境

系统MacOS M4 15.6 (24G)

组件

组件版本备注
Volcanov1.13.0使用自定义配额插件capacity-card
Kubernetesv1.27.3
Kindv0.27.0 模拟GPU集群资源

资源

GPU数量备注
NVIDIA-GeForce-RTX-40908张模拟

相关配置

volcano-scheduler.conf
actions: "enqueue, allocate, backfill, reclaim"
tiers:
- plugins:
- name: priority
- name: gang
enableReclaimable: false
- name: conformance
enableReclaimable: false
- plugins:
- name: predicates
- name: capacity-card
arguments:
# 使用GPU卡的Pod不限制CPU/Memory资源
cardUnlimitedCpuMemory: true
# 允许通过`PodOwnerReferences`来判断Pod的类型是推理还是训练类型
allowServiceTypeByPodOwnerReferences: true
- name: nodeorder

场景1:跨队列抢占策略

用例

  • 1个高优先级在线服务
  • 1个低优先级在线服务
  • 1个高优先级离线任务
  • 1个中优先级离线任务
  • 1个低优先级离线任务

结论

  • 离线任务之间不能进行相互抢占
  • 在线服务之间不能进行相互抢占
  • 高优在线服务可以抢占中/低优离线任务资源
  • 低优在线服务不能抢占中/高优的离线任务资源
  • 当在离线的资源销毁后,在线服务将优先获得调度(因为在线服务队列优先级比离线任务队列优先级高),其次按照优先级进行调度

代码

https://github.com/gqcn/volcano-test-cases/tree/main/reclaim-between-queues/case1

场景2:抢占多个任务资源

用例

  • 1个高优先级在线服务,使用6
  • 1个高优先级在线服务,使用2
  • 2个中优先级离线任务,使用4
  • 2个低优先级离线任务,使用4

结论

  • 1个高优在线服务只会抢占并驱逐3个低优离线任务,满足6卡需求。剩下一个离线任务没有变化。
  • 1个高优在线服务抢占并驱逐剩下的1个中优离线任务,满足2卡需求。
  • 在抢占驱逐的过程中,在线服务优先抢占并驱逐低优离线任务资源,随后才是中优离线任务。

代码

https://github.com/gqcn/volcano-test-cases/tree/main/reclaim-between-queues/case2