全部產品
Search
文件中心

Container Service for Kubernetes:使用Kubernetes預設GPU調度

更新時間:Feb 28, 2024

阿里雲Container ServiceACK支援GPU的調度與營運管理。預設的GPU使用模式與Kubernetes社區GPU的使用方式一致。本文以運行GPU的TensorFlow任務為例,介紹如何快速部署一個GPU應用。

注意事項

針對納入K8s叢集管理的GPU節點,建議您按照本文樣本中標準的K8s擴充資源申請方式為應用申請GPU資源。為業務應用申請和使用GPU資源時,請關注以下注意事項。

  • 請勿直接在節點上運行GPU應用程式。

  • 請勿通過dockerpodmannerdctl等工具命令建立容器並為容器申請GPU資源。例如,執行docker run --gpus alldocker run -e NVIDIA_VISIBLE_DEVICES=all並運行GPU程式。

  • 請勿在Pod YAML的env中直接添加環境變數NVIDIA_VISIBLE_DEVICES=allNVIDIA_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社區的已知報錯

操作步驟

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面右上方,單擊使用YAML建立資源

  4. 在建立無狀態工作負載頁面,選擇所需命名空間,樣本模板選擇已有模板或自訂。在模板代碼輸入框輸入以下範例程式碼,然後單擊建立

    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
  5. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組,找到剛才建立的Pod,單擊Pod名稱查看相關資訊。

    單擊日誌頁簽,查看該Tensorflow任務的日誌資訊,以下輸出日誌表示該任務已正常使用GPU。

    image.png