本頁面說明如何在 Container-Optimized OS 虛擬機器 (VM) 執行個體中使用 NVIDIA 圖形處理器 (GPU) 硬體加速器。
總覽
您可以使用 Compute Engine 建立執行 Container-Optimized OS 的 VM 執行個體,並附加 GPU。在 Compute Engine 上執行 GPU 時,您只能使用兩個機器系列:加速器最佳化和 N1 一般用途。
對於加速器最佳化機型,每個機器類型都連接特定型號的 NVIDIA 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 主控台的「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 型號。
- 如要建立已連結 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 映像檔版本都會列出每種 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 提出要求。
後續步驟
- 進一步瞭解如何在 Container-Optimized OS VM 執行個體上執行容器。
- 進一步瞭解 Compute Engine 上的 GPU。
- 進一步瞭解如何申請 GPU 配額。