在 Azure Stack HCI 23H2) 上使用 GPU (AKS 的計算密集型工作負載

適用於:Azure Stack HCI 版本 23H2

注意

如需 Azure Stack HCI 22H2 上 AKS 中的 GPU 相關信息,請參閱 使用 GPU (HCI 22H2)

圖形化處理單位 (GPU) 用於計算密集型工作負載,例如機器學習、深度學習等等。 本文說明如何在 Azure Arc 所啟用的 AKS 中,針對計算密集型工作負載使用 GPU。

支援的 GPU 模型

Azure Stack HCI 23H2 上的 AKS 支援下列 GPU 模型:

製造商 GPU 模型 支援的版本
Nvidia A2 2311.2
Nvidia A16 2402.0

支援的 VM 大小

Azure Stack HCI 23H2 上的 AKS 支援每個 GPU 模型的下列 VM 大小。

NC2 A2 SKU 支援 Nvidia A2

VM 大小 GPU GPU 記憶體:GiB vCPU 記憶體:GiB
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 48 16 64
Standard_NC32_A2 2 48 32 28

NC2 A16 SKU 支援 Nvidia A16

VM 大小 GPU GPU 記憶體:GiB vCPU 記憶體:GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 48 16 64
Standard_NC32_A16 2 48 32 28

開始之前

若要在 AKS Arc 中使用 GPU,請先確定您已安裝必要的 GPU 驅動程式,再開始部署叢集。 請遵循本節中的步驟。

步驟 1:安裝 OS

在 Azure Stack HCI 叢集中的每部伺服器上本機安裝 Azure Stack HCI 版本 23H2 操作系統。

步驟 2:下載並安裝 NVIDIA 風險降低驅動程式

軟體可能包含由 NVIDIA Corporation 或其授權者所開發及擁有的元件。 這些元件的使用是由 NVIDIA 終端使用者許可協定所控管。

請參閱 NVIDIA 資料中心檔 以下載 NVIDIA 風險降低驅動程式。 下載驅動程序之後,請展開封存,並在每部主計算機上安裝風險降低驅動程式。

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

若要安裝風險降低驅動程式,請流覽至包含解壓縮檔案的資料夾,並根據安裝在 Azure Stack HCI 主機上的實際 GPU 類型選取 GPU 驅動程式檔案。 例如,如果類型是 A2 GPU,請以滑鼠右鍵按兩下 nvidia_azure_stack_A2_base.inf 檔案,然後選取 [ 安裝]。

您也可以瀏覽到資料夾並執行下列命令來安裝風險降低驅動程式,以使用命令列進行安裝:

pnputil /add-driver nvidia_azure_stack_A2_base.inf /install 
pnputil /scan-devices 

安裝風險降低驅動程序之後,GPU 會列在 Nvidia A2_base - 卸除下的 [確定] 狀態:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

步驟 3:重複步驟 1 和 2

針對 HCI 叢集中的每部伺服器重複步驟 1 和 2。

步驟 4:繼續部署 Azure Stack HCI 叢集

遵循 Azure Stack HCI 版本 23H2 部署中的步驟,繼續部署 Azure Stack HCI 叢集。

取得已啟用 GPU 的 VM SKU 清單

完成 Azure Stack HCI 叢集部署之後,您可以執行下列 CLI 命令來顯示部署上的可用 VM SKU。 如果您的 GPU 驅動程式正確安裝,則會列出對應的 GPU VM SKU:

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

使用已啟用 GPU 的節點集區建立新的工作負載叢集

目前,使用已啟用 GPU 的節點集區僅適用於 Linux 節點集區。 若要建立新的 Kubernetes 叢集:

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

下列範例會新增具有 2 個已啟用 GPU (NVDIA A2 的節點集區,) 具有 Standard_NC4_A2 VM SKU 的節點:

az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux

確認您可以排程 GPU

建立 GPU 節點集區後,請確認您可以在 Kubernetes 中排程 GPU。 首先,使用 kubectl get nodes 命令列出您叢集中的節點:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

現在,使用 kubectl 描述節點 命令來確認可以排程 GPU。 在 [ 容量 ] 區段下,GPU 應該會顯示為 nvidia.com/gpu:1

kubectl describe <node> | findstr "gpu" 

輸出應該會顯示來自背景工作節點的 GPU () ,如下所示:

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

執行已啟用 GPU 的工作負載

完成上述步驟之後,請建立新的 YAML 檔案進行測試;例如 ,gpupod.yaml。 將下列 YAML 複製並貼到名為 gpupod.yaml 的新檔案中,然後加以儲存:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

執行下列命令來部署範例應用程式:

kubectl apply -f gpupod.yaml

確認 Pod 已啟動、已完成執行,且已指派 GPU:

kubectl describe pod cuda-vector-add | findstr 'gpu'

上一個命令應該會顯示一個已指派的 GPU:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

檢查 Pod 的記錄檔,以檢視測試是否已通過:

kubectl logs cuda-vector-add

以下是上一個指令的範例輸出:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

如果您在呼叫驅動程式時收到版本不符錯誤,例如「CUDA 驅動程式版本不足以使用 CUDA 執行時間版本」,請檢閱 NVIDIA 驅動程式矩陣相容性圖表

常見問題集

在升級已啟用 GPU 的節點集區期間會發生什麼情況?

升級已啟用 GPU 的節點集區會遵循用於一般節點集區的相同滾動升級模式。 若要在實體主計算機上成功建立新 VM 中已啟用 GPU 的節點集區,它需要一或多個實體 GPU 才能成功指派裝置。 此可用性可確保當 Kubernetes 排程此升級節點上的 Pod 時,您的應用程式可以繼續執行。

升級之前:

  1. 規劃升級期間的停機時間。
  2. 如果您在執行Standard_NK6或執行 Standard_NK12,則每個實體主機都有一個額外的 GPU。 如果您是以完整容量執行,而且沒有額外的 GPU,建議您在升級之前將節點集區相應減少到單一節點,然後在升級成功之後相應增加。

如果我在升級期間實體計算機上沒有額外的實體 GPU,會發生什麼事?

如果在叢集上觸發升級,而不需額外的 GPU 資源來加速滾動升級,升級程式會停止回應,直到 GPU 可用為止。 如果您以完整容量執行,而且沒有額外的 GPU,建議您在升級之前將節點集區相應減少到單一節點,然後在升級成功之後相應增加。

下一步