使用 HAMi
此页面演示了如何将 Kueue 与 HAMi(异构 AI 计算虚拟化中间件)结合使用, 以进行 vGPU 资源管理的工作负载运行。
当通过 HAMi 使用 vGPU 资源时,Pod 会请求每个 vGPU
的资源(nvidia.com/gpumem、nvidia.com/gpucores)以及
vGPU 的数量(nvidia.com/gpu)。对于配额管理,你需要跟踪所有 vGPU 实例的总资源消耗。
下面我们将演示如何在 Kueue 中使用用于配额管理的资源转换来支持这一点。
本指南适用于对 Kueue 有基本了解的批处理用户。 有关更多信息,请参阅 Kueue 概述。
在你开始之前
Deployment集成默认启用。请按照使用自定义配置的安装说明配置带有 ResourceTransformation 的 Kueue。
确保你的集群已安装 HAMi 并拥有可用的 vGPU 资源。 HAMi 通过诸如
nvidia.com/gpu、nvidia.com/gpucores和nvidia.com/gpumem等资源提供 vGPU 资源管理。
将 HAMi 与 Kueue 结合使用
在 Kueue 上运行请求 vGPU 资源的 Pod 时,请考虑以下方面:
a. 配置 ResourceTransformation
配置 Kueue 使用 ResourceTransformation 自动计算总的 vGPU 资源:
apiVersion: config.kueue.x-k8s.io/v1beta2
kind: Configuration
resources:
transformations:
- input: nvidia.com/gpucores
strategy: Replace
multiplyBy: nvidia.com/gpu
outputs:
nvidia.com/total-gpucores: "1"
- input: nvidia.com/gpumem
strategy: Replace
multiplyBy: nvidia.com/gpu
outputs:
nvidia.com/total-gpumem: "1"
此配置告诉 Kueue 将每个 vGPU 资源值乘以 vGPU 实例的数量。
例如,如果一个 Pod 请求 nvidia.com/gpu: 2 和 nvidia.com/gpumem: 1024,
Kueue 将计算 nvidia.com/total-gpumem: 2048(1024 × 2)。
b. 配置 ClusterQueue
配置你的 ClusterQueue 以跟踪 vGPU 实例计数和总资源:
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: vgpu-cluster-queue
spec:
resourceGroups:
- coveredResources: ["nvidia.com/gpu", "nvidia.com/total-gpucores", "nvidia.com/total-gpumem"]
flavors:
- name: default-flavor
resources:
- name: nvidia.com/gpu
nominalQuota: 50
- name: nvidia.com/total-gpucores
nominalQuota: 1000
- name: nvidia.com/total-gpumem
nominalQuota: 10240
c. 队列选择
目标 本地队列 应当在 Pod
配置的 metadata.labels 部分指定。
metadata:
labels:
kueue.x-k8s.io/queue-name: vgpu-queue
d. 配置资源需求
工作负载的资源需求可以在 spec.containers 部分配置:
resources:
limits:
nvidia.com/gpu: "2" # vGPU 数量
nvidia.com/gpucores: "20" # 每个 vGPU 的核心数
nvidia.com/gpumem: "1024" # 每个 vGPU 的内存(MiB)
Kueue 会自动将这些转换为总资源:
nvidia.com/total-gpucores: 40(20 核心 × 2 vGPU)nvidia.com/total-gpumem: 2048(1024 MiB × 2 vGPU)
示例
这是一个示例:
apiVersion: kueue.x-k8s.io/v1beta2
kind: ResourceFlavor
metadata:
name: hami-flavor
spec:
nodeLabels:
gpu: "on"
---
apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
name: hami-queue
spec:
namespaceSelector: {}
resourceGroups:
- coveredResources:
- nvidia.com/gpu
- nvidia.com/total-gpucores
- nvidia.com/total-gpumem
flavors:
- name: hami-flavor
resources:
- name: nvidia.com/gpu
nominalQuota: 20
- name: nvidia.com/total-gpucores
nominalQuota: 600
- name: nvidia.com/total-gpumem
nominalQuota: 20480
---
apiVersion: v1
kind: Namespace
metadata:
name: kueue-test
---
apiVersion: kueue.x-k8s.io/v1beta2
kind: LocalQueue
metadata:
name: user-queue
namespace: kueue-test
spec:
clusterQueue: "hami-queue"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-burn
namespace: kueue-test
labels:
kueue.x-k8s.io/queue-name: user-queue
spec:
replicas: 1
selector:
matchLabels:
app-name: gpu-burn
template:
metadata:
labels:
app-name: gpu-burn
spec:
containers:
- args:
- while :; do /app/gpu_burn 300 || true; sleep 300; done
command:
- /bin/sh
- -lc
image: oguzpastirmaci/gpu-burn:latest
imagePullPolicy: IfNotPresent
name: main
resources:
limits:
nvidia.com/gpu: "2" # requesting 2 vGPU instances
nvidia.com/gpucores: "30" # 30 cores per vGPU
nvidia.com/gpumem: "1024" # 1024 MiB per vGPU
你可以使用以下命令创建 vGPU Deployment:
kubectl create -f https://kueue.sigs.k8s.io/examples/serving-workloads/sample-hami.yaml
要检查 ClusterQueue 中的资源使用情况,查看 status.flavorsReservation 字段:
kubectl get clusterqueue hami-queue -o yaml
status.flavorsReservation 显示了 nvidia.com/total-gpucores
和 nvidia.com/total-gpumem 的当前资源消耗:
status:
flavorsReservation:
- name: hami-flavor
resources:
- name: nvidia.com/total-gpucores
total: "60" # 当前使用情况 (30 cores × 2 vGPUs)
- name: nvidia.com/total-gpumem
total: "2048" # 当前使用情况 (1024 MiB × 2 vGPUs)
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.