本頁說明如何在 Container-Optimized OS 虛擬機器 (VM) 執行個體上使用 NVIDIA 圖形處理器 (GPU) 硬體加速器。
總覽
使用 Compute Engine 時,您可以建立執行 Container-Optimized OS 的 VM 執行個體,並附加 GPU。在 Compute Engine 上執行 GPU 時,只能使用兩種機器系列:加速器最佳化和 N1 一般用途。
對於加速器最佳化機型,每個機型均連接特定型號的 NVIDIA GPU。
- A4 加速器最佳化機型連接的是 NVIDIA B200 GPU。
- A3 Ultra 加速器最佳化機型連接的是 NVIDIA H200 141GB GPU。
- A3 加速器最佳化機型連接的是 NVIDIA H100 80GB GPU。
- A2 加速器最佳化機型連接的是 NVIDIA A100 GPU。A100 40GB 和 A100 80GB 選項均提供這項功能。
- G2 加速器最佳化機型連接的是 NVIDIA L4 GPU。
對於 N1 一般用途機器類型,您可以附加下列 GPU:
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 主控台的「配額」頁面。
如果需要更多 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 模型。
- 如要建立已連結 NVIDIA H100、A100 或 L4 GPU 的 Container-Optimized OS VM,請參閱「建立加速器最佳化 VM」。
- 如要建立搭載 NVIDIA T4、P4、P100 或 V100 GPU 的 Container-Optimized OS VM,請參閱「建立搭載 GPU 的 N1 VM」。
您也可以將 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 映像檔版本都有支援的 NVIDIA GPU 驅動程式版本清單 (依 GPU 類型列出),以及各類型的預設驅動程式。如需支援版本的完整清單,請參閱主要 Container-Optimized OS LTS 里程碑的版本資訊。
您也可以執行下列指令,查看 Container-Optimized OS VM 執行個體上的 GPU 支援的所有 GPU 驅動程式版本:
sudo cos-extensions list
找出所需的 CUDA 工具包版本
如果應用程式使用 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 驅動程式版本的指令。
將參數傳遞至核心模組
安裝時,您可以使用 --module-arg
旗標將特定參數傳遞至 NVIDIA 核心模組。這項旗標可用於啟用或停用特定驅動程式功能。這個標記可多次使用,傳遞多個引數。
舉例來說,在 COS VM 上,您可以使用下列指令安裝 NVIDIA 驅動程式,並載入 nvidia.ko
核心模組和 NVreg_EnableGpuFirmware=0
參數。
sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0
預先載入驅動程式
即使未附加任何 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。以下範例說明如何在 Docker 容器中執行 CUDA 應用程式,並使用 /dev/nvidia0
:
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
,目錄名稱取決於您使用的映像檔版本。舉例來說,Docker 容器中的 NVIDIA CUDA-X 程式庫和偵錯公用程式分別位於/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 客服中心提出要求。
後續步驟
- 進一步瞭解如何在 Container-Optimized OS VM 執行個體上執行容器。
- 進一步瞭解 Compute Engine 上的 GPU。
- 進一步瞭解如何要求 GPU 配額。