使用队列
概述
队列是 T9k 平台中资源管理的机制,用于补充 K8s 原生平台在 scheduling 方面的不足。管理员可以为队列设定使用权限,资源来源的集群节点,资源配额,最大运行时长等属性,以精细化管理集群。
用户在创建使用调度器 T9k Scheduler 的工作负载时,需为工作负载指定一个队列。
为工作负载指定队列
根据工作负载的种类,指定队列的方式如下。
v1/Pod
创建 Pod 时,有两种指定所属队列的方式:
- 直接指定队列:此类 Pod 不属于任何 PodGroup。
- 通过 PodGroup 间接指定队列:此类 Pod 属于所指定的 PodGroup。
直接指定队列
Pod 通过标签来表明他属于哪一个队列,标签的 key 是 scheduler.tensorstack.dev/queue
。
在下面的示例中,Pod 指定了队列 demo:
apiVersion: v1
kind: Pod
metadata:
name: test1
labels:
scheduler.tensorstack.dev/queue: demo
spec:
schedulerName: t9k-scheduler
containers:
- image: nginx:latest
name: test
resources:
requests:
cpu: 1
memory: 200Mi
通过 PodGroup 指定队列
如果 Pod 属于某个 PodGroup,那么 PodGroup 指定的队列就是这个 Pod 所属的队列。
Pod 如何指定 PodGroup 请参考 使用 PodGroup
T9k Jobs
T9k Job 包括 TensorFlowTrainingJob、PyTorchTrainingJob、XGBoostTrainingJob、GenericJob、MPIJob、ColossalAIJob、DeepSpeedJob 和 BeamJob,这些 Job 中都有相同的 spec.scheduler
字段。
创建 T9k Job 时,用户可以通过设置 spec.scheduler
字段来表明使用 T9k scheduler,并指定 Job 使用哪个队列。
在下面的示例中:spec.scheduler.t9kScheduler.queue
字段表明 Job 使用的队列是 demo,GenericJob 控制器会自动创建使用队列 demo 的 PodGroup 和 Pod。
apiVersion: batch.tensorstack.dev/v1beta1
kind: GenericJob
metadata:
name: job-sample
spec:
scheduler:
t9kScheduler:
queue: demo
priority: 10
replicaSpecs:
- type: worker
replicas: 4
...
- type: ps
replicas: 1
...
T9k PodGroup
创建 PodGroup 时,通过 spec.queue
字段来表明 PodGroup 所使用的队列。
在下面的示例中,PodGroup 表明自己使用的队列是 demo:
apiVersion: scheduler.tensorstack.dev/v1beta1
kind: PodGroup
metadata:
name: test
spec:
minMember: 2
queue: demo
priority: 50
batch/v1/Job
与 v1/Pod 类似,创建 batch/v1 Job 使用队列时,需要通过设置 Pod 的标签来表明 Pod 所使用的队列。有两种设置 Pod 标签的方法:
- 直接指定队列:为 Pod 设置标签
scheduler.tensorstack.dev/queue:<queue-name>
表明 Pod 所使用的队列。 - 通过 PodGroup 间接指定队列:为 Pod 设置标签
scheduler.tensorstack.dev/group-name:<group-name>
表明 Pod 所属的 PodGroup,PodGroup 使用的队列就是 Pod 使用的队列。
在下面的示例中,Job 通过为 Pod 设置标签 scheduler.tensorstack.dev/queue:demo
来表明使用队列 demo。
apiVersion: batch/v1
kind: Job
metadata:
name: test
spec:
parallelism: 2
template:
metadata:
labels:
scheduler.tensorstack.dev/queue: demo
spec:
schedulerName: t9k-scheduler
containers:
- name: create
image: nginx:latest
command:
- sleep
- 10s
resources:
requests:
cpu: 1
memory: 100Mi
restartPolicy: Never