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 ¶
- 新的 GPU 节点启动后,您应该在 `kubectl get nodes` 中看到它们
- 节点应该具有 `kops.k8s.io/gpu` 标签和 `nvidia.com/gpu:NoSchedule` 污染
- `kube-system` 命名空间应该提供到 GPU 节点(s) 的 nvidia-device-plugin-daemonset pod
- 如果您在 `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