本文說明如何為在 GDC 上使用 VM 執行階段執行的虛擬機器 (VM) 啟用 NVIDIA® GPU 支援。瞭解如何在 Google Distributed Cloud 節點上安裝 NVIDIA 驅動程式、確認 GPU 是否可用,以及將 GPU 指派給 VM。
事前準備
如要完成這份文件,您必須存取下列資源:
- 存取 Google Distributed Cloud 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 以上版本的叢集。您可以使用任何可執行工作負載的叢集類型。 如有需要,請在 Compute Engine 上試用 Google Distributed Cloud,或參閱叢集建立總覽。 virtctl
用戶端工具已安裝為kubectl
的外掛程式。視需要安裝 virtctl 用戶端工具。
支援的 Nvidia GPU 卡
Google Distributed Cloud 1.13 以上版本支援下列 NVIDIA GPU:
- Tesla T4
- Tesla P4
- Tesla V100 SXM2 32 GB
- A100 SXM4 40 GB
- A100 PCIe 40 GB
- A100 SXM4 80 GB
- A100 PCIe 80 GB
在節點上安裝 NVIDIA 驅動程式
VM 必須先設定 Google Distributed Cloud 節點,才能支援 GPU 裝置,如要在節點上安裝 NVIDIA 驅動程式,請在叢集中包含 NVIDIA GPU 的每個節點上完成下列步驟。本文使用支援的 Ubuntu 版本做為節點:
- 連線至要設定 GPU 支援的 Google Distributed Cloud 節點。
取得節點的核心版本:
KERNEL_VERSION="$(uname -r)"
更新 Ubuntu 節點並安裝適當的核心標頭:
sudo apt update && \ apt install -y linux-headers-${KERNEL_VERSION}
安裝
build-essential
套件,以便在後續步驟中編譯 Nvidia 驅動程式:sudo apt install -y build-essential
為 GPU 下載適當的 NVIDIA 驅動程式套件。如需完整驅動程式清單,請參閱 NVIDIA 驅動程式下載。
以下範例會下載
Linux x86_64
版本的470.82.01
驅動程式:wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
安裝 NVIDIA 驅動程式套件。使用您在上一個步驟下載的 NVIDIA 驅動程式套件名稱:
sudo sh NVIDIA-Linux-x86_64-470.82.01.run \ --accept-license \ --silent \ --no-nouveau-check
載入 NVIDIA 核心模組:
sudo modprobe nvidia
針對叢集中具有 NVIDIA GPU 的每個節點,重複執行本節中的步驟。
在 GDC 上的 VM Runtime 中啟用 GPU 支援
在 Google Distributed Cloud 節點上安裝 NVIDIA 驅動程式後,您就能在 GDC 的 VM Runtime 中啟用 GPU 支援功能。VM 隨後就能存取節點上的 GPU。
每個節點都會在下列程序中重新啟動。您的 VM 可能會受到這項重新啟動程序影響。如果可以遷移,且已設定遷移,可遷移的 VM 會遷移至其他節點。詳情請參閱如何在維護事件期間設定 VM 的驅逐政策。
如要在 GDC 的 VM Runtime 中啟用 GPU 支援功能,請完成下列步驟。
編輯
VMRuntime
自訂資源:kubectl edit vmruntime vmruntime
將
enableGPU: true
屬性新增至VMRuntime
資訊清單:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true enableGPU: true ...
在編輯器中儲存並關閉
VMRuntime
自訂資源。檢查
vm-system
命名空間中 GPU 控制器的狀態:kubectl get pods --namespace vm-system -w
控制器大約需要五分鐘才能順利啟用。 等待
STATUS
顯示所有 GPU 控制器的Running
。下列範例輸出內容顯示所需狀態:NAME READY STATUS RESTARTS AGE gpu-controller-controller-manager-gwvcb 2/2 Running 0 10m kubevirt-gpu-dp-daemonset-2lfkl 1/1 Running 0 10m kubevm-gpu-driver-daemonset-5fwh6 1/1 Running 0 10m nvidia-gpu-dp-daemonset-9zq2w 1/1 Running 0 10m nvidia-mig-manager-5g7pz 1/1 Running 0 10m vm-controller-controller-manager-7b6df6979b 2/2 Running 2 (13m ago) 14m
當所有 GPU 控制器都回報
Running
狀態時,請確認 GPU 是否可供使用:kubectl get gpuallocations --namespace vm-system
以下範例輸出內容顯示節點上的 GPU 可供使用。系統會顯示叢集中支援 GPU 的每個節點。您會在下一節中將這些 IP 位址分配給 VM:
NAME ALLOCATED DEVICEMODEL bm-node1 true Tesla A100 SXM4 40GB bm-node2 true Tesla A100 SXM4 40GB
為 VM 分配 GPU
在 Bare Metal 叢集節點和 GDC 上的 VM 執行階段中設定 GPU 支援後,即可分配 GPU 供 VM 使用。根據預設,系統會分配 GPU 給 Pod (容器) 使用。
編輯
GPUAllocation
自訂資源,以便搭配 VM 使用。這個步驟會指派節點上的 GPU,供 VM 使用:kubectl edit gpuallocation NODE_NAME --namespace vm-system
將
NODE_NAME
替換為要從中分配 GPU 的節點名稱。設定要分配給 VM 的 GPU 數量。一開始,所有 GPU 都會分配給 Pod。
分配給 VM 和 Pod 的 GPU 總數必須等於節點中的 GPU 數量。舉例來說,節點中可能有四個 GPU。如果您為 VM 分配兩個 GPU,則兩個 GPU 仍會分配給 Pod。如果您嘗試將兩個 GPU 分配給 VM,一個 GPU 分配給 Pod,則
GPUAllocation
資訊清單會遭到拒絕,因為有一個 GPU 未分配。更新要分配給 VM 使用的節點 GPU 數量,如下例所示:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: name: gpu-w2 namespace: vm-system spec: node: gpu-w2 pod: 0 vm: 4
在本範例中,節點中安裝的所有四個 GPU 都會分配給 VM。系統不會為 Pod 分配 GPU。
在編輯器中儲存並關閉
GPUAllocation
自訂資源。確認 GPU 回報的
ALLOCATED
狀態為true
:kubectl get gpuallocations --namespace vm-system
以下輸出範例顯示節點上的 GPU 可供使用:
NAME ALLOCATED DEVICEMODEL gpu-w1 true Tesla A100 SXM4 40GB gpu-w2 true Tesla A100 SXM4 40GB
建立支援 GPU 的 VM
您現在可以建立使用節點 GPU 的 VM。在 VM 自訂資源中,您可以指定要從節點分配的 GPU 名稱和數量。
從主機取得 GPU 卡的名稱:
kubectl describe node NODE_NAME
將
NODE_NAME
替換為要取得 GPU 名稱的主機名稱。以下範例輸出內容顯示,這個節點上可分配的 GPU 名稱為
NVIDIA_A100_SXM4_40GB
:Name: bm-node1 Roles: worker [...] Allocatable: cpu: 47810m [...] memory: 336929400Ki nvidia.com/gpu-vm-NVIDIA_A100_SXM4_40GB: 1 [...]
在您選擇的編輯器中建立
VirtualMachine
資訊清單,例如my-gpu-vm.yaml
:nano my-gpu-vm.yaml
複製並貼上下列 YAML 資訊清單:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true gpu: model: nvidia.com/gpu-vm-GPU_NAME quantity: 1
在這個 YAML 檔案中,定義下列設定:
VM_NAME
:VM 的名稱。GPU_NAME
:要分配給 VM 的節點 GPU 名稱。- 這個 GPU 名稱會顯示在先前步驟的
kubectl describe node
指令輸出中,例如NVIDIA_A100_SXM4_40GB
。
- 這個 GPU 名稱會顯示在先前步驟的
VM 會連線至預設
pod-network
網路eth0
。名為「
VM_NAME-boot-dv
」的開機磁碟必須已存在。詳情請參閱「建立及管理虛擬磁碟」。在編輯器中儲存並關閉 VM 資訊清單。
使用
kubectl
建立 VM:kubectl apply -f my-gpu-vm.yaml
VM 執行時,請連線至 VM,並確認 GPU 硬體是否可用。