W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
特性狀態(tài): Kubernetes v1.10 [beta]
Kubernetes 支持對(duì)節(jié)點(diǎn)上的 AMD 和 NVIDIA GPU (圖形處理單元)進(jìn)行管理,目前處于實(shí)驗(yàn)狀態(tài)。
本頁(yè)介紹用戶如何在不同的 Kubernetes 版本中使用 GPU,以及當(dāng)前存在的一些限制。
Kubernetes 實(shí)現(xiàn)了設(shè)備插件(Device Plugins) 以允許 Pod 訪問(wèn)類似 GPU 這類特殊的硬件功能特性。
作為集群管理員,你要在節(jié)點(diǎn)上安裝來(lái)自對(duì)應(yīng)硬件廠商的 GPU 驅(qū)動(dòng)程序,并運(yùn)行 來(lái)自 GPU 廠商的對(duì)應(yīng)的設(shè)備插件。
當(dāng)以上條件滿足時(shí),Kubernetes 將暴露 ?amd.com/gpu
? 或 ?nvidia.com/gpu
? 為 可調(diào)度的資源。
你可以通過(guò)請(qǐng)求 ?<vendor>.com/gpu
? 資源來(lái)使用 GPU 設(shè)備,就像你為 CPU 和內(nèi)存所做的那樣。 不過(guò),使用 GPU 時(shí),在如何指定資源需求這個(gè)方面還是有一些限制的:
limits
?部分,這意味著:limits
?而不指定其 ?requests
?,Kubernetes 將使用限制 值作為默認(rèn)的請(qǐng)求值;limits
?和 ?requests
?,不過(guò)這兩個(gè)值必須相等。requests
?而不指定 ?limits
?。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: 1 # requesting 1 GPU
官方的 AMD GPU 設(shè)備插件 有以下要求:
如果你的集群已經(jīng)啟動(dòng)并且滿足上述要求的話,可以這樣部署 AMD 設(shè)備插件:
kubectl create -f https://raw.githubusercontent.com/RadeonOpenCompute/k8s-device-plugin/r1.10/k8s-ds-amdgpu-dp.yaml
你可以到 RadeonOpenCompute/k8s-device-plugin 項(xiàng)目報(bào)告有關(guān)此設(shè)備插件的問(wèn)題。
對(duì)于 NVIDIA GPUs,目前存在兩種設(shè)備插件的實(shí)現(xiàn):
官方的 NVIDIA GPU 設(shè)備插件 有以下要求:
如果你的集群已經(jīng)啟動(dòng)并且滿足上述要求的話,可以這樣部署 NVIDIA 設(shè)備插件:
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml
請(qǐng)到 NVIDIA/k8s-device-plugin項(xiàng)目報(bào)告有關(guān)此設(shè)備插件的問(wèn)題。
GCE 使用的 NVIDIA GPU 設(shè)備插件 并不要求使用 nvidia-docker,并且對(duì)于任何實(shí)現(xiàn)了 Kubernetes CRI 的容器運(yùn)行時(shí),都應(yīng)該能夠使用。這一實(shí)現(xiàn)已經(jīng)在 Container-Optimized OS 上進(jìn)行了測(cè)試,并且在 1.9 版本之后會(huì)有對(duì)于 Ubuntu 的實(shí)驗(yàn)性代碼。
你可以使用下面的命令來(lái)安裝 NVIDIA 驅(qū)動(dòng)以及設(shè)備插件:
# 在 COntainer-Optimized OS 上安裝 NVIDIA 驅(qū)動(dòng):
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/daemonset.yaml
# 在 Ubuntu 上安裝 NVIDIA 驅(qū)動(dòng) (實(shí)驗(yàn)性質(zhì)):
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/nvidia-driver-installer/ubuntu/daemonset.yaml
# 安裝設(shè)備插件:
kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.12/cluster/addons/device-plugins/nvidia-gpu/daemonset.yaml
請(qǐng)到 GoogleCloudPlatform/container-engine-accelerators 報(bào)告有關(guān)此設(shè)備插件以及安裝方法的問(wèn)題。
關(guān)于如何在 GKE 上使用 NVIDIA GPUs,Google 也提供自己的指令。
如果集群內(nèi)部的不同節(jié)點(diǎn)上有不同類型的 NVIDIA GPU,那么你可以使用 節(jié)點(diǎn)標(biāo)簽和節(jié)點(diǎn)選擇器 來(lái)將 pod 調(diào)度到合適的節(jié)點(diǎn)上。
例如:
# 為你的節(jié)點(diǎn)加上它們所擁有的加速器類型的標(biāo)簽
kubectl label nodes <node-with-k80> accelerator=nvidia-tesla-k80
kubectl label nodes <node-with-p100> accelerator=nvidia-tesla-p100
如果你在使用 AMD GPUs,你可以部署 Node Labeller, 它是一個(gè) 控制器, 會(huì)自動(dòng)給節(jié)點(diǎn)打上 GPU 屬性標(biāo)簽。目前支持的屬性:
示例:
kubectl describe node cluster-node-23
Name: cluster-node-23
Roles: <none>
Labels: beta.amd.com/gpu.cu-count.64=1
beta.amd.com/gpu.device-id.6860=1
beta.amd.com/gpu.family.AI=1
beta.amd.com/gpu.simd-count.256=1
beta.amd.com/gpu.vram.16G=1
beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=cluster-node-23
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
......
使用了 Node Labeller 的時(shí)候,你可以在 Pod 的規(guī)約中指定 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: 1
nodeSelector:
accelerator: nvidia-tesla-p100 # or nvidia-tesla-k80 etc.
這能夠保證 Pod 能夠被調(diào)度到你所指定類型的 GPU 的節(jié)點(diǎn)上去。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: