排程 GPU

設定與排程 GPU,以作為叢集中節點的資源使用。
功能狀態: Kubernetes v1.26 [stable]

Kubernetes 包含對管理叢集中不同節點之間 AMD 與 NVIDIA GPU(圖形處理單元)的**穩定**支援,使用裝置外掛程式

本頁說明使用者如何使用 GPU,並概述實作中的一些限制。

使用裝置外掛程式

Kubernetes 實作裝置外掛程式,讓 Pod 存取特殊的硬體功能,例如 GPU。

身為管理員,您必須從對應的硬體供應商在節點上安裝 GPU 驅動程式,並從 GPU 供應商執行對應的裝置外掛程式。以下是一些供應商指示的連結

一旦您安裝外掛程式,您的叢集就會公開自訂可排程資源,例如 amd.com/gpunvidia.com/gpu

您可以從容器使用這些 GPU,方法是請求自訂 GPU 資源,就像您請求 cpumemory 一樣。但是,在您如何指定自訂裝置的資源需求方面,有一些限制。

GPU 僅應在 limits 區段中指定,這表示

  • 您可以指定 GPU limits 而無需指定 requests,因為 Kubernetes 預設會將限制用作請求值。
  • 您可以在 limitsrequests 中都指定 GPU,但這兩個值必須相等。
  • 您無法在不指定 limits 的情況下指定 GPU requests

以下是請求 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 網站指南以取得更多詳細資訊。

在提出新增額外協力廠商連結的變更之前,您應閱讀內容指南

上次修改時間:2024 年 9 月 20 日下午 8:33 PST: 更新 AMD GPU 裝置外掛程式的連結 (8f2d5571cc)