使用 Kueue 管理 Ascend NPU 配额
本页介绍如何使用 Alauda Build of Kueue 来管理由 Ascend Device Plugin(作为 NPU Operator 的一部分随附)暴露的 Ascend NPU 资源配额。Kueue 将 huawei.com/Ascend910 及类似的 device-plugin 资源视为普通的可计数资源,因此适用于 CPU、内存和 Nvidia GPU 的同一 ClusterQueue / ResourceFlavor / LocalQueue 模型可以不加修改地应用于此场景。
前提条件
- 你已安装
Alauda Build of Kueuecluster plugin。 - 你已安装
Alauda Build of NPU Operatorcluster plugin,并在部署表单中启用了 Driver、Ascend Device Plugin 和 Ascend Docker Runtime 组件(默认情况下它们是启用的)。这三个开关会让集群将huawei.com/Ascend910(或huawei.com/Ascend310P)暴露为 Ascend 节点上的可调度扩展资源。有关完整操作步骤以及每个部署表单开关的含义,请参见 安装 NPU Operator 。 - Ascend Device Plugin 正在报告节点上的 NPU 容量,例如
kubectl describe node <ascend-node>会在Capacity和Allocatable下同时显示huawei.com/Ascend910: <N>。 - Alauda Container Platform Web CLI 已与你的集群建立通信。
操作步骤
1. 确定 NPU 节点标签
ResourceFlavor 通过 spec.nodeLabels 选择配额适用的节点池。NPU Operator 会向其管理的每个节点添加以下标签——请选择最适合你集群的一个:
本页后续示例均使用 accelerator: huawei-Ascend910。
2. 创建 Kueue 对象
创建一个绑定到 NPU 节点池的 ResourceFlavor、一个声明 NPU 配额的 ClusterQueue,以及一个位于用户提交作业命名空间中的 LocalQueue。
nodeLabels:将该 flavor 限定到由 NPU Operator 标记为 Ascend 910 的节点。请替换为与你的集群匹配的标签(参见上表)。coveredResources:将 device-plugin 资源与 CPU 和内存一起列出,以便在准入决策中对三者一并计入。nominalQuota:该队列在任意时刻可分配的 NPU 卡总数。请将其设置为等于或低于该 flavor 所选节点上可分配 NPU 总数。
使用 kubectl apply -f <filename>.yaml 应用该清单。
3. 通过队列提交 NPU 作业
添加 kueue.x-k8s.io/queue-name 标签,并在容器 resources 块中请求 NPU。Kueue 内置的 batch/job 集成会以挂起状态创建 Job,并且仅在配额检查通过后才取消挂起。
queue-name标签:将 Job 路由到你上面创建的LocalQueue。suspend: true:这是必需的,这样 Kueue 才能在配额可用之前持有该 Job。Kueue 在准入时会将其重新设置为false。- NPU 请求:使用
huawei.com/Ascend910(或huawei.com/Ascend910B4等)以匹配 Ascend Device Plugin 在节点上报告的资源名称。request 和 limit 必须相等——这是一个扩展资源。
4. 观察准入情况
向一个 nominalQuota 为 2 的队列提交两个这样的 Job,每个 Job 请求 2 个 NPU。
第一个 Job 会被准入,作为一个 Pod 运行,并从 Ascend Device Plugin 获得 /dev/davinci* 设备和 ASCEND_VISIBLE_DEVICES;第二个 Job 会保持 Suspended,其 Workload 会报告配额不足:
查看被持有的 Workload 可以更明确地看到原因:
status.conditions 字段会报告配额不足:
当第一个 Job 完成或被删除后,Kueue 会自动准入被持有的 Workload,取消第二个 Job 的挂起状态,并由 Ascend Device Plugin 将释放出来的 NPU 设备分配给其 Pod。
注意事项
ClusterQueue中huawei.com/Ascend910的nominalQuota是独立于节点Allocatable强制执行的。如果Allocatable低于该配额(例如因为 device plugin 将某些芯片标记为不健康),已准入的 Pod 在 kube-scheduler 层仍可能处于Pending,并显示Insufficient huawei.com/Ascend910。请保持nominalQuota≤ 所选节点上Allocatable的总和。- 同样的模式也适用于 device plugin 暴露的其他 Ascend 资源名称(
huawei.com/Ascend910B4、huawei.com/Ascend310P,等等)。按需将它们添加到coveredResources和容器的resources块中。 - Kueue 的其他特性——fair sharing、cohorts、gang scheduling、preemption——无需额外配置即可与 NPU 资源配合使用。