如何让k8s按照特定的规则分配gpunpu设备?

问题描述 投票:1回答:1

我在一台机器上有多块gpu卡,我需要让k8s按照我设定的规则分配gpunpus设备。

比如说,假设有8个gpu卡,id是0-7,只有device0、device1、device6和device7是可用的。现在我需要创建一个有2个设备的pod,这两个设备必须是(device0,device1)或(device6,device7)中的一个。其他的设备组合如(device0,device6)是无效的。

有什么方法可以做到吗? 我使用的是1.18版本的kubernetes,实现了自己的设备插件。

go kubernetes plugins gpu scheduling
1个回答
0
投票

我不明白你为什么要写这样的规则。

每个设备的id都要小于4

如果你想限制GPU的数量,你应该使用 limitsrequests 上有很好的解释。排程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的集群.

# 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

如果你的节点正在运行不同版本的 GPU,那么使用节点标签和节点选择器将 pod 排程到适当的 GPU。以下是这个工作流程的说明。

作为Node引导的一部分,确定节点上的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

通过 Node Affinity 规则指定 pod 可以使用的 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

这将确保pod将被调度到具有Tesla K80或Tesla P100 Nvidia GPU的节点上。

您可以在以下网站找到其他相关信息 非官方的-kubernetes 调度 gpus.

© www.soinside.com 2019 - 2024. All rights reserved.