多實例 GPU(MIG)將 相容的 NVIDIA GPU 劃分為具有專用運算與記憶體資源的分割區。 在 AKS 叢集中,工作負載透過 Kubernetes 擴展資源請求這些分割區。 使用混合多實例 GPU(MIG)策略,將 GPU 分割區大小與你的工作負載匹配。 不要將整個 GPU 分配給較小的工作負載,也不要對每個工作負載使用相同的分割區大小;請改為在同一張 GPU 上執行具有不同運算和記憶體需求的工作負載。 每個分割區都有獨立的運算與記憶體資源。 這種方法可以透過讓較小的工作負載與較大的工作負載共享 GPU 容量來提升 GPU 利用率。
例如,NVIDIA A100 80 GB GPU 可以提供一個大型分割區、一個中型分割區和兩個小型分割區。 四個工作負載可同時運行,每個工作負載使用根據其需求大小的分割區,如下範例混合配置所示。
本文說明如何建立混合 MIG 節點池、驗證分割區配置,以及執行範例工作負載。
關於策略選擇,請參見 AKS 中的多實例 GPU 策略。 關於統一分割配置,請參見 建立單一策略 MIG 節點池。
Important
AKS 預覽功能以自助方式提供,並採選擇加入制。 預覽版本係依「現狀」及「可用情況」提供,且不適用於服務等級協定與有限保固。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
開始之前
在配置混合 MIG 節點池之前,請確保你具備以下先決條件:
- 本文假設您目前擁有 AKS 叢集。 如果你沒有叢集,可以用 Azure CLI、Azure PowerShell 或 Azure 入口網站建立一個。
- 你已安裝 Azure CLI 版本
2.85.0或更新版本,以及aks-preview擴充功能版本22.0.0b15或更新版本。 執行az --version以檢查您的 Azure CLI 版本。 - 在你選擇的 AKS 區域內,支援 MIG 的 GPU VM 大小。 確保你有足夠的區域性及GPU家族vCPU配額,以應付你計劃部署的虛擬機大小和節點數量。
- 適用於你所選 GPU 的相容混合 MIG 配置。 選擇符合 GPU 容量與配置限制的支援分割區配置檔。 詳情請參閱 「了解混合MIG配置檔」。
- MIG 節點池使用 AKS Linux 節點映像檔,基於 VHD 版本
202609.01.0或更新版本。 -
您訂閱中的
ManagedGPUExperiencePreview和MixedMIGStrategyPreview功能已註冊。 如需說明,請參閱 「註冊預覽功能」。
Limitations
- 目前不支援包含
AzureContainerLinux和Windows作業系統 SKU 的節點集區。 - 此功能目前不支援使用 AKS 叢集自動擴展器 對採用混合策略的 MIG 節點進行自動擴展。
- 混合策略配置必須符合 GPU 的分割容量與配置限制。
- 建立 MIG 節點池後,你無法更改設定檔組態。 建立一個替代池來變更配置或停止使用 MIG。 不要嘗試透過更新策略來
None停用 MIG。
了解混合MIG配置檔
例如 MIG3g 這樣的設定檔定義了一個 GPU 分割區的大小。
佈局是指你在節點池上設定的一組配置檔。 配置中的每個配置檔都會建立一個分割區,供工作負載作為擴充資源提出要求。
MIG 策略同時控制相容的設定檔配置及工作負載所請求的資源名稱。
| Strategy | 設定檔設定 | 工作負載資源 |
|---|---|---|
| 單一 | 指定一個設定檔設定,然後 AKS 建立統一的分割區佈局。 |
nvidia.com/gpu: 每個單元代表一個 MIG 分割區,而非整個實體 GPU。 |
| 混合 | 指定一個或多個可形成受支援版面配置的相容設定檔。 重複一個設定檔,請求多個相同大小的分割區。 | 專屬設定檔的資源,例如 nvidia.com/mig-1g.10gb。 |
支援的剖面值為 MIG1g、MIG2g、MIG3g、MIG4g 和 MIG7g。 下表顯示每個設定檔在 NVIDIA A100 80 GB GPU 上建立的分割區,例如 Standard_NC24ads_A100_v4 中的 GPU。 每個配置檔的 GPU 記憶體取決於 NVIDIA GPU 型號。
| Profile | 計算切片 | Partition | 工作負載資源 |
|---|---|---|---|
MIG1g |
1 | 1g.10gb |
nvidia.com/mig-1g.10gb |
MIG2g |
2 | 2g.20gb |
nvidia.com/mig-2g.20gb |
MIG3g |
3 | 3g.40gb |
nvidia.com/mig-3g.40gb |
MIG4g |
4 | 4g.40gb |
nvidia.com/mig-4g.40gb |
MIG7g |
7 | 7g.80gb |
nvidia.com/mig-7g.80gb |
準備您的作業環境
先設定環境變數、註冊預覽功能,並在新增混合 MIG 節點池前連接現有叢集。
設定環境變數
為你現有叢集設定以下環境變數。 本文後面的範例資訊清單會使用
migmixed表示MIXED_POOL。export SUBSCRIPTION_ID="<subscription-id>" export RESOURCE_GROUP="<my-resource-group>" export CLUSTER_NAME="<my-cluster-name>" export MIXED_POOL="<mig-pool-name>"
註冊預覽功能
安裝或更新
aks-preview擴充功能。az extension add --name aks-preview --upgrade --yes註冊
ManagedGPUExperiencePreview功能。az feature register \ --namespace Microsoft.ContainerService \ --name ManagedGPUExperiencePreview註冊
MixedMIGStrategyPreview功能。az feature register \ --namespace Microsoft.ContainerService \ --name MixedMIGStrategyPreview確認管理型 GPU 功能註冊狀態。
az feature show \ --namespace Microsoft.ContainerService \ --name ManagedGPUExperiencePreview \ --query properties.state --output tsv確認混合 MIG 功能註冊狀態。
az feature show \ --namespace Microsoft.ContainerService \ --name MixedMIGStrategyPreview \ --query properties.state --output tsv兩個狀態都返回
Registered後,重新整理資源提供者註冊。az provider register --namespace Microsoft.ContainerService
連線至您的 AKS 叢集
取回叢集憑證。
az aks get-credentials \ --resource-group "$RESOURCE_GROUP" \ --name "$CLUSTER_NAME"確認連線和現有節點狀態。
kubectl get nodes
在新的節點池啟用混合 MIG
使用 Azure CLI 建立混合 MIG 節點池。 選擇你 node OS SKU 的分頁。
若要使用預設的 OS SKU,請建立節點集區,而不指定 OS SKU。 節點集區會根據叢集的 Kubernetes 版本來設定為預設作業系統。
使用以下 A100 佈局建立混合 MIG 節點池。 將 --gpu-mig-strategy Mixed、--enable-managed-gpu=true 和 MIG 配置檔清單一起指定。 AKS 保留所提供的清單順序,並在節點配置時處理放置順序。
az aks nodepool add \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$MIXED_POOL" \
--node-vm-size "Standard_NC24ads_A100_v4" \
--enable-managed-gpu=true \
--gpu-mig-strategy Mixed \
--gpu-mig-profiles MIG3g MIG2g MIG1g MIG1g \
--node-count 1
確認混合MIG配置
分別驗證節點集區設定、節點就緒狀態,以及已宣告的資源。 僅僅成功配置 GPU 節點並不能保證工作負載可以使用分區。
檢查池組態和節點映像。
az aks nodepool show \ --resource-group "$RESOURCE_GROUP" \ --cluster-name "$CLUSTER_NAME" \ --name "$MIXED_POOL" \ --query "{state:provisioningState,image:nodeImageVersion,gpu:gpuProfile.nvidia}" \ --output json確認輸出是否符合以下數值:
輸出欄位 預期值 stateSucceededgpu.managementModeManagedgpu.driverModeDevicePlugingpu.migStrategyMixedgpu.migProfilesMIG3g,MIG2g,MIG1g,MIG1g(兩個MIG1g條目)等待混合 MIG 節點池中的節點變成
Ready。kubectl wait --for=condition=Ready node \ -l agentpool="$MIXED_POOL" --timeout=600s檢查池中每個節點的可分配 NVIDIA 資源。
kubectl describe nodes -l agentpool="$MIXED_POOL"對於採用
MIG3g MIG2g MIG1g MIG1g版面配置的Standard_NC24ads_A100_v4,每個節點Allocatable的區段應包含以下資源計數,連同其 CPU、記憶體及其他資源:Allocatable: nvidia.com/mig-1g.10gb: 2 nvidia.com/mig-2g.20gb: 1 nvidia.com/mig-3g.40gb: 1這些計數是可分配容量,而非目前未使用的分割區報告。 檢查已排程的 Pod 請求以判斷剩餘容量。
在不同分割區大小上執行工作負載
使用節點所宣告的精確擴充資源名稱。 以下範例請求一個 3g.40gb 分割區和一個 1g.10gb 分割區。 每個容器會執行 nvidia-smi 一次以回報 GPU 裝置資訊,然後退出。
建立一個名為
mixed-mig-workloads.yaml的檔案,內容如下列資訊清單。agentpool選取器使用migmixed集區名稱。 如果你為MIXED_POOL使用了不同的名稱,就更新兩個選擇器。apiVersion: v1 kind: Pod metadata: name: mixed-mig-pod-3g spec: restartPolicy: Never nodeSelector: agentpool: migmixed containers: - name: gpu-test image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu command: ["nvidia-smi"] resources: limits: nvidia.com/mig-3g.40gb: "1" --- apiVersion: v1 kind: Pod metadata: name: mixed-mig-pod-1g spec: restartPolicy: Never nodeSelector: agentpool: migmixed containers: - name: gpu-test image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu command: ["nvidia-smi"] resources: limits: nvidia.com/mig-1g.10gb: "1"當你省略獨立請求時,Kubernetes 會用擴展的資源限制作為請求。 指定整數分割計數。 如果你同時設定同一個 GPU 資源的請求和限制,請使用相等的值。
部署範例 Pod。
kubectl apply -f mixed-mig-workloads.yaml等較大分割區的 pod 成功完成。
kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \ pod/mixed-mig-pod-3g --timeout=300s等小分區的 pod 成功完成。
kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \ pod/mixed-mig-pod-1g --timeout=300s檢查 Pod 的節點分配。
kubectl get pods mixed-mig-pod-3g mixed-mig-pod-1g -o wide閱讀較大分區 Pod 的 GPU 裝置資訊。
kubectl logs mixed-mig-pod-3g檢查它
nvidia-smi是否會報告顯示卡和指定的 MIG 裝置,沒有錯誤。 該 Pod 會請求節點所宣告的nvidia.com/mig-3g.40gb資源。讀取較小分割區 Pod 的 GPU 裝置資訊。
kubectl logs mixed-mig-pod-1g檢查它
nvidia-smi是否會報告顯示卡和指定的 MIG 裝置,沒有錯誤。 Pod 會要求節點宣告的nvidia.com/mig-1g.10gb資源。 輸出格式依驅動程式版本而異;預設指令不一定會顯示設定檔名稱。 實體 GPU 資訊並不代表 Pod 能存取整個 GPU。成功完成的 Pod 會在
kubectl get pods中顯示為Completed。 容器結束後,它們不會保持 Ready 或保留分割區配置。 若完成等待逾時,請檢查該艙的狀態、日誌及事件,以區分排程問題與影像或容器故障。
對於 Single 策略池,請求 nvidia.com/gpu: "1" 而非設定檔專屬資源。 在這個例子中,不要再次使用該資源名稱來請求混合池的分割區。
擴展並維護節點池
縮放則保留混合 MIG 節點池的原始策略與設定檔清單。 在新增節點之前,請確保你具備配額和 GPU 容量。
az aks nodepool scale \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$MIXED_POOL" \
--node-count 2
對所有節點重複進行節點準備度與可分配資源檢查。 採用 Standard_NC24ads_A100_v4 和 配置 MIG3g MIG2g MIG1g MIG1g ,每個節點會通告相同的四個分割區:一 3g.40gb、一 2g.20gb、二 1g.10gb。 更多節點會增加已設定的分割區類型的容量;這些節點不會新增缺少的類型。
使用 node-image-only 升級指令更新節點映像檔。 在維護期間,規劃工作負載中斷及替換節點的 GPU 配額與容量。
az aks nodepool upgrade \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$MIXED_POOL" \
--node-image-only
優化分割區使用情形,以評估正式工作負載
在規劃生產部署前,請運用以下實務評估 AKS 測試環境中的生產工作負載組合。
- 根據測量結果決定分割區大小。 對具代表性的推論、批次及訓練工作負載進行基準測試。 在現實並發情況下,測量裝置記憶體峰值、運算利用率、吞吐量與延遲。 選擇符合你工作負載需求且有記憶體餘量的最小分割區。
- 將佈局對應到並行需求。 該
Standard_NC24ads_A100_v4佈局在MIG3g MIG2g MIG1g MIG1g每個節點提供一個大型、一個中型及兩個小型分割區。 兩個同時提出的大型分割區請求,即使較小的分割區處於閒置狀態,也需要兩個節點。 選擇配置時,請參考同時需求的分布,而非僅僅是總 GPU 記憶體。 - 將容量視為不同的資源類型。 追蹤各
nvidia.com/mig-*資源的請求容量與可用容量。 Kubernetes 不會把小分割區合併成較大的分割區,也不會調整已設定的配置以滿足待處理的 Pod。 - 針對不同工作量類別使用不同的池子。 需要非分割 GPU 的工作負載,放在沒有 MIG 設定的池子裡。 當所有工作需要相同分割區大小時,採用統一單一策略;當工作負載需要不同大小時,則採用混合佈局。 分開對分散式或多GPU工作負載做基準測試,而不是假設它們像全GPU工作負載一樣。
- 設定 CPU 和記憶體請求,以及 GPU 限制。 可用的 GPU 分割區並不能確保節點有足夠的主機記憶體或 CPU 來執行該工作負載。 請使用適合你應用程式生命週期的部署或工作,而非本文中的檢查 Pods。
- 一起監控工作負載結果和分割區利用率。 依 MIG 設定檔比較延遲、吞吐量、GPU 記憶體壓力及排程失敗。
- 驗證你的應用程式堆疊。 測試框架、CUDA、驅動程式及分割區相容性。 固定已驗證的應用程式映像版本或摘要,且不要將檢查映像用作生產應用程式映像。
故障排除設定與排程
如果樣本 pod 一直處於 Pending 狀態,請檢查其排程事件及節點分配的資源。
檢查待處理樣本 pod 的排程事件,例如來自 在不同分割區大小上執行工作負載 的 mixed-mig-pod-3g:
kubectl describe pod mixed-mig-pod-3g
檢查混合 MIG 節點池節點上的分配資源請求:
kubectl describe nodes -l agentpool="$MIXED_POOL"
常見的原因包括:
- Pod 請求了該資源池未宣告的資源。 例如,對
MIG3g MIG2g MIG1g MIG1g的請求在使用nvidia.com/mig-4g.40gb建立的資源池上會仍處於擱置中,因為該資源池並未公告該資源。 擴展集區規模並不能解決這種不匹配。 - 該節點缺乏其他資源。 如果 GPU 分割區看似可用,請檢查 CPU、主機記憶體、污點和親和度。
相關指引請參見 單一策略 MIG 故障排除 與 管理型 GPU 驗證。 本文中的設定要求適用於新的混合設定檔預覽。
關閉混合 MIG 策略並移除範例資源
透過遷移工作負載並刪除混合 MIG 節點池,來關閉混合 MIG 使用。 預覽不會提供就地版面配置變更或 None 策略。 解除註冊訂閱功能不會轉換現有節點或取代節點池刪除。
移除或替換混合的 MIG 節點池
在刪除執行應用程式工作負載的節點池前,先配置一個容量足夠的替代 MIG 池,更新工作負載資源請求與選擇器,並驗證應用程式健康狀態。 要建立一個非分割的 GPU 池,請省略 --gpu-mig-strategy 和 --gpu-mig-profiles。 要採用單一策略,請建立一個新的節點池,包含 --gpu-mig-strategy Single 和恰好一個設定檔。
例如,只有當你的應用程式仍需 GPU 容量時,才建立一個管理式全 GPU 替換節點池:
az aks nodepool add \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name gpufull \
--node-vm-size "Standard_NC24ads_A100_v4" \
--enable-managed-gpu=true \
--node-count 1
檢查替換節點是否為 Ready,並通告 nvidia.com/gpu,而非 MIG 分割區資源:
kubectl describe nodes -l agentpool=gpufull
在每個節點的 Conditions 區段中,確認 Ready 為 True。 在該 Allocatable 區塊確認存在 nvidia.com/gpu,且未公告 MIG 分割區資源。
更新遷移的工作負載以請求 nvidia.com/gpu 並選擇 agentpool: gpufull。 在移除舊的節點池之前,先在完整 GPU 上重新驗證應用程式資源配置和行為。 如果你不需要更換 GPU 容量,可以跳過這個範例,直接移除範例集區。
刪除樣本 pod 和混合 MIG 節點池
刪除 inspection Pod。
kubectl delete pod mixed-mig-pod-3g mixed-mig-pod-1g \ --ignore-not-found=true確認範例 Pod 是否已經不見了。
kubectl get pods \ --field-selector metadata.name=mixed-mig-pod-3gkubectl get pods \ --field-selector metadata.name=mixed-mig-pod-1g遷移其他工作負載後,刪除混合的 MIG 節點池。 等這個操作結束後再開始另一個叢集作業。
az aks nodepool delete \ --resource-group "$RESOURCE_GROUP" \ --cluster-name "$CLUSTER_NAME" \ --name "$MIXED_POOL"確認已刪除的節點池是否不再出現。
az aks nodepool list \ --resource-group "$RESOURCE_GROUP" \ --cluster-name "$CLUSTER_NAME" \ --query "[?name=='$MIXED_POOL'].name" \ --output json輸出應該是
[]。確認該節點池中沒有剩餘的 Kubernetes 節點。
kubectl get nodes -l agentpool="$MIXED_POOL"指令在移除完成後應該不會回報任何相符的資源。
下一步
- 了解AKS上支援的 MIG策略 。
- 檢視 AKS 中的管理型 GPU 節點。
- 與 「建立單一策略 MIG 節點池」中的單一策略配置範例比較。