首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使k8s按照特定规则分配gpu/npu设备

如何使k8s按照特定规则分配gpu/npu设备
EN

Stack Overflow用户
提问于 2020-05-27 15:29:04
回答 1查看 1.1K关注 0票数 6

我在一台机器中有多个gpu卡,我需要让k8s按照我设置的一些规则分配gpu/npus设备。

例如,假设有8个gpu卡的id为0-7,并且只有device7 0、device7 1、device7 6和、设备可用。现在我需要用两个设备创建一个吊舱,这两个设备必须是(device0,device1)或(device6,device7)。其他设备组合(如(device0、device6) )无效。

有什么办法吗?我正在使用版本1.18的kubernetes,并实现了我自己的设备插件。

EN

回答 1

Stack Overflow用户

发布于 2020-05-28 13:40:46

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

每个设备id都小于4。

如果您想限制GPU的数量,您应该使用limitsrequests,这在调度GPU上得到了很好的解释。因此,您只需将资源限制为4个GPU,如下所示:

代码语言:javascript
复制
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硬件类型,并将其公开为节点标签。

代码语言:javascript
复制
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类型。

代码语言:javascript
复制
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上找到其他相关信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62046871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档