我在一台机器中有多个gpu卡,我需要让k8s按照我设置的一些规则分配gpu/npus设备。
例如,假设有8个gpu卡的id为0-7,并且只有device7 0、device7 1、device7 6和、设备可用。现在我需要用两个设备创建一个吊舱,这两个设备必须是(device0,device1)或(device6,device7)。其他设备组合(如(device0、device6) )无效。
有什么办法吗?我正在使用版本1.18的kubernetes,并实现了我自己的设备插件。
发布于 2020-05-28 13:40:46
我不明白你为什么要写这样的规则:
每个设备id都小于4。
如果您想限制GPU的数量,您应该使用limits和requests,这在调度GPU上得到了很好的解释。因此,您只需将资源限制为4个GPU,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: cuda-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
# https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 4 # requesting 1 GPU如果您在不同的节点上有不同类型的GPU,您可以使用labels,您可以在这里阅读包含不同类型GPU的集群。
将节点标记为它们所具有的加速器类型。kubectl标签节点加速器=nvidia-tesla-k80 kubectl标签节点加速器=nvidia-tesla-p 100
如果您的节点正在运行不同版本的GPU,则使用Node标签和节点选择器将吊舱调度到相应的GPU。以下是此工作流的说明:
作为节点引导的一部分,标识节点上的GPU硬件类型,并将其公开为节点标签。
NVIDIA_GPU_NAME=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader --id=0)
source /etc/default/kubelet
KUBELET_OPTS="$KUBELET_OPTS --node-labels='alpha.kubernetes.io/nvidia-gpu-name=$NVIDIA_GPU_NAME'"
echo "KUBELET_OPTS=$KUBELET_OPTS" > /etc/default/kubelet指定结荚可以通过节点亲和规则使用的GPU类型。
kind: pod
apiVersion: v1
metadata:
annotations:
scheduler.alpha.kubernetes.io/affinity: >
{
"nodeAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "alpha.kubernetes.io/nvidia-gpu-name",
"operator": "In",
"values": ["Tesla K80", "Tesla P100"]
}
]
}
]
}
}
}
spec:
containers:
-
name: gpu-container-1
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 2这将确保吊舱将被安排到一个有特斯拉K80或特斯拉P100 Nvidia GPU的节点上。
您可以在非官方的-kubernetes调度gpus上找到其他相关信息。
https://stackoverflow.com/questions/62046871
复制相似问题