GPU节点卡型属性标签说明及典型用法

在使用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. 登录容器服务管理控制台,在左侧导航栏选择集群

  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. 登录容器服务管理控制台,在左侧导航栏选择集群

  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节点调度属性标签说明及标签值的切换方法