Kueue 如何管理 AI 训练任务:队列、配额和 GPU 批处理运维
Kueue 是 Kubernetes 原生的作业排队和配额管理系统,适合 AI 训练、批处理和多租户 GPU 集群。本文解释 LocalQueue、ClusterQueue 和排障方法。
GPU 集群最容易出现的冲突,是每个团队都觉得自己的任务很急。训练任务、批处理任务、评测任务、数据处理任务同时提交,如果没有队列和配额,结果通常是:重要任务排不上、普通任务占满资源、管理员靠手工协调。
Kueue 是 Kubernetes 原生的作业排队和配额管理系统。官方文档描述它负责决定作业什么时候等待、什么时候允许启动、什么时候需要抢占。它不替代 kube-scheduler、cluster-autoscaler 或 Job 控制器,而是在作业进入实际运行前做准入控制。
Kueue 解决什么问题
Kueue 适合管理“会运行完成”的工作负载,例如:
- Kubernetes Job。
- JobSet。
- PyTorchJob、TFJob、MPIJob 等训练任务。
- RayJob、RayCluster。
- 其他批处理类工作负载。
它的核心目标不是把 Pod 调到哪个节点,而是决定“这个任务现在能不能开始占用配额”。
需要理解的对象
Kueue 常见对象包括:
LocalQueue:命名空间内用户提交任务的队列入口。ClusterQueue:集群级资源池和配额规则。ResourceFlavor:不同资源类型或节点池,例如 GPU A100、GPU H100、spot 节点。Workload:Kueue 用来表示任务准入状态的对象。
查看命令:
kubectl get localqueues -A
kubectl get clusterqueues
kubectl get resourceflavors
kubectl get workloads -A
如果一个 Job 没有启动,不要只看 Pod。Kueue 可能还没有准入它,所以 Pod 可能还没真正创建。
一个典型 Job 怎么进入队列
用户提交 Job 时,通常要指定队列标签:
metadata:
labels:
kueue.x-k8s.io/queue-name: user-queue
Kueue 会根据 LocalQueue 对应的 ClusterQueue,判断当前资源是否够、是否允许借用、是否需要等待或抢占。
对 GPU 集群来说,ClusterQueue 可以定义不同资源池。例如训练队列有固定 GPU 配额,实验队列可以借用空闲资源,但生产推理队列优先级更高。
运维排障思路
第一,确认任务是否进入队列:
kubectl get workloads -n <namespace>
kubectl describe workload <name> -n <namespace>
第二,确认队列和配额:
kubectl describe localqueue <queue> -n <namespace>
kubectl describe clusterqueue <clusterqueue>
第三,确认资源请求是否准确。Kueue 会使用资源 requests,如果用户只写 limits,也可能被当成 requests 处理。
第四,确认是否出现抢占、借用或 partial admission。部分准入能让大任务在资源不足时以较小并行度运行,但要业务能接受。
和 AI 平台有什么关系
AI 训练任务通常不是常驻服务,而是批处理任务。它们需要大量 GPU,但运行完就释放。Kueue 的价值在于把 GPU 从“先到先得”变成“有配额、有队列、有策略”的共享平台。
如果后续结合 HAMi、DRA、Volcano、Koordinator,就可以形成更完整的 AI 基础设施调度栈。
常见问题 FAQ
Kueue 会替代 Kubernetes scheduler 吗?
不会。Kueue 负责准入和队列,真正 Pod 到节点的调度仍由 kube-scheduler 等组件完成。
为什么 Job 提交后没有 Pod?
可能是 Kueue 还没有准入 Workload。先查 workloads,再查 Job 和 Pod。
Kueue 只适合 GPU 吗?
不是。CPU、内存、Pod 数、不同节点池都可以管理。GPU 只是 AI 场景里最典型的稀缺资源。
小团队需要 Kueue 吗?
如果只有一两个用户、少量任务,可以先不用。如果多团队共享 GPU,Kueue 的价值会快速体现。
参考资料
- Kueue Overview: https://kueue.sigs.k8s.io/docs/overview/
- Kueue Workload: https://kueue.sigs.k8s.io/docs/concepts/workload/
- Kueue ClusterQueue: https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/
