开启集群GPU监控

更新时间:
复制 MD 格式

GPU监控基于NVIDIA DCGM构建功能强大的GPU监控体系。本文介绍如何开启集群GPU监控。

前提条件

背景信息

对于Kubernetes集群的大规模GPU设备管理,需建立完善的监控体系。通过监测GPU相关指标,可以了解整个集群的GPU的使用情况、健康状态、工作负载性能等,从而实现对异常问题的快速诊断、优化GPU资源的分配、提升资源利用率等。除运维人员以外,其他人员(例如数据科学家、AI算法工程师等)也能通过相关监控指标了解业务的GPU使用情况,以助于进行容量规划和任务调度。

NVIDIA支持使用数据中心GPU管理器DCGM(Data Center GPU Manager)来管理大规模集群中的GPU。基于NVIDIA DCGM构建的GPU监控系统具有更强大的功能,提供了多种GPU监控指标,其主要功能包括:

  • GPU行为监控

  • GPU配置管理

  • GPU Policy管理

  • GPU健康诊断

  • GPU级别统计和线程级别统计

  • NVSwitch配置和监控

使用限制

  • 节点NVIDIA驱动需为418.87.01及以上版本。您可以登录GPU节点,执行nvidia-smi命令查看驱动版本。

  • 若您需要使用GPU Profiling Metrics,则节点NVIDIA驱动需为450.80.02及以上版本。关于GPU Profiling Metrics的更多信息,请参见Feature Overview

  • 不支持对NVIDIA MIG进行监控。

费用说明

关于阿里云Prometheus的收费策略,请参见计费概述

1. 开启Prometheus监控

重要

请确保ack-arms-prometheus组件为1.1.7及以上版本。可查看ack-arms-prometheus组件版本,确认组件版本后,升级组件。

已有集群中开启

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择运维管理 > Prometheus 监控

  2. Prometheus 监控页面,选择容器监控版本,单击开始安装

    开启监控后,将自动采集默认的基础指标,如需采集自定义指标,请参考采集自定义指标

创建集群时开启

  • ACK托管集群Pro版:

    在创建集群的组件配置页面,容器监控栏选择容器集群监控Pro版或容器集群监控基础版。更多信息,请参见创建ACK托管集群

  • ACK托管集群基础版、ACS集群及ACK Serverless集群:

    在创建集群的组件配置页面,容器监控栏勾选使用阿里云可观测监控 Prometheus 版。安装版本为容器集群监控基础版。

如果您想了解更多关于开启Prometheus监控的操作,请参见开启Prometheus监控

当采用开源自建的Prometheus服务,您如果需要GPU监测能力,需要安装 ack-gpu-exporter 组件。

2. 部署示例应用

  1. 使用以下YAML内容,创建tensorflow-benchmark.yaml文件。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-benchmark
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-benchmark
        spec:
          containers:
          - name: tensorflow-benchmark
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
            command:
            - bash
            - run.sh
            - --num_batches=50000
            - --batch_size=8
            resources:
              limits:
                nvidia.com/gpu: 1 #申请1GPU卡。
            workingDir: /root
          restartPolicy: Never
  2. 执行以下命令,在GPU节点上部署tensorflow-benchmark应用。

    kubectl apply -f tensorflow-benchmark.yaml
  3. 执行以下命令,查看Pod状态。

    kubectl get pod

    预期输出:

    NAME                         READY   STATUS    RESTARTS   AGE
    tensorflow-benchmark-k***    1/1     Running   0          114s

3. 查看集群GPU监控

  1. 登录容器服务管理控制台,在左侧导航栏单击集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > Prometheus 监控

  3. Prometheus 监控页面,单击GPU 监控页签,然后单击集群GPU监控-应用Pod维度页签。

    通过监控可以看到GPU Pod运行在节点cn-beijing.10.131.xx.xxx上。

    GPU Pod Details 表格显示 Pod tensorflow-benchmark-c2mjs(Namespace 为 default)的监控详情:Allocated Mode 为 exclusive,Used GPU Memory 为 836.00 MiB,Allocated GPU Memory 为 22.49 GiB,SM Utilization、GPU Memory Copy Utilization 及 Decode Utilization 均为 0%

  4. 单击集群GPU监控-节点维度页签,选择GPUNodecn-beijing.10.131.xx.xxx,查看该节点的GPU详细信息。可参见监控面板说明了解各参数详情。

    该节点的 GPU 监控指标示例如下:

    • GPU Mode:Exclusive

    • NVIDIA Driver Version:535.161.07

    • Allocated GPUs:1.00

    • GPU Utilization:0.0%

    • Allocated GPU Memory:100.0%

    • Used GPU Memory:3.3%

    • Allocated Computing Power(nvidia0):0.00%

    • The Last one XID Error(过去 24 小时):0

常见问题

DCGM内存泄漏

  • 背景:DCGM(Data Center GPU Manager)是NVIDIA提供的一款用于管理和监控GPU的工具。ack-prometheus-gpu-exporter是安装阿里云Prometheus组件后启动的一个DaemonSet类型的Pod。

  • 原因:DCGM内存泄漏是指在运行过程中,DCGM占用的内存未能被正确释放,导致内存使用量持续增加。

  • 解决办法:当前DCGM可能会出现内存泄漏情况,已通过为ack-prometheus-gpu-exporter所在的Pod设置resources.limits来规避这个问题。当内存使用达到limits限制时,ack-prometheus-gpu-exporter会重启(一般一个月左右重启一次),重启后将正常上报指标,但在重启后的几分钟内,Grafana可能会出现某些指标的显示异常(例如节点数突然变多),之后恢复正常。问题详情请参见The DCGM has a memory leak?

ack-prometheus-gpu-exporter出现OOM Kill

  • 背景ack-prometheus-gpu-exporter是安装阿里云Prometheus组件后启动的一个DaemonSet类型的Pod,可能导致开启监控出现问题。

  • 原因:由于ACK集群上的ack-prometheus-gpu-exporter采用的是DCGMembedding的模式,这种模式下DCGM会在多卡情况下占用较多的内存,且会出现内存泄露的问题。所以如果在具有多个GPU的实例上运行多个GPU进程,并且ack-prometheus-gpu-exporter分配的内存较少,可能会导致exporter PodOOM Kill。

  • 解决办法:这种情况下,通常等待Pod重启后即可重新上报Metrics。如果频繁的出现OOM Kill的情况,可以手动提升arms-prom命名空间中DaemonSet ack-prometheus-gpu-exporterlimits来解决这个问题。

ack-prometheus-gpu-exporter报错

  • 背景:ack-prometheus-gpu-exporter是安装阿里云Prometheus组件后启动的一个DaemonSet类型的Pod,报错可能导致监控出现问题。

  • 原因:ack-prometheus-gpu-exporterPod日志出现类似如下的报错信息:

    failed to get all process informations of gpu nvidia1,reason: failed to get gpu utilizations for all processes on device 1,reason: Not Found

    这是由于旧版本的ack-prometheus-gpu-exporter在某些GPU卡上未运行具体任务时,无法获取相关容器的GPU指标。

  • 解决办法:此问题已在最新版本中修复。请升级ack-arms-prometheus组件到最新版本以解决该问题。