全部產品
Search
文件中心

Container Service for Kubernetes:GPU節點卡型屬性標籤說明及典型用法

更新時間:Jun 19, 2024

在使用Kubernetes叢集實現GPU計算時,為了有效利用GPU裝置,可使用GPU節點卡型屬性標籤將應用調度至目標節點。本文介紹GPU節點卡型屬性標籤基本資料以及如何使業務運行或不運行在指定卡型上。

GPU節點卡型屬性標籤說明

在ACK叢集中擴容GPU節點或者添加GPU節點時,添加節點指令碼會自動為該GPU節點打上如下的三個標籤。

標籤名稱

描述

aliyun.accelerator/nvidia_name

GPU節點的GPU卡型名稱。

aliyun.accelerator/nvidia_mem

GPU節點的每張卡的顯存容量。

aliyun.accelerator/nvidia_count

GPU節點總共擁有的GPU卡數。

上述三個標籤的值可以使用節點上nvidia-smi工具查詢。

查詢類型

查詢命令

查詢卡型

nvidia-smi --query-gpu=gpu_name --format=csv,noheader --id=0 | sed -e 's/ /-/g'

查詢每張卡顯存容量

nvidia-smi --id=0 --query-gpu=memory.total --format=csv,noheader | sed -e 's/ //g'

查詢節點上總共擁有的GPU卡數

nvidia-smi -L | wc -l

在叢集中使用如下命令可以查詢節點的GPU卡型。

kubectl get nodes -L  aliyun.accelerator/nvidia_name
NAME                        STATUS   ROLES    AGE   VERSION            NVIDIA_NAME
cn-shanghai.192.XX.XX.176   Ready    <none>   17d   v1.26.3-aliyun.1   Tesla-V100-SXM2-32GB
cn-shanghai.192.XX.XX.177   Ready    <none>   17d   v1.26.3-aliyun.1   Tesla-V100-SXM2-32GB
cn-shanghai.192.XX.XX.130   Ready    <none>   18d   v1.26.3-aliyun.1   Tesla-V100-SXM2-32GB
cn-shanghai.192.XX.XX.131   Ready    <none>   17d   v1.26.3-aliyun.1   Tesla-V100-SXM2-32GB
cn-shanghai.192.XX.XX.132   Ready    <none>   17d   v1.26.3-aliyun.1   Tesla-V100-SXM2-32GB

使業務運行在指定卡型上

利用上述GPU屬性標籤,可以讓您的業務運行在指定卡型的節點上,以下為舉例說明。

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

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

  3. 任務頁面右上方,單擊使用YAML建立資源。效果如下。1.jpg

    展開查看YAML檔案詳細資料

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist
        spec:
          nodeSelector:
            aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB" # 使該應用運行在Tesla V100-SXM2-32GB上。
          containers:
          - name: tensorflow-mnist
            image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=1000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                nvidia.com/gpu: 1
            workingDir: /root
          restartPolicy: Never

    建立成功後,您可以在左側導覽列中選擇工作負載 > 容器組。在容器組列表中,您可看到一個樣本Pod(容器組)成功調度到對應的節點上,從而實現基於GPU節點標籤的靈活調度。

避免業務運行在某些卡型上

您可以利用節點親和性與反親和性避免讓業務運行在某些卡型上,以下為舉例說明。

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

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

  3. 任務頁面右上方,單擊使用YAML建立資源。效果如下。2.jpg

    展開查看YAML檔案詳細資料

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: aliyun.accelerator/nvidia_name  # 只要某個GPU節點擁有標籤aliyun.accelerator/nvidia_name,那麼應用無法運行在該節點上。
                    operator: DoesNotExist
          containers:
          - name: tensorflow-mnist
            image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=1000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                nvidia.com/gpu: 1
            workingDir: /root
          restartPolicy: Never

    建立成功後,您可以在左側導覽列中選擇工作負載 > 容器組。在容器組列表中,您可以看到一個樣本Pod(容器組)成功調度到沒有標籤aliyun.accelerator/nvidia_name的GPU節點上,從而實現基於GPU節點標籤的靈活調度。

相關文檔

安裝雲原生AI套件的調度組件ack-ai-installer之後,您可以為GPU節點打上調度屬性標籤,協助GPU節點啟用共用GPU調度、GPU拓撲感知調度等能力。詳細資料,請參見GPU節點調度屬性標籤