阿里雲容器計算服務ACS以Serverless形態提供容器算力,在使用GPU資源時,支援在Pod上聲明GPU型號和ACS支援的驅動版本,極大降低了業務的基礎設施管理和營運成本。本文主要介紹如何在建立Pod時指定GPU型號和驅動版本。
GPU型號說明
ACS支援多種GPU型號,您可以結合GPU容量預留使用,也可在Pod建立時按需申請。對於不同的計算類型(compute-class),使用方式如下。
高效能網路GPU型
僅支援節點預留,需要在購買後關聯集群,每份資源預留在叢集中以獨立的虛擬節點供形式Pod使用,詳見GPU-HPN容量預留。
GPU型
支援按量使用和容量預留兩種方式,Pod建立後會自動抵扣容量預留。
目前支援的GPU具體型號列表請提交工單諮詢。
為Pod指定GPU型號
對於高效能網路GPU型,其僅支援申請節點預留使用資源,每份預留資源在叢集內以獨立的虛擬節點形式存在,虛擬節點的標籤中包含了具體的GPU型號,您可以直接通過節點親和性調度配置使用,詳見基於屬性標籤將應用調度到高效能網路GPU型虛擬節點上。
對於GPU型,您需要在Pod的labels和nodeSelector中顯式指定GPU型號。具體方式如下。
計算類 | 協議欄位 | 範例 |
高效能網路GPU型 | spec.nodeSelector | |
GPU型 | metadata.labels[ alibabacloud.com/gpu-model-series] | |
驅動版本說明
GPU應用通常需要依賴CUDA(Compute Unified Device Architecture)運行,CUDA是顯卡廠商NVIDIA在2007年推出的並行計算平台和編程模型。下圖為CUDA的架構體系,CUDA軟體堆棧中的驅動層API和運行時層API有以下區別。
驅動層API(Driver API):功能較完整,但是使用複雜。
運行時API(CUDA Runtime API):封裝了部分驅動的API,將某些驅動初始化操作隱藏,使用方便。
CUDA的Driver API由NVIDIA Driver包提供,而CUDA Library和CUDA Runtime由CUDA Toolkit包提供。

在使用ACS叢集運行GPU應用時,您需要注意:
容器鏡像中安裝CUDA Toolkit時,使用NVIDIA提供的CUDA基礎鏡像。這些基礎鏡像已經安裝了CUDA Toolkit。您可以基於基礎鏡像構建應用程式容器鏡像。您也可以根據不同的CUDA Toolkit版本選擇不同的CUDA基礎鏡像。
建立應用時指定Pod所需的驅動版本,詳見為Pod指定驅動版本。
關於CUDA Toolkit與NVIDIA驅動的版本相容性列表,請參見NVIDIA官方文檔CUDA Toolkit Release Notes。
應用程式使用的CUDA運行時API版本與該應用的Docker鏡像使用的CUDA基礎鏡像版本一致。例如,您的應用的Docker鏡像基於CUDA基礎鏡像NVIDIA/CUDA:12.2.0-base-Ubuntu20.04構建,那麼應用使用的CUDA運行時API版本為12.2.0。
為Pod指定驅動版本
ACS支援在應用使用GPU資源時,通過Pod的label標籤指定驅動版本,具體格式如下。
計算類 | 協議欄位 | 範例 |
GPU型 | metadata.labels[alibabacloud.com/gpu-driver-version] | |
高效能網路GPU型 | |
GPU驅動版本
在為Pod指定驅動版本時,需要確保驅動版本包含在ACS支援的驅動版本列表中,GPU驅動版本說明。
Pod預設GPU驅動版本
ACS支援按一定規則為Pod配置特定屬性,若產品預設驅動版本不滿足需求,可以通過在kube-system/acs-profile增加以下配置,實現為特定類型的GPU Pod配置不同的GPU驅動版本,詳見配置Selectors。
以下配置實現了將叢集內所有gpu-hpn計算類的pod驅動版本設定為1.5.0。
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
# 其他系統配置保持不變
selectors: |
[
{
"name": "gpu-hpn-driver",
"objectSelector": {
"matchLabels": {
"alibabacloud.com/compute-class": "gpu-hpn"
}
},
"effect": {
"labels": {
"alibabacloud.com/gpu-driver-version": "1.5.0"
}
}
}
]操作樣本
使用以下YAML內容,建立gpu-pod-with-model-and-driver.yaml檔案,檔案中描述了一個compute-class為GPU的Pod,申請型號為example-model的GPU資源和535.161.08驅動版本。
apiVersion: v1 kind: Pod metadata: name: gpu-pod-with-model-and-driver labels: # 指定compute-class為gpu類型 alibabacloud.com/compute-class: "gpu" # 指定GPU型號為example-model,請按實際情況填寫,如T4 alibabacloud.com/gpu-model-series: "example-model" # 指定驅動版本為535.161.08 alibabacloud.com/gpu-driver-version: "535.161.08" spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - sleep - infinity resources: requests: cpu: 1 memory: 1Gi nvidia.com/gpu: 1 limits: cpu: 1 memory: 1Gi nvidia.com/gpu: 1執行以下命令,將gpu-pod-with-model-and-driver.yaml部署到叢集。
kubectl apply -f gpu-pod-with-model-and-driver.yaml執行以下命令,查看Pod狀態。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE gpu-pod-with-model-and-driver 1/1 Running 0 87s執行以下命令,查看Pod的GPU資訊。
說明以下命令中的
/usr/bin/nvidia-smi為範例鏡像中已經封裝好的命令參數。kubectl exec -it gpu-pod-with-model-and-driver -- /usr/bin/nvidia-smi預期輸出:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI xxx.xxx.xx Driver Version: 535.161.08 CUDA Version: xx.x | |-----------------------------------------+----------------------+----------------------+ ... |=========================================+======================+======================| | x NVIDIA example-model xx | xxxxxxxx:xx:xx.x xxx | x | | xxx xxx xx xxx / xxxx | xxxx / xxx| x% xxxxxxxx| | | | xxx | +-----------------------------------------+----------------------+----------------------+預期輸出的資訊中GPU型號為example-model,驅動版本為535.161.08,與Pod標籤中配置一致。
重要以上內容只是範例輸出,實際資料以您的作業環境為準。