排程 GPU
Kubernetes v1.26 [stable]
Kubernetes 包含對管理叢集中不同節點之間 AMD 與 NVIDIA GPU(圖形處理單元)的**穩定**支援,使用裝置外掛程式。
本頁說明使用者如何使用 GPU,並概述實作中的一些限制。
使用裝置外掛程式
Kubernetes 實作裝置外掛程式,讓 Pod 存取特殊的硬體功能,例如 GPU。
身為管理員,您必須從對應的硬體供應商在節點上安裝 GPU 驅動程式,並從 GPU 供應商執行對應的裝置外掛程式。以下是一些供應商指示的連結
一旦您安裝外掛程式,您的叢集就會公開自訂可排程資源,例如 amd.com/gpu
或 nvidia.com/gpu
。
您可以從容器使用這些 GPU,方法是請求自訂 GPU 資源,就像您請求 cpu
或 memory
一樣。但是,在您如何指定自訂裝置的資源需求方面,有一些限制。
GPU 僅應在 limits
區段中指定,這表示
- 您可以指定 GPU
limits
而無需指定requests
,因為 Kubernetes 預設會將限制用作請求值。 - 您可以在
limits
和requests
中都指定 GPU,但這兩個值必須相等。 - 您無法在不指定
limits
的情況下指定 GPUrequests
。
以下是請求 GPU 的 Pod 的範例資訊清單
apiVersion: v1
kind: Pod
metadata:
name: example-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: example-vector-add
image: "registry.example/example-vector-add:v42"
resources:
limits:
gpu-vendor.example/example-gpu: 1 # requesting 1 GPU
使用不同類型的 GPU 管理叢集
如果叢集中不同的節點具有不同類型的 GPU,則您可以使用節點標籤與節點選擇器將 Pod 排程至適當的節點。
例如
# Label your nodes with the accelerator type they have.
kubectl label nodes node1 accelerator=example-gpu-x100
kubectl label nodes node2 accelerator=other-gpu-k915
該標籤金鑰 accelerator
僅為範例;如果您願意,可以使用不同的標籤金鑰。
自動節點標籤
身為管理員,您可以透過部署 Kubernetes 節點功能探索 (NFD),自動探索與標籤所有已啟用 GPU 的節點。NFD 偵測 Kubernetes 叢集中每個節點上可用的硬體功能。通常,NFD 設定為將這些功能公告為節點標籤,但 NFD 也可以新增擴充資源、註解與節點污點。NFD 與所有支援的版本的 Kubernetes 相容。依預設,NFD 會為偵測到的功能建立功能標籤。管理員可以利用 NFD 也將具有特定功能的節點加上污點,如此一來,只有請求這些功能的 Pod 才能排程在這些節點上。
您也需要適用於 NFD 的外掛程式,將適當的標籤新增至您的節點;這些可能是通用標籤,或者它們可能是供應商特定的。您的 GPU 供應商可能會為 NFD 提供協力廠商外掛程式;請查看其文件以取得更多詳細資訊。
apiVersion: v1
kind: Pod
metadata:
name: example-vector-add
spec:
restartPolicy: OnFailure
# You can use Kubernetes node affinity to schedule this Pod onto a node
# that provides the kind of GPU that its container needs in order to work
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "gpu.gpu-vendor.example/installed-memory"
operator: Gt # (greater than)
values: ["40535"]
- key: "feature.node.kubernetes.io/pci-10.present" # NFD Feature label
values: ["true"] # (optional) only schedule on nodes with PCI device 10
containers:
- name: example-vector-add
image: "registry.example/example-vector-add:v42"
resources:
limits:
gpu-vendor.example/example-gpu: 1 # requesting 1 GPU
GPU 供應商實作
本頁上的項目參考協力廠商產品或專案,這些產品或專案提供 Kubernetes 所需的功能。Kubernetes 專案作者不對這些協力廠商產品或專案負責。請參閱 CNCF 網站指南以取得更多詳細資訊。
在提出新增額外協力廠商連結的變更之前,您應閱讀內容指南。