You need to enable JavaScript to run this app.
导航

使用 GPU 指标进行弹性伸缩

最近更新时间2024.02.29 10:33:30

首次发布时间2022.12.30 19:03:45

本文主要介绍创建指标伸缩时,通过 YAML 方式定义 HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)的 GPU 指标,并进行弹性伸缩的操作步骤。

使用限制

前提条件

  • 已创建托管 Prometheus 工作区,详情请参见 创建工作区
  • 容器服务集群已接入托管 Prometheus,详情请参见 接入托管 Prometheus
  • 使用 kubectl 连接目标集群,具体操作,请参见 连接集群
  • 已安装 nvidia-device-plugin 组件,且 部署插件 必须勾选 安装 dcgm-exporter。具体操作,请参见 nvidia-device-plugin
  • 已安装 prometheus-agent 组件,且 部署插件 必须勾选 安装 node-exporter。具体操作,请参见 prometheus-agent
  • 已安装 prometheus-adapter 组件。具体操作,请参见 prometheus-adapter

    注意

    请确保安装 prometheus-adapter 组件和安装 prometheus-agent 组件时配置的工作区一致。否则 prometheus-adapter 组件将无法正常转换数据。

GPU 指标说明

目前支持使用如下三种指标,对应用进行弹性伸缩。

指标名含义单位
k8s_pod_gpu_memory_usedPod GPU 显存使用量。MiB
k8s_pod_rate_gpu_memory_usedPod GPU 显存使用率。%
k8s_pod_rate_gpu_usedPod GPU 使用率。%

操作步骤

  1. 创建使用 GPU 的工作负载。本示例以创建无状态负载(Deployment)为例。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example-gpu-workload  # 工作负载名称。
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example-gpu-workload
      template:
        metadata:
          labels:
            app: example-gpu-workload
        spec:
          containers:
          - name: workload
            image: example-gpu-workload
            resources:
              limits:
                nvidia.com/gpu: 1  # GPU 显卡数量。
    
  2. 创建与工作负载关联的 HPA,指定按照 GPU 使用率进行弹性伸缩。
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gpu-hpa  # 指标伸缩名称。
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: example-gpu-workload # 指定指标伸缩的工作负载对象。
      minReplicas: 1 # 配置 HPA 的最小实例数。
      maxReplicas: 10 # 配置 HPA 的最大实例数。
      metrics:
      - type: Pods
        pods:
          metric:
            name: k8s_pod_rate_gpu_used  # 配置 HPA 的触发指标,本例中配置为 Pod 的 GPU 利用率。
          target:
            averageValue: 20  # 当 GPU 利用率超过 20%,触发扩容。
            type: AverageValue
    
  3. 查看弹性伸缩结果。
    • 当 Pod GPU 使用率增加后会触发扩容,此时可通过如下命令查看 HPA 信息。
      kubectl get hpa   
      
      预期返回结果如下,Deployment 的副本数扩容到 2:
      NAME      REFERENCE                          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
      gpu-hpa   Deployment/example-gpu-workload   23/20      1         10        2          62s   
      
    • 当 Pod GPU 使用率下降到指定值以下会触发缩容,此时可通过如下命令查看 HPA 信息。
      kubectl get hpa   
      
      预期返回结果如下,Deployment 的副本数缩容到 1:
      NAME      REFERENCE                          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
      gpu-hpa   Deployment/example-gpu-workload   0/20      1         10        1          15m
      

更多信息

不同版本的 HPA 资源对于扩缩容行为有不同粒度的控制能力。详细说明,请参见 开源社区文档

您可参考官方文档,根据使用容器服务创建的集群 Kubernetes 版本,结合您自身业务使用弹性伸缩的期望,合理控制工作负载的弹性伸缩行为。