Я не понимаю, зачем вы пишете такое правило:
каждый идентификатор устройства должен быть меньше 4
Если вы хотите ограничить количество графических процессоров вы должны использовать limits
и requests
, что хорошо объясняется в Schedule GPUs . Таким образом, вы можете просто ограничить ресурс только четырьмя графическими процессорами, например:
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
Если у вас разные типы графических процессоров на разных узлах, вы можете использовать labels
, который вы можете прочитать здесь Кластеры, содержащие разные типы графических процессоров .
# Label your nodes with the accelerator type they have.
kubectl label nodes <node-with-k80> accelerator=nvidia-tesla-k80
kubectl label nodes <node-with-p100> accelerator=nvidia-tesla-p100
Если на ваших узлах работают разные версии графических процессоров, используйте метки узлов и селекторы узлов, чтобы запланировать модули для соответствующих графических процессоров. Ниже приведена иллюстрация этого рабочего процесса:
В рамках начальной загрузки узла определите тип оборудования графического процессора на ваших узлах и предоставьте его как метку узла.
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
Укажите типы графического процессора модуль можно использовать с помощью правил сопоставления узлов.
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
Это гарантирует, что модуль будет назначен узлу с Tesla K80 или Tesla P100 Nvidia GPU.
Вы можете найти другую соответствующую информацию на unofficial-kubernetes Scheduling gpus .