背景介绍
具体参考:Volcano跨队列资源抢占驱逐改进设计
测试环境
系统:MacOS M4 15.6 (24G)
组件:
| 组件 | 版本 | 备注 |
|---|---|---|
Volcano | v1.13.0 | 使用自定义配额插件capacity-card |
Kubernetes | v1.27.3 | |
Kind | v0.27.0 | 模拟GPU集群资源 |
资源:
| GPU | 数量 | 备注 |
|---|---|---|
NVIDIA-GeForce-RTX-4090 | 8张 | 模拟 |
相关配置
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