跳至内容

GPU 支持

kOps 管理的设备驱动程序

引入
kOps 1.22

kOps 可以安装 nvidia 设备驱动程序、插件和运行时,以及配置 containerd 以使用运行时。

kOps 还将安装一个 RuntimeClass `nvidia`。由于 nvidia 运行时不是默认运行时,因此您需要在任何要用于 GPU 工作负载的 Pod 规范中添加 `runtimeClassName: nvidia`。RuntimeClass 还配置了在 GPU 节点上运行的适当节点选择器和容忍度。

kOps 将添加 `kops.k8s.io/gpu="1"` 作为节点选择器,以及以下污染

  taints:
  - effect: NoSchedule
    key: nvidia.com/gpu

污染将阻止您意外地将工作负载调度到 GPU 节点。

您可以通过在集群规范中添加以下内容来启用 nvidia

  containerd:
    nvidiaGPU:
      enabled: true

创建具有 GPU nodeN 的实例组

由于 GPU 实例的成本,您需要最大限度地减少在它们上运行的 Pod 数量。因此,首先按照 入门文档 配置一个常规集群。

集群运行后,添加一个具有 GPU 的实例组

apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
  labels:
    kops.k8s.io/cluster: <cluster name>
  name: gpu-nodes
spec:
  image: 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20200907
  nodeLabels:
    kops.k8s.io/instancegroup: gpu-nodes
  machineType: g4dn.xlarge
  maxSize: 1
  minSize: 1
  role: Node
  subnets:
  - eu-central-1c

OpenStack 中的 GPU

OpenStack 不支持在集群级别启用 containerd 配置。它需要在实例组中完成

apiVersion: kops.k8s.io/v1alpha2
kind: InstanceGroup
metadata:
  labels:
    kops.k8s.io/cluster: <cluster name>
  name: gpu-nodes
spec:
  image: 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20200907
  nodeLabels:
    kops.k8s.io/instancegroup: gpu-nodes
  machineType: g4dn.xlarge
  maxSize: 1
  minSize: 1
  role: Node
  subnets:
  - eu-central-1c
  containerd:
    nvidiaGPU:
      enabled: true

验证 GPU

  1. 新的 GPU 节点启动后,您应该在 `kubectl get nodes` 中看到它们
  2. 节点应该具有 `kops.k8s.io/gpu` 标签和 `nvidia.com/gpu:NoSchedule` 污染
  3. `kube-system` 命名空间应该提供到 GPU 节点(s) 的 nvidia-device-plugin-daemonset pod
  4. 如果您在 `kubectl describe node` 中看到 `nvidia.com/gpu`一切应该正常工作。
Capacity:
  cpu:                4
  ephemeral-storage:  9983232Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             32796292Ki
  nvidia.com/gpu:     1 <- this one
  pods:               110