阿里雲Container ServiceACK支援GPU的調度與營運管理。預設的GPU使用模式與Kubernetes社區GPU的使用方式一致。本文以運行GPU的TensorFlow任務為例,介紹如何快速部署一個GPU應用。
注意事項
針對納入K8s叢集管理的GPU節點,建議您按照本文樣本中標準的K8s擴充資源申請方式為應用申請GPU資源。為業務應用申請和使用GPU資源時,請關注以下注意事項。
請勿直接在節點上運行GPU應用程式。
請勿通過
docker
、podman
、nerdctl
等工具命令建立容器並為容器申請GPU資源。例如,執行docker run --gpus all
或docker run -e NVIDIA_VISIBLE_DEVICES=all
並運行GPU程式。請勿在Pod YAML的
env
中直接添加環境變數NVIDIA_VISIBLE_DEVICES=all
或NVIDIA_VISIBLE_DEVICES=<GPU ID>
等,通過容器的環境變數NVIDIA_VISIBLE_DEVICES
直接為Pod申請GPU資源,並運行GPU程式。在Pod YAML中未設定環境變數
NVIDIA_VISIBLE_DEVICES
,製作Pod所使用的鏡像時,請勿將環境變數預設配置為NVIDIA_VISIBLE_DEVICES=all
,並運行GPU程式。請勿在Pod的
securityContext
中配置privileged: true
,並運行GPU程式。
使用以上非標準方式為業務應用申請的GPU資源,將存在如下安全隱患。
通過以上方式為業務應用申請的GPU資源,並未在調度器的裝置資源賬本中統計,有可能造成節點GPU資源的分配情況與調度器裝置資源賬本中記錄的值不一致。調度器仍然會調度某些申請GPU資源的Pod到這個節點上,導致使用者業務因為在同一張GPU卡上出現資源爭搶(例如GPU顯存申請)而運行失敗的情況。
非標操作可能引發其他未知問題,例如NVIDIA社區的已知報錯。
操作步驟
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面右上方,單擊使用YAML建立資源。
在建立無狀態工作負載頁面,選擇所需命名空間,樣本模板選擇已有模板或自訂。在模板代碼輸入框輸入以下範例程式碼,然後單擊建立。
apiVersion: v1 kind: Pod metadata: name: tensorflow-mnist namespace: default spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: nvidia.com/gpu: 1 # 為該容器申請1張GPU卡。 workingDir: /root restartPolicy: Always
在叢集管理頁左側導覽列,選擇 ,找到剛才建立的Pod,單擊Pod名稱查看相關資訊。
單擊日誌頁簽,查看該Tensorflow任務的日誌資訊,以下輸出日誌表示該任務已正常使用GPU。