GPU

本頁面說明如何在 Google Kubernetes Engine 叢集的節點中使用 NVIDIA® 圖形處理器 (GPU) 硬體加速器。

總覽

透過 GKE,您可以透過搭載 NVIDIA Tesla® K80P100P4V100T4 的 GPU 來建立節點集區。GPU 提供的運算能力可驅動深度學習工作,如影像辨識、自然語言處理,以及其他須耗用大量運算資源的工作,如影片轉碼和影像處理。

如果您的工作負載能夠容忍節點經常發生中斷的情形,也可以將 GPU 搭配先佔 VM 一起使用。使用先佔 VM 可降低執行 GPU 的費用。詳情請參閱先佔執行個體上的 GPU

需求條件

GKE 上的 GPU 必須符合下列條件:

Kubernetes 版本
對於使用 Container-Optimized OS 節點映像檔的節點集區,GPU 節點可在GKE 1.9 或更高版本中使用。若為使用 Ubuntu 節點映像檔的節點集區,則在 GKE 版本 1.11.3 或更高版本中可使用 GPU 節點。
GPU 配額

您的所需區域中必須要有 Compute Engine GPU 配額,才能建立 GPU 節點。如要確保您在專案中擁有足夠的 GPU 配額,請參閱 Google Cloud Platform 主控台的「Quotas」(配額) 頁面。

如果您需要額外的 GPU 配額,必須在 GCP 主控台中要求 GPU 配額。如果您已建立帳單帳戶,提交配額要求後,專案應會自動獲得配額。

NVIDIA GPU 驅動程式

您必須在節點上手動安裝 NVIDIA GPU 驅動程式。本頁面說明如何安裝驅動程式

限制

在 GKE 上使用 GPU 時,請注意下列限制:

  • 無法將 GPU 新增至現有的節點集區。
  • 無法在維護事件期間即時遷移 GPU 節點。

適用資格

GPU 僅於特定地區和區域提供。當您要求 GPU 配額時,請考量要執行叢集的地區。

如需適用地區和區域的完整清單,請參閱 Compute Engine 上的 GPU

您也可以使用 gcloud 指令列工具查看區域中的可用 GPU。

gcloud

如要查看每個區域支援的所有 GPU 加速器類型清單,請執行下列指令:

gcloud compute accelerator-types list

定價

如需 GPU 定價資訊,請參考 GCP GPU 頁面的定價表

GPU 配額

GPU 配額是指可在 GCP 專案中執行的 GPU 總數。如要建立具有 GPU 的叢集,您的專案必須擁有足夠的 GPU 配額。

您的 GPU 配額至少應與您要在叢集中執行的 GPU 總數相同。如果您啟用了叢集自動調度資源功能,則要求的 GPU 配額至少要等於叢集的節點數上限乘以每個節點的 GPU 數量。

舉例來說,如果您建立的叢集中有三個節點,每個節點執行兩個 GPU,則您的專案需要至少六個 GPU 配額。

要求 GPU 配額

您可以使用 GCP 主控台要求 GPU 配額。

主控台

請執行下列步驟:

  1. 造訪 GCP 主控台的 Cloud IAM「Quotas」(配額) 選單。

    造訪「Quotas」(配額) 選單

  2. 在 [Metrics] (指標) 下拉式選單中,按一下 [None] (無),接著在搜尋欄位中輸入「gpus」。

  3. 從搜尋結果中選取需要的 GPU:

    「Metrics」(指標) 下拉式選單的螢幕擷取畫面,顯示選取的 GPU 指標。

  4. 關閉 [Metrics] (指標) 下拉式選單。

提交配額要求

主控台

請執行下列步驟:

  1. 從 GPU 配額清單中,選取所需地區的配額 (例如 us-central1)。
  2. 按一下 [Edit Quotas] (編輯配額)。申請表單會隨即在 GCP 主控台右側開啟。
  3. 填寫每個配額要求的 [New quota limit] (新增配額限制) 欄位。
  4. 在 [Request description] (要求說明) 欄位中填入要求的詳細資料。
  5. 按一下 [Done] (完成)
  6. 按一下 [Submit request] (提交要求)

執行 GPU

下列各節說明如何在 GKE 叢集中執行 GPU。

建立自動調度 GPU 資源的節點集區

為了在 GKE 上充分發揮 GPU 最佳、最具成本效益的優勢,並善用叢集自動調度資源功能,我們建議您在叢集中建立獨立的 GPU 節點集區。

將 GPU 節點集區新增至現有執行非 GPU 節點集區的叢集時,GKE 會自動使用下列節點 taint 來設定 GPU 節點 taint

  • 金鑰:nvidia.com/gpu
  • 效果:NoSchedule

此外,GKE 會執行 ExtendedResourceToleration 許可控制器,自動將對應的容許條件套用至要求 GPU 的 Pod。

這樣一來,只有要求 GPU 的 Pod 才能在 GPU 節點上進行排程,進而提高自動調度資源的效率:如果要求 GPU 的 Pod 數不足,GPU 節點可快速縮減。

您可以使用 GCP 主控台或 gcloud 指令列工具,在現有叢集中建立 GPU 節點集區。

gcloud

如要建立具有 GPU 的節點集區,請執行下列指令:

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

其中:

  • [POOL_NAME] 是您為節點集區選擇的名稱。
  • [GPU_TYPE] 為 GPU 的類型,可為 nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100nvidia-tesla-t4
  • [AMOUNT] 是要附加至節點集區中節點的 GPU 數量。
  • [COMPUTE_ZONE] 是要建立節點集區的運算區域,例如 us-central1-c。叢集必須已在指定區域中執行。
  • [CLUSTER_NAME] 是要建立節點集區的叢集名稱。
  • --num-nodes 指定要建立的節點初始數量。
  • --min-nodes 指定在任何指定時間執行的節點數量下限。
  • --max-nodes 指定可執行的節點數量上限。
  • --enable-autoscaling 可在工作負載要求變更時,允許節點集區自動調度資源。

舉例來說,下列指令會在叢集 p100-cluster 中建立可自動調度資源的節點集區 p100,並包含兩個 P100 GPU:

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

主控台

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 選取需要的叢集。

  3. 按一下 [Edit] (編輯)

  4. 在 [Node pools] (節點集區) 中,按一下 [Add node pool] (新增節點集區)

  5. (選用) 在 [Autoscaling] (自動調度資源) 下拉式選單中,按一下 [On] (開啟)

  6. 視需要設定您的節點集區。接著,在「Machine type」(機器類型) 中按一下 [Customize] (自訂)

  7. 從「Number of GPUs」(GPU 數量) 下拉式選單中,選取每個節點要執行的 GPU 數量。

  8. 從「GPU type」(GPU 類型) 下拉式選單中,選取需要的 GPU 類型。

  9. 選取「I understand the limitations」(我瞭解上述限制) 核取方塊以確認警告訊息。

  10. 按一下 [Save] (儲存)

建立具有 GPU 的新區域叢集

您可以使用 GCP 主控台或 gcloud 指令列工具來建立執行 GPU 的區域叢集。

gcloud

如要建立在預設節點集區中執行 GPU 的區域叢集,請執行下列指令:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

其中:

  • [CLUSTER_NAME]:您針對叢集選擇的名稱
  • [GPU_TYPE] 為 GPU 的類型,可為 nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100nvidia-tesla-t4
  • [AMOUNT] 是要在預設節點集區中執行的 GPU 數量。
  • [COMPUTE_ZONE] 是叢集的運算區域,例如 us-central1-c

例如,下列指令會建立叢集 p100,其中包含三個節點 (這是省略 --num-nodes 時的預設值),每個節點有兩個 P100 GPU:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

主控台

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下 [Create cluster] (建立叢集)。

  3. 選擇 [GPU Accelerated Computing] (GPU 加快運算) 叢集範本

  4. 視需要設定您的叢集,接著自訂 GPU 節點集區或新增其他 GPU 節點集區。

  5. 選取「I understand the limitations」(我瞭解上述限制) 以確認警告訊息。

  6. 按一下 [Create] (建立)

建立具有 GPU 的新地區叢集

根據預設,地區叢集會在單一地區的三個區域中建立節點。但在這三個區域中,所有 GCP 地區都不具有 GPU。建立具有 GPU 的地區叢集時,您必須手動指定提供 GPU 的區域。如要瞭解哪些區域具有 GPU,請參閱可用性

您可以使用 gcloud 指令列工具來建立地區 GPU 叢集。

gcloud

如要建立具有 GPU 的地區叢集,請執行下列指令:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

其中:

  • [CLUSTER_NAME]:您針對叢集選擇的名稱
  • [GPU_TYPE] 是 GPU 類型:nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100nvidia-tesla-t4
  • [AMOUNT] 是每個節點要執行的 GPU。
  • [REGION] 是叢集的地區,例如 us-central1
  • [ZONE] 是地區中的運算區域,例如 us-central1-c。區域必須具有您指定的 GPU 類型。

例如,下列指令會在 us-central1 的兩個區域中建立叢集 p100,其中包含三個節點 (這是省略 --num-nodes 時的預設值),每個節點具有兩個 P100 GPU:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

主控台

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下 [Create cluster] (建立叢集)

  3. 選擇 [GPU Accelerated Computing] (GPU 加快運算) 叢集範本

  4. 從 [Location type] (位置類型) 中,選擇 [Regional] (地區)。從 [Regional] (地區) 中選取所需地區。

  5. 視需要設定您的叢集,接著自訂 GPU 節點集區或新增其他 GPU 節點集區。

  6. 選取「I understand the limitations」(我瞭解上述限制) 以確認警告訊息。

  7. 按一下 [Create] (建立)

安裝 NVIDIA GPU 裝置驅動程式

將 GPU 節點加入叢集後,您必須將 NVIDIA 的裝置驅動程式安裝至節點。Google 提供的 DaemonSet 可自動為您安裝驅動程式。

有關 Container-Optimized OS (COS) 和 Ubuntu 節點的安裝說明,請參閱以下部分。

COS

如要部署 DaemonSet 安裝作業,請執行下列指令:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/nvidia-driver-installer/cos/daemonset-preloaded.yaml

安裝工作需要幾分鐘才會完成。安裝完成後,NVIDIA GPU 裝置外掛程式會透過 Kubernetes API 顯示 NVIDIA GPU 運算容量。

Ubuntu

請注意,若使用 Ubuntu 節點,則 GPU 支援需要 v1.11.3 或更高版本。

如要部署 DaemonSet 安裝作業,請執行下列指令:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

安裝工作需要幾分鐘才會完成。安裝完成後,NVIDIA GPU 裝置外掛程式會透過 Kubernetes API 顯示 NVIDIA GPU 運算容量。

設定 Pod 以使用 GPU

您可以使用資源限制來設定 Pod 以使用 GPU。您可以使用下列鍵/值組合在 Pod 規格中指定資源限制

  • 鍵:nvidia/gpu
  • 值:要使用的 GPU 數量

下列是使用 GPU 的 Pod 規格範例:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2

使用多種 GPU 類型

如果您要每個叢集都使用多個 GPU 加速器類型,則必須建立多個節點集區,讓每個節點集區都有自己的加速器類型。GKE 會將專屬的叢集選取器附加至 GPU 節點,以將 GPU 工作負載放置到具有特定 GPU 類型的節點上:

  • 鍵:cloud.google.com/gke-accelerator
  • 值:nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100nvidia-tesla-t4

將這個節點選取器新增至工作負載的 Pod 規格後,您可以指定特定的 GPU 類型。例如:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-p100 or nvidia-tesla-p4 or nvidia-tesla-v100 or nvidia-tesla-t4

CUDA 程式庫簡介

CUDA® 是 NVIDIA 針對 GPU 提供的平行運算平台和程式設計模型。您在叢集中安裝的 NVIDIA 裝置驅動程式包含 CUDA 程式庫

CUDA 程式庫和偵錯公用程式可分別在 /usr/local/nvidia/lib64/usr/local/nvidia/bin 中的容器內使用。

在使用 NVIDIA GPU 的 Pod 中執行的 CUDA 應用程式要能動態探索 CUDA 程式庫。這個做法需要在 LD_LIBRARY_PATH 環境變數中納入 /usr/local/nvidia/lib64

針對 GKE 中的 CUDA 應用程式,您應使用以 Ubuntu 為基礎的 CUDA Docker 基本映像檔,並已適當設定 LD_LIBRARY_PATH。最新支援的 CUDA 版本為 9.0

監控 GPU 節點

GKE 會針對使用 GPU 的容器顯示下列 Stackdriver Monitoring 指標。您可以使用這些指標監控 GPU 工作負載的效能:

  • 任務週期 (container/accelerator/duty_cycle):在加速器主動處理期間,過去取樣期間 (10 秒) 的時間百分比。值介於 1 到 100 之間。
  • 記憶體用量 (container/accelerator/memory_used):分配的加速器記憶體量,以位元組為單位。
  • 記憶體容量 (container/accelerator/memory_total):加速器記憶體總量,以位元組為單位。

您可以在 Stackdriver 中取得這些指標。

如要進一步瞭解如何監控叢集及叢集資源,請參閱 Monitoring 一文。

查看用量指標

您可以前往 GCP 主控台的 Workloads (工作負載) 資訊主頁,查看工作負載的 GPU 用量指標。

主控台

如要查看工作負載的 GPU 用量,請執行下列步驟:

  1. 造訪 GCP 主控台的「Workloads」(工作負載) 選單。

    造訪 Google Kubernetes Engine 選單

  2. 選取需要的工作負載。

「Workloads」(工作負載) 資訊主頁會顯示 GPU 記憶體用量和容量的圖表,以及 GPU 任務週期。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件