使用 GPU 加速器來運行執行個體

本頁面說明如何在 Container-Optimized OS 虛擬機器 (VM) 執行個體中使用 NVIDIA 圖形處理器 (GPU) 硬體加速器。

總覽

您可以使用 Compute Engine 建立執行 Container-Optimized OS 的 VM 執行個體,並附加 GPU。在 Compute Engine 上執行 GPU 時,您只能使用兩個機器系列:加速器最佳化和 N1 一般用途。

GPU 提供的運算能力可驅動深度學習工作,如影像辨識和自然語言處理,以及其他須耗用大量運算資源的工作,如影片轉碼和影像處理。

Google Cloud 可讓您在 Container-Optimized OS VM 執行個體的容器中順暢執行 GPU 工作負載,進而享有安全性和可靠性等其他 Container-Optimized OS 功能。

如要進一步瞭解 GPU 的用途,請參閱「雲端 GPU」。

如要瞭解如何在 Google Kubernetes Engine (GKE) 中使用 GPU,請參閱「在 GKE 上執行 GPU」一文。

需求條件

在 Container-Optimized OS VM 執行個體上執行 GPU 時,必須符合下列條件:

  • Container-Optimized OS x86 映像檔:只有以 x86 為基礎的 Container-Optimized OS 映像檔支援 GPU 執行作業。Arm 架構的 Container-Optimized OS 映像檔不支援這項功能。

  • Container-Optimized OS 版本:如要在 Container-Optimized OS VM 執行個體上執行 GPU,Container-Optimized OS 版本里程碑必須是 LTS 里程碑,且里程碑編號必須為 85 以上。

  • GPU 配額:您必須在所選區域中擁有 Compute Engine GPU 配額,才能建立含 GPU 的 Container-Optimized OS VM 執行個體。如要確保您在專案中擁有足夠的 GPU 配額,請參閱 Google Cloud 主控台的「Quotas」(配額)

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

  • NVIDIA GPU 驅動程式:您必須自行在 Container-Optimized OS VM 執行個體上安裝 NVIDIA GPU 驅動程式。本章節說明如何在 Container-Optimized OS VM 執行個體上安裝驅動程式。

建立 VM

以下各節說明如何在 Container-Optimized OS VM 上執行 GPU。

首先,您需要具備 GPU 的 Container-Optimized OS VM 執行個體。建立 VM 的方式取決於所選的 GPU 型號。

您也可以新增 GPU,以便用於現有的 Container-Optimized OS VM 執行個體。

建立 VM 時,請務必從 cos-cloud 映像檔專案中選擇映像檔或映像檔系列。

如要檢查目前 Container-Optimized OS VM 執行個體所附加的所有 GPU,請執行下列指令:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

更改下列內容:

安裝 NVIDIA GPU 裝置驅動程式

建立具有一或多個 GPU 的執行個體之後,系統需有裝置驅動程式,應用程式才能存取該裝置。本指南將說明如何在 Container-Optimized OS VM 執行個體上安裝 NVIDIA 專屬驅動程式。

Container-Optimized OS 提供內建公用程式 cos-extensions,可簡化 NVIDIA 驅動程式安裝程序。執行公用程式即表示使用者同意接受 NVIDIA 授權協議。

找出 GPU 驅動程式版本

每個 Container-Optimized OS 映像檔版本都會列出每種 GPU 類型支援的 NVIDIA GPU 驅動程式版本,以及每種類型的預設驅動程式。如需支援版本的完整清單,請參閱主要 Container-Optimized OS LTS 里程碑的版本資訊

您也可以執行下列指令,查看 GPU 在 Container-Optimized OS VM 執行個體上支援的所有 GPU 驅動程式版本:

sudo cos-extensions list

找出所需的 CUDA Toolkit 版本

如果應用程式使用 CUDA,請在容器中安裝 NVIDIA 的 CUDA 工具包。每個 CUDA 版本都需要最低或更新版本的 GPU 驅動程式。如要查看您 CUDA 版本所需的最低 GPU 驅動程式版本,請參閱 CUDA Toolkit 和相容的驅動程式版本。請確認您使用的 Container-Optimized OS 版本,具有您所用 CUDA 版本的正確 GPU 驅動程式版本。

安裝驅動程式

您可以使用殼層指令、開機指令碼或 cloud-init 安裝 GPU。這三種方法都會使用 sudo cos-extensions install gpu 指令,為 Container-Optimized OS LTS 版本安裝預設 GPU 驅動程式。

Shell

連線至 Container-Optimized OS VM 執行個體後,您可以手動執行下列指令來安裝驅動程式:

sudo cos-extensions install gpu

開機指令碼

您也可以透過開機指令碼安裝 GPU 驅動程式。您可以在建立 VM 執行個體或將指令碼套用至執行中的 VM 執行個體提供啟動指令碼,然後重新啟動 VM。這樣一來,您就能在不連線至 VM 的情況下安裝驅動程式。這也能確保每次重新啟動 VM 時,都會設定 GPU 驅動程式。

以下是安裝驅動程式的開機指令碼範例:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

Cloud-init 與啟動指令碼類似,但功能更強大。以下範例說明如何透過 cloud-init 安裝 GPU 驅動程式:

#cloud-config

runcmd:
  - cos-extensions install gpu

您可以使用 cloud-init 指定依附元件,讓 GPU 應用程式只在安裝驅動程式後執行。詳情請參閱「端對端:在 Container-Optimized OS 上執行 GPU 應用程式」一節。

如要進一步瞭解如何在 Container-Optimized OS VM 執行個體上使用 cloud-init,請參閱「建立及設定執行個體」頁面。

在某些情況下,Container-Optimized OS 隨附的預設驅動程式無法滿足 CUDA 工具包或 GPU 型號的最低驅動程式需求。如要瞭解特定類型 GPU 的版本需求,請參閱「必要的 NVIDIA 驅動程式版本」。

如要安裝特定版本的 GPU 驅動程式,請執行下列指令:

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

請使用下列任一選項取代 DRIVER_VERSION

  • default:安裝 Container-Optimized OS 版本指定的預設驅動程式。這個版本修正了錯誤並提供安全性更新。
  • latest:安裝 Container-Optimized OS 版本提供的最新驅動程式。請注意,由於 COS 版本可能會進行重大版本更新,因此這可能會導致相容性變更。
  • 完整版本:針對對驅動程式變更敏感的工作負載,使用此選項將版本固定為特定版本。例如,指定版本 535.183.01
  • NVIDIA 驅動程式分支:在特定 NVIDIA 分支中安裝最新的穩定版驅動程式,以便隨時掌握該分支的安全性更新和錯誤修正。例如,指定分支 R535。這個選項適用於 cos-gpu-installer:v2.2.1 以上版本。

如要查看每個選項的可用版本,請執行指令來找出 GPU 驅動程式版本

預先載入驅動程式

即使未連接 GPU 裝置,您仍可在 Container-Optimized OS 執行個體上預先載入 GPU 驅動程式。這在連接實體 GPU 硬體前,準備環境或測試設定時非常實用。

如要預先載入 GPU 驅動程式,請執行下列指令:

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

cos-gpu-installer:v2.3.0 開始支援此指令。適用下列旗標:

  • -no-verify:會下載及準備驅動程式檔案,但略過核心模組載入和安裝驗證。

  • -target-gpu:指定 GPU 裝置,確保預先載入正確的驅動程式,避免日後連接 GPU 裝置時發生相容性問題。將 GPU_DEVICE 替換為「總覽」中列出的特定 GPU 型號 (例如 NVIDIA_L4)。如果未指定 -target-gpu,系統會預先載入預設的 GPU 驅動程式。

驗證安裝

您可以在 Container-Optimized OS VM 執行個體上執行下列指令,手動驗證 GPU 驅動程式的安裝作業。指令的輸出內容會顯示 GPU 裝置資訊,例如裝置狀態和驅動程式版本。

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

設定容器以使用 GPU

安裝 GPU 驅動程式後,您可以設定容器以便使用 GPU。以下範例說明如何在使用 /dev/nvidia0 的 Docker 容器中執行 CUDA 應用程式:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

您可以透過 cloud-init 執行容器,指定驅動程式安裝作業與容器之間的依附元件。請參閱「端對端:在 Container-Optimized OS 上執行 GPU 應用程式」一節,瞭解詳情。

端對端:在 Container-Optimized OS 上執行 GPU 應用程式

下列端對端範例說明如何使用 cloud-init 設定 Container-Optimized OS VM 執行個體,在安裝 GPU 驅動程式後,為 GPU 應用程式容器 myapp:latest 佈建:

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

關於 NVIDIA CUDA-X 程式庫

CUDA® 是 NVIDIA 針對 GPU 提供的平行運算平台和程式設計模型。如要使用 CUDA 應用程式,程式庫必須位於您使用的映像檔中。您可以執行下列任一操作來新增 NVIDIA CUDA-X 程式庫:

  • 使用已預先安裝 NVIDIA CUDA-X 程式庫的映像檔。舉例來說,您可以使用 Google 的深度學習容器。這些容器會預先安裝主要資料科學架構、NVIDIA CUDA-X 程式庫和工具。或者,NVIDIA 的 CUDA 映像檔只包含 NVIDIA CUDA-X 程式庫。

  • 建構並使用自己的映像檔。在這種情況下,請在 LD_LIBRARY_PATH 環境變數中納入 /usr/local/cuda-XX.X/lib64 (包含 NVIDIA CUDA-X 程式庫) 和 /usr/local/nvidia/lib64 (包含 NVIDIA 裝置驅動程式)。對於 /usr/local/cuda-XX.X/lib64,目錄名稱取決於您使用的映像檔版本。舉例來說,NVIDIA CUDA-X 程式庫和 Docker 容器中的偵錯公用程式,分別可位於 /usr/local/cuda-11.0/lib64/usr/local/nvidia/bin

安全性

就像 Container-Optimized OS 上的其他核心模組一樣,GPU 驅動程式會透過內建於 Container-Optimized OS 核心的金鑰,以加密方式簽署及驗證。與其他一些發布版本不同,Container-Optimized OS 不允許使用者註冊機器擁有者金鑰 (MOK),也無法使用金鑰簽署自訂核心模組。這麼做是為了確保 Container-Optimized OS 核心的完整性,並減少攻擊面。

限制

Container-Optimized OS 版本限制

只有 Container-Optimized OS LTS 85 以上版本的里程碑支援「安裝 NVIDIA GPU 裝置驅動程式」一節中提到的 cos-extensions 公用程式。如果是較早的 Container-Optimized OS 發布里程碑,請使用 cos-gpu-installer 開放原始碼工具手動安裝 GPU 驅動程式。

VM 執行個體限制

搭載 GPU 的 VM 執行個體有特定限制,因此其行為與其他類型的執行個體不同。詳情請參閱 Compute Engine 的 GPU 限制頁面。

配額和可用性

GPU 僅於特定地區和區域提供。當您要求 GPU 配額時,請考量要執行 Container-Optimized OS VM 執行個體的地區。

如需適用地區和區域的完整清單,請參閱「Compute Engine 上的 GPU」。您也可以使用 Google Cloud CLI 查看區域中的可用 GPU。

gcloud compute accelerator-types list

定價

如需 GPU 定價資訊,請參閱 Compute Engine 定價頁面

支援性

每個 Container-Optimized OS 版本至少支援一個 NVIDIA GPU 驅動程式版本。Container-Optimized OS 團隊會在發布前,根據 Container-Optimized OS 版本確認支援的 GPU 驅動程式是否符合資格,以確保相容性。NVIDIA GPU 驅動程式可能會不時推出新版本。部分 GPU 驅動程式版本不符合 Container-Optimized OS 的資格,且無法保證符合資格的時間。

Container-Optimized OS 團隊在發布里程碑上發布新版本時,我們會嘗試在對應的驅動程式分支中支援最新的 GPU 驅動程式版本。以便盡快修正 GPU 驅動程式中發現的 CVE。

如果 Container-Optimized OS 客戶發現與 NVIDIA GPU 驅動程式相關的問題,就必須直接與 NVIDIA 聯絡尋求支援。如果問題並非特定驅動程式造成,使用者可以向 Cloud Customer Care 提出要求。

後續步驟